Profiling数据采集

概述

训练过程中支持采集性能数据,然后借助Profiling工具进行数据分析,从而准确定位系统的软、硬件性能瓶颈,提高性能分析的效率,通过针对性的性能优化方法,以最小的代价和成本实现业务场景的极致性能。

当前支持采集的性能数据主要包括:

默认训练过程中不采集Profiling性能数据,如需采集,请参考本节内容修改训练脚本。

Estimator模式下开启Profiling数据采集

您可以尝试先开启task_trace任务轨迹数据采集:

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迭代轨迹数据采集:
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()

config = NPURunConfig(profiling_config=profiling_config, session_config=session_config)

需要注意的是,采集迭代轨迹数据需要fp_point(训练网络迭代轨迹正向算子的开始位置)和bp_point(反向算子的结束位置),可直接配置为空,由系统自动获取,采集异常时可参考如何获取fp_point与bp_point进行配置。

相关接口详细介绍请参考ProfilingConfig构造函数

sess.run模式下开启Profiling数据采集

您可以尝试先开启task_trace任务轨迹数据采集:

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迭代轨迹数据采集:
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()

需要注意的是,采集迭代轨迹数据需要fp_point(训练网络迭代轨迹正向算子的开始位置)和bp_point(反向算子的结束位置),可直接配置为空,由系统自动获取,或参考如何获取fp_point与bp_point

相关接口详细介绍请参考Profiling

环境变量方式

除了以上两种方式,用户还可以修改启动脚本中的环境变量,开启Profiling采集功能。

# 开启Profiling功能
export PROFILING_MODE=true 
# 配置Profling配置选项
export PROFILING_OPTIONS='{"output":"/home/HwHiAiUser/output","training_trace":"on","task_trace":"on","aicpu":"on","fp_point":"","bp_point":"","aic_metrics":"PipeUtilization"}'

PROFILING_OPTIONS的详细配置说明请参考PROFILING_OPTIONS

通过Profiling工具进行性能分析

训练结束后,切换到output目录下,可查看到Profiling数据,您可以通过Profiling工具解析数据,具体参考性能分析工具使用指南

通过Profiling工具如果定位到是网络中自定义算子导致的性能不达标,可以通过优化算子提升性能,具体请参考算子开发指南的“性能优化专题”。