本节以将“precision_mode_v2”参数配置为“mixed_float16”为例,说明如何设置混合精度模式。
Estimator模式下设置精度模式
- 自动迁移场景
- 检查迁移后的脚本是否存在“init_resource”。
- 在迁移后的脚本中查找“npu_run_config_init”,找到运行配置函数,例如示例中的“run_config”。
如果运行配置函数中未传入session_config参数,则需要按照下面示例添加;如果已经传入了session_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配置,添加“precision_mode_v2”。
1
2
3
4
5
6
7
8
9
10
11
12
|
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["precision_mode_v2"].s = tf.compat.as_bytes("mixed_float16")
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))
|
- 手工迁移场景
Estimator模式下,通过NPURunConfig中的precision_mode_v2参数设置精度模式:
|
from npu_bridge.npu_init import *
npu_config=NPURunConfig(
model_dir=FLAGS.model_dir,
save_checkpoints_steps=FLAGS.save_checkpoints_steps,
session_config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=False),
precision_mode_v2="mixed_float16"
)
|
sess.run模式下设置精度模式
- 自动迁移场景
- 检查迁移后的脚本是否存在“init_resource”。
- 在迁移后的脚本中查找“npu_config_proto”,找到运行配置参数(例如下面示例中的“session_config”),在运行配置参数中添加“precision_mode_v2”,如下所示。
|
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["precision_mode_v2"].s = tf.compat.as_bytes("mixed_float16")
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()
|
- 手工迁移场景
sess.run模式下,通过session配置项precision_mode_v2参数设置精度模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import tensorflow as tf
from npu_bridge.npu_init import *
config = tf.ConfigProto(allow_soft_placement=True)
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["precision_mode_v2"].s = tf.compat.as_bytes("mixed_float16")
config.graph_options.rewrite_options.remapping = RewriterConfig.OFF
config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF
with tf.Session(config=config) as sess:
print(sess.run(cost))
|