--precision_mode_v2
功能说明
设置网络模型的精度模式。
关联参数
- 该参数不能与--precision_mode参数同时使用,建议使用--precision_mode_v2参数。
- 当取值为mixed_float16时,如果用户想要在内置优化策略基础上进行调整,自行指定哪些算子允许降精度,哪些算子不允许降精度,则需要参见--modify_mixlist参数设置。
- 推理场景下,使用--precision_mode_v2参数设置整个网络模型的精度模式,可能会有个别算子存在性能或精度问题,该场景下可以使用--keep_dtype参数,使原始网络模型编译时保持个别算子的计算精度不变,但--precision_mode_v2参数取值为origin时,--keep_dtype不生效。
参数取值
- fp16:
表示网络模型中算子支持float16和float32时,强制选择float16。
- origin:
表示保持原图精度。如果原图中部分算子精度为float16,但NPU中该部分算子实现不支持float16、仅支持float32,则系统内部会自动采用高精度float32;如果原图中部分算子精度为float32,但NPU中该部分算子的实现不支持float32类型、仅支持float16类型,则不能使用该参数值,系统不支持使用低精度。
- cube_fp16in_fp32out:
算子既支持float32又支持float16数据类型时,系统内部根据算子类型不同,选择不同的处理方式。
- 对于Cube计算,系统内部会按算子实现的支持情况处理:
- 优先选择输入数据类型为float16且输出数据类型为float32;
- 如果1中的场景不支持,则选择输入数据类型为float32且输出数据类型为float32;
- 如果2中的场景不支持,则选择输入数据类型为float16且输出数据类型为float16;
- 如果3中的场景不支持,则报错。
- 对于Vector计算,表示网络模型中算子支持float16和float32时,强制选择float32,若原图精度为float16,也会强制转为float32。
如果网络模型中存在部分算子,并且该算子实现不支持float32,比如某算子仅支持float16类型,则该参数不生效,仍然使用支持的float16;如果该算子不支持float32,且又配置了黑名单(precision_reduce = false),则会使用float32的AI CPU算子。
- 对于Cube计算,系统内部会按算子实现的支持情况处理:
- mixed_float16:
表示使用混合精度float16和float32数据类型来处理神经网络。针对网络模型中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。
若配置了该种模式,则可以在OPP软件包安装路径${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/<soc_version>/aic-<soc_version>-ops-info.json内置优化策略文件中查看“precision_reduce”参数的取值:
- 若取值为true(白名单),则表示允许将当前float32类型的算子,降低精度到float16。
- 若取值为false(黑名单),则不允许将当前float32类型的算子降低精度到float16,相应算子仍旧使用float32精度。
- 若网络模型中算子没有配置该参数(灰名单),当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。
参数默认值:fp16
推荐配置及收益
所配置的精度模式不同,网络模型精度以及性能有所不同,具体为:
精度高低排序:origin>mixed_float16>fp16
性能优劣排序:fp16>=mixed_float16>origin
示例
--precision_mode_v2=fp16
支持的芯片型号
Atlas 200/500 A2推理产品
依赖约束
无。