Python接口采集
msMemScope工具支持通过Python接口采集信息,提供自定义设置采集内存范围和采集项,采集Python Trace事件能力,实现精准采集、高效分析。
自定义采集范围
新增Python脚本示例,使用Python脚本自定义采集范围,可支持设置多段采集范围。
示例代码如下:
1 2 3 4 5 | import msmemscope msmemscope.start() # 开启采集 train() # train()为用户代码 msmemscope.stop() # 退出采集 |
自定义设置采集项
支持自定义设置采集项,支持设置device、level、events、call_stack、analysis、watch、output和data_format参数,可根据需求自行设置,具体参数信息可参见命令行采集。
在使用自定义采集功能前,需要先设置环境变量,执行以下命令,设置LD_PRELOAD和LD_LIBRARY_PATH环境变量。参数说明如表1所示。
export LD_PRELOAD=${memscope_install_path}/lib64/{so_name}:${memscope_install_path}/lib64/{so_name}
export LD_LIBRARY_PATH=${memscope_install_path}/lib64/:${LD_LIBRARY_PATH}
参数 |
说明 |
|---|---|
memscope_install_path |
msMemScope工具的安装路径。 |
so_name |
需要配置的so包名称,每个so包之间以半角冒号分隔。 需要配置的so包有libascend_kernel_hook.so、libascend_mstx_hook.so、libatb_abi_0_hook.so、libatb_abi_1_hook.so、libleaks_ascend_hal_hook.so,共5个so包。 |
LD_LIBRARY_PATH |
LD_LIBRARY_PATH环境变量。 |
- 上述export方式设置环境变量仅在当前窗口有效。设置环境变量后,如果不再需要使用msMemScope工具的功能,建议将LD_PRELOAD、LD_LIBRARY_PATH恢复成设置前状态。
- 当设置events="traceback",采集Python Trace事件,开启后,将落盘csv文件,名称为python_trace_{TID}_{timestamp}.csv,具体信息请参见输出说明。
- 如果需要关闭采集项,可设置采集项取值为空。例如,关闭Python Trace采集,则设置events=""即可。
示例代码如下:
1 2 3 4 5 6 | import msmemscope msmemscope.config(call_stack="c:10,python:5", events="launch,alloc,free", level="0", device="npu", analysis="leaks,decompose", watch="op0,op1,full-content", data_format="db", output="/home/projects/output") msmemscope.start() # 开启采集 train() # train()为用户代码 msmemscope.stop() # 退出采集 |
Python Trace采集
msMemScope工具支持通过Python接口采集Python代码的Trace数据,并与内存事件使用统一时间轴,帮助调优人员快速关联内存事件与全链路代码,精准定位问题。
Python Trace采集功能将于MindStudio 9.0.0版本下线,您可通过Python接口采集方式,自定义设置events="traceback",采集Python Trace事件,可参见自定义设置采集项。
操作步骤
- 在msMemScope工具中,增加Python接口,用以开启和关闭Tracer功能,在start和stop之间的Python代码,会落盘Trace数据。代码示例如下:
1 2 3 4 5
import msmemscope msmemscope.tracer.start() # 开启Tracer功能 train() # train()为用户代码 msmemscope.tracer.stop() # 关闭Tracer功能
- 执行完成后,会生成名称为python_trace_{TID}_{timestamp}.csv的文件,具体文件信息可参见输出说明。
Step采集
可添加Python接口,采集Step信息。推荐在Python场景下使用该方式采集Step信息。
import msmemscope
msmemscope.config()
msmemscope.start() # 开启采集
for i in range(10):
train() # train()为用户代码
msmemscope.step() # 输入Step信息
msmemscope.stop() # 退出采集