options参数说明

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

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

表1 options配置项

Options key

Options value

必选/可选

全局/session/graph级别生效

ge.graphRunMode

图执行模式,取值:

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

必选

all

ge.exec.deviceId

GE实例运行时操作的设备的逻辑ID,限制有限范围为0~N-1,N表示该台Server上的可用昇腾AI处理器个数;

必选

all

ge.exec.precision_mode

算子精度模式,配置要求为string类型。

  • allow_fp32_to_fp16:算子不支持float32类型时,直接选择float16。
  • force_fp16:算子既支持float16又支持float32数据类型时,强制选择float16。
  • force_fp32:算子既支持float16又支持float32数据类型时,强制选择float32。
  • must_keep_origin_dtype:保持原图精度。
  • allow_mix_precision:开启自动混合精度功能,针对全网中float32数据类型的算子,系统会按照内置优化策略自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。开启该功能开关后,用户可以同时使能Loss Scaling,从而补偿降低精度带来的精度损失。

必选

all

ge.exec.modify_mixlist

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

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:(白名单)允许将当前float32类型的算子,降低精度到float16。
  • false:(黑名单)不允许将当前float32类型的算子,降低精度到float16。
  • 不配置:(灰名单)当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。

可选

all

ge.socVersion

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

可从“Ascend-cann-toolkit安装目录/ascend-toolkit/latest/data/platform_config”查看,".ini"文件的文件名即为对应的${soc_version}。如果用户根据上述方法仍旧无法确定具体使用的${soc_version},则:
  1. 请参考《CANN Ascend-DMI工具使用指导》,完成使用工具>使用前准备,然后进入使用工具>设备实时状态查询章节。
  2. 使用相关命令查看芯片的详细信息,例如使用ascend-dmi -i -dt命令查看芯片的详细信息,返回信息中“Chip Name”对应取值,去掉空格后,即为具体使用的${soc_version}

可选

all

ge.exec.profilingMode

是否开启Profiling功能。

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

可选

all

ge.exec.profilingOptions

Profiling配置选项。

  • output:Profiling采集结果文件保存路径。该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。
    • 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
    • 相对路径配置直接以目录名开始,例如:output。
  • storage_limit:用于指定Profiling数据文件保存至磁盘时的存储空间上限。当累计存放的Profiling数据文件大小接近参数设置值(<=20MB)或数据存放目录所在磁盘的可用空间即将不足(<=20MB)时,除特定的Profiling数据文件外,最早保存的Profiling数据文件将被删除,以保证新生成的数据文件可以循环覆盖保存。

    单位为MB,参数值配置格式为数值+单位,例如"storage_limit": "200MB",有效取值范围为[200, 4294967296]。

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

  • training_trace:采集迭代轨迹数据,即训练任务及AI软件栈的软件信息,实现对训练任务的性能分析,重点关注数据增强、前后向计算、梯度聚合更新等相关数据。取值on/off。如果将该参数配置为“on”和“off”之外的任意值,则按配置为“off”处理。
  • task_trace:采集任务信息数据,即昇腾AI处理器HWTS,分析任务开始、结束等信息。取值on/off。如果将该参数配置为“on”和“off”之外的任意值,则按配置为“off”处理。
  • hccl:控制hccl数据采集开关,可选on或off,默认为off。
  • aicpu:采集aicpu数据增强的Profiling数据。取值on/off。如果将该参数配置为“on”和“off”之外的任意值,则按配置为“off”处理。
  • fp_point:training_trace为on时需要配置。指定训练网络迭代轨迹正向算子的开始位置,用于记录前向计算开始时间戳。配置值为指定的正向第一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入;也可直接配置为空,由系统自动识别正向算子的开始位置,例如"fp_point":""。
  • bp_point:training_trace为on时需要配置。指定训练网络迭代轨迹反向算子的结束位置,记录后向计算结束时间戳,BP_POINT和FP_POINT可以计算出正反向时间。配置值为指定的反向最后一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入;也可直接配置为空,由系统自动识别反向算子的结束位置,例如"bp_point":""。
  • aic_metrics:AI Core的硬件信息,取值如下(单次采集仅支持配置单个参数项):

    ArithmeticUtilization:各种计算类指标占比统计

    PipeUtilization: 计算单元和搬运单元耗时占比,该项为默认值

    Memory:外部内存读写类指令占比

    MemoryL0:内部内存读写类指令占比

    ResourceConflictRatio:流水线队列类指令占比

  • msproftx:控制msproftx用户和上层框架程序输出性能数据的开关,可选on或off,默认值为off。

    Profiling开启msproftx功能之前,需要在程序内调用msproftx相关接口来开启程序的Profiling数据流的输出,详细操作请参见应用软件开发指南 (C&C++)手册“高级功能>Profiling性能数据采集”章节。

配置示例:

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"})"}};

可选

all

ge.exec.enableDump

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

  • 1:开启dump功能,从dump_path读取dump文件保存路径,dump_path为None时会产生异常。
  • 0:关闭dump功能。

可选

全局/session

ge.exec.dumpPath

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

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

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

可选

全局/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算子输入和输出数据

可选

全局/session

ge.exec.dumpData

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

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

可选

全局

ge.exec.dumpLayer

指定需要dump的算子。

取值为算子名,多个算子名之间使用空格分隔,例如:“layer1 layer2 layer3”

可选

全局/session

ge.exec.enableDumpDebug

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

  • 1:开启溢出检测功能,从ge.exec.dumpPath读取Dump文件保存路径,路径配置为None时会产生异常。
  • 0:关闭溢出检测功能。

可选

全局/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.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功能,默认为0。
  • 1:开启算子debug功能,在当前执行路径下的kernel_meta文件夹中生成TBE指令映射文件(算子cce文件*.cce、python-cce映射文件*_loc.json、.o和.json文件),用于后续工具进行AICore Error问题定位。
  • 2:开启算子debug功能,在当前执行路径下的kernel_meta文件夹中生成TBE指令映射文件(算子cce文件*.cce、python-cce映射文件*_loc.json、.o和.json文件),并关闭编译优化开关(开启ccec编译器选项-O0-g),用于后续工具进行AICore Error问题定位,可定位到出错算子的代码行号。
  • 3:不开启算子debug功能,且在当前执行路径下的kernel_meta文件夹中保留.o和.json文件。
  • 4:不开启算子debug功能,在当前执行路径下的kernel_meta文件夹中保留.o(算子二进制文件)和.json文件(算子描述文件),生成TBE指令映射文件(算子cce文件*.cce)和UB融合计算描述文件({$kernel_name}_compute.json)。
    须知:

    训练执行时,建议配置为0或3。如果需要进行问题定位,再选择调试开关选项1和2,是因为加入了调试功能会导致网络性能下降。

可选

all

ge.exec.opDebugConfig

Global Memory内存检测功能开关。

取值为.cfg配置文件路径,配置文件内多个选项用英文逗号分隔:

  • oom:在算子执行过程中,检测Global Memory是否内存越界
  • dump_bin:算子编译时,在当前执行路径下的kernel_meta文件夹中保留.o和.json文件
  • dump_cce:算子编译时,在当前执行路径下的kernel_meta文件夹中保留算子cce文件*.cce
  • dump_loc:算子编译时,在当前执行路径下的kernel_meta文件夹中保留python-cce映射文件*_loc.json
  • ccec_O0:算子编译时,开启ccec编译器选项-O0
  • ccec_g :算子编译时,开启ccec编译器选项-g

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

op_debug_config = ccec_O0,ccec_g,oom

可选

全局

ge.op_compiler_cache_mode

用于配置算子编译磁盘缓存模式。默认值为enable。

  • enable:启用算子编译缓存功能。启用后,算子编译信息缓存至磁盘,相同编译参数的算子无需重复编译,直接使用缓存内容,从而提升编译速度。
  • force:启用算子编译缓存功能,区别于enable模式,force模式下会强制刷新缓存,即先删除已有缓存,再重新编译并加入缓存。比如当用户的python或者依赖库等发生变化时,需要指定为force用于清理已有的缓存。
    说明:

    配置为force模式完成编译后,建议后续编译修改为enable模式,以避免每次编译时都强制刷新缓存。

  • disable:禁用算子编译缓存功能。

使用说明:

  • 该参数和ge.op_compiler_cache_dir配合使用。
  • 启用算子编译缓存功能时,可以通过环境变量ASCEND_MAX_OP_CACHE_SIZE来限制某个芯片下缓存文件夹磁盘空间的大小;通过环境变量ASCEND_REMAIN_CACHE_SIZE_RATIO来设置编译缓存空间大小达到ASCEND_MAX_OP_CACHE_SIZE需要删除旧的kernel文件时,保留缓存的空间大小比例。上述环境变量的具体使用说明请参考ASCEND_MAX_OP_CACHE_SIZEASCEND_REMAIN_CACHE_SIZE_RATIO
  • 由于force选项会先删除已有缓存,所以不建议在程序并行编译时设置,否则可能会导致其他模型使用的缓存内容被清除而导致失败。
  • 建议模型最终发布时设置编译缓存选项为disable或者force。
  • 如果算子调优后知识库变更,则需要先通过设置为force来清空缓存,然后再设置为enable重新进行编译,以便应用新的调优知识库。
  • 注意,调试开关打开的场景下,即ge.opDebugLevel非0值或者ge.exec.opDebugConfig配置非空时,会忽略算子编译磁盘缓存模式的配置,不启用算子编译缓存。主要基于以下两点考虑:
    • 启用算子编译缓存功能(enable或force模式)后,相同编译参数的算子无需重复编译,编译过程日志无法完整记录。
    • 受限于缓存空间大小,对调试场景的编译结果不做缓存。

可选

all

ge.op_compiler_cache_dir

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

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

如果参数指定的路径存在且有效,则在指定的路径下自动创建子目录kernel_cache;如果指定的路径不存在但路径有效,则先自动创建目录,然后在该路径下自动创建子目录kernel_cache。

默认值:$HOME/atc_data

可选

all

ge.debugDir

用于配置保存算子编译生成的调试相关的过程文件的路径,包括算子.o/.json/.cce等文件。

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

可选

all

ge.mdl_bank_path

加载模型调优后自定义知识库的路径。

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

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

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

参数默认值:${install_path}/compiler/data/fusion_strategy/custom$

如果默认路径下不存在自定义知识库,则会查找模型的内置知识库,该路径为:${install_path}/compiler/data/fusion_strategy/built-in

可选

all

ge.op_bank_path

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

支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)。默认自定义知识库路径${HOME}/Ascend/latest/data/aoe/custom/op

可选

all

ge.exec.dynamicGraphExecuteMode

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

该模式下,前端框架调用AddGraph,获取ge.exec.dataInputsShapeRange中配置的shape范围进行图编译,编译时输入即为unknown,整图切分为一个unknown子图。

可选

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]"}};

可选

graph

ge.exec.op_precision_mode

设置具体某个算子的精度模式,通过该参数传入自定义的精度模式配置文件op_precision.ini,可以为不同的算子设置不同的精度模式。

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

[ByOpType]
optype1=high_precision
optype2=high_performance
[ByNodeName]
nodename1=high_precision
nodename2=high_performance

可选

全局

ge.opSelectImplmode

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

  • high_precision:表示算子选择高精度实现。高精度实现算子是指在fp16输入的情况下,通过泰勒展开/牛顿迭代等手段进一步提升算子的精度。
  • high_performance:表示算子选择高性能实现。高性能实现算子是指在fp16输入的情况下,不影响网络精度前提的最优性能实现。默认为high_performance。

可选

全局

ge.optypelistForImplmode

列举算子optype的列表,该列表中的算子使用ge.opSelectImplmode参数指定的模式,当前支持的算子为Pooling、SoftmaxV2、LRN、ROIAlign。

该参数需要与ge.opSelectImplmode参数配合使用,例如:

ge.opSelectImplmode配置为high_precision

ge.optypelistForImplmode配置为Pooling。

可选

全局

ge.shape_generalized_build_mode

当前版本暂不支持。

可选

graph

ge.customizeDtypes

通过该参数自定义模型编译时算子的计算精度,模型中其他算子以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/built-in/op_impl/custom/ai_core/tbe/config/${soc_version}/aic-${soc_version}-ops-info.json。
  • 通过该参数指定的优先级高,因此可能会导致精度/性能的下降,如果指定的dtype不支持,会导致编译失败。

芯片支持情况:

昇腾310 AI处理器,支持该参数。

昇腾910 AI处理器,支持该参数。

昇腾310P AI处理器,支持该参数。

可选

session

ge.exec.atomicCleanPolicy

是否集中清理网络中所有atomic算子占用的内存,取值包括:

  • 0:集中清理,默认为0。
  • 1:不集中清理,对网络每一个atomic算子进行单独清零。当网络中内存超限时,可尝试此种清理方式,但可能会导致一定的性能损耗。

可选

session

ge.jit_compile

当前版本暂不支持。

可选

全局/session

ge.build_inner_model

当前版本暂不支持。

可选

NA

ge.exec.staticMemoryPolicy

网络运行是否使用内存静态分配方式。

  • 0:动态分配内存,即按照实际大小动态分配。
  • 1:静态分配内存,即按照允许的最大静态内存与变量内存进行分配。
  • 2:动态扩展内存,即当前图所需内存超过前一张图的内存时,直接释放前一张图的内存。

默认值是0。

配置示例:

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

可选

全局