采集操作
TensorFlow框架方式Profiling仅支持在线推理/训练场景下执行。
前提条件
约束
在线推理仅支持sess.run模式下的Profiling。sess.run模式请参见采集性能原始数据(TensorFlow 1.x训练/在线推理)。
采集性能原始数据(TensorFlow 1.x训练/在线推理)
在训练脚本(如train_*.py文件)/在线推理脚本内添加如下Profiling参数配置,之后执行训练/在线推理。
有关TensorFlow框架下的训练操作请参见《TensorFlow 1.15模型迁移和训练指南》。
有关在线推理详细操作请参见《TensorFlow 1.15在线推理使用指南》。
- Estimator模式下,通过NPURunConfig中的profiling_config开启Profiling数据采集,代码示例如下:
from npu_bridge.estimator.npu.npu_config import NPURunConfig from npu_bridge.estimator.npu.npu_config import ProfilingConfig profiling_options = '{"output":"/tmp/profiling","training_trace":"on","task_trace":"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)
- sess.run模式下,通过session配置项profiling_mode、profiling_options开启Profiling数据采集,代码示例如下:
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":"/tmp/profiling","training_trace":"on","task_trace":"on","fp_point":"","bp_point":"","aic_metrics":"PipeUtilization"}') config.graph_options.rewrite_options.remapping = RewriterConfig.OFF #关闭remap开关 with tf.Session(config=config) as sess: sess.run()
profiling_options参数配置请参见Profiling options参数解释。
- 在Estimator模式下配置enable_profiling为True或在sess.run模式下配置profiling_mode为true但未配置profiling_options情况下Profiling默认会执行training_trace、task_trace、hccl、aicpu和aic_metrics(PipeUtilization)采集并保存数据在当前AI任务所在目录;当在Estimator模式下配置enable_profiling为true或在sess.run模式下配置profiling_mode为true且配置profiling_options任意参数后,profiling_options参数默认情况请参见Profiling options参数解释。
- 配置fp_point和bp_point参数时,无论是用户指定了具体算子还是使用系统自动查找算法(fp_point和bp_point参数配置为空),均可能找不到数据,导致最终解析出的迭代轨迹数据中FP_BP、Grad_refresh Bound、Data_aug Bound均为空。
采集性能原始数据(TensorFlow 2.x训练)
在训练脚本(如train_*.py文件)内添加如下Profiling参数配置,之后执行训练。有关TensorFlow 2.x框架下的训练操作请参见《TensorFlow 2.6.5模型迁移和训练指南》。
import npu_device ... # profiling npu_device.global_options().profiling_config.enable_profiling = True profiling_options = '{"output":"/home/profiling", \ "training_trace":"on", \ "task_trace":"on", \ "fp_point":"", \ "bp_point":""}' npu_device.global_options().profiling_config.profiling_options = profiling_options ... npu_device.open().as_default()
profiling_options参数配置请参见Profiling options参数解释。
采集数据说明
配置PROFILING_OPTIONS参数后请参见性能数据解析与导出(msprof命令)将原始数据文件解析并导出为可视化的性能数据文件,保存在PROF_XXX/mindstudio_profiler_output目录下。
生成的性能数据如表1所示。
参数 |
性能数据文件 |
---|---|
默认自动生成 |
|
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 |
- |