昇腾CANN/GE精度调优API文档 精度调优【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/gege.customizeDtypes通过该参数自定义模型编译时算子的计算精度模型中其他算子以ge.exec.precision_mode或ge.exec.precision_mode_v2指定的精度模式进行编译。该参数需要配置为配置文件路径及文件名例如/home/test/customize_dtypes.cfg。参数值约束配置文件中列举需要自定义计算精度的算子名称或算子类型每个算子单独一行且算子类型必须为基于IR定义的算子的类型。对于同一个算子如果同时配置了算子名称和算子类型编译时以算子名称为准。指定某个算子的计算精度时如果算子编译过程中该算子被融合掉则该算子指定的计算精度不生效。配置文件格式要求# 按照算子名称配置 Opname1::InputDtype:dtype1,dtype2,…OutputDtype:dtype1,… Opname2::InputDtype:dtype1,dtype2,…OutputDtype:dtype1,… # 按照算子类型配置 OpType::TypeName1:InputDtype:dtype1,dtype2,…OutputDtype:dtype1,… OpType::TypeName2:InputDtype:dtype1,dtype2,…OutputDtype:dtype1,…配置文件配置示例# 按照算子名称配置 resnet_v1_50/block1/unit_3/bottleneck_v1/Relu::InputDtype:float16,int8,OutputDtype:float16,int8 # 按照算子类型配置 OpType::Relu:InputDtype:float16,int8,OutputDtype:float16,int8[!NOTE]说明算子具体支持的计算精度可以从算子信息库中查看默认存储路径为${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/_xxx_/aic-xxx-ops-info-*.json${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例安装后文件默认存储路径为/usr/local/Ascend/cann。xxx请根据实际产品进行选择。通过该参数指定的优先级高因此可能会导致精度/性能的下降如果指定的dtype不支持会导致编译失败。必选/可选可选生效级别sessionge.exec.modify_mixlist混合精度场景下通过此参数指定混合精度黑白灰名单的路径以及文件名自行指定哪些算子允许降精度哪些算子不允许降精度。配置为路径以及文件名文件为JSON格式。黑白灰名单可从${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json内置优化策略文件中查看“precision_reduce”参数下的flag参数值其中${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例安装后文件默认存储路径为/usr/local/Ascend/cann。_xxx_请根据实际产品进行选择。若取值为true白名单表示混合精度模式下允许降低精度。若取值为false黑名单表示混合精度模式下不允许降低精度。不配置该参数灰名单表示混合精度模式下当前算子的混合精度处理机制和前一个算子保持一致即如果前一个算子支持降精度处理当前算子也支持降精度如果前一个算子不允许降精度当前算子也不支持降精度。配置示例{ge.exec.modify_mixlist, /home/test/ops_info.json};ops_info.json中可以指定算子类型多个算子使用英文逗号分隔样例如下{ black-list: { // 黑名单 to-remove: [ // 黑名单算子转换为灰名单算子 Xlog1py ], to-add: [ // 白名单或灰名单算子转换为黑名单算子 Matmul, Cast ] }, white-list: { // 白名单 to-remove: [ // 白名单算子转换为灰名单算子 Conv2D ], to-add: [ // 黑名单或灰名单算子转换为白名单算子 Bias ] } }上述配置文件样例中展示的算子仅作为参考请基于实际硬件环境和具体的算子内置优化策略进行配置。黑白灰名单查询样例如下Conv2D:{ precision_reduce:{ flag:true } },true白名单false黑名单不配置灰名单。必选/可选可选生效级别全局/session/graphge.exec.precision_mode算子精度模式配置要求为string类型。不能与ge.exec.precision_mode_v2同时使用建议使用ge.exec.precision_mode_v2参数。参数取值force_fp32/cube_fp16in_fp32out配置为force_fp32或cube_fp16in_fp32out效果等同该选项用来表示AI Core中该算子既支持float32又支持float16数据类型时系统内部都会根据算子类型不同选择不同的处理方式。cube_fp16in_fp32out为新版本中新增的对于矩阵计算类算子该选项语义更清晰。对于矩阵计算类算子系统内部会按算子实现的支持情况处理 1. 优先选择输入数据类型为float16且输出数据类型为float32 2. 如果1中的场景不支持则选择输入数据类型为float32且输出数据类型为float32 3. 如果2中的场景不支持则选择输入数据类型为float16且输出数据类型为float16 4. 如果3中的场景不支持则报错。对于矢量计算类算子表示原图中算子精度为float16或bfloat16强制选择float32。如果原图中存在部分算子在AI Core中该算子的实现不支持float32比如某算子仅支持float16类型则该参数不生效仍然使用支持的float16如果在AI Core中该算子的实现不支持float32且又配置了黑名单precision_reduce false则会使用float32的AI CPU算子如果AI CPU算子也不支持则执行报错。force_fp16表示原图中算子精度为float16、bfloat16和float32时强制选择float16。allow_fp32_to_fp16对于矩阵类算子如果原图中算子精度为float32优先降低精度到float16如果AI Core中算子不支持float16则继续选择float32如果AI Core中算子不支持float32则使用AI CPU算子进行计算如果AI CPU算子也不支持则执行报错。如果原图中算子精度为bfloat16则优先使用原图精度bfloat16如果AI Core中算子不支持bfloat16则选择float32如果AI Core中算子不支持float32则直接降低精度到float16如果AI Core中算子不支持float16则使用AI CPU算子进行计算如果AI CPU算子也不支持则执行报错。对于矢量类算子优先保持原图精度如果原图中算子精度为float32则优先使用原图精度float32如果AI Core中算子不支持float32则直接降低精度到float16如果AI Core中算子不支持float16则使用AI CPU算子进行计算如果AI CPU算子也不支持则执行报错。如果原图中算子精度为bfloat16则优先使用原图精度bfloat16如果AI Core中算子不支持bfloat16则选择float32如果AI Core中算子不支持float32则直接降低精度到float16如果AI Core中算子不支持float16则使用AI CPU算子进行计算如果AI CPU算子也不支持则执行报错。must_keep_origin_dtype保持原图精度。如果原图中某算子精度为float16AI Core中该算子的实现不支持float16、仅支持float32和bfloat16则系统内部会自动采用高精度float32。如果原图中某算子精度为float16AI Core中该算子的实现不支持float16、仅支持bfloat16则会使用float16的AI CPU算子如果AI CPU算子也不支持则执行报错。如果原图中某算子精度为float32AI Core中该算子的实现不支持float32类型、仅支持float16类型则会使用float32的AI CPU算子如果AI CPU算子也不支持则执行报错。allow_mix_precision/allow_mix_precision_fp16配置为allow_mix_precision或allow_mix_precision_fp16效果等同均表示使用混合精度float16、bfloat16和float32数据类型来处理神经网络的过程。allow_mix_precision_fp16为新版本中新增的语义更清晰便于理解。针对原始模型中float32和bfloat16数据类型的算子按照内置的优化策略自动将部分float32和bfloat16的算子降低精度到float16从而在精度损失很小的情况下提升系统性能并减少内存使用。若配置了该种模式则可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json内置优化策略文件中查看“precision_reduce”参数的取值若取值为true白名单则表示允许将当前float32和bfloat16类型的算子降低精度到float16。若取值为false黑名单则不允许将当前float32和bfloat16类型的算子降低精度到float16相应算子仍旧使用float32或bfloat16精度。若网络模型中算子没有配置该参数灰名单当前算子的混合精度处理机制和前一个算子保持一致即如果前一个算子支持降精度处理当前算子也支持降精度如果前一个算子不允许降精度当前算子也不支持降精度。allow_mix_precision_bf16表示使用混合精度bfloat16和float32数据类型来处理神经网络的过程。针对原始模型中float32数据类型的算子按照内置的优化策略自动将部分float32的算子降低精度到bfloat16从而在精度损失很小的情况下提升系统性能并减少内存使用如果AI Core中算子不支持bfloat16和float32则使用AI CPU算子进行计算如果AI CPU算子也不支持则执行报错。若配置了该种模式则可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json内置优化策略文件中查看“precision_reduce”参数的取值若取值为true白名单则表示允许将当前float32类型的算子降低精度到bfloat16。若取值为false黑名单则不允许将当前float32类型的算子降低精度到bfloat16相应算子仍旧使用float32精度。若网络模型中算子没有配置该参数灰名单当前算子的混合精度处理机制和前一个算子保持一致即如果前一个算子支持降精度处理当前算子也支持降精度如果前一个算子不允许降精度当前算子也不支持降精度。allow_fp32_to_bf16如果原图中算子精度为float32则优先使用原图精度float32如果AI Core中算子不支持float32则降低精度到bfloat16如果AI Core中算子不支持bfloat16则使用AI CPU算子进行计算如果AI CPU算子也不支持则执行报错。如果原图中算子精度为bfloat16则优先使用原图精度bfloat16如果AI Core中算子不支持bfloat16则选择float32如果AI Core中算子不支持float32则使用AI CPU算子进行计算如果AI CPU算子也不支持则执行报错。上述路径中的${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例安装后文件默认存储路径为/usr/local/Ascend/cann。_xxx_请根据实际产品进行选择。参数默认值训练场景下针对Atlas 训练系列产品参数默认值为“allow_fp32_to_fp16”。训练场景下针对Atlas A2 训练系列产品/Atlas A2 推理系列产品参数默认值为“must_keep_origin_dtype”。训练场景下针对Atlas A3 训练系列产品/Atlas A3 推理系列产品参数默认值为“must_keep_origin_dtype”。训练场景下针对Ascend 950PR/Ascend 950DT参数默认值为“must_keep_origin_dtype”。在线推理场景下参数默认值为“force_fp16”。参数值约束bfloat16数据类型仅支持以下产品Atlas A2 训练系列产品/Atlas A2 推理系列产品Atlas A3 训练系列产品/Atlas A3 推理系列产品Ascend 950PR/Ascend 950DT配置示例{ge.exec.precision_mode, force_fp16};必选/可选可选生效级别全局/session/graphge.exec.precision_mode_v2算子精度模式配置要求为string类型。不能与ge.exec.precision_mode同时使用建议使用ge.exec.precision_mode_v2参数。参数取值fp16表示原图中算子精度为float16、bfloat16或float32时强制选择float16。origin保持原图精度。如果原图中某算子精度为float16AI Core中该算子的实现不支持float16、仅支持float32和bfloat16则系统内部会自动采用高精度float32。如果原图中某算子精度为float16AI Core中该算子的实现不支持float16、仅支持bfloat16则会使用float16的AI CPU算子如果AI CPU算子也不支持则执行报错。如果原图中某算子精度为float32AI Core中该算子的实现不支持float32类型、仅支持float16类型则会使用float32的AI CPU算子如果AI CPU算子也不支持则执行报错。cube_fp16in_fp32outAI Core中该算子既支持float32又支持float16数据类型时系统内部根据算子类型不同选择不同的处理方式。对于矩阵计算类算子系统内部会按算子实现的支持情况处理 1. 优先选择输入数据类型为float16且输出数据类型为float32 2. 如果1中的场景不支持则选择输入数据类型为float32且输出数据类型为float32 3. 如果2中的场景不支持则选择输入数据类型为float16且输出数据类型为float16 4. 如果3中的场景不支持则报错。对于矢量计算类算子表示原图中算子精度为float16或bfloat16强制选择float32。如果原图中存在部分算子在AI Core中该算子的实现不支持float32比如某算子仅支持float16类型则该参数不生效仍然使用支持的float16如果在AI Core中该算子的实现不支持float32且又配置了黑名单precision_reduce false则会使用float32的AI CPU算子如果AI CPU算子也不支持则执行报错。mixed_float16表示使用混合精度float16、bfloat16和float32数据类型来处理神经网络。针对原图中float32和bfloat16数据类型的算子按照内置的优化策略自动将部分float32和bfloat16的算子降低精度到float16从而在精度损失很小的情况下提升系统性能并减少内存使用。若配置了该种模式则可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json内置优化策略文件中查看“precision_reduce”参数的取值若取值为true白名单则表示允许将当前float32和bfloat16类型的算子降低精度到float16。若取值为false黑名单则不允许将当前float32和bfloat16类型的算子降低精度到float16相应算子仍旧使用float32或bfloat16精度。若网络模型中算子没有配置该参数灰名单当前算子的混合精度处理机制和前一个算子保持一致即如果前一个算子支持降精度处理当前算子也支持降精度如果前一个算子不允许降精度当前算子也不支持降精度。mixed_bfloat16表示使用混合精度bfloat16和float32数据类型来处理神经网络。针对原图中float32数据类型的算子按照内置的优化策略自动将部分float32的算子降低精度到bfloat16从而在精度损失很小的情况下提升系统性能并减少内存使用如果算子不支持bfloat16和float32则使用AI CPU算子进行计算如果AI CPU算子也不支持则执行报错。若配置了该种模式则可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json内置优化策略文件中查看“precision_reduce”参数的取值若取值为true白名单则表示允许将当前float32类型的算子降低精度到bfloat16。若取值为false黑名单则不允许将当前float32类型的算子降低精度到bfloat16相应算子仍旧使用float32精度。若网络模型中算子没有配置该参数灰名单当前算子的混合精度处理机制和前一个算子保持一致即如果前一个算子支持降精度处理当前算子也支持降精度如果前一个算子不允许降精度当前算子也不支持降精度。mixed_hif8开启自动混合精度功能表示混合使用hifloat8此数据类型介绍可参见Link、float16、bfloat16和float32数据类型来处理神经网络。针对原图中float16、bfloat16和float32数据类型的算子按照内置的优化策略自动将部分float16、bfloat16和float32的算子降低精度到hifloat8从而在精度损失很小的情况下提升系统性能并减少内存使用。若配置了该种模式则可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json内置优化策略文件中查看“precision_reduce”参数的取值若取值为true白名单则表示允许将当前float16、bfloat16和float32类型的算子降低精度到hifloat8。若取值为false黑名单则不允许将当前float16、bfloat16和float32类型的算子降低精度到hifloat8相应算子仍旧使用float16、bfloat16或float32精度。若原图中算子没有配置该参数灰名单当前算子的混合精度处理机制和前一个算子保持一致即如果前一个算子支持降精度处理当前算子也支持降精度如果前一个算子不允许降精度当前算子也不支持降精度。cube_hif8表示若原图中的cube算子既支持hifloat8又支持float16、bfloat16或float32数据类型时强制选择hifloat8数据类型。上述路径中的${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例安装后文件默认存储路径为/usr/local/Ascend/cann。_xxx_请根据实际产品进行选择。参数默认值训练场景下针对Atlas 训练系列产品该配置项无默认取值以“precision_mode”参数的默认值为准即“allow_fp32_to_fp16”。训练场景下针对Atlas A2 训练系列产品/Atlas A2 推理系列产品参数默认值为“origin”。训练场景下针对Atlas A3 训练系列产品/Atlas A3 推理系列产品参数默认值为“origin”。训练场景下针对Ascend 950PR/Ascend 950DT参数默认值为“origin”。在线推理场景下参数默认值为“fp16”。参数值约束bfloat16数据类型仅支持以下产品Atlas A2 训练系列产品/Atlas A2 推理系列产品Atlas A3 训练系列产品/Atlas A3 推理系列产品Ascend 950PR/Ascend 950DT配置示例{ge.exec.precision_mode_v2, fp16};必选/可选可选生效级别全局/session/graph【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考