Ascend PyTorch Profiler接口采集
Ascend PyTorch Profiler接口工具当前支持如下性能数据采集方式:
其他相关功能:
参考信息:
- Ascend PyTorch Profiler接口说明
- profiler_config.json文件说明
- experimental_config参数说明(dynamic_profile动态采集场景)
- experimental_config参数说明
前提条件
- 请确保完成使用前准备。
- 准备好基于PyTorch 1.11.0或更高版本开发的训练模型以及配套的数据集,并按照《PyTorch 训练模型迁移调优指南》中的“迁移适配”完成PyTorch原始模型向昇腾AI处理器的迁移。
采集并解析性能数据(torch_npu.profiler.profile)
- 在训练脚本(如train_*.py文件)内添加如下示例代码进行性能数据采集参数配置,之后启动训练。下列示例代码中,加粗字段为需要配置的参数、方法、类和函数。
import torch import torch_npu ... experimental_config = torch_npu.profiler._ExperimentalConfig( export_type=torch_npu.profiler.ExportType.Text, profiler_level=torch_npu.profiler.ProfilerLevel.Level0, msprof_tx=False, aic_metrics=torch_npu.profiler.AiCMetrics.AiCoreNone, l2_cache=False, op_attr=False, data_simplification=False, record_op_args=False ) with torch_npu.profiler.profile( activities=[ torch_npu.profiler.ProfilerActivity.CPU, torch_npu.profiler.ProfilerActivity.NPU ], schedule=torch_npu.profiler.schedule(wait=0, warmup=0, active=1, repeat=1, skip_first=1), on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result"), record_shapes=False, profile_memory=False, with_stack=False, with_modules=False, with_flops=False, experimental_config=experimental_config) as prof: for step in range(steps): train_one_step(step, steps, train_loader, model, optimizer, criterion) prof.step()
或
import torch import torch_npu ... experimental_config = torch_npu.profiler._ExperimentalConfig( export_type=torch_npu.profiler.ExportType.Text, profiler_level=torch_npu.profiler.ProfilerLevel.Level0, msprof_tx=False, aic_metrics=torch_npu.profiler.AiCMetrics.AiCoreNone, l2_cache=False, op_attr=False, data_simplification=False, record_op_args=False ) prof = torch_npu.profiler.profile( activities=[ torch_npu.profiler.ProfilerActivity.CPU, torch_npu.profiler.ProfilerActivity.NPU ], schedule=torch_npu.profiler.schedule(wait=0, warmup=0, active=1, repeat=1, skip_first=1), on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result"), record_shapes=False, profile_memory=False, with_stack=False, with_modules=False, with_flops=False, experimental_config=experimental_config) prof.start() for step in range(steps): train_one_step() prof.step() prof.stop()
除了使用tensorboard_trace_handler导出性能数据外,还可以使用以下方式导出:import torch import torch_npu ... with torch_npu.profiler.profile() as prof: for step in range(steps): train_one_step(step, steps, train_loader, model, optimizer, criterion) prof.export_chrome_trace('./chrome_trace_14.json')
- 性能数据解析。
支持自动解析(参照以上示例代码中tensorboard_trace_handler和prof.export_chrome_trace)和离线解析。
- 查看采集到的PyTorch训练性能数据结果文件和性能数据分析。
性能数据结果文件详细介绍请参见Ascend PyTorch Profiler接口采集数据,性能数据分析请参见《MindStudio Insight 用户指南》将解析后的性能数据文件进行可视化展示和分析。
采集并解析性能数据(dynamic_profile)
dynamic_profile主要功能是在执行模型训练过程中可以随时开启采集进程。
- 修改用户训练脚本(如train_*.py文件),添加dynamic_profile接口。如下示例代码加粗部分:
# 加载dynamic_profile模块 from torch_npu.profiler import dynamic_profile as dp # 设置模型训练时Profiling配置文件的路径 dp.init("profiler_config_path") … for step in steps: train_one_step() # 划分训练step dp.step()
init时,dynamic_profile会在profiler_config_path下自动创建模板文件profiler_config.json,用户可基于模板文件自定义修改配置项。
profiler_config_path路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。
- 启动训练任务。
- 重新开启一个命令行窗口,修改profiler_config.json配置文件用以使能Profiling任务。配置文件中包含Profiler的性能数据采集参数,用户可以参考profiler_config.json文件说明修改配置文件参数来执行不同的Profiling任务。
- dynamic_profile通过识别profiler_config.json文件的状态判断文件是否被修改,若感知到profiler_config.json文件被修改,dynamic_profile会在下一个step时开启Profiling任务。
- profiler_config_path目录下会自动记录dynamic_profile的维测日志。
- 性能数据解析。
支持自动解析和手动解析,请参见表5中的analyse参数。
- 查看采集到的PyTorch训练性能数据结果文件和性能数据分析。
性能数据结果文件详细介绍请参见Ascend PyTorch Profiler接口采集数据,性能数据分析请参见《MindStudio Insight 用户指南》将解析后的性能数据文件进行可视化展示和分析。
采集并解析性能数据(torch_npu.profiler._KinetoProfile)
- 在训练脚本(如train_*.py文件)内添加如下示例代码进行性能数据采集参数配置,之后启动训练。下列示例代码中,加粗字段为需要配置的参数、方法、类和函数。
import torch import torch_npu ... prof = torch_npu.profiler._KinetoProfile(activities=None, record_shapes=False, profile_memory=False, with_stack=False, with_flops=False, with_modules=False, experimental_config=None) for epoch in range(epochs): trian_model_step() if epoch == 0: prof.start() if epoch == 1: prof.stop() prof.export_chrome_trace("result_dir/trace.json")
该方式不支持使用schedule和tensorboard_trace_handler导出性能数据。
- 性能数据解析。
支持自动解析(参照以上示例代码中prof.export_chrome_trace)。
- 查看采集到的PyTorch训练性能数据结果文件和性能数据分析。
性能数据结果文件详细介绍请参见Ascend PyTorch Profiler接口采集数据,性能数据分析请参见《MindStudio Insight 用户指南》将解析后的性能数据文件进行可视化展示和分析。
采集并解析msprof_tx数据(可选)
针对大集群场景传统Profiling数据量大、分析流程复杂的现象,通过experimental_config的msprof_tx参数开启自定义打点功能,自定义采集时间段或者关键函数的开始和结束时间点,识别关键函数或训练迭代等信息,对性能问题快速定界。使用方式及示例代码如下:
- 使能torch_npu.profiler,打开msprof_tx开关,搭配profiler_level开关设置为Level_none(可根据实际采集需要,配置对应的level),采集打点数据。
- 在PyTorch脚本中对于想采集的事件调用torch_npu.npu.mstx的打点mark接口实现打点,对于时间段或者关键函数等,可在前后分别调用mark接口。
import torch import torch_npu mstx = torch_npu.npu.mstx() # 创建mstx对象 train_one_step(...): mstx.mark("forward_start") forward() mstx.mark("forward_stop") mstx.mark("backward_start") backward() mstx.mark("backward_stop") mstx.mark("optimizer_start") optimizer() mstx.mark("optimizer_stop") ... experimental_config = torch_npu.profiler._ExperimentalConfig( profiler_level=torch_npu.profiler.ProfilerLevel.Level0, msprof_tx=True, export_type=torch_npu.profiler.ExportType.Text ) with torch_npu.profiler.profile( activities=[ torch_npu.profiler.ProfilerActivity.CPU, torch_npu.profiler.ProfilerActivity.NPU ], schedule=torch_npu.profiler.schedule(wait=1, warmup=1, active=2, repeat=2, skip_first=1), on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result"), experimental_config=experimental_config) as prof: for epoch in range(epochs): mstx.mark("train epoch start") # 打点的消息 for step in range(steps): train_one_step(step, steps, train_loader, model, optimizer, criterion) prof.step()
打点数据使用MindStudio Insight工具打开,可视化效果如下:

可以通过该功能查看用户自定义打点从框架侧到CANN层再到NPU侧的执行调度情况,进而帮助识别用户想观察的关键函数或者事件,定界性能问题。
以自定义字符串键和字符串值的形式标记性能数据采集过程(可选)
- 示例一
with torch_npu.profiler.profile(…) as prof: prof.add_metadata(key, value)
- 示例二
with torch_npu.profiler._KinetoProfile(…) as prof: prof.add_metadata_json(key, value)
add_metadata和add_metadata_json可以配置在torch_npu.profiler.profile和torch_npu.profiler._KinetoProfile下,须添加在profiler初始化后,finalize之前,即性能数据采集过程的代码中。
类、函数名 |
含义 |
||
---|---|---|---|
add_metadata |
添加字符串标记,可取值:
示例: prof.add_metadata("test_key1", "test_value1") |
||
add_metadata_json |
添加json格式字符串标记,可取值:
示例:
|
调用此接口传入的metadata数据写入到Ascend PyTorch Profiler接口的采集结果根目录下的profiler_metadata.json文件中。
Ascend PyTorch Profiler接口说明
参数名称 |
参数含义 |
是否必选 |
---|---|---|
activities |
CPU、NPU事件采集列表,Enum类型。取值为:
默认情况下两个开关同时开启。 |
否 |
schedule |
设置不同step的行为,Callable类型,由schedule类控制。默认不执行任何操作。 torch_npu.profiler._KinetoProfile不支持该参数。 |
否 |
on_trace_ready |
采集结束时自动执行操作,Callable类型。当前仅支持执行tensorboard_trace_handler函数的操作,默认不执行任何操作。当采集的数据量过大时,在当前环境下不适合直接解析性能数据,或者采集过程中中断了训练进程,只采集了部分性能数据,可以采用离线解析。 torch_npu.profiler._KinetoProfile不支持该参数。 |
否 |
record_shapes |
算子的InputShapes和InputTypes,Bool类型。取值为:
开启torch_npu.profiler.ProfilerActivity.CPU时生效。 |
否 |
profile_memory |
算子的内存占用情况,Bool类型。取值为:
|
否 |
with_stack |
算子调用栈,Bool类型。包括框架层及CPU算子层的调用信息。取值为:
开启torch_npu.profiler.ProfilerActivity.CPU时生效。 |
否 |
with_modules |
modules层级的Python调用栈,即框架层的调用信息,Bool类型。取值为:
开启torch_npu.profiler.ProfilerActivity.CPU时生效。 |
否 |
with_flops |
算子浮点操作,Bool类型(该参数暂不支持解析性能数据)。取值为:
开启torch_npu.profiler.ProfilerActivity.CPU时生效。 |
否 |
experimental_config |
扩展参数,通过扩展配置性能分析工具常用的采集项。支持采集项和详细介绍请参见experimental_config参数说明。 |
否 |
use_cuda |
昇腾环境不支持。开启采集cuda性能数据开关,Bool类型。取值为:
torch_npu.profiler._KinetoProfile不支持该参数。 |
否 |
类、函数名 |
含义 |
---|---|
torch_npu.profiler.schedule |
设置不同step的行为。取值为:
建议根据此公式配置schedule:step总数 >= skip_first+(wait+warmup+active)*repeat 默认不执行该操作。 |
将采集到的性能数据导出为TensorBoard工具支持的格式。取值为:
torch_npu.profiler._KinetoProfile不支持该函数。 |
|
torch_npu.profiler.ProfilerAction |
Profiler状态,Enum类型。取值为:
|
torch_npu.profiler._ExperimentalConfig |
性能数据采集扩展,Enum类型。通过torch_npu.profiler.profile的experimental_config调用,详细介绍请参见experimental_config参数说明。 |
torch_npu.profiler.supported_activities |
查询当前支持采集的activities参数的CPU、NPU事件。 |
torch_npu.profiler.supported_profiler_level |
查询当前支持的experimental_config参数的profiler_level级别。 |
torch_npu.profiler.supported_ai_core_metrics |
查询当前支持的experimental_config参数的AI Core性能指标采集项。 |
torch_npu.profiler.supported_export_type |
查询当前支持的torch_npu.profiler.ExportType的性能数据结果文件类型。 |

性能数据会占据一定的磁盘空间,可能存在磁盘写满导致服务器不可用的风险。性能数据所需空间跟模型的参数、采集开关配置、采集的迭代数量有较大关系,须用户自行保证落盘目录下的可用磁盘空间。
profiler_config.json文件说明
profiler_config.json文件内容如下,以默认配置为例:
{ "activities": ["CPU", "NPU"], "prof_dir": "./", "analyse": false, "record_shapes": false, "profile_memory": false, "with_stack": false, "with_flops": false, "with_modules": false, "active": 1, "experimental_config": { "profiler_level": "Level0", "aic_metrics": "AiCoreNone", "l2_cache": false, "op_attr": false, "data_simplification": true, "record_op_args": false, "export_type": "text", "msprof_tx": false } }
参数名称 |
参数含义 |
是否必选 |
---|---|---|
activities |
CPU、NPU事件采集列表。取值为:
默认情况下两个开关同时开启。 |
否 |
prof_dir |
采集的性能数据的输出目录。默认路径为:./。路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。 |
否 |
analyse |
性能数据自动解析开关,可取值:
|
否 |
record_shapes |
算子的InputShapes和InputTypes。取值为:
activities配置为CPU时生效。 |
否 |
profile_memory |
算子的内存占用情况。取值为:
|
否 |
with_stack |
算子调用栈。包括框架层及CPU算子层的调用信息。取值为:
activities配置为CPU时生效。 |
否 |
with_flops |
算子浮点操作(该参数暂不支持解析性能数据)。取值为:
activities配置为CPU时生效。 |
否 |
with_modules |
modules层级的Python调用栈,即框架层的调用信息。取值为:
activities配置为CPU时生效。 |
否 |
experimental_config |
扩展参数,通过扩展配置性能分析工具常用的采集项。详见experimental_config参数说明(dynamic_profile动态采集场景)。 |
否 |
active |
配置采集的迭代数,取值为正整数,默认值为1。 |
否 |
experimental_config参数说明(dynamic_profile动态采集场景)
experimental_config参数均为可选参数,支持扩展的采集项如下:
参数 |
描述 |
---|---|
export_type |
设置导出的性能数据结果文件格式。可取值:
设置无效值或未配置均取默认值Text。 |
profiler_level |
采集的Level等级。可取值如下:
|
msprof_tx |
打点控制开关,通过开关开启自定义打点功能。可取值true(开启)或false(关闭),默认关闭。该参数使用请参见采集并解析msprof_tx数据(可选)。 |
data_simplification |
数据精简模式,开启后将在导出性能数据后删除FRAMEWORK目录数据以及删除多余数据,仅保留ASCEND_PROFILER_OUTPUT目录和PROF_XXX目录下的原始性能数据,以节省存储空间。可取值true(开启)或false(关闭),默认开启。 |
aic_metrics |
AI Core的性能指标采集项。可取值如下:
以下采集项的结果数据含义可参见op_summary(算子详细信息),但具体采集结果请以实际情况为准。
|
l2_cache |
控制L2 Cache数据采集开关。可取值true(开启)或false(关闭),默认关闭。该采集项在ASCEND_PROFILER_OUTPUT生成l2_cache.csv文件,结果字段介绍请参见l2_cache(L2 Cache命中率)。 |
op_attr |
控制采集算子的属性信息开关,当前仅支持采集aclnn算子,bool类型。可取值True(开启)或False(关闭),默认关闭。该参数采集的性能数据仅支持export_type=torch_npu.profiler.ExportType.Db时解析的db格式文件。torch_npu.profiler.ProfilerLevel.Level_none时,该参数不生效。 |
record_op_args |
控制算子信息统计功能开关。可取值true(开启)或false(关闭),默认关闭。开启后会在{worker_name}_{时间戳}_ascend_pt_op_args目录输出采集到算子信息文件。 |
experimental_config参数说明
experimental_config参数均为可选参数,支持扩展的采集项如下:
参数 |
描述 |
---|---|
export_type |
设置导出的性能数据结果文件格式,Enum类型。可取值:
设置无效值或未配置均取默认值torch_npu.profiler.ExportType.Text。 |
profiler_level |
采集的Level等级,Enum类型。可取值如下:
|
msprof_tx |
打点控制开关,通过开关开启自定义打点功能,bool类型。可取值True(开启)或False(关闭),默认关闭。该参数使用请参见采集并解析msprof_tx数据(可选)。 开启此功能时,不能同时配置torch_npu.profiler.ExportType.Db和torch_npu.profiler.ProfilerLevel.Level_none。 |
data_simplification |
数据精简模式,开启后将在导出性能数据后删除FRAMEWORK目录数据以及删除多余数据,仅保留ASCEND_PROFILER_OUTPUT目录和PROF_XXX目录下的原始性能数据,以节省存储空间,bool类型。可取值True(开启)或False(关闭),默认开启。 |
aic_metrics |
AI Core的性能指标采集项,Enum类型。可取值如下:
以下采集项的结果数据含义可参见op_summary(算子详细信息),但具体采集结果请以实际情况为准。
|
l2_cache |
控制L2 Cache数据采集开关,bool类型。可取值True(开启)或False(关闭),默认关闭。该采集项在ASCEND_PROFILER_OUTPUT生成l2_cache.csv文件,结果字段介绍请参见l2_cache(L2 Cache命中率)。 |
op_attr |
控制采集算子的属性信息开关,当前仅支持采集aclnn算子,bool类型。可取值True(开启)或False(关闭),默认关闭。该参数采集的性能数据仅支持export_type=torch_npu.profiler.ExportType.Db时解析的db格式文件。torch_npu.profiler.ProfilerLevel.Level_none时,该参数不生效。 |
record_op_args |
控制算子信息统计功能开关,bool类型。可取值True(开启)或False(关闭),默认关闭。开启后会在{worker_name}_{时间戳}_ascend_pt_op_args目录输出采集到算子信息文件。 |