下载
中文
注册

Estimator模式

自动迁移场景

  1. 检查迁移后的脚本是否存在“init_resource”。
    • 如果存在,则需要参考下面示例进行修改;修改完后,执行下一步。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      if __name__ == '__main__':
      
        session_config = tf.ConfigProto(allow_soft_placement=True)
        custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add()
        custom_op.name = "NpuOptimizer"
        # 开启profiling采集
        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"}')
        # 采集任务轨迹数据和迭代轨迹数据。可先仅采集任务轨迹数据,如果仍然无法分析到具体问题,可再采集迭代轨迹数据
        # 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"}')
      
        (npu_sess, npu_shutdown) = init_resource(config=session_config)
        tf.app.run()
        shutdown_resource(npu_sess, npu_shutdown)
        close_session(npu_sess)
      

      需要注意,仅initialize_system中支持的配置项可在init_resource函数的config中进行配置,若需配置其他功能,请在npu_run_config_init函数的run_config中进行配置。

      • profiling_mode:是否开启profiling采集。
      • output:profiling数据存放路径,该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径。
      • task_trace:是否采集任务轨迹数据。
      • training_trace:是否采集迭代轨迹数据,training_trace配置为“on”的场景下需要同时配置fp_point和bp_point。
      • aicpu:是否采集AI CPU算子的详细信息,如算子执行时间、数据拷贝时间等。
      • fp_point:指定训练网络迭代轨迹正向算子的开始位置,用于记录前向计算开始时间戳,可直接配置为空,由系统自动获取,或参考如何获取fp_point与bp_point
      • bp_point:指定训练网络迭代轨迹反向算子的结束位置,记录后向计算结束时间戳,可直接配置为空,由系统自动获取,或参考如何获取fp_point与bp_point
      • aic_metrics:AI Core和AI Vector Core的硬件信息,取值“PipeUtilization”代表记录计算单元和搬运单元的耗时占比。
      • Profiling配置的详细介绍请参考Profiling
    • 如果不存在,则执行下一步。
  2. 在迁移后的脚本中找到“npu_run_config_init”,找到运行配置函数,例如示例中的run_config。
    如果运行配置函数中未传入session_config参数,则需要按照下面示例添加;如果已经传入了session_config参数,则进行下一步。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    session_config = tf.ConfigProto(allow_soft_placement=True)
    
    run_config = tf.estimator.RunConfig(
        train_distribute=distribution_strategy,
        session_config=session_config,
        save_checkpoints_secs=60*60*24)
    
    classifier = tf.estimator.Estimator(
        model_fn=model_function, model_dir=flags_obj.model_dir, config=npu_run_config_init(run_config=run_config))
    
  3. 添加session_config配置,开启Profiling采集。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    session_config = tf.ConfigProto(allow_soft_placement=True)
    custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add()
    custom_op.name = 'NpuOptimizer'
    # 开启profiling采集
    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"}')
    # 采集任务轨迹数据和迭代轨迹数据。可先仅采集任务轨迹数据,如果仍然无法分析到具体问题,可再采集迭代轨迹数据
    # 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"}')
    
    run_config = tf.estimator.RunConfig(
        train_distribute=distribution_strategy,
        session_config=session_config,
        save_checkpoints_secs=60*60*24)
    
    classifier = tf.estimator.Estimator(
        model_fn=model_function, model_dir=flags_obj.model_dir, config=npu_run_config_init(run_config=run_config))
    
  4. 重新执行训练脚本进行Profiling数据的采集。

手工迁移场景

您可以尝试先开启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)

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

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