设置混合精度模式
本节以将“precision_mode_v2”参数配置为“mixed_float16”为例,说明如何设置混合精度模式。
Estimator模式下设置精度模式
- 自动迁移场景
- 检查迁移后的脚本是否存在“init_resource”。
- 如果存在,则需要参考下面示例,在init_resource函数中传入session_config的配置,并在session_config配置中添加“precision_mode_v2”参数。
1 2 3 4 5 6 7 8 9 10 11
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" custom_op.parameter_map["precision_mode_v2"].s = tf.compat.as_bytes("mixed_float16") (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_run_config_init函数的run_config中进行配置。
- 如果不存在,则执行下一步。
- 如果存在,则需要参考下面示例,在init_resource函数中传入session_config的配置,并在session_config配置中添加“precision_mode_v2”参数。
- 在迁移后的脚本中查找“npu_run_config_init”,找到运行配置函数,例如示例中的“run_config”。
如果运行配置函数中未传入session_config参数,则需要按照下面示例添加;如果已经传入了session_config参数,则进行下一步。
1 2 3 4 5 6 7 8 9
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))
- 检查迁移后的脚本是否存在“init_resource”。
- 手工迁移场景
Estimator模式下,通过NPURunConfig中的precision_mode_v2参数设置精度模式:
1 2 3 4 5 6 7 8
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”。
- 如果存在,则需要参考下面示例,在init_resource函数中传入session_config配置,并在session_config中添加“precision_mode_v2”参数。
1 2 3 4 5 6 7 8 9 10
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' custom_op.parameter_map["precision_mode_v2"].s = tf.compat.as_bytes("mixed_float16") (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函数的session_config中进行配置,若需配置其他功能,请在npu_config_proto函数的config_proto中进行配置。
- 如果不存在,则执行下一步。
- 如果存在,则需要参考下面示例,在init_resource函数中传入session_config配置,并在session_config中添加“precision_mode_v2”参数。
- 在迁移后的脚本中查找“npu_config_proto”,找到运行配置参数(例如下面示例中的“session_config”),在运行配置参数中添加“precision_mode_v2”,如下所示。
1 2 3 4 5 6 7 8
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()
- 检查迁移后的脚本是否存在“init_resource”。
- 手工迁移场景
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))
Keras模式下设置精度模式
- 自动迁移场景
- 检查迁移后的脚本是否存在“init_resource”。
- 如果存在,则需要参考下面示例,在init_resource函数中传入session_config配置,并在session_config中添加“precision_mode_v2”参数。
1 2 3 4 5 6 7 8 9 10 11 12
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" custom_op.parameter_map["precision_mode_v2"].s = tf.compat.as_bytes("mixed_float16") ... ... (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中进行配置,若需配置其他功能,请在“set_keras_session_npu_config”函数的config中进行配置。
- 如果不存在,则执行下一步。
- 如果存在,则需要参考下面示例,在init_resource函数中传入session_config配置,并在session_config中添加“precision_mode_v2”参数。
- 在脚本中查找“set_keras_session_npu_config”函数,找到运行配置,例如config_proto,然后在运行配置中添加“precision_mode_v2”,如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import tensorflow as tf import tensorflow.python.keras as keras from tensorflow.python.keras import backend as K from npu_bridge.npu_init import * config_proto = tf.ConfigProto(allow_soft_placement=True) custom_op = config_proto.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") npu_keras_sess = set_keras_session_npu_config(config=config_proto) #数据预处理... #模型搭建... #模型编译... #模型训练...
- 检查迁移后的脚本是否存在“init_resource”。
- 手工迁移场景
与sess.run的手工迁移场景配置方式类似,请参见sess.run模式下设置精度模式。
父主题: 混合精度训练