迁移检查

对于模型从GPU/CPU迁移到NPU训练的场景,需要做以下检查,排除迁移过程中可能存在的问题。

  1. 检查模型多次训练精度一致性。

    在GPU/CPU下多次训练,并且在NPU下多次训练;如果多次训练的结果中,GPU/CPU的精度和NPU的精度均在相同范围内波动,那么不能认为NPU训练存在精度问题;如果GPU/CPU多次训练的平均精度明显高于NPU多次训练的平均精度,并且超出正常波动范围,可以认为NPU训练存在精度异常。

  2. 检查迁移后的模型配置。
    • 确保NPU下的混合精度模式和GPU下相同,使用“precision_mode_v2”选项,取值为“origin”。具体可参考《TF Adapter 接口(1.x)》的“session配置参数说明”章节
    • 确保NPU下正确使能Loss Scale功能,如果GPU/CPU下使用了LossScaleManager进行动态LossScale计算,在NPU下需要迁移为NPULossScaleOptimizer。具体可参考《TensorFlow 1.15模型迁移指南》的“Loss Scale”章节
    • 确保除迁移过程中涉及到的接口修改外,GPU/CPU训练和NPU训练使用的数据集,数据预处理方式,模型超参等配置相同。
  3. 使用高精度模式。

    如果以上检查完成后仍然存在精度问题,可以打开NPU训练的高精度模式后再次训练,检查是否是由算子精度模式引入的问题。

    session.run模式训练配置示例:

    custom_op.parameter_map["op_select_implmode"].s = tf.compat.as_bytes("high_precision")

    具体可参考《TF Adapter 接口(1.x)》的“session配置参数说明”章节

    estimator模式训练配置示例:

    config = NPURunConfig(op_select_implmode="high_precision")

    具体可参考《TF Adapter 接口(1.x)》的“NPURunConfig配置参数说明”章节