文档
注册

aclgrphBuildModel支持的配置参数

表1 aclgrphBuildModel支持的配置参数

参数

说明

INPUT_FORMAT

输入数据格式。

参数取值:

支持NCHW、NHWC、ND三种格式。

配置示例:

{ge::ir_option::INPUT_FORMAT, "NHWC"}

如果同时开启AIPP,在进行推理业务时,输入图片数据要求为NHWC排布。该场景下INPUT_FORMAT参数指定的数据格式不生效。

说明:

该参数仅针对动态BatchSize、动态分辨率和动态维度场景。

上述场景下,INPUT_FORMAT必须设置并且和所有Data算子的format保持一致,否则会导致模型编译失败。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

INPUT_SHAPE

模型输入的shape信息。

参数取值

  • 静态shape。
    • 若模型为单个输入,则shape信息为"input_name:n,c,h,w";指定的节点必须放在双引号中。
    • 若模型有多个输入,则shape信息为"input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2";不同输入之间使用英文分号分隔,input_name必须是转换前的网络模型中的节点名称。
  • 若原始模型中输入数据的某个或某些维度值不固定,当前支持通过设置shape分档或设置shape范围两种方式转换模型。
    • 设置shape分档,包括设置BatchSize档位、设置分辨率档位、设置动态维度档位。

      设置INPUT_SHAPE参数时,将对应维度值设置为-1,同时配合使用DYNAMIC_BATCH_SIZE(设置BatchSize档位)或DYNAMIC_IMAGE_SIZE(设置分辨率档位)或DYNAMIC_DIMS(设置动态维度档位)参数。详细用法请参考DYNAMIC_BATCH_SIZE、DYNAMIC_IMAGE_SIZE、DYNAMIC_DIMS参数说明。

    • 设置shape范围。Atlas 200/300/500 推理产品Atlas 200/500 A2推理产品不支持设置shape范围

      设置INPUT_SHAPE参数时,可将对应维度的值设置为范围。

      • 支持按照name设置:"input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2",例如:"input_name1:8~20,3,5,-1;input_name2:5,3~9,10,-1"。指定的节点必须放在双引号中,节点中间使用英文分号分隔。input_name必须是转换前的网络模型中的节点名称。如果用户知道data节点的name,推荐按照name设置。
      • 支持按照index设置:"n1,c1,h1,w1;n2,c2,h2,w2",例如:"8~20,3,5,-1;;5,3~9,10,-1"。可以不指定节点名,节点按照索引顺序排列,节点中间使用英文分号分隔。按照index设置shape范围时,data节点需要设置属性index,说明是第几个输入,index从0开始。

      如果用户不想指定维度的的范围或具体取值,则可以将其设置为-1,表示此维度可以使用>=0的任意取值,该场景下取值上限为int64数据类型表达范围,但受限于host和device侧物理内存的大小,用户可以通过增大内存来支持。

  • shape为标量。
    • 非动态分档场景:

      shape为标量的输入,可选配置,例如模型有两个输入,input_name1为标量,即shape为"[]"形式,input_name2输入shape为[n2,c2,h2,w2],则shape信息为"input_name1:;input_name2:n2,c2,h2,w2",指定的节点必须放在双引号中,不同输入之间使用英文分号分隔,input_name必须是转换前的网络模型中的节点名称;标量的输入如果配置,则配置为空。

    • 动态分档场景:

      如果模型输入中既有标量shape,又有支持动态分档的shape,则标量输入不能忽略,必须配置。例如模型有三个输入,分别为A:[-1,c1,h1,w1]、B:[]、C:[n2,c2,h2,w2],则shape信息为"A:-1,c1,h1,w1;B:;C:n2,c2,h2,w2",标量输入B必须配置。

配置示例:

  • 静态shape,例如某网络的输入shape信息,输入1input_0_0 [16,32,208,208],输入2:input_1_0 [16,64,208,208],则INPUT_SHAPE的配置信息为:
    {ge::ir_option::INPUT_SHAPE, "input_0_0:16,32,208,208;input_1_0:16,64,208,208"}
  • 设置BatchSize档位的示例,请参见DYNAMIC_BATCH_SIZE。
  • 设置分辨率档位的示例,请参见DYNAMIC_IMAGE_SIZE。
  • 设置指定维度档位的示例,请参见DYNAMIC_DIMS。
  • 设置shape范围的示例:
    {ge::ir_option::INPUT_SHAPE, "input_0_0:1~10,32,208,208;input_1_0:16,64,100~208,100~208"}
  • shape为标量
    • 非动态分档场景

      shape为标量的输入,可选配置。例如模型有两个输入,input_name1为标量,input_name2输入shape为[16,32,208,208],配置示例为:

      {ge::ir_option::INPUT_SHAPE, "input_name1:;input_name2:16,32,208,208"}

      上述示例中的input_name1为可选配置

    • 动态分档场景

      shape为标量的输入,必须配置。例如模型有三个输入,shape信息分别为A:[-1,32,208,208]、B:[]、C:[16,64,208,208],则配置示例为(A为动态分档输入,此处以设置BatchSize档位为例):

      {ge::ir_option::INPUT_SHAPE, "A:-1,32,208,208;B:;C:16,64,208,208"}, 
      {ge::ir_option::DYNAMIC_BATCH_SIZE, "1,2,4"} 
说明:
  • INPUT_SHAPE为可选设置。如果不设置,系统直接读取对应Data节点的shape信息,如果设置,以此处设置的为准,同时刷新对应Data节点的shape信息。
  • 如果模型转换时通过该参数设置了shape的范围:

    使用应用工程进行模型推理时,需要在模型执行接口之前,调用aclmdlSetDatasetTensorDesc接口,用于设置真实的输入Tensor描述信息(输入shape范围);模型执行之后,调用aclmdlGetDatasetTensorDesc接口获取模型动态输出的Tensor描述信息;再进一步调用aclTensorDesc下的操作接口获取输出Tensor数据占用的内存大小、Tensor的Format信息、Tensor的维度信息等。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

INPUT_SHAPE_RANGE

该参数已废弃,请勿使用。若涉及指定模型输入数据的shape范围,请使用INPUT_SHAPE参数。

指定模型输入数据的shape range。该功能不能与DYNAMIC_BATCH_SIZE、DYNAMIC_IMAGE_SIZE、DYNAMIC_DIMS同时使用。

  • 支持按照name设置:"input_name1:[n1,c1,h1,w1];input_name2:[n2,c2,h2,w2]",例如:"input_name1:[8~20,3,5,-1];input_name2:[5,3~9,10,-1]"。指定的节点必须放在双引号中,节点中间使用英文分号分隔。input_name必须是转换前的网络模型中的节点名称, shape range值必须放在[]中。如果用户知道data节点的name,推荐按照name设置INPUT_SHAPE_RANGE。
  • 支持按照index设置:"[n1,c1,h1,w1],[n2,c2,h2,w2]",例如:"[8~20,3,5,-1],[5,3~9,10,-1]"。可以不指定节点名,默认第一个中括号为第一个输入节点,节点中间使用英文逗号分隔。按照index设置INPUT_SHAPE_RANGE时,data节点需要设置属性index,说明是第几个输入,index从0开始。
  • 动态维度有shape范围的用波浪号“~”表示,固定维度用固定数字表示,无限定范围的用-1表示;
  • 对于标量输入,也需要填入shape范围,表示方法为:[];
  • 对于多输入场景,例如有三个输入时,如果只有第二个第三个输入具有shape范围,第一个输入为固定输入时,仍需要将固定输入shape填入。

支持情况

Atlas 推理系列产品(Ascend 310P处理器),支持。

Atlas 训练系列产品,支持。

Atlas A2训练系列产品/Atlas 800I A2推理产品,支持。

Atlas 200/500 A2推理产品,不支持。

Atlas 200/300/500 推理产品,不支持。

OP_NAME_MAP

扩展算子(非标准算子)映射配置文件路径和文件名,不同的网络中某扩展算子的功能不同,可以指定该扩展算子到具体网络中实际运行的扩展算子的映射。

路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

配置示例

OpA:Network1OpA

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

DYNAMIC_BATCH_SIZE

设置动态batch档位参数,适用于执行推理时,每次处理图片数量不固定的场景。

该参数需要与INPUT_SHAPE配合使用,不能与DYNAMIC_IMAGE_SIZE、DYNAMIC_DIMS同时使用。

参数取值:档位数,例如"1,2,4,8"。

参数值格式:指定的参数必须放在双引号中,档位之间使用英文逗号分隔。

参数值约束:最多支持100档配置,每个档位数值限制为:[1~2048]。

配置示例:

{ge::ir_option::INPUT_SHAPE, "data:-1,3,416,416"}, 
{ge::ir_option::DYNAMIC_BATCH_SIZE, "1,2,4,8"}     

INPUT_SHAPE中的“-1”表示设置动态batch。

使用约束:

  • 如果通过该参数设置了动态batch,则使用应用工程进行模型推理时,需要在模型执行接口之前,增加aclmdlSetDynamicBatchSize接口,用于设置真实的batch档位。
  • 若用户执行推理业务时,每次处理的图片数量不固定,则可以通过配置该参数来动态分配每次处理的图片数量。例如用户执行推理业务时需要每次处理2张,4张,8张图片,则可以配置为2,4,8,申请了档位后,模型推理时会根据实际档位申请内存。
  • 如果用户设置的档位数值过大或档位过多,可能会导致模型编译失败,此时建议用户减少档位或调低档位数值。
  • 如果用户设置的档位数值过大或档位过多,在运行环境执行推理时,建议执行swapoff -a命令关闭swap交换区间作为内存的功能,防止出现由于内存不足,将swap交换空间作为内存继续调用,导致运行环境异常缓慢的情况。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

DYNAMIC_IMAGE_SIZE

设置输入图片的动态分辨率参数。适用于执行推理时,每次处理图片宽和高不固定的场景。

该参数需要与INPUT_SHAPE配合使用,不能与DYNAMIC_BATCH_SIZE、DYNAMIC_DIMS 同时使用。

参数取值: "imagesize1_height,imagesize1_width;imagesize2_height,imagesize2_width"。

参数值格式:指定的参数必须放在双引号中,每一组参数中间使用英文分号分隔。

参数值约束:最多支持100档配置,每一档通过英文分号分隔。

配置示例:

具体使用样例如下, INPUT_SHAPE中的“-1”表示设置动态分辨率。

{ge::ir_option::INPUT_SHAPE, "data:8,3,-1,-1"}, 
{ge::ir_option::DYNAMIC_IMAGE_SIZE, "416,416;832,832"}

使用约束:

  • 如果模型编译时通过该参数设置了动态分辨率,则使用应用工程进行模型推理时,需要在模型执行接口之前,增加aclmdlSetDynamicHWSize接口,用于设置真实的分辨率。
  • 如果用户设置的分辨率数值过大或档位过多,可能会导致模型编译失败,此时建议用户减少档位或调低档位数值。
  • 如果用户设置了动态分辨率,实际推理时,使用的数据集图片大小需要与具体使用的分辨率相匹配。
  • 如果用户设置的分辨率数值过大或档位过多,在运行环境执行推理时,建议执行swapoff -a命令关闭swap交换区间作为内存的功能,防止出现由于内存不足,将swap交换空间作为内存继续调用,导致运行环境异常缓慢的情况。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

DYNAMIC_DIMS

设置ND格式下动态维度的档位。适用于执行推理时,每次处理任意维度的场景。

该参数需要与INPUT_SHAPE配合使用,不能与DYNAMIC_BATCH_SIZE、DYNAMIC_IMAGE_SIZE同时使用。

参数取值:通过"dim1,dim2,dim3;dim4,dim5,dim6;dim7,dim8,dim9"的形式设置。

参数值格式:所有档位必须放在双引号中,每档中间使用英文分号分隔,每档中的dim值与INPUT_SHAPE参数中的-1标识的参数依次对应,INPUT_SHAPE参数中有几个-1,则每档必须设置几个维度。

参数值约束:支持的档位数取值范围为:(1,100],建议配置为3~4档。

配置示例:

{ge::ir_option::INPUT_SHAPE, "data:1,-1"}, 
{ge::ir_option::DYNAMIC_DIMS, "4;8;16;64"}  
// 模型编译时,支持的data算子的shape为1,4; 1,8; 1,16;1,64
{ge::ir_option::INPUT_SHAPE, "data:1,-1,-1"}, 
{ge::ir_option::DYNAMIC_DIMS, "1,2;3,4;5,6;7,8"}  
// 模型编译时,支持的data算子的shape为1,1,2; 1,3,4; 1,5,6; 1,7,8

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

INSERT_OP_FILE

输入预处理算子的配置文件路径,例如aipp算子。

若配置了该参数,则不能对同一个输入节点同时使用INPUT_FP16_NODES参数。

配置文件路径:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.)

配置文件的内容示例如下:

aipp_op {
aipp_mode:static
input_format:YUV420SP_U8
csc_switch:true
var_reci_chn_0:0.00392157
var_reci_chn_1:0.00392157
var_reci_chn_2:0.00392157
}
说明:

配置文件详细说明,请参考ATC工具使用指南

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

PRECISION_MODE

选择算子精度模式。不能与PRECISION_MODE_V2同时使用,建议使用PRECISION_MODE_V2参数。

参数取值:

  • force_fp32/cube_fp16in_fp32out
    配置为force_fp32或cube_fp16in_fp32out,效果等同,系统内部都会根据矩阵类算子或矢量类算子,来选择不同的处理方式。cube_fp16in_fp32out为新版本中新增的,对于矩阵计算类算子,该选项语义更清晰。
    • 对于矩阵计算类算子,系统内部会按算子实现的支持情况处理:
      1. 优先选择输入数据类型为float16且输出数据类型为float32;
      2. 如果1中的场景不支持,则选择输入数据类型为float32且输出数据类型为float32;
      3. 如果2中的场景不支持,则选择输入数据类型为float16且输出数据类型为float16;
      4. 如果3中的场景不支持,则报错。
    • 对于矢量计算类算子,表示网络模型中算子支持float16和float32时,强制选择float32,若原图精度为float16,也会强制转为float32。

      如果网络模型中存在部分算子,并且该算子实现不支持float32,比如某算子仅支持float16类型,则该参数不生效,仍然使用支持的float16;如果该算子不支持float32,且又配置了黑名单(precision_reduce = false),则会使用float32的AI CPU算子;如果AI CPU算子也不支持,则执行报错。

  • force_fp16:

    表示网络模型中算子支持float16和float32时,强制选择float16。

  • allow_fp32_to_fp16:
    • 对于矩阵类算子,使用float16。
    • 对于矢量类算子,优先保持原图精度,如果网络模型中算子支持float32,则保留原始精度float32,如果网络模型中算子不支持float32,则直接降低精度到float16。
  • must_keep_origin_dtype:

    保持原图精度。

    • 如果原图中某算子精度为float16,AI Core中该算子的实现不支持float16、仅支持float32和bfloat16,则系统内部会自动采用高精度float32。
    • 如果原图中某算子精度为float16,AI Core中该算子的实现不支持float16、仅支持bfloat16,则会使用float16的AI CPU算子;如果AI CPU算子也不支持,则执行报错。
    • 如果原图中某算子精度为float32,AI Core中该算子的实现不支持float32类型、仅支持float16类型,则会使用float32的AI CPU算子;如果AI CPU算子也不支持,则执行报错。

    bfloat16类型仅在以下产品型号支持

    Atlas A2训练系列产品/Atlas 800I A2推理产品

  • allow_mix_precision/allow_mix_precision_fp16

    配置为allow_mix_precision或allow_mix_precision_fp16,效果等同,均表示使用混合精度float16和float32数据类型来处理神经网络的过程。allow_mix_precision_fp16为新版本中新增的,语义更清晰,便于理解。

    针对网络模型中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精度。
    • 若网络模型中算子没有配置该参数(灰名单),当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。
  • allow_mix_precision_bf16:

    表示使用混合精度bfloat16和float32数据类型来处理神经网络的过程。针对原始模型中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到bfloat16,从而在精度损失很小的情况下提升系统性能并减少内存使用;如果算子不支持bfloat16和float32,则使用AI CPU算子进行计算;如果AI CPU算子也不支持,则执行报错。

    若配置了该种模式,则可以在OPP软件包安装路径${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/<soc_version>/aic-<soc_version>-ops-info.json内置优化策略文件中查看“precision_reduce”参数的取值:

    • 若取值为true(白名单),则表示允许将当前float32类型的算子,降低精度到bfloat16
    • 若取值为false(黑名单),则不允许将当前float32类型的算子降低精度到bfloat16,相应算子仍旧使用float32精度。
    • 若网络模型中算子没有配置该参数(灰名单),当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。

    该选项仅在以下产品型号支持:

    Atlas A2训练系列产品/Atlas 800I A2推理产品

  • allow_fp32_to_bf16:
    • 对于矩阵计算类算子,使用bfloat16。
    • 对于矢量计算类算子,优先保持原图精度,如果原始模型中算子支持float32,则保留原始精度float32;如果原始模型中算子不支持float32,则直接降低精度到bfloat16;如果算子不支持bfloat16和float32,则使用AI CPU算子进行计算;如果AI CPU算子也不支持,则执行报错。

    该选项仅在以下产品型号支持:

    Atlas A2训练系列产品/Atlas 800I A2推理产品

参数默认值:force_fp16

配置示例:

{ge::ir_option::PRECISION_MODE, "force_fp16"}

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

PRECISION_MODE_V2

设置网络模型的精度模式。不能与PRECISION_MODE同时使用,建议使用PRECISION_MODE_V2参数。

参数取值:

  • fp16

    算子支持float16和float32数据类型时,强制选择float16。

  • origin

    保持原图精度。

    • 如果原图中某算子精度为float16,AI Core中该算子的实现不支持float16、仅支持float32和bfloat16,则系统内部会自动采用高精度float32。
    • 如果原图中某算子精度为float16,AI Core中该算子的实现不支持float16、仅支持bfloat16,则会使用float16的AI CPU算子;如果AI CPU算子也不支持,则执行报错。
    • 如果原图中某算子精度为float32,AI Core中该算子的实现不支持float32类型、仅支持float16类型,则会使用float32的AI CPU算子;如果AI CPU算子也不支持,则执行报错。

    bfloat16类型仅在以下产品型号支持

    Atlas A2训练系列产品/Atlas 800I A2推理产品

  • cube_fp16in_fp32out
    算子既支持float32又支持float16数据类型时,系统内部根据算子类型不同,选择不同的处理方式。
    • 对于矩阵计算类算子,系统内部会按算子实现的支持情况处理:
      1. 优先选择输入数据类型为float16且输出数据类型为float32;
      2. 如果1中的场景不支持,则选择输入数据类型为float32且输出数据类型为float32;
      3. 如果2中的场景不支持,则选择输入数据类型为float16且输出数据类型为float16;
      4. 如果3中的场景不支持,则报错。
    • 对于矢量计算类算子,表示网络模型中算子支持float16和float32时,强制选择float32,若原图精度为float16,也会强制转为float32。

      如果网络模型中存在部分算子,并且该算子实现不支持float32,比如某算子仅支持float16类型,则该参数不生效,仍然使用支持的float16;如果该算子不支持float32,且又配置了黑名单(precision_reduce = false),则会使用float32的AI CPU算子;如果AI CPU算子也不支持,则执行报错。

  • 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精度。
    • 若网络模型中算子没有配置该参数(灰名单),当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。
  • mixed_bfloat16

    表示使用混合精度bfloat16和float32数据类型来处理神经网络。针对网络模型中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到bfloat16,从而在精度损失很小的情况下提升系统性能并减少内存使用;如果算子不支持bfloat16和float32,则使用AI CPU算子进行计算;如果AI CPU算子也不支持,则执行报错。

    若配置了该种模式,则可以在OPP软件包安装路径${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/<soc_version>/aic-<soc_version>-ops-info.json内置优化策略文件中查看“precision_reduce”参数的取值:

    • 若取值为true(白名单),则表示允许将当前float32类型的算子,降低精度到bfloat16
    • 若取值为false(黑名单),则不允许将当前float32类型的算子降低精度到bfloat16,相应算子仍旧使用float32精度。
    • 若网络模型中算子没有配置该参数(灰名单),当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。

    该选项仅在以下产品型号支持:

    Atlas A2训练系列产品/Atlas 800I A2推理产品

参数默认值:fp16

配置示例:

{ge::ir_option::PRECISION_MODE_V2, "fp16"}

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

ALLOW_HF32

该参数预留,当前版本暂不支持

是否启用HF32自动代替float32数据类型的功能,当前版本该参数仅针对Conv类算子与Matmul类算子生效。

HF32是华为昇腾推出的专门用于算子内部计算的单精度浮点类型,与其他常用数据类型的比较如下图所示。可见,HF32与float32支持相同的数值范围,但尾数位精度(11位)却接近FP16(10位)。通过降低精度让HF32单精度数据类型代替原有的float32单精度数据类型,可大大降低数据所占空间大小,实现性能的提升。

参数取值:

  • true:针对Conv类算子与Matmul类算子,使能FP32数据类型自动转换为HF32数据类型的功能。

    具体哪些算子使能了该功能,请参见CANN软件安装后文件存储路径的opp/built-in/op_impl/ai_core/tbe/impl_mode/allow_hf32_matmul_t_conv_t.ini,该文件不支持用户修改。

  • false:针对Conv类算子与Matmul类算子,不使能FP32数据类型自动转换为HF32数据类型的功能。

    具体哪些算子未使能该功能,请参见CANN软件安装后文件存储路径的opp/built-in/op_impl/ai_core/tbe/impl_mode/allow_hf32_matmul_f_conv_f.ini,该文件不支持用户修改。

参数默认值:针对Conv类算子,使能FP32转换为HF32;针对Matmul类算子,不使能FP32转换为HF32。

使用约束:

  • 针对同一个算子,如果通过OP_PRECISION_MODE参数配置了enable_hi_float_32_execution或enable_float_32_execution,该场景下不建议再与ALLOW_HF32参数同时使用,若同时使用,则优先级如下:

    OP_PRECISION_MODE(ByNodeName,按节点名称设置精度模式) > ALLOW_HF32 > OP_PRECISION_MODE(ByOpType,按算子类型设置精度模式)。

  • 由于ALLOW_HF32是使用HF32自动代替float32,要想该参数生效,必须保证被使能的算子输入或者输出类型为float32。 由于PRECISION_MODE_V2参数默认值为fp16,原始网络模型中算子类型为float32时会被强制转为float16类型,该场景下使用ALLOW_HF32参数不生效,建议修改PRECISION_MODE_V2参数值为origin(PRECISION_MODE参数默认值为force_fp16,建议修改为must_keep_origin_dtype或者force_fp32)。

支持情况

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

Atlas 200/300/500 推理产品:不支持

Atlas 推理系列产品(Ascend 310P处理器):不支持

Atlas 训练系列产品:不支持

Atlas 200/500 A2推理产品:不支持

EXEC_DISABLE_REUSED_MEMORY

内存复用开关。

参数取值:

  • 1:关闭内存复用。如果网络模型较大,关闭内存复用开关,模型转换时可能会造成内存不足,导致模型编译失败。
  • 0:开启内存复用。默认为0。

配置示例:

{ge::ir_option::EXEC_DISABLE_REUSED_MEMORY, "0"}

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

OUTPUT_TYPE

网络输出数据类型。

参数取值:

  • FP32:推荐分类网络、检测网络使用。
  • UINT8:图像超分辨率网络,推荐使用,推理性能更好。
  • FP16:推荐分类网络、检测网络使用。通常用于一个网络输出作为另一个网络输入场景。
  • INT8

模型编译后,在对应的*.om模型文件中,数据类型以DT_FLOAT或DT_UINT8或DT_FLOAT16或DT_INT8值呈现。

配置示例:

{ge::ir_option::OUTPUT_TYPE, "PF32"}

参数值约束:

  • 若不指定具体数据类型,则以原始网络模型最后一层输出的算子数据类型为准。
  • 若指定了类型,则以该参数指定的类型为准。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

INPUT_FP16_NODES

指定输入数据类型为FP16的输入节点名称。该参数必填。

例如:"node_name1;node_name2",指定的节点必须放在双引号中,节点中间使用英文分号分隔。若配置了该参数,则不能对同一个输入节点同时使用INSERT_OP_FILE参数。

配置示例:

{ge::ir_option::INPUT_FP16_NODES, "node_name1;node_name2"}

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

LOG_LEVEL

设置显示日志的级别。

参数取值:

  • debug:输出debug/info/warning/error级别的调试日志信息。
  • info:输出info/warning/error级别的调试日志信息。
  • warning:输出warning/error级别的调试日志信息。
  • error:输出/error级别的调试日志信息。
  • null:不输出调试日志。默认为null。

配置示例:

{ge::ir_option::LOG_LEVEL, "debug"}

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

OP_COMPILER_CACHE_MODE

用于配置算子编译磁盘缓存模式。

参数取值:
  • enable:表示启用算子编译缓存。启用后可以避免针对相同编译参数及算子参数的算子重复编译,从而提升编译速度。
  • force:启用算子编译缓存功能,区别于enable模式,force模式下会强制刷新缓存,即先删除已有缓存,再重新编译并加入缓存。比如当用户的python变更、依赖库变更、算子调优后知识库变更等,需要先指定为force用于先清理已有的缓存,后续再修改为enable模式,以避免每次编译时都强制刷新缓存。
  • disable:表示禁用算子编译缓存。

参数默认值:enable

配置示例:

{ge::ir_option::OP_COMPILER_CACHE_MODE, "enable"}

使用约束:

  • 如果要自行指定算子编译磁盘缓存的路径,则需要与OP_COMPILER_CACHE_DIR配合使用。
  • 启用算子编译缓存功能时,可以通过如下两种方式来设置缓存文件夹的磁盘空间大小:
    • 通过配置文件op_cache.ini设置

      算子编译完成后,会在OP_COMPILER_CACHE_DIR参数指定路径下自动生成op_cache.ini文件,用户可以通过该配置文件进行缓存磁盘空间大小的配置;若op_cache.ini文件不存在,则需要手动创建。打开该文件,增加如下信息:

      #配置文件格式,必须包含,自动生成的文件中默认包括如下信息,手动创建时,需要输入
      [op_compiler_cache]
      #限制某个芯片下缓存文件夹的磁盘空间的大小,单位为MB
      max_op_cache_size=500
      #设置需要保留缓存的空间大小比例,取值范围:[1,100],单位为百分比;例如80表示缓存空间不足时,删除缓存,保留80%
      remain_cache_size_ratio=80    
      • 上述文件中的max_op_cache_size和remain_cache_size_ratio参数取值都有效时,op_cache.ini文件才会生效。
      • 当编译缓存文件大小超过“max_op_cache_size”的设置值,且超过半小时缓存文件未被访问时,缓存文件就会老化(算子编译时,不会因为编译缓存文件大小超过设置值而中断,所以当“max_op_cache_size”设置过小时,会出现实际编译缓存文件大小超过此设置值的情况)。
      • 若需要关闭编译缓存老化功能,可将“max_op_cache_size”设置为“-1”,此时访问算子缓存时不会更新访问时间,算子编译缓存不会老化,磁盘空间使用默认大小500M。
      • 若多个使用者使用相同的用户登录ATC工具所在服务器,缓存路径相同,建议使用配置文件的方式进行设置,该场景下op_cache.ini文件会影响所有使用者。
    • 通过环境变量设置

      该场景下,通过环境变量ASCEND_MAX_OP_CACHE_SIZE来限制某个芯片下缓存文件夹的磁盘空间的大小,当编译缓存空间大小达到ASCEND_MAX_OP_CACHE_SIZE设置的取值,且超过半个小时缓存文件未被访问时,缓存文件就会老化。通过环境变量ASCEND_REMAIN_CACHE_SIZE_RATIO设置需要保留缓存的空间大小比例。配置示例如下,

      # ASCEND_MAX_OP_CACHE_SIZE环境变量默认值为500,单位为MB
      export ASCEND_MAX_OP_CACHE_SIZE=500
      # ASCEND_REMAIN_CACHE_SIZE_RATIO环境变量取值范围:[1,100],默认值为50,单位为百分比;例如80表示缓存空间不足时,删除缓存,保留80%
      export ASCEND_REMAIN_CACHE_SIZE_RATIO=50
      • 通过环境变量配置,只对当前用户生效。
      • 若需要关闭编译缓存老化功能,可将环境环境变量“ASCEND_MAX_OP_CACHE_SIZE”设置为“-1”,此时访问算子缓存时不会更新访问时间,算子编译缓存不会老化,磁盘空间使用默认大小500M。

    若同时配置了op_cache.ini文件和环境变量,则优先读取op_cache.ini文件中的配置项,若op_cache.ini文件和环境变量都未设置,则读取系统默认值:默认磁盘空间大小500M,默认保留缓存的空间50%。

  • 由于force选项会先删除已有缓存,所以不建议在程序并行编译时设置,否则可能会导致其他模型因使用的缓存内容被清除而编译失败。
  • 建议模型最终发布时设置编译缓存选项为disable或者force。
  • 如果算子调优后知识库变更,则需要通过设置为force来刷新缓存,否则无法应用新的调优知识库,从而导致调优应用执行失败。
  • 调试开关打开的场景下,即OP_DEBUG_LEVEL非0值或者OP_DEBUG_CONFIG配置非空时,会忽略算子编译磁盘缓存模式的配置,不启用算子编译缓存。主要基于以下两点考虑:
    • 启用算子编译缓存功能(enable或force模式)后,相同编译参数的算子无需重复编译,编译过程日志无法完整记录。
    • 受限于缓存空间大小,对调试场景的编译结果不做缓存。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

OP_COMPILER_CACHE_DIR

用于配置算子编译磁盘缓存的目录。

参数值格式:路径支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

默认值:$HOME/atc_data

配置示例:

{ge::ir_option::OP_COMPILER_CACHE_MODE, "enable"}
{ge::ir_option::OP_COMPILER_CACHE_DIR, "/home/test/data/atc_data"}

使用约束:

  • 如果要自行指定算子编译磁盘缓存的路径,则需要与OP_COMPILER_CACHE_MODE配合使用。
  • 如果参数指定的路径存在且有效,则在指定的路径下自动创建子目录kernel_cache;如果指定的路径不存在但路径有效,则先自动创建目录,然后在该路径下自动创建子目录kernel_cache。
  • 用户请不要在默认缓存目录下存放其他自有内容,自有内容在软件包安装或升级时会同默认缓存目录一并被删除。
  • 通过该参数指定的非默认缓存目录无法删除(软件包安装或升级时不会被删除)。
  • 算子编译磁盘缓存路径,除OP_COMPILER_CACHE_DIR参数设置的方式外,还可以配置环境变量ASCEND_CACHE_PATH,几种方式优先级为:配置参数“OP_COMPILER_CACHE_DIR”>环境变量ASCEND_CACHE_PATH>默认存储路径。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

DEBUG_DIR

用于配置保存算子编译生成的调试相关的过程文件的路径,过程文件包括但不限于算子.o(算子二进制文件)、.json(算子描述文件)、.cce等文件。

默认生成在当前路径下。

使用约束:

  • 如果要自行指定算子编译的过程文件存放路径,需DEBUG_DIR参数与OP_DEBUG_LEVEL参数配合使用,且当OP_DEBUG_LEVEL取值为0时,不能使用DEBUG_DIR参数。
  • 算子编译生成的调试文件存储路径,除DEBUG_DIR参数设置的方式外,还可以配置环境变量ASCEND_WORK_PATH,几种方式优先级为:配置参数“DEBUG_DIR”>环境变量ASCEND_WORK_PATH >默认存储路径。

配置示例:

{ge::ir_option::OP_DEBUG_LEVEL, "1"}
{ge::ir_option::DEBUG_DIR, "/home/test/module/out_debug_info"}

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

OP_DEBUG_LEVEL

算子debug功能开关,取值:

  • 0:不开启算子debug功能,在当前执行路径不生成算子编译目录kernel_meta。默认为0。
  • 1:开启算子debug功能,在当前执行路径生成kernel_meta文件夹,并在该文件夹下生成.o(算子二进制文件)、.json文件(算子描述文件)以及TBE指令映射文件(算子cce文件*.cce和python-cce映射文件*_loc.json),用于后续分析AICore Error问题。
  • 2:开启算子debug功能,在当前执行路径生成kernel_meta文件夹,并在该文件夹下生成.o(算子二进制文件)、.json文件(算子描述文件)以及TBE指令映射文件(算子cce文件*.cce和python-cce映射文件*_loc.json),用于后续分析AICore Error问题,同时设置为2,还会关闭编译优化开关、开启ccec调试功能(ccec编译器选项设置为-O0-g)。
  • 3:不开启算子debug功能,在当前执行路径生成kernel_meta文件夹,并在该文件夹中生成.o(算子二进制文件)和.json文件(算子描述文件),分析算子问题时可参考。
  • 4:不开启算子debug功能,在当前执行路径生成kernel_meta文件夹,并在该文件夹下生成.o(算子二进制文件)和.json文件(算子描述文件)以及TBE指令映射文件(算子cce文件*.cce)和UB融合计算描述文件({$kernel_name}_compute.json),可在分析算子问题时进行问题复现、精度比对时使用。
须知:
  • 若OP_DEBUG_LEVEL配置为0,同时又配置了OP_DEBUG_CONFIG参数,该场景下在当前执行路径仍旧会生成算子编译目录kernel_meta。
  • 训练执行时,建议配置为0或3。如果需要进行问题定位,再选择调试开关选项1和2,是因为加入了调试功能会导致网络性能下降。
  • 配置为2,即开启ccec编译选项的场景下,会增大算子Kernel(*.o文件)的大小。动态shape场景下,由于算子编译时会遍历可能存在的所有场景,最终可能会导致由于算子Kernel文件过大而无法进行编译的情况,此种场景下,建议不要配置为2。

    由于算子kernel文件过大而无法编译的日志显示如下:

    message:link error ld.lld: error: InputSection too large for range extension thunk ./kernel_meta_xxxxx.o:(xxxx)

配置示例:

{ge::ir_option::OP_DEBUG_LEVEL, "1"}

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

MDL_BANK_PATH

加载子图调优后自定义知识库的路径。

该参数需要与aclgrphBuildInitialize支持的配置参数中的BUFFER_OPTIMIZE参数配合使用,仅在数据缓存优化开关打开的情况下生效,通过利用高速缓存暂存数据的方式,达到提升性能的目的。

参数值:模型调优后自定义知识库路径。

参数值格式:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)。

参数默认值:$HOME/Ascend/latest/data/aoe/custom/graph/<soc_version>

配置示例:

{ge::ir_option::MDL_BANK_PATH, "$HOME/custom_module_path"}

使用约束:

加载子图调优后自定义知识库路径优先级:MDL_BANK_PATH参数加载路径>TUNE_BANK_PATH环境变量设置路径>默认子图调优后自定义知识库路径。

  1. 如果模型编译前,通过TUNE_BANK_PATH环境变量指定了子图调优自定义知识库路径,模型编译时又通过MDL_BANK_PATH参数加载了自定义知识库路径,该场景下以MDL_BANK_PATH参数加载的路径为准,TUNE_BANK_PATH环境变量设置的路径不生效。
  2. MDL_BANK_PATH参数和环境变量指定路径都不生效或无可用自定义知识库,则使用默认自定义知识库路径。
  3. 如果上述路径下都无可用的自定义知识库,则会查找子图调优内置知识库,该路径为:${INSTALL_DIR}/compiler/data/fusion_strategy/built-in

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

OP_BANK_PATH

算子调优后自定义知识库路径。

参数值格式:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)。

参数默认值:${HOME}/Ascend/latest/data/aoe/custom/op

配置示例:

{ge::ir_option::OP_BANK_PATH, "$HOME/custom_tune_path"}

使用约束:

加载算子调优后自定义知识库路径优先级:TUNE_BANK_PATH环境变量设置路径>OP_BANK_PATH参数加载路径>默认算子调优后自定义知识库路径。

  1. 如果模型转换前,通过TUNE_BANK_PATH环境变量指定了算子调优自定义知识库路径,模型编译时又通过OP_BANK_PATH参数加载了自定义知识库路径,该场景下以TUNE_BANK_PATH环境变量设置的路径为准,OP_BANK_PATH参数加载的路径不生效。
  2. OP_BANK_PATH参数和环境变量指定路径都不生效前提下,使用默认自定义知识库路径。
  3. 如果上述路径下都无可用的自定义知识库,则会查找算子调优内置知识库。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

MODIFY_MIXLIST

配置混合精度黑白灰名单,配置为路径以及文件名,文件为json格式。

  • 白名单:表示混合精度模式下,允许将当前float32类型的算子,降低精度到float16。
  • 黑名单:表示混合精度模式下,不允许将当前float32类型的算子降低精度到float16,相应算子仍旧使用float32精度。
  • 灰名单:表示混合精度模式下,当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。

allow_mix_precision混合精度模式下,针对全网中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。用户可以在内置优化策略基础上进行调整,自行指定哪些算子允许降精度,哪些算子不允许降精度。

配置示例:
{ge::ir_option::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"
     ]
  }
}

上述配置文件样例中展示的算子仅作为参考,请基于实际硬件环境和具体的算子内置优化策略进行配置。混合精度场景下算子的内置优化策略可在“OPP安装目录/opp/built-in/op_impl/ai_core/tbe/config/soc_version/aic-soc_version-ops-info.json”文件中查询,例如:

"Conv2D":{
    "precision_reduce":{
        "flag":"true"
},

true:白名单。false:黑名单。不配置:灰名单。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

OP_PRECISION_MODE

设置指定算子内部处理时的精度模式,支持指定一个算子或多个算子。通过该参数传入自定义的精度模式配置文件op_precision.ini,可以为不同的算子设置不同的精度模式。

配置文件中支持设置如下精度模式:

  • high_precision:表示高精度。
  • high_performance:表示高性能。
  • enable_float_32_execution:算子内部处理时使用FP32数据类型功能,该场景下FP32数据类型不会自动转换为HF32数据类型;若使用HF32计算,精度损失超过预期时,可启用该配置,指定部分算子内部计算时使用FP32,保持精度。

    该选项仅在以下产品型号支持:

    Atlas A2训练系列产品/Atlas 800I A2推理产品

  • enable_hi_float_32_execution:算子内部处理时使用HF32数据类型功能,使能后,FP32数据类型自动转换为HF32数据类型;该配置可以降低数据所占空间大小,实现性能提升。当前版本暂不支持。
  • support_out_of_bound_index:表示对gather、scatter和segment类算子的indices输入进行越界校验, 校验会降低算子的执行性能。

具体某个算子支持配置的精度/性能模式取值,可以通过CANN软件安装后文件存储路径的opp/built-in/op_impl/ai_core/tbe/impl_mode/all_ops_impl_mode.ini文件查看。

样例如下:ini文件中按照算子类型、节点名称设置精度模式,每一行设置一个算子类型或节点名称的精度模式,按节点名称设置精度模式的优先级高于按算子类型

[ByOpType]
optype1=high_precision
optype2=high_performance
optype3=enable_hi_float_32_execution
optype4=support_out_of_bound_index

[ByNodeName]
nodename1=high_precision
nodename2=high_performance
nodename3=enable_hi_float_32_execution
nodename4=support_out_of_bound_index

使用约束:

  • 该参数不能与OP_SELECT_IMPL_MODE、OPTYPELIST_FOR_IMPLMODE参数同时使用,若三个参数同时配置,则只有OP_PRECISION_MODE参数指定的模式生效。
  • 针对同一个算子,如果通过OP_PRECISION_MODE数配置了enable_hi_float_32_execution或enable_float_32_execution,该场景下不建议再与ALLOW_HF32参数同时使用,若同时使用,则优先级如下:

    op_precison_mode(ByNodeName,按节点名称设置精度模式) > allow_hf32 > op_precison_mode(ByOpType,按算子类型设置精度模式)

  • 该参数不建议配置,若使用高性能或者高精度模式,网络性能或者精度不是最优,则可以使用该参数,通过配置ini文件调整某个具体算子的精度模式。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

SHAPE_GENERALIZED_BUILD_MODE

图编译时Shape的编译方式。该参数在后续版本废弃、新开发功能请不要使用该参数。

  • shape_generalized:模糊编译,是指对于支持动态Shape的算子,在编译时系统内部对可变维度做了泛化后再进行编译。

    该参数使用场景为:用户想编译一次达到多次执行推理的目的时,可以使用模糊编译特性。

  • shape_precise:精确编译,是指按照用户指定的维度信息、在编译时系统内部不做任何转义直接编译。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

CUSTOMIZE_DTYPES

通过该参数自定义模型编译时算子的计算精度,模型中其他算子以PRECISION_MODE指定的精度模式进行编译。该参数需要配置为配置文件路径及文件名,例如:/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
说明:
  • 算子具体支持的计算精度可以从算子信息库中查看,默认存储路径为CANN软件安装后文件存储路径的:opp/op_impl/custom/ai_core/tbe/config/${soc_version}/aic-${soc_version}-ops-info.json。
  • 通过该参数指定的优先级高,因此可能会导致精度/性能的下降,如果指定的dtype不支持,会导致编译失败。

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

BUILD_INNER_ MODEL

当前版本暂不支持。

OP_DEBUG_CONFIG

Global Memory内存检测功能开关。

取值为.cfg配置文件路径,配置文件内多个选项用英文逗号分隔:
  • oom:算子执行过程中,检测Global Memory是否内存越界。
    • 配置该选项,算子编译时,在当前执行路径算子编译生成的kernel_meta文件夹中保留.o(算子二进制文件)和.json文件(算子描述文件)。
    • 使用该选项后,在算子编译过程中会加入如下的检测逻辑,用户可以通过再使用dump_cce参数,在生成的.cce文件中查看如下的代码。
      inline __aicore__ void  CheckInvalidAccessOfDDR(xxx) {
          if (access_offset < 0 || access_offset + access_extent > ddr_size) {
              if (read_or_write == 1) {
                  trap(0X5A5A0001);
              } else {
                  trap(0X5A5A0002);
              }
          }
      }

      实际执行过程中,如果确实内存越界,会抛出“EZ9999”错误码。

  • dump_bin:算子编译时,在当前执行路径算子编译生成的kernel_meta文件夹中保留.o(算子二进制文件)和.json文件(算子描述文件)。
  • dump_cce:算子编译时,在当前执行路径算子编译生成的kernel_meta文件夹中保留算子cce文件*.cce,以及.o(算子二进制文件)和.json文件(算子描述文件)。
  • dump_loc:算子编译时,在当前执行路径算子编译生成的kernel_meta文件夹中保留python-cce映射文件*_loc.json。
  • ccec_O0:算子编译时,开启ccec编译器选项-O0,配置该选项不会对调试信息执行优化操作,用于后续分析AI Core Error问题。
  • ccec_g:算子编译时,开启ccec编译器选项-g,配置该选项对调试信息执行优化操作,用于后续分析AI Core Error问题。
  • check_flag:算子执行时,检测算子内部流水线同步信号是否匹配。
    • 配置该选项,算子编译时,在当前执行路径算子编译生成的kernel_meta文件夹中保留.o(算子二进制文件)和.json文件(算子描述文件)。
    • 使用该选项后,在算子编译过程中会加入如下的检测逻辑,用户可以通过再使用dump_cce参数,在生成的.cce文件中查看如下的代码。
        set_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID0);
        set_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID1);
        set_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID2);
        set_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID3);
        ....
        pipe_barrier(PIPE_MTE3);
        pipe_barrier(PIPE_MTE2);
        pipe_barrier(PIPE_M);
        pipe_barrier(PIPE_V);
        pipe_barrier(PIPE_MTE1);
        pipe_barrier(PIPE_ALL);
        wait_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID0);
        wait_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID1);
        wait_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID2);
        wait_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID3);
        ...

      实际执行推理过程中,如果确实存在算子内部流水线同步信号不匹配,则最终会在有问题的算子处超时报错,并终止程序,报错信息示例为:

      Aicore kernel execute failed, ..., fault kernel_name=算子名,...
      rtStreamSynchronizeWithTimeout execute failed....

配置示例:/root/test0.cfg,其中,test0.cfg文件信息为:

op_debug_config = ccec_g,oom
说明:
  • 开启ccec编译选项的场景下(即ccec_O0、ccec_g选项),会增大算子Kernel(*.o文件)的大小。动态shape场景下,由于算子编译时会遍历可能存在的所有场景,最终可能会导致由于算子Kernel文件过大而无法进行编译的情况,此种场景下,建议不要开启ccec编译选项。

    由于算子kernel文件过大而无法编译的日志显示如下:

    message:link error ld.lld: error: InputSection too large for range extension thunk ./kernel_meta_xxxxx.o:(xxxx)

  • ccec编译器选项ccec_O0和oom不能同时开启,可能会导致AICore Error报错,报错信息示例如下:
    ...there is an aivec error exception, core id is 49, error code = 0x4 ...

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

EXTERNAL_WEIGHT

生成om模型文件时,是否将原始网络中的Const/Constant节点的权重外置,同时将节点类型转换为FileConstant类型。

若网络中的weight占用内存较大,且模型加载环境内存受限时,建议通过此配置项将网络中Const/Constant节点的权重外置,防止由于内存不足导致模型编译出错。

参数取值:

  • 0:权重不外置,直接保存在om模型文件中。默认为0。
  • 1:权重外置,将网络中所有的Const/Constant节点的权重文件落盘,权重文件以weight_+hash值命名。

权重文件落盘路径:权重文件保存在与om文件同层级的weight目录下。

配置示例

{ge::ir_option::EXTERNAL_WEIGHT, "1"}

使用约束:

  • 当网络中weight占用内存较大且对模型大小有限制时,建议将此配置项设置为“1”。
  • 权重外置场景,在使用AscendCL接口开发推理应用、加载模型时:

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

EXCLUDE_ENGINES

设置网络模型不使用某个或某些加速引擎。多个以“|”分隔。

NPU集成了多种硬件加速器(也叫加速引擎),比如AiCore/AiVec/AiCpu(按照优先级排列)等,在图编译阶段会按照优先级为算子选择合适的引擎,即当同一个算子被多种引擎支持时,会选择优先级高的那个。

EXCLUDE_ENGINES提供了排除某个引擎的功能,比如在一次训练过程中,为避免数据预处理图和主训练图抢占AiCore,可以给数据预处理图配置不使用AiCore引擎。

参数取值:

“AiCore”:AI Core硬件加速引擎

“AiVec”:Vector Core硬件加速引擎

“AiCpu”:AI CPU硬件加速引擎

配置示例

{ge::ir_option::EXCLUDE_ENGINES, "AiCore|AiVec"}

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

DISTRIBUTED_CLUSTER_BUILD

大模型分布式编译切分开关,使能该参数后,生成的离线模型将用于分布式部署。“1”表示使能,空或其他值表示未使能。

配置示例:

{ge::ir_option::DISTRIBUTED_CLUSTER_BUILD, "1"}

支持情况

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

Atlas 200/300/500 推理产品:不支持

Atlas 200/500 A2推理产品:不支持

ENABLE_GRAPH_PARALLEL

是否对原始模型进行自动切分。“1”表示开启自动切分,空或其他值表示不开启。

DISTRIBUTED_CLUSTER_BUILD参数开启分布式编译后,才支持开启自动切分功能,原始模型会按照GRAPH_PARALLEL_OPTION_PATH文件中的要求进行自动切分。

配置示例:

{ge::ir_option::ENABLE_GRAPH_PARALLEL, "1"}

支持情况

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

Atlas 200/300/500 推理产品:不支持

Atlas 200/500 A2推理产品:不支持

GRAPH_PARALLEL_OPTION_PATH

对原始大模型进行切分时,算法切分策略配置文件所在路径。

DISTRIBUTED_CLUSTER_BUILD参数开启分布式编译,且ENABLE_GRAPH_PARALLEL参数开启切分功能后,才支持配置切分策略配置文件路径。

配置示例:

{ge::ir_option::GRAPH_PARALLEL_OPTION_PATH, "./parallel_option.json"}

配置文件必须为json格式,示例如下:

  • 半自动切分
    {
        "graph_parallel_option": {
            "auto": false,
            "opt_level": "O1"
            "tensor_parallel_option": {
                "tensor_parallel_size": 2
            },
            "tensor_sharding":{
              "optimizer_state_sharding": true, 
              "gradient_sharding":true, 
              "model_weight_sharding": true,
              "model_weight_prefetch": true,
              "model_weight_prefetch_buffer_size": 50
    		}
        }
    }
  • 全自动切分
    {
        "graph_parallel_option": {
            "auto": true
        }
    }

参数解释如下:

  • auto:配置为true表示全自动切分,配置为false表示半自动切分。
  • opt_level:指Tensor Parallel求解算法,支持配置为O2和O1,O2使用的是ILP算法,O1使用的是DP算法,若不配置,默认使用O2。
  • tensor_parallel_option:配置该option表示使能TP切分。

    TP切分:Tensor Parallel也称为算子内并行(Intra-Op Parallel),将计算图中各个Operators的Tensor沿一个或多个轴(batch/Non-batch)进行切分,切分后的partition分发给各个Device分别计算。

  • tensor_parallel_size:表示TP切分的份数,即需要配置的device芯片数量。该参数取值必须和aclgrphBuildInitialize支持的配置参数>CLUSTER_CONFIG参数拓扑文件中具体使用的device芯片数量相等。
  • optimizer_state_sharding:是否开启优化器切片,true表示开启;false表示不开启。
  • gradient_sharding:是否开启梯度切片,true表示开启;false表示不开启。
  • model_weight_sharding:是否开启权重切片,true表示开启;false表示不开启。
  • model_weight_prefetch:是否开启权重预取,true表示开启;false表示不开启。
  • model_weight_prefetch_buffer_size:配置权重预取的缓存大小。

支持情况

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

Atlas 200/300/500 推理产品:不支持

Atlas 200/500 A2推理产品:不支持

MODEL_RELATION_CONFIG

表达多个切片模型间的数据关联和分布式通信组关系的配置文件及路径。该参数适用于原始模型为切片模型,且切片模型内含通信算子的场景。

该参数在开启分布式编译参数DISTRIBUTED_CLUSTER_BUILD后才生效。

配置示例:

{ge::ir_option::MODEL_RELATION_CONFIG, "./model_relation.json"}

配置文件必须为json格式,示例如下:

{
  "deploy_config" :[                    //必选,部署模型与目标部署节点的映射关系
    {
      "submodel_name":"submodel1.air",  // 前端切分后的文件名称,要和前端切分后的Graph name名称保持一致
      "deploy_device_id_list":"0:0:0"   // 该模型要部署的目标设备cluster:0 node:0 item:0
    },
    {
      "submodel_name":"submodel2.air",
      "deploy_device_id_list":"0:0:1"
    }
  ],
  "model_name_to_instance_id":[          // 必选
    {
      "submodel_name":"submodel1.air",   // 模型对应的id,文件中由用户指定,不同文件对应不同id值即可
      "model_instance_id":0
    },
    {
      "submodel_name":"submodel2.air",
      "model_instance_id":1
    }
  ],
  "comm_group":[{                      // 非必选,若前端切分的模型包含通信算子,此处应是切分后模型通信算子的通信域相关信息
    "group_name":"tp_group_name_0",    // 前端切分模型通信算子的子通信域
    "group_rank_list":"[0,1]"          // 前端切分模型通信算子的子rank列表
  }],
  "rank_table":[
  {
    "rank_id":0,                      // rankid与模型id的映射关系
    "model_instance_id":0
  },
  {
    "rank_id":1,
    "model_instance_id":1
  }
  ]
}

支持情况

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

Atlas 200/300/500 推理产品:不支持

Atlas 200/500 A2推理产品:不支持

AC_PARALLEL_ENABLE

动态shape图中,是否允许AI CPU算子和AI Core算子并行运行。

动态shape图中,开关开启时,系统自动识别图中可以和AI Core并发的AI CPU算子,不同引擎的算子下发到不同流上,实现多引擎间的并行,从而提升资源利用效率和动态shape执行性能。

参数取值:

  • 1:允许AI CPU和AI Core算子间的并行运行。
  • 0(默认):AI CPU算子不会单独分流。

配置示例:

{ge::ir_option::AC_PARALLEL_ENABLE, "1"}

支持情况

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

Atlas 200/300/500 推理产品:不支持

Atlas 200/500 A2推理产品:不支持

QUANT_DUMPABLE

是否采集量化算子的dump数据。

参考模型推理精度提升建议进行精度定位时,如果存在AMCT量化后的模型,该模型转成om离线模型时,图编译过程中可能优化量化算子的输入输出,从而影响量化算子dump数据的导出,例如:两个被量化的卷积计算,中间输出被优化为int8的量化后输出。

为此引入QUANT_DUMPABLE参数,使能该参数后,量化算子的输入输出不做融合,并且会插入transdata算子,还原原始模型的格式,从而能采集到量化算子的dump数据。

参数取值:

  • 0:图编译过程中可能优化量化算子的输入输出,此时无法获取量化算子的dump数据。默认为0。
  • 1:开启此配置后,可确保能够采集量化算子的dump数据。

配置示例:

{ge::ir_option::QUANT_DUMPABLE, "1"}

支持情况

Atlas 200/300/500 推理产品:支持

Atlas 推理系列产品(Ascend 310P处理器):支持

Atlas 训练系列产品:支持

Atlas 200/500 A2推理产品:支持

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持

搜索结果
找到“0”个结果

当前产品无相关内容

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