开发者
资源

使用TensorFlow框架接口采集性能数据

--task-trace后续版本会废弃,请使用--task-time开关控制相关数据采集。

功能介绍

对于TensorFlow训练或在线推理场景,用户可以直接在训练脚本中调用TensorFlow框架相关接口开启性能数据采集,主要包括以下用法:

  • 全局采集:采集图执行所有行为的性能数据,数据量比较庞大。

    用户可以通过修改训练脚本、配置“profiling_mode”参数的方式开启(本节重点介绍),也可以通过设置环境变量“PROFILING_MODE”的方式开启(参见使用环境变量采集性能数据),其中配置参数“profiling_mode”的优先级高于环境变量“PROFILING_MODE”。

  • 局部采集:支持指定采集局部子图或者指定step的性能数据。通过with语句调用Profiler类,并将需要开启性能数据采集的操作放入Profiler类作用域内的方式实现。

本节将介绍最基础的全局采集性能数据的方法,了解更多信息,请参见《TensorFlow 1.15模型迁移指南》《TensorFlow 2.6.5模型迁移指南》

前提条件

在开启性能采集之前,请确保训练或在线推理脚本可正常执行。

操作步骤

  1. 在训练脚本中配置如下信息,以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/test/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/test/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/test/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/test/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_profilingtrue或在sess.run模式下配置profiling_modetrue的情况下。若未配置profiling_options,Profiling默认会执行training_tracetask_tracehcclaicpuaic_metrics(PipeUtilization)采集并保存数据在当前AI任务所在目录。
    • 配置fp_point和bp_point参数时,无论是用户指定了具体算子还是使用系统自动查找算法(fp_point和bp_point参数配置为空),均可能找不到数据,最终导致解析出的迭代轨迹数据中FP_BP、Grad_refresh Bound、Data_aug Bound均为空。
  2. 重新执行训练脚本。

    训练结束后,在output参数指定的目录下生成PROF_XXX文件夹用于存放采集到的原始性能数据。

  3. 使用msprof命令解析性能数据。
    msprof --export=on --output=/home/HwHiAiUser/profiling_output/PROF_XXX

    解析完成后,在PROF_XXX文件夹下生成mindstudio_profiler_output目录,用户可直接查看。