通过修改训练脚本配置调优模式(TensorFlow 1.15)
使用前须知
除了通过AOE_MODE环境变量配置调优模式之外,还可以通过修改训练脚本方式,配置调优模式。同时配置的情况下,通过修改训练脚本方式优先生效。
操作步骤
- (可选)配置相关环境变量。
export ASCEND_DEVICE_ID=0 # 通过该环境变量指定昇腾AI处理器的逻辑ID。取值范围[0,N-1],默认为0。其中N为当前物理机/虚拟机/容器内的设备总数。
- 修改训练脚本,通过如下参数使能AOE调优。【对于手工迁移的训练脚本】请按照如下方法修改:
- 如果迁移后的训练脚本中使用了initialize_system接口,请按照如下方法使能AOE调优。
npu_init = npu_ops.initialize_system() npu_shutdown = npu_ops.shutdown_system() config = tf.ConfigProto() ... custom_op.parameter_map["aoe_mode"].s = tf.compat.as_bytes("2") ... with tf.Session(config=config) as sess: sess.run(npu_init) #调用HCCL接口... #执行训练... sess.run(npu_shutdown)
- 如果迁移后的训练脚本中没有使用initialize_system接口,请按照如下方法使能AOE调优。
对于Estimator模式的训练脚本,通过NPURunConfig中的aoe_mode和work_path参数使能AOE调优:
import tensorflow as tf from npu_bridge.npu_init import * session_config=tf.ConfigProto() config = NPURunConfig(session_config=session_config, aoe_mode="2")
对于sess.run模式的训练脚本,通过session配置项aoe_mode和work_path使能AOE调优。import tensorflow as tf from npu_bridge.npu_init import * config = tf.ConfigProto() custom_op = config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["aoe_mode"].s = tf.compat.as_bytes("2") config.graph_options.rewrite_options.remapping = RewriterConfig.OFF
【对于工具迁移的训练脚本】请按照如下方法修改:- 如果迁移后的训练脚本中使用了“init_resource”,请按照如下方法使能AOE调优。
if __name__ == '__main__': session_config = tf.ConfigProto() custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["aoe_mode"].s = tf.compat.as_bytes("2") (npu_sess, npu_shutdown) = init_resource(config=session_config) tf.app.run() shutdown_resource(npu_sess, npu_shutdown) close_session(npu_sess)
- 如果迁移后的训练脚本没有使用“init_resource”,请按照如下方法使能AOE调优。
对于Estimator模式的训练脚本:在迁移后的脚本中找到“npu_run_config_init”,配置调优参数:
session_config = tf.ConfigProto(allow_soft_placement=True) custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = 'NpuOptimizer' custom_op.parameter_map["aoe_mode"].s = tf.compat.as_bytes("2") 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))
如果脚本中的运行配置函数,例如RunConfig中没有传入session_config参数,需要自行传入session_config:session_config = tf.ConfigProto() custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = 'NpuOptimizer' custom_op.parameter_map["aoe_mode"].s = tf.compat.as_bytes("2") 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))
对于sess.run模式的训练脚本:在脚本中找到“npu_config_proto”,并配置调优参数。
- 在脚本中找到“npu_config_proto”:
with tf.Session(config=npu_config_proto()) as sess: sess.run(tf.global_variables_initializer()) interaction_table.init.run()
- 配置调优参数:
config_proto = tf.ConfigProto() custom_op = config_proto.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = 'NpuOptimizer' custom_op.parameter_map["aoe_mode"].s = tf.compat.as_bytes("2") config = npu_config_proto(config_proto=config_proto) with tf.Session(config=config) as sess: sess.run(tf.global_variables_initializer()) interaction_table.init.run()
- 在脚本中找到“npu_config_proto”:
- 如果迁移后的训练脚本中使用了initialize_system接口,请按照如下方法使能AOE调优。
- 执行训练。
父主题: 附录