对于TensorFlow训练或在线推理场景,用户可以直接在训练脚本中调用TensorFlow框架相关接口开启性能数据采集,主要包括以下用法:
用户可以通过修改训练脚本、配置“profiling_mode”参数的方式开启(本节重点介绍),也可以通过设置环境变量“ PROFILING_MODE”的方式开启(参见使用环境变量采集性能数据),其中配置参数“profiling_mode”的优先级高于环境变量“ PROFILING_MODE”。
本节将介绍最基础的全局采集性能数据的方法,了解更多信息,请参见《TensorFlow 1.15模型迁移指南》和《TensorFlow 2.6.5模型迁移指南》。
在开启性能采集之前,请确保训练或在线推理脚本可正常执行。
1 2 3 4 5 6 7 8 9 10 | from npu_bridge.npu_init import * # enable_profiling:是否开启profiling采集 # output:profiling数据存放路径,该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径 # task_trace:是否采集任务轨迹数据 profiling_options = '{"output":"/home/HwHiAiUser/output","task_trace":"on"}' profiling_config = ProfilingConfig(enable_profiling=True, profiling_options= profiling_options) session_config=tf.ConfigProto() config = NPURunConfig(profiling_config=profiling_config, session_config=session_config) |
后续如果仍然无法分析到具体问题,可再开启training_trace迭代轨迹数据采集,代码示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | from npu_bridge.npu_init import * # enable_profiling:是否开启profiling采集 # output:profiling数据存放路径 # task_trace:是否采集任务轨迹数据 # training_trace:是否采集迭代轨迹数据 # fp_point:指定训练网络迭代轨迹正向算子的开始位置,用于记录前向计算开始时间戳 # bp_point:指定训练网络迭代轨迹反向算子的结束位置,记录后向计算结束时间戳,fp_point和bp_point可以计算出正反向时间 profiling_options = '{"output":"/home/HwHiAiUser/output","task_trace":"on","training_trace":"on","aicpu":"on","fp_point":"","bp_point":"","aic_metrics":"PipeUtilization"}' profiling_config = ProfilingConfig(enable_profiling=True, profiling_options= profiling_options) session_config=tf.ConfigProto(allow_soft_placement=True) config = NPURunConfig(profiling_config=profiling_config, session_config=session_config) |
1 2 3 4 5 6 7 8 9 10 | custom_op = config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["use_off_line"].b = True custom_op.parameter_map["profiling_mode"].b = True custom_op.parameter_map["profiling_options"].s = tf.compat.as_bytes('{"output":"/home/HwHiAiUser/output","task_trace":"on"}') config.graph_options.rewrite_options.remapping = RewriterConfig.OFF config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF with tf.Session(config=config) as sess: sess.run() |
后续如果仍然无法分析到具体问题,可再开启training_trace迭代轨迹数据采集,代码示例如下:
1 2 3 4 5 6 7 8 9 10 | custom_op = config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["use_off_line"].b = True custom_op.parameter_map["profiling_mode"].b = True custom_op.parameter_map["profiling_options"].s = tf.compat.as_bytes('{"output":"/home/HwHiAiUser/output","task_trace":"on","training_trace":"on","aicpu":"on","fp_point":"","bp_point":"","aic_metrics":"PipeUtilization"}') config.graph_options.rewrite_options.remapping = RewriterConfig.OFF config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF with tf.Session(config=config) as sess: sess.run() |
训练结束后,在output参数指定的目录下生成PROF_XXX文件夹用于存放采集到的原始性能数据。
msprof --export=on --output=/home/HwHiAiUser/profiling_output/PROF_XXX
解析完成后,在PROF_XXX文件夹下生成mindstudio_profiler_output目录,用户可直接查看。
开启各采集参数后,对应生成的结果文件请参见采集结果说明。
参数 |
结果文件 |
---|---|
默认自动生成 |
|
task_trace、task_time |
msprof_*.json中的CANN层级和api_statistic_*.csv文件 msprof_*.json中的Ascend Hardware层级和task_time_*.csv文件 msprof_*.json中的Communication层级和communication_statistic_*.csv文件 |
runtime_api |
|
hccl |
msprof_*.json中的Communication层级和communication_statistic_*.csv文件 |
aicpu |
|
aic_metrics |
|
l2 |
|
msproftx |
|
sys_hardware_mem_freq |
msprof_*.json中的LLC层级和llc_read_write_*.csv文件 msprof_*.json中的Stars Soc Info层级 |
llc_profiling |
- |
sys_io_sampling_freq |
|
sys_interconnection_freq |
msprof_*.json中的PCIe层级和pcie_*.csv文件 |
dvpp_freq |
|
instr_profiling_freq |
|
host_sys |
|
host_sys_usage |
|
host_sys_usage_freq |
- |