---
title: Estimator模式
description: "1. 检查迁移后的脚本是否存在“init_resource”。"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_000057.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_000057.html
indexId: 8490ae54e47d77506360d8777f46372fa08ec883a23fa799de778e9a0f2f591b73
---
# 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/test/output","task_trace":"on"}') # 采集任务轨迹数据和迭代轨迹数据。可先仅采集任务轨迹数据，如果仍然无法分析到具体问题，可再采集迭代轨迹数据 # 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"}') (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/test/output","task_trace":"on"}') # 采集任务轨迹数据和迭代轨迹数据。可先仅采集任务轨迹数据，如果仍然无法分析到具体问题，可再采集迭代轨迹数据 # 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"}') 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任务轨迹数据采集：

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


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

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