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_resoure函数的config中进行配置,若需配置其他功能,请在npu_run_config_init函数的run_config中进行配置。
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))
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))
您可以尝试先开启task_trace任务轨迹数据采集:
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)
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构造函数。