自动迁移场景
- 在迁移后的脚本中查找“npu_run_config_init”,找到运行配置参数(例如示例中的“run_config”),在运行配置函数中传入session_config参数,并在session_config参数中添加“iterations_per_loop”配置。
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'
custom_op.parameter_map["enable_data_pre_proc"].b = True # getnext算子下沉是迭代循环下沉的必要条件
custom_op.parameter_map["iterations_per_loop"].i = 10
run_config = tf.estimator.RunConfig(
train_distribute=distribution_strategy,
session_config=session_config, # 运行配置参数中添加seesion_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))
|
- 增加“SetIterationsVarHook”:
|
train_hooks = hooks_helper.get_train_hooks(
flags_obj.hooks,
model_dir=flags_obj.model_dir,
batch_size=flags_obj.batch_size)
train_hooks.append(SetIterationsVarHook(10))
|
- 在train_op中增加“IterationOp”:
|
train_op = opt.apply_gradients( grad_var_list, global_step = global_step )
train_op = tf.group(train_op, name="IterationOp") #该name设置到梯度更新返回的op
|
手工迁移场景
Estimator模式下,通过NPURunConfig中的iterations_per_loop参数配置,配置方法如下:
|
from npu_bridge.npu_init import *
session_config=tf.ConfigProto(allow_soft_placement=True)
config = NPURunConfig(session_config=session_config, iterations_per_loop=10)
|
同时需要使能getnext算子下沉,getnext算子下沉是迭代循环下沉的必要条件。Estimator模式下getnext算子默认下沉,即enable_data_pre_proc默认为True,可不用手工配置。
检查iterations_per_loop生效
开启“训练迭代循环下沉”功能后,可通过Host INFO日志关键字Insert op success检查iterations_per_loop生效,如图1所示。
图1 日志信息(iterations_per_loop大于1)
对比iterations_per_loop为默认1时,相关日志信息,如图2所示。
图2 日志信息(iterations_per_loop等于1)