使用TensorFlow框架接口采集性能数据
功能介绍
对于TensorFlow训练或在线推理场景,用户可以直接在训练脚本中调用TensorFlow框架相关接口开启性能数据采集,主要包括以下用法:
- 全局采集:采集图执行所有行为的性能数据,数据量比较庞大。
用户可以通过修改训练脚本、配置“profiling_mode”参数的方式开启(本节重点介绍),也可以通过设置环境变量“ PROFILING_MODE”的方式开启(参见使用环境变量采集性能数据),其中配置参数“profiling_mode”的优先级高于环境变量“ PROFILING_MODE”。
- 局部采集:支持指定采集局部子图或者指定step的性能数据。通过with语句调用Profiler类,并将需要开启性能数据采集的操作放入Profiler类作用域内的方式实现。
本节将介绍最基础的全局采集性能数据的方法,了解更多信息,请参见《TensorFlow 1.15模型迁移指南》和《TensorFlow 2.6.5模型迁移指南》。
前提条件
在开启性能采集之前,请确保训练或在线推理脚本可正常执行。
操作步骤
- 在训练脚本中配置如下信息,以TensorFlow 1.15手工迁移脚本为例:
- Estimator模式下,您可以尝试先开启task_trace任务轨迹数据采集,代码示例如下:
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)
- sess.run模式下,您可以尝试先开启task_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"}') 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()
- Profiling配置的详细介绍请参见Profiling options参数解释。
- 在Estimator模式下配置enable_profiling为true或在sess.run模式下配置profiling_mode为true的情况下。若未配置profiling_options,Profiling默认会执行training_trace、task_trace、hccl、aicpu和aic_metrics(PipeUtilization)采集并保存数据在当前AI任务所在目录。
- 配置fp_point和bp_point参数时,无论是用户指定了具体算子还是使用系统自动查找算法(fp_point和bp_point参数配置为空),均可能找不到数据,最终导致解析出的迭代轨迹数据中FP_BP、Grad_refresh Bound、Data_aug Bound均为空。
- Estimator模式下,您可以尝试先开启task_trace任务轨迹数据采集,代码示例如下:
- 重新执行训练脚本。
训练结束后,在output参数指定的目录下生成PROF_XXX文件夹用于存放采集到的原始性能数据。
- 使用msprof命令解析性能数据。详细请参见使用msprof命令解析与导出性能数据。
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文件 |
runtime_api |
|
hccl |
|
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 |
- |