Keras迁移
若原始TensorFlow网络基于Keras API构造,可参见本节了解手工迁移全流程。
Keras简介
Keras和Estimator类似,都属于TensorFlow高阶API,提供了方便的构图功能,并对训练、评估、验证、导出提供了方便的接口。使用TensorFlow的Keras API进行训练脚本开发的一般步骤为:
- 数据预处理。
- 模型搭建。
- 模型编译。
- 模型训练。
当前仅支持通过TensorFlow的Keras API编写的训练脚本,而不支持原生Keras API。
下面介绍如何迁移Keras训练脚本,以便在昇腾AI处理器上进行训练。
头文件增加
对于以下步骤中涉及修改的python文件,新增以下头文件引用,用于导入NPU相关库。
1 | from npu_bridge.npu_init import * |
引入上述头文件后,训练脚本默认在昇腾AI处理器执行。
迁移点说明
创建一个TensorFlow会话并且注册Keras,并增加相关配置项以便在昇腾AI处理器执行训练。同时在训练结束时,关闭会话。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import tensorflow as tf import tensorflow.python.keras as keras from tensorflow.python.keras import backend as K from npu_bridge.npu_init import * # 增加session配置“allow_soft_placement=True”,允许TensorFlow自动分配设备。 sess_config = tf.ConfigProto(allow_soft_placement=True) # 添加名字为“NpuOptimizer”的NPU优化器,网络编译时,NPU只会遍历“NpuOptimizer”下的session配置。 custom_op = sess_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" # 显式关闭TensorFlow的remapping、memory_optimization功能,避免与NPU中的功能冲突。 sess_config.graph_options.rewrite_options.remapping = RewriterConfig.OFF sess_config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF sess = tf.Session(config=sess_config) K.set_session(sess) #数据预处理... #模型搭建... #模型编译... #模型训练... sess.close() |
通过以上配置迁移后,一次session.run调用在昇腾AI处理器执行训练迭代的次数固定为1,如需减少Host与Device间的交互次数,缩短训练时长,需要通过model_to_npu_estimator接口,将通过Keras构建的模型转换为NPUEstimator对象,同时通过NPURunConfig中的iterations_per_loop参数,指定一次session.run调用时在昇腾AI处理器执行训练迭代的次数,具体请参考Keras模式下使能训练迭代循环下沉。
父主题: 单机单卡脚本迁移