下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

options参数说明

Atlas 200/300/500 推理产品Atlas 200/500 A2推理产品不支持该特性

本章节列出GEInitialize、Session构造函数、AddGraph接口传入的配置参数,分别在全局、session、graph生效

表1中仅列出当前版本支持的配置参数,如果表中未列出,表示该参数预留或适用于其他版本的昇腾AI处理器,用户无需关注。

表1 options配置项

Options key

Options value

必选/可选

全局/session/graph级别生效

ge.graphRunMode

图执行模式,取值:

  • 0:在线推理场景下,请配置为0。默认值为0。
  • 1:训练场景下,请配置为1。

可选

全局/session

ge.exec.deviceId

GE实例运行时操作设备的逻辑ID。

  • 在线推理场景,限制有限范围为-1~N-1,默认值为-1。
  • 训练场景,限制有限范围为0~N-1,默认值为0。

N表示该台Server上的可用昇腾AI处理器个数。

可选

全局

ge.socVersion

指定编译优化模型的昇腾AI处理器版本号。

  • 在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,获取Chip Name信息。实际配置值为AscendChip Name,例如Chip Name取值为xxxyy,实际配置值为Ascendxxxyy

可选

all

ge.inputShape

指定模型输入数据的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分档,包括设置动态维度档位(最多4维)。

      设置ge.inputShape参数时,将对应维度值设置为-1,需要同时配合ge.dynamicDims(设置动态维度档位)参数、ge.dynamicNodeType(指定动态输入的节点类型)参数一起使用。

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

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

      • 支持按照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设置。

      如果用户不想指定维度的范围或具体取值,则可以将其设置为-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],则ge.inputShape的配置信息为:
    {"ge.inputShape", "input_0_0:16,32,208,208;input_1_0:16,64,208,208"}
  • 设置指定维度档位的示例,请参见ge.dynamicDims。
  • 设置shape范围的示例:
    {"ge.inputShape", "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.inputShape", "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.inputShape", "A:-1,32,208,208;B:;C:16,64,208,208"}, 
      {"ge.dynamicDims", "1,2,4"} 
说明:

上述场景下,ge.inputShape为可选设置。如果不设置,系统直接读取对应Data节点的shape信息,如果设置,以此处设置的为准,同时刷新对应Data节点的shape信息。

可选

session/graph

ge.dynamicDims

设置ND格式下动态维度的档位。适用于执行推理时,每次处理任意维度的场景。该参数需要与ge.inputShape配合使用。

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

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

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

使用示例:

  • 若模型只有一个输入:
    {"ge.inputShape", "data:1,-1,-1"}
    {"ge.dynamicDims", "1,2;3,4;5,6;7,8"}
    // graph运行时,支持的data算子的shape为1,1,2; 1,3,4; 1,5,6; 1,7,8
  • 若网络模型有多个输入:

    每档中的dim值与模型输入参数中的-1标识的参数依次对应,模型输入参数中有几个-1,则每档必须设置几个维度。例如网络模型有三个输入,分别为data(1,1,40,T),label(1,T),mask(T,T) , 其中T为动态可变。则配置示例为:

    {"ge.inputShape", "data:1,1,40,-1;label:1,-1;mask:-1,-1" }
    {"ge.dynamicDims", "20,20,1,1;40,40,2,2;80,60,4,4"}
    // graph运行时,支持的输入dims组合档数分别为:
    //第0档:data(1,1,40,20)+label(1,20)+mask(1,1)
    //第1档:data(1,1,40,40)+label(1,40)+mask(2,2)
    //第2档:data(1,1,40,80)+label(1,60)+mask(4,4)

可选

session/graph

ge.dynamicNodeType

用于指定动态输入的节点类型。

  • 0:dataset输入为动态输入。
  • 1:placeholder输入为动态输入。

当前不支持dataset和placeholder输入同时为动态输入。

可选

session/graph

ge.exec.precision_mode

算子精度模式,配置要求为string类型。不能与ge.exec.precision_mode_v2同时使用,建议使用ge.exec.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推理产品

    Atlas 200/500 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推理产品

    Atlas 200/500 A2推理产品

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

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

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

    Atlas 200/500 A2推理产品

参数默认值:

训练场景下,针对Atlas 训练系列产品,参数默认值为“allow_fp32_to_fp16”。

训练场景下,针对Atlas A2训练系列产品/Atlas 800I A2推理产品,参数默认值为“must_keep_origin_dtype”。

在线推理场景下,参数默认值为“force_fp16”。

可选

all

ge.exec.precision_mode_v2

算子精度模式,配置要求为string类型。不能与ge.exec.precision_mode同时使用,建议使用ge.exec.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推理产品

    Atlas 200/500 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推理产品

    Atlas 200/500 A2推理产品

参数默认值:

训练场景下,针对Atlas 训练系列产品,该配置项无默认取值,以“precision_mode”参数的默认值为准,即“allow_fp32_to_fp16”。

训练场景下,针对Atlas A2训练系列产品/Atlas 800I A2推理产品,参数默认值为“origin”。

在线推理场景下,参数默认值为“fp16”。

可选

all

ge.exec.modify_mixlist

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

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

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

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

上述配置文件样例中展示的算子仅作为参考,请基于实际硬件环境和具体的算子内置优化策略进行配置。混合精度场景下算子的内置优化策略可在“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:黑名单。不配置:灰名单。

可选

all

ge.exec.profilingMode

是否开启Profiling功能。

  • 1:开启Profiling功能,从ge.exec.profilingOptions读取Profiling的采集选项。
  • 0:关闭Profiling功能,默认关闭。

可选

全局

ge.exec.profilingOptions

Profiling配置选项。

  • output:Profiling采集结果文件保存路径。支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。路径中不能包含特殊字符:"\n"、"\f"、"\r"、"\b"、"\t"、"\v"、"\u007F"。
    • 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
    • 相对路径配置直接以目录名开始,例如:output。
    • 该参数优先级高于ASCEND_WORK_PATH。
    • 该路径无需用户提前创建,采集过程中会自动创建。
  • storage_limit:指定落盘目录允许存放的最大文件容量。当Profiling数据文件在磁盘中即将占满本参数设置的最大存储空间或剩余磁盘总空间即将被占满时(总空间剩余<=20MB),则将磁盘内最早的文件进行老化删除处理。

    取值范围为[200, 4294967295],单位为MB,例如--storage-limit=200MB,默认未配置本参数。

    未配置本参数时,默认取值为Profiling数据文件存放目录所在磁盘可用空间的90%。

  • training_trace:采集迭代轨迹数据开关,即训练任务及AI软件栈的软件信息,实现对训练任务的性能分析,重点关注前后向计算和梯度聚合更新等相关数据。当采集正向和反向算子数据时该参数必须配置为on。
  • task_trace、task_time:控制采集算子下发耗时和算子执行耗时的开关。涉及在task_time、op_summary、op_statistic等文件中输出相关耗时数据。配置值:
    • on:开启,默认值,和配置为l1的效果一样。
    • off:关闭。
    • l0:采集算子下发耗时、算子执行耗时数据。与l1相比,由于不采集算子基本信息数据,采集时性能开销较小,可更精准统计相关耗时数据。
    • l1:采集算子下发耗时、算子执行耗时数据以及算子基本信息数据,提供更全面的性能分析数据。

    当训练profiling mode开启即采集训练Profiling数据时,配置task_trace为on的同时training_trace也必须配置为on。

  • hccl:控制hccl数据采集开关,可选on或off,默认为off。
    说明:

    此开关后续版本会废弃,请使用task_trace、task_time开关控制相关数据采集。

  • aicpu:采集AICPU算子的详细信息,如:算子执行时间、数据拷贝时间等。取值on/off,默认为off。如果将该参数配置为“on”和“off”之外的任意值,则按配置为“off”处理。
  • fp_point:指定训练网络迭代轨迹正向算子的开始位置,用于记录前向计算开始时间戳。配置值为指定的正向第一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入;也可直接配置为空,由系统自动识别正向算子的开始位置,例如"fp_point":""。
  • bp_point:指定训练网络迭代轨迹反向算子的结束位置,记录后向计算结束时间戳,BP_POINT和FP_POINT可以计算出正反向时间。配置值为指定的反向最后一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入;也可直接配置为空,由系统自动识别反向算子的结束位置,例如"bp_point":""。
  • aic_metrics:AI Core和AI Vector Core的硬件信息,取值如下:
    • ArithmeticUtilization:各种计算类指标占比统计。
    • PipeUtilization: 计算单元和搬运单元耗时占比,该项为默认值。
    • Memory:外部内存读写类指令占比。
    • MemoryL0:内部内存读写类指令占比。
    • MemoryUB:内部内存读写指令占比。
    • ResourceConflictRatio:流水线队列类指令占比。
    • L2Cache:读写L2 Cache命中次数和缺失后重新分配次数。

    Atlas 训练系列产品:支持AI Core采集,不支持AI Vector Core,不支持L2 Cache参数。

    Atlas A2 训练系列产品:支持AI Core和AI Vector Core采集。

    说明:
    支持自定义需要采集的寄存器,例如:"aic_metrics":"Custom:0x49,0x8,0x15,0x1b,0x64,0x10"。
    • Custom字段表示自定义类型,配置为具体的寄存器值,取值范围为[0x1, 0x6E]。
    • 配置的寄存器数最多不能超过8个,寄存器通过“,”区分开。
    • 寄存器的值支持十六进制或十进制。
  • l2:控制L2 Cache采样数据的开关,可选on或off,默认为off。
  • msproftx:控制msproftx用户和上层框架程序输出性能数据的开关,可选on或off,默认值为off。
  • runtime_api:控制runtime api性能数据采集开关,可选on或off,默认为off。可采集runtime-api性能数据,包括Host与Device之间、Device间的同步异步内存复制时延等。
  • sys_hardware_mem_freq:片上内存、QoS带宽及内存信息采集频率、LLC的读写带宽数据采集频率、Acc PMU数据和SOC传输带宽信息采集频率、组件内存采集频率,取值范围为[1,100],单位hz。

    不同产品支持情况不同,请以实际实现为准。

    说明:

    已知在安装有glibc<2.34的环境上采集memory数据,可能触发glibc的一个已知Bug 19329,通过升级环境的glibc版本可解决此问题。

  • llc_profiling:LLC Profiling采集事件,可以设置为:
    • Atlas 训练系列产品,可选read(读事件,三级缓存读速率)或write(写事件,三级缓存写速率),默认为read。
    • Atlas A2 训练系列产品,可选read(读事件,三级缓存读速率)或write(写事件,三级缓存写速率),默认为read。
  • sys_io_sampling_freq:NIC、ROCE采集频率。取值范围为[1,100],单位hz。
    • Atlas 训练系列产品:支持采集NIC和ROCE。
    • Atlas A2 训练系列产品:支持采集NIC和ROCE。
  • sys_interconnection_freq:集合通信带宽数据(HCCS)、PCIe数据采集频率以及片间传输带宽信息采集频率。取值范围为[1,50],单位hz。
    • Atlas 训练系列产品:支持采集HCCS、PCIe数据。
    • Atlas A2 训练系列产品:支持采集HCCS、PCIe数据、片间传输带宽信息。
  • dvpp_freq:DVPP采集频率。取值范围为[1,100],单位hz。
  • instr_profiling_freq:AI Core和AI Vector的带宽和延时采集频率。取值范围[300,30000],单位cycle。(Atlas A2 训练系列产品
    说明:

    instr_profiling_freq与training_trace、task_trace、hccl、aicpu、fp_point、bp_point、aic_metrics、l2、task_time、runtime_api互斥,无法同时执行。

  • host_sys:Host侧性能数据采集开关。取值包括cpu和mem,可选其中的一项或多项,选多项时用英文逗号隔开,例如"host_sys": "cpu,mem"。
    • cpu:进程级别的CPU利用率。
    • mem:进程级别的内存利用率。
  • host_sys_usage:采集Host侧系统及所有进程的CPU和内存数据。取值包括cpu和mem,可选其中的一项或多项,选多项时用英文逗号隔开。
  • host_sys_usage_freq:配置Host侧系统和所有进程CPU、内存数据的采集频率。取值范围为[1,50],默认值50,单位hz。

配置示例:

std::map<ge::AscendString, ge::AscendString> ge_options = {{"ge.exec.deviceId", "0"},
                                  {"ge.graphRunMode", "1"},
                                  {"ge.exec.profilingMode", "1"},
                                  {"ge.exec.profilingOptions", R"({"output":"/tmp/profiling","training_trace":"on","fp_point":"resnet_model/conv2d/Conv2Dresnet_model/batch_normalization/FusedBatchNormV3_Reduce","bp_point":"gradients/AddN_70"})"}};

可选

全局

ge.exec.enableDump

是否开启dump功能,默认关闭。

  • 1:开启dump功能,从dump_path读取dump文件保存路径,dump_path为None时会产生异常。
  • 0:关闭dump功能。
说明:
  • 该参数与ge.exec.enableDumpDebug参数,全局场景以及同一个session内场景,不能同时设置。
  • 若“ge.exec.enableDump/ge.exec.enableDumpDebug(二选一)”参数配置为“1”,同时“ge.exec.enable_exception_dump”配置为了“1”(即开启普通ExceptionDump),此时:
    • 针对动态shape网络,仅“ge.exec.enable_exception_dump”生效。
    • 针对静态shape网络,“ge.exec.enable_exception_dump”与“ge.exec.enableDump/ge.exec.enableDumpDebug(二选一)”都生效。

可选

全局/session

ge.exec.dumpPath

Dump文件保存路径。开启dump和溢出检测功能时,该参数必须配置。

该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。

  • 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
  • 相对路径配置直接以目录名开始,例如:output。

dump文件生成在该参数指定的目录下,即{dump_path}/{time}/{deviceid}/{model_name}/{model_id}/{data_index}目录下,以{dump_path}配置/home/HwHiAiUser/output为例,例如存放在“/home/HwHiAiUser/output/20200808163566/0/ge_default_20200808163719_121/11/0”目录下。

可选

全局/session

ge.exec.dumpStep

指定采集哪些迭代的dump数据。默认值:None,表示所有迭代都会产生dump数据。

多个迭代用“|”分割,例如:0|5|10;也可以用"-"指定迭代范围,例如:0|3-5|10。

可选

全局/session

ge.exec.dumpMode

dump模式,用于指定dump算子输入还是输出数据。取值如下:

  • input:仅dump算子输入数据。
  • output:仅dump算子输出数据,默认为output。
  • all:dump算子输入和输出数据。

配置示例:

{"ge.exec.dumpMode", "input"};

使用约束:

配置为all时,由于部分算子在执行过程中会修改输入数据,例如集合通信类算子HcomAllGather、HcomAllReduce等,因此系统在进行dump时,会在算子执行前dump算子输入,在算子执行后dump算子输出,这样,针对同一个算子,算子输入、输出的dump数据是分开落盘,会出现多个dump文件,在解析dump文件后,用户可通过文件内容判断是输入还是输出。

可选

全局/session

ge.exec.dumpData

指定算子dump内容类型,取值:

  • tensor: dump算子数据,默认为tensor。
  • stats: dump算子统计数据,保存结果为csv格式。一般情况下dump算子数据量大,用户可以尝试dump算子统计数据。

可选

全局/session

ge.exec.dumpLayer

指定需要dump的算子,取值为算子名,多个算子名之间使用空格分隔。

若指定的算子其输入涉及data算子,会同时将data算子信息dump出来。

配置示例:
{"ge.exec.dumpLayer", "layer1 layer2 layer3"};

可选

全局/session

ge.exec.enableDumpDebug

是否开启溢出检测功能,默认关闭。

  • 1:开启溢出检测功能,从ge.exec.dumpPath读取Dump文件保存路径,路径配置为None时会产生异常。
  • 0:关闭溢出检测功能。
说明:
  • 该参数与ge.exec.enableDump参数,全局场景以及同一个session内场景,不能同时设置。
  • 若“ge.exec.enableDump/ge.exec.enableDumpDebug(二选一)”参数配置为“1”,同时“ge.exec.enable_exception_dump”配置为了“1”(即开启普通ExceptionDump),此时:
    • 针对动态shape网络,仅“ge.exec.enable_exception_dump”生效。
    • 针对静态shape网络,“ge.exec.enable_exception_dump”与“ge.exec.enableDump/ge.exec.enableDumpDebug(二选一)”都生效。

可选

全局/session

ge.exec.dumpDebugMode

溢出检测模式,取值如下:

  • aicore_overflow:AI Core算子溢出检测,检测在算子输入数据正常的情况下,输出是否不正常的极大值(如float16下65500,38400,51200这些值)。一旦检测出这类问题,需要根据网络实际需求和算子逻辑来分析溢出原因并修改算子实现。
  • atomic_overflow:Atomic Add溢出检测,即除了AICore之外,还有其他涉及浮点计算的模块,比如SDMA,检测这些部分出现的溢出问题。
  • all:同时进行AI Core算子溢出检测和Atomic Add溢出检测。

可选

全局/session

ge.exec.enable_exception_dump

是否dump异常算子数据。
  • 0:关闭异常算子数据dump功能。默认值为0。
  • 1:开启普通ExceptionDump,dump异常算子的输入输出数据、tensor描述信息(shape、dtype、format等)以及workspace信息。

    此模式下,dump数据默认存储在当前脚本执行路径下。

  • 2:开启LiteExecptionDump(L0 exception dump),dump异常算子的输入输出数据、workspace信息,Tiling信息。

    此模式下,dump数据默认存储在当前脚本执行路径的/extra-info/data-dump/<device_id>目录下;若配置了环境变量ASCEND_WORK_PATH,则dump数据存储在ASCEND_WORK_PATH/extra-info/data-dump/<device_id>目录下。

说明:

若配置了环境变量NPU_COLLECT_PATH,不论配置项“enable_exception_dump”的取值如何,仅收集L1 exception dump信息,包括异常算子的输入数据和输出数据,且dump数据存储在环境变量NPU_COLLECT_PATH的指定目录下。

关于环境变量的详细说明可参见环境变量参考

配置示例:
std::map<ge::AscendString, ge::AscendString> ge_options = {{"ge.exec.enable_exception_dump", "0"}, 

可选

全局

ge.exec.disableReuseMemory

内存复用开关,默认为0。

  • 1:关闭内存复用。
  • 0:开启内存复用。

可选

all

ge.graphMemoryMaxSize

该参数后续版本废弃,请勿使用。

网络静态内存和最大动态内存,可根据网络大小指定。单位:Byte,取值范围:[0, 256*1024*1024*1024]或[0, 274877906944]。当前受芯片硬件限制,graph_memory_max_size和variable_memory_max_size总和最大支持31G。如果不设置,默认为26GB。

可选

all

ge.variableMemoryMaxSize

该参数后续版本废弃,请勿使用。

变量内存,可根据网络大小指定。单位:Byte,取值范围:[0, 256*1024*1024*1024]或[0, 274877906944]。当前受芯片硬件限制,graph_memory_max_size和variable_memory_max_size总和最大支持31G。如果不设置,默认为5GB。

可选

all

ge.exec.variable_acc

是否开启变量格式优化。

  • True:开启,默认开启。
  • False:关闭。

为了提高训练效率,在网络执行的变量初始化过程中,将变量转换成更适合在昇腾AI处理器上运行的数据格式。但在用户特殊要求场景下,可以选择关闭该功能开关。

可选

all

ge.exec.rankTableFile

用于描述参与集合通信的集群信息,包括Server,Device,容器等的组织信息,填写ranktable文件路径,包含文件路径和文件名;

可选

all

ge.exec.rankId

rank id,指进程在group中对应的rank标识序号。范围:0~(rank size-1)。对于用户自定义group,rank在本group内从0开始进行重排;对于hccl world group,rank id和world rank id相同。

  • world rank id,指进程在hccl world group中对应的rank标识序号,范围:0~(rank size-1)。
  • local rank id,指group内进程在其所在Server内的rank编号,范围:0~(local rank size-1)。

可选

all

ge.opDebugLevel

算子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),可在分析算子问题时进行问题复现、精度比对时使用。
须知:
  • 若ge.opDebugLevel配置为0,同时又配置了ge.exec.opDebugConfig参数,该场景下在当前执行路径仍旧会生成算子编译目录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)

可选

all

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....

配置示例:

{"op_debug_config", "/root/test0.cfg"};

其中,test0.cfg文件信息为:

op_debug_config = ccec_g,oom

使用约束:

算子编译时,如果用户不想编译所有AI Core算子,而是指定某些AI Core算子进行编译,则需要在上述test0.cfg配置文件中新增op_debug_list字段,算子编译时,只编译该列表指定的算子,并按照op_debug_config配置的选项进行编译。op_debug_list字段要求如下:

  • 支持指定算子名称或者算子类型。
  • 算子之间使用英文逗号分隔,若为算子类型,则以OpType::typeName格式进行配置,支持算子类型和算子名称混合配置。
  • 要编译的算子,必须放在op_debug_config参数指定的配置文件中。

配置示例如下:op_debug_config参数指定的配置文件(例如test0.cfg)中增加如下信息:

op_debug_config= ccec_g,oom
op_debug_list=GatherV2,opType::ReduceSum

模型编译时,GatherV2,ReduceSum算子按照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 ...

可选

全局

ge.op_compiler_cache_mode

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

参数取值:

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

参数默认值:enable

使用约束:

  • 如果要自行指定算子编译磁盘缓存的路径,则需要与ge.op_compiler_cache_dir配合使用。
  • 由于force选项会先删除已有缓存,所以不建议在程序并行编译时设置,否则可能会导致其他模型使用的缓存内容被清除而导致失败。
  • 建议模型最终发布时设置编译缓存选项为disable或者force。
  • 如果算子调优后知识库变更,则需要先通过设置为force来清空缓存,然后再设置为enable重新进行编译,否则无法应用新的调优知识库,从而导致调优应用执行失败。
  • 调试开关打开的场景下:
    • ge.opDebugLevel非0值:会忽略ge.op_compiler_cache_mode参数的配置,调试场景的编译结果不做缓存,算子全部重新编译。
    • op_debug_config配置非空时,且未配置op_debug_list字段,会忽略ge.op_compiler_cache_mode参数的配置,不启用算子编译缓存功能,算子全部重新编译。
    • op_debug_config配置非空时,且配置文件中配置了op_debug_list字段
      • 列表中的算子,忽略ge.op_compiler_cache_mode参数的配置继续重新编译。
      • 列表外的算子,如果ge.op_compiler_cache_mode参数配置为enable或force,则启用缓存功能;若配置为disable,则不启用缓存功能,仍旧重新编译。
  • 启用算子编译缓存功能时,可以通过配置文件(算子编译完成后,会在OP_COMPILER_CACHE_DIR参数指定路径下自动生成op_cache.ini文件)、环境变量两种方式来设置缓存文件夹的磁盘空间大小:
    1. 通过配置文件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。
      • 若多个使用者使用相同的缓存路径,建议使用配置文件的方式进行设置,该场景下op_cache.ini文件会影响所有使用者。
    2. 通过环境变量设置

      该场景下,开发者可以通过环境变量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%。

可选

all

ge.op_compiler_cache_dir

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

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

默认值:$HOME/atc_data

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

可选

all

ge.debugDir

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

默认生成在当前训练脚本执行路径下。

使用约束:

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

可选

all

ge.bufferOptimize

数据缓存优化开关。

参数值

  • l1_optimize:表示开启l1优化。当前版本该参数无效,等同于off_optimize。
  • l2_optimize:表示开启l2优化。默认为l2_optimize。
  • off_optimize:表示关闭数据缓存优化。

使用建议:

建议打开数据缓存优化功能:开启数据缓存优化可提高计算效率、提升性能,但由于部分算子在实现上可能存在未考虑的场景,导致影响精度,因此在出现精度问题时可以尝试关闭数据缓存优化。如果关闭数据缓存优化功能后,精度达标,则需要识别出问题算子,反馈给技术支持进一步分析、解决算子问题;解决算子问题后,建议仍旧保持开启数据缓存优化功能。

配置示例:

{"ge.bufferOptimize", "l2_optimize"};

可选

session/graph

ge.mdl_bank_path

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

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

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

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

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

使用约束:

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

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

可选

all

ge.op_bank_path

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

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

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

使用约束:

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

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

可选

all

ge.exec.dynamicGraphExecuteMode

该参数已废弃,请勿使用。

对于动态输入场景,需要通过该参数设置执行模式,取值为:dynamic_execute。

可选

graph

ge.exec.dataInputsShapeRange

该参数已废弃,请勿使用。

动态输入的shape范围。例如全图有2个data输入,配置示例为:

std::map<ge::AscendString, ge::AscendString> ge_options = {{"ge.exec.deviceId", "0"},
      {"ge.graphRunMode", "1"},
      {"ge.exec.dynamicGraphExecuteMode", "dynamic_execute"},
      {"ge.exec.dataInputsShapeRange", "[128 ,3~5, 2~128, -1],[ 128 ,3~5, 2~128, -1]"}};
  • 设置格式为:"[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填入options字段内,例如:

    {"ge.exec.dataInputsShapeRange", "[3,3,4,10], [-1,3,2~1000,-1],[-1,-1,-1,-1]"}};

说明:
  • 若没有指定节点名,则节点默认按照index顺序存储,存储示例如下:

    xxx_0,xxx_1,xxx_2,……

    其中下划线后为节点在网络脚本中的定义顺序索引,节点会按照此索引的字母顺序进行排布,所以当节点的个数大于10时,则排序为“xxx_0 -> xxx_10 -> xxx_2 -> xxx_3”,网络脚本中定义索引为10的节点排在了索引为2的节点前面,导致定义的shape range与实际输入的节点不匹配。

    为避免此问题,当节点的输入个数大于10时,建议在网络脚本中指定节点的名称,则节点会以指定的名称进行命名,实现shape range与节点名称的关联。

  • 如果该参数与ge.dynamicDims同时配置,示例如下:
    std::map<ge::AscendString, ge::AscendString> ge_options = 
          {"ge.inputShape", "data:1,1,40,-1;label:1,-1;mask:-1,-1" },
          {"ge.dynamicDims", "20,20,1,1;40,40,2,2;80,60,4,4"},
            xxx
          {"ge.exec.dataInputsShapeRange", "[128 ,3~5, 2~128, -1],[ 128 ,3~5, 2~128, -1]"}};

    ge.dynamicDims参数功能(动态分档)优先级高于ge.exec.dataInputsShapeRange参数功能(动态shape范围)。

可选

graph

ge.exec.op_precision_mode

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

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文件查看。

样例如下:

[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

可选

全局

ge.opSelectImplmode

昇腾AI处理器部分内置算子有高精度和高性能实现方式,用户可以通过该参数配置模型编译时选择哪种算子。

高精度是指在float16输入场景,通过泰勒展开/牛顿迭代等手段进一步提升算子的精度;高性能是指在float16输入的情况下,不影响网络精度前提的最优性能实现。

参数取值:

  • high_precision:表示算子采用高精度实现模式。

    该选项采用系统内置的配置文件设置算子实现模式,内置配置文件路径为${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/impl_mode/high_precision.ini。

    为保持兼容,该参数仅对high_precision.ini文件中算子列表生效,通过该列表可以控制算子生效的范围并保证之前版本的网络模型不受影响。

  • high_performance:表示算子采用高性能实现模式。

    该选项采用系统内置的配置文件设置算子实现模式,内置配置文件路径为${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/impl_mode/high_performance.ini。

    为保持兼容,该参数仅对high_performance.ini文件中算子列表生效,通过该列表可以控制算子生效的范围并保证之前版本的网络模型不受影响。

  • high_precision_for_all:表示算子采用高精度实现模式。

    该选项采用系统内置的配置文件设置算子实现模式,内置配置文件路径为${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/impl_mode/high_precision_for_all.ini,该文件中列表后续可能会跟随版本更新。

    该实现模式不保证兼容,如果后续新的软件包中有算子新增了实现模式(即配置文件中新增了某个算子的实现模式),之前版本使用high_precision_for_all的网络模型,在新版本上性能可能会下降。

  • high_performance_for_all:表示算子采用高性能实现模式。

    该选项采用系统内置的配置文件设置算子实现模式,内置配置文件路径为${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/impl_mode/high_performance_for_all.ini,该文件中列表后续可能会跟随版本更新。

    该实现模式不保证兼容,如果后续新的软件包中有算子新增了实现模式(即配置文件中新增了某个算子的实现模式),之前版本使用high_performance_for_all的网络模型,在新版本上精度可能会下降。

上述实现模式,根据算子的dtype进行区分。${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。例如,若安装的Ascend-cann-toolkit软件包,则安装后文件存储路径为:$HOME/Ascend/ascend-toolkit/latest。

参数默认值:high_performance

可选

全局

ge.optypelistForImplmode

列举算子optype的列表,该列表中的算子使用ge.opSelectImplmode参数指定的模式。

参数值约束:

  • 列表中的算子使用ge.opSelectImplmode参数指定的模式,当前仅支持指定为high_precision、high_performance两种模式,多个算子使用英文逗号进行分隔。
  • 该参数需要与ge.opSelectImplmode参数配合使用,且仅对指定的算子生效,不指定的算子按照默认实现方式选择。例如:ge.opSelectImplmode配置为high_precision;ge.optypelistForImplmode配置为Pooling、SoftmaxV2。表示对Pooling、SoftmaxV2算子使用统一的高精度模式,未指定算子使用算子的默认实现方式。

可选

全局

ge.shape_generalized_build_mode

该参数在后续版本废弃、请勿使用。

可选

graph

ge.customizeDtypes

通过该参数自定义模型编译时算子的计算精度,模型中其他算子以ge.exec.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不支持,会导致编译失败。

可选

session

ge.exec.atomicCleanPolicy

是否集中清理网络中所有atomic算子占用的内存,

参数取值

  • 0:集中清理,默认为0。
  • 1:单独清理,对网络中每一个atomic算子进行单独清理。当网络中atomic算子内存过大时建议使用此种清理方式,对降低使用内存有明显效果,但可能会导致一定的性能损耗。

可选

session

ge.jit_compile

当前版本暂不支持。

可选

全局/session

ge.build_inner_model

当前版本暂不支持。

可选

NA

ge.externalWeight

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

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

落盘路径说明:

  • 若环境中未配置环境变量ASCEND_WORK_PATH,则权重文件落盘至当前执行目录“tmp_weight_<pid>_<sessionid>”下。
  • 若环境中配置环境变量ASCEND_WORK_PATH,则权重文件会落盘至${ASCEND_WORK_PATH}/tmp_weight_<pid>_<sessionid>目录下,

模型卸载时,会将tmp_weight_<pid>_<sessionid>目录删除。

说明:当网络中weight占用内存较大且对模型大小有限制时,建议将此配置项设置为“1”。

配置示例:

{"ge.externalWeight", "1"};

可选

session

stream_sync_timeout

图执行时,stream同步等待超时时间,超过配置时间时报同步失败。单位:ms

默认值-1,表示无等待时间,出现同步失败不报错。

可选

全局/session

event_sync_timeout

图执行时,event同步等待超时时间,超过配置时间时报同步失败。单位:ms

默认值-1,表示无等待时间,出现同步失败不报错。

可选

全局/session

ge.exec.staticMemoryPolicy

网络运行时使用的内存分配方式。

参数取值:

  • 0:动态分配内存,即按照实际大小动态分配,不支持内存扩展。默认为0。
  • 2:静态shape内存动态扩展,训练与在线推理场景下,可以通过此取值实现同一session中多张图之间的内存复用,即以最大图所需内存进行分配。例如,假设当前执行图所需内存超过前一张图的内存时,直接释放前一张图的内存,按照当前图所需内存重新分配。
  • 3:仅动态shape支持内存动态扩展,解决内存动态分配时的碎片问题,降低动态shape网络内存占用。
  • 4:静态shape和动态shape同时支持内存动态扩展。

为兼容历史版本配置,配置为“1”的场景下,系统会按照“2”动态扩展内存的方式进行处理。

配置示例:

{"ge.exec.staticMemoryPolicy", "2"};

可选

全局

ge.graph_compiler_cache_dir

图编译磁盘缓存目录,和ge.graph_key配合使用,ge.graph_compiler_cache_dir和ge.graph_key同时配置非空时图编译磁盘缓存功能生效。

配置的缓存目录必须存在,否则会导致编译失败。

图发生变化后,原来的缓存文件不可用,用户需要手动删除缓存目录中的缓存文件或者修改ge.graph_key,重新编译生成缓存文件。

其他使用约束和具体的使用方法请参见图编译缓存

可选

session

ge.graph_key

图唯一标识,取值只包含大小写字母(A-Z,a-z)、数字(0-9)、下划线(_)、中划线(-)并且长度不超过128。

可选

graph

ge.featureBaseRefreshable

配置feature内存地址是否可刷新。若用户需要自行管理feature内存并需要多次刷新该地址,则可将该参数配置为可刷新。

该参数仅限于静态shape图。

参数取值:

0:feature内存地址不可刷新,默认值为0。

1:支持刷新模型的feature内存地址。

可选

all

ge.constLifecycle

用于训练和在线推理场景下配置常量节点的生命周期。

session:按照session级别存储常量节点,该取值为默认值。配置为session级别时,session内多张图间的常量节点支持内存复用,但需要用户保证多张图上同名的常量节点完全相同。

graph:按照graph级别存储常量节点,后续用户可调用SetGraphConstMemoryBase接口按图级别对const内存自行管理。

训练场景默认值为session;在线推理场景默认值为graph。

可选

all

ge.exec.inputReuseMemIndexes

用于配置是否开启图的输入节点的内存复用功能,开启后,输入节点的内存可作为模型执行过程中所需要的中间内存再次使用,从而达到降低内存峰值的目的。

参数取值为输入节点的index;如果对多个输入节点都开启内存复用,多个index间使用逗号分隔。输入节点需要设置属性index,说明是第几个输入,index从0开始。

注意:

  • 若开启了输入节点的内存复用功能,需要用户确保输入的内存大小已经32字节对齐。
  • 若所配置的输入index大于等于“输入个数”的值,属于非法index,该index配置不生效。
  • 若开启了输入节点的内存复用功能,输入节点内存中的数据会被改写,图执行后,不可以继续使用输入节点内存中的内容。

配置示例:

{"ge.exec.inputReuseMemIndexes", "0,1,2"};

可选

graph

ge.exec.outputReuseMemIndexes

用于配置是否开启整图输出的内存复用功能,开启后,整图输出的内存可作为模型执行过程中所需要的中间内存再次使用,从而达到降低内存峰值的目的。

如果开启,配置为整图输出的index;如果对多个输出都开启内存复用,多个index间使用逗号分隔。

注意:

  • 若开启了整图输出的内存复用功能,需要用户确保输出的内存大小已经32字节对齐。
  • 输出的index,按照整图输出的顺序标识,index从0开始。
  • 若所配置的输出index大于等于“输出个数”的值,属于非法index,该index配置不生效。

配置示例:

{"ge.exec.outputReuseMemIndexes", "0,1,2"};

可选

graph

ge.disableOptimizations

该参数为调试参数,当前不支持应用于商用产品中,后续版本会作为正式特性更新发布。

该参数仅适用与如下产品:

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

用于指定关闭的某一个或者多个编译优化pass。

当前仅支持关闭如下pass:

"RemoveSameConstPass","ConstantFoldingPass","TransOpWithoutReshapeFusionPass"

注意:

  1. 多个pass之间使用英文逗号分隔。
  2. 若用户指定关闭了其他pass,graph编译时不会处理,只会打印warning级别的日志。
  3. 若指定关闭了ConstantFoldingPass,graph编译或运行时可能会失败。
  4. 如果同时配置了其他编译优化选项,比如ge.oo.constfolding,则ge.disableOptimizations优先级更高。

配置示例

  • 关闭单个pass
    std::map <AscendString, AscendString> session_options = {
    {"ge.disableOptimizations", "RemoveSameConstPass"}
    };
  • 关闭多个pass
    std::map <AscendString, AscendString> session_options = {
    {"ge.disableOptimizations", "RemoveSameConstPass, ConstantFoldingPass"}
    };

可选

all

ac_parallel_enable

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

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

参数取值:

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

配置示例:

{"ac_parallel_enable", "1"};

可选

全局

ge.deterministic

是否开启确定性计算。

默认情况下,不开启确定性计算,算子在相同的硬件和输入下,多次执行的结果可能不同。这个差异的来源,一般是因为在算子实现中,存在异步的多线程执行,会导致浮点数累加的顺序变化。当开启确定性计算功能时,算子在相同的硬件和输入下,多次执行将产生相同的输出。但启用确定性计算往往导致算子执行变慢。当发现模型多次执行结果不同,或者是进行精度调优时,可开启确定性计算,辅助模型调试、调优。

参数取值:

  • 0:默认值,不开启确定性计算。
  • 1:开启确定性计算。

配置示例:

{"ge.deterministic", "1"};

可选

全局

ge.enableGraphParallel

是否对原始大模型进行算法切分,设置为1表示开启算法切分,具体切分策略从参数ge.graphParallelOptionPath所指向的配置文件中读取。

设置成其他值或者空代表不开启算法切分,默认为空。

配置示例:

{"ge.enableGraphParallel", "1"};

可选

graph

ge.exec.enableEngineParallel

大模型切分部署场景,是否对通信算子和网络中关联的部分计算算子进行切分,使能通信和计算并行运行。只有网络中存在通信算子,且该参数配置为1后,才能进行切分,切分时,仅对AllReduce通信算子进行切分。

设置成其他值或者空代表不开启算法切分,默认为空。

配置示例:

{"ge.exec.enableEngineParallel", "1"};

可选

graph

ge.graphParallelOptionPath

对原始大模型进行切分时,算法切分策略配置文件所在路径,仅在ge.enableGraphParallel=1时配置生效。

配置示例:

{"ge.graphParallelOptionPath", "./parallel.json"};

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

  • 半自动切分
    {
        "graph_parallel_option": {
            "auto": false,
            "tensor_parallel_option": {
                "tensor_parallel_size": 2
            }
        }
    }
  • 全自动切分
    {
        "graph_parallel_option": {
            "auto": true
        }
    }

参数解释如下:

  • auto:配置为true表示全自动切分,配置为false表示半自动切分。
  • tensor_parallel_option:配置该option表示使能TP切分。使能TP切分后,且部署模式参数ge.exec.modelDeployMode取默认值,ge.exec.variable_acc参数将不再生效,即无法开启变量格式优化功能。

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

  • tensor_parallel_size:表示TP切分的份数,即需要配置的device芯片数量。

可选

graph

ge.exec.hostSchedulingMaxThreshold

控制静态小图(根图)执行时是否走动态shape调度的最大阈值。默认阈值为0。建议大模型场景使用。

  • 如果静态根图节点的个数<最大阈值,则走动态shape调度。大模型场景,该方式可以节约stream资源。
  • 如果静态根图节点的个数>最大阈值,则保持原有流程不变。

说明:如果静态根图节点包括子图,则该参数不生效。

可选

all

ge.exec.static_model_ops_lower_limit

控制静态子图最小算子个数门限,取值范围为-1到正无穷,取其他值报错;默认值为4。

  • 取值>=0:
    • 算子数<门限,静态子图不单独拆图,合并到动态图走动态执行。
    • 算子数>=门限,保持原有流程不变(静态子图仍旧会拆图)。
  • 取值=-1:表示所有算子走动态图执行。

例如,假设静态子图中算子数为4,通过该参数配置的门限为10,则静态子图不会单独拆图,走动态图执行。

可选

graph

ge.exec.input_fusion_size

Host侧输入数据搬运到Device侧时,将用户离散多个输入数据合并拷贝的阈值,最小值为0,最大值为32MB(33554432字节),默认值为128KB(131072字节)。若:

  • 输入数据大小<=阈值,则合并输入,然后从host搬运到device。
  • 输入数据大小>阈值,或者阈值=0(功能关闭),则不合并,直接从host搬运到device。

例如用户有10个输入,有2个输入数据大小为100KB,2个输入数据大小为50KB,其余输入大于100KB,若设置:

  • ge.exec.input_fusion_size=100KB,则上述4个输入合并为300KB,执行搬运;其他6个输入,直接从host搬运到device。
  • ge.exec.input_fusion_size=0,则该功能关闭,无输入合并,即10个输入直接从host搬运到device。

该参数只在异步静态shape图执行时生效,即使用RunGraphAsync接口运行Graph。

可选

all

ge.topoSortingMode

对算子进行图模式编译时,可选择的不同的图遍历模式。主要面向在线推理场景。

参数取值:

  • 0:BFS,Breadth First Search,广度优先遍历策略。
  • 1:DFS,Depth First Search,深度优先遍历策略。默认为1。
  • 2:RDFS,Reverse DFS,反向深度优先遍历策略。
  • 3:StableRDFS,稳定拓扑序策略,针对图里已有的算子,不会改变其计算顺序;针对图里新增的算子,使用RDFS遍历策略。

配置示例:

{"ge.topoSortingMode", "1"};

可选

all

ge.tiling_schedule_optimize

Tiling下沉调度优化开关。

由于NPU中AI Core内部存储无法完全容纳算子输入输出的所有数据,需要每次搬运一部分输入数据进行计算然后搬出,再搬运下一部分输入数据进行计算,该过程称之为Tiling;根据算子的shape等信息来确定数据切分算法相关参数(比如每次搬运的块大小,以及总共循环多少次)的计算程序,称之为Tiling实现。由于Tiling实现中完成的均为标量计算,AI Core并不擅长,故一般在Host侧CPU上执行,但是满足下述条件Tiling实现会下沉到Device侧执行:

  1. 模型为静态shape。
  2. 模型中的算子支持Tiling下沉,比如FusedInferAttentionScore、IncreFlashAttention等融合算子。
  3. 支持Tiling下沉的算子值有依赖,依赖前一个算子的执行结果。

参数取值:

  • 0:关闭Tiling下沉,默认为0。
  • 1:使能Tiling下沉。

配置示例:

{"ge.tiling_schedule_optimize", "1"};

可选

全局 /session

ge.graphMaxParallelModelNum

图执行模式下,同一个图可以在同一个device上被多个模型并行加载执行;该参数用于控制允许并行加载的最大模型数目。

参数取值:

1~INT32_MAX,默认为8。

配置示例:

{"ge.graphMaxParallelModelNum", "10"};

可选

all

ge.oo.level

调试功能扩展参数,当前不支持应用于商用产品中,后续版本会作为正式功能更新发布。

图编译多级优化选项,包括子图优化、整图优化、静态shape模型下沉等。

静态shape模型下沉:静态shape模型在编译时即可确定所有算子的输入输出shape,完成模型级内存编排、算子的Tiling计算等Host侧计算,在模型加载时整体下发到Device流上,但不立即执行,通过下发模型执行Task触发模型中所有Task的执行。

参数取值:

  • O1:只做促成静态下沉的相关优化,如InferShape(进行输出tensor的shape推导)、常量折叠、死边消除等。
  • O3:开启所有优化,默认为O3。

配置示例:

{"ge.oo.level", "O1"};

可选

all

ge.oo.constantFolding

调试功能扩展参数,当前不支持应用于商用产品中,后续版本会作为正式功能更新发布。

是否开启常量折叠优化。

常量折叠是将计算图中可以预先确定输出值的节点替换成常量,并对计算图进行一些结构简化的操作。

参数取值:

  • true:开启,默认为true。
  • false:关闭。

配置示例:

{"ge.oo.constantFolding", "true"};

使用约束:

如果同时配置了其他编译优化选项,比如ge.disableOptimizations,则ge.disableOptimizations优先级更高。

可选

all

ge.oo.deadCodeElimination

调试功能扩展参数,当前不支持应用于商用产品中,后续版本会作为正式功能更新发布。

是否开启死边消除优化。

死边消除:switch死边消除,switch的pred输入(1号输入)为const节点时,根据const的值消除其中一条分支:const为true时,消除false分支;const为false时,消除true分支。

参数取值:

  • true:开启,默认为true。
  • false:关闭。

配置示例:

{"ge.oo.deadCodeElimination", "true"};

可选

all

ge.exec.modelDeployMode

大模型切分部署场景下,用于指定所有模型的部署模式。

  • 针对Atlas 训练系列产品Atlas A2训练系列产品/Atlas 800I A2推理产品:默认为空,当前仅支持SPMD模式。SPMD:Single program multi data,表示所有节点执行相同的程序,做数据并行。
  • 针对Atlas 推理系列产品:仅支持配置为master/slave模式。

可选

graph

ge.exec.modelDeployDevicelist

大模型切分部署场景下,用于指定当前执行节点用于模型部署执行的设备,配合ge.exec.modelDeployMode为SPMD场景时使用。

可选

graph

ge.exec.frozenInputIndexes

设置地址不刷新的输入tensor的索引。该参数仅限于LoadGraph调用。针对不同模型,输入tensor索引内容不同:

  • 动态shape模型:需要传递输入tensor的索引、数据在device上的地址、数据长度,其中地址要求十进制表示。
  • 静态shape模型:只需要传递输入tensor的索引即可;传其他参数比如数据长度参数,不生效。

配置示例:

# 只传输入tensor索引
{"ge.exec.frozenInputIndexes", "0;1;2"};
# 传递输入tensor索引、数据在device上的地址、数据长度
{"ge.exec.frozenInputIndexes", "0,88832131,4;1,888213294,4;2,193492421,2"};

使用约束

地址不刷新的输入tensor,必须是静态shape,针对动态shape模型,该输入节点tensor也必须是静态shape。

可选

graph

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

当前产品无相关内容

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