文档
注册

修改混合精度黑白灰名单

概述

开启自动混合精度的场景下,系统会自动根据内置的优化策略,对网络中的某些数据类型进行降精度处理,从而在精度损失很小的情况下提升系统性能并减少内存使用。

内置优化策略在“OPP安装目录/opp/built-in/op_impl/ai_core/tbe/config/<soc_version>/aic-<soc_version>-ops-info.json”,例如:
"Conv2D":{
    "precision_reduce":{
        "flag":"true"
},
  • precision_mode_v2配置为mixed_float16,precision_mode配置为allow_mix_precision_fp16/allow_mix_precision的场景:
    • 若取值为true(白名单),则表示允许将当前float32类型的算子,降低精度到float16。
    • 若取值为false(黑名单),则不允许将当前float32类型的算子降低精度到float16,相应算子仍使用float32精度。
    • 若网络模型中算子没有配置该参数(灰名单),当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。

用户可以在内置优化策略基础上进行调整,自行指定哪些算子允许降精度,哪些算子不允许降精度。

下面介绍两种配置方法。

(推荐)通过modify_mixlist参数指定混合精度黑白灰算子名单

在训练脚本中通过modify_mixlist参数指定混合精度黑白灰算子名单配置文件,配置示例如下:

  • 自动迁移场景
    custom_op.parameter_map["modify_mixlist"].s = tf.compat.as_bytes("/home/test/ops_info.json")
  • 手工迁移场景
    from npu_bridge.npu_init import *
    # Estimator模式修改方法
    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="precision_mode_v2",
      modify_mixlist="/home/test/ops_info.json"
      )
    # sess.run模式修改方法
    config = tf.ConfigProto()
    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")
    custom_op.parameter_map["modify_mixlist"].s = tf.compat.as_bytes("/home/test/ops_info.json")
    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模式修改方法
    与sess.run模式修改方法类似
其中ops_info.json为混合精度黑白灰算子名单配置文件,多个算子使用英文逗号分隔,样例如下:
{
  "black-list": {                  // 黑名单
     "to-remove": [                // 黑名单算子转换为灰名单算子
     "Xlog1py"
     ],
     "to-add": [                   // 白名单或灰名单算子转换为黑名单算子
     "Matmul",
     "Cast"
     ]
  },
  "white-list": {                  // 白名单
     "to-remove": [                // 白名单算子转换为灰名单算子 
     "Conv2D"
     ],
     "to-add": [                   // 黑名单或灰名单算子转换为白名单算子
     "Bias"
     ]
  }
}

假设算子A默认在白名单中,如果您希望将该算子配置为黑名单算子,可以参考如下方法:

  1. (正确示例)用户将该算子添加到黑名单中:
    {
      "black-list": { 
         "to-add": ["A"]
      }
    }

    则系统会将该算子从白名单中删除,并添加到黑名单中,最终该算子在黑名单中。

  2. (正确示例)用户将该算子从白名单中删除,同时添加到黑名单中:
    {
      "black-list": {
         "to-add": ["A"]
      },
      "white-list": {
         "to-remove": ["A"]
      }
    }

    则系统会将该该算子从白名单中删除,并添加到黑名单中,最终该算子在黑名单中。

  3. (错误示例)用户将该算子从白名单中删除,此时算子最终是在灰名单中,而不是黑名单。
    {
      "white-list": {
         "to-remove": ["A"]
      }
    }

    此时,系统会将该算子从白名单中删除,然后添加到灰名单中,最终该算子在灰名单中。

    对于只从黑/白名单中删除,而不添加到白/黑名单的情况,系统会将该算子添加到灰名单中。

修改算子信息库

对内置算子信息库进行修改,可能会对其他网络造成影响,请谨慎修改。

  1. 切换到“OPP安装目录/opp/built-in/op_impl/ai_core/tbe/config/<soc_version>”目录下。
  2. 对aic-<soc_version>-ops-info.json文件增加写权限。
    chmod u+w aic-<soc_version>-ops-info.json

    当前目录下的所有json文件都会被加载到算子信息库中,如果您需要备份原来的json文件,建议备份到其他目录下。

  3. 修改或增加算子信息库aic-<soc_version>-ops-info.json文件中对应算子的precision_reduce字段。
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词