sess.run模式
自动迁移场景
- 检查迁移后的脚本是否存在“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_config_proto函数的config_proto中进行配置。
- 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。
- 如果不存在,则执行下一步。
- 如果存在,则需要参考下面示例进行修改;修改完后,执行下一步。
- 在迁移脚本中查找“npu_config_proto”函数,找到运行配置参数(例如下面示例中的“session_config”),在运行配置中配置相关参数,开启task_trace任务轨迹数据采集。
1 2 3 4 5 6 7 8 9 10 11 12 13
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"}') config = npu_config_proto(config_proto=session_config) with tf.Session(config=config) as sess: sess.run(tf.global_variables_initializer()) interaction_table.init.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/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迭代轨迹数据采集:
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/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。