options参数说明
本章节列出GEInitialize、Session构造函数、AddGraph接口传入的配置参数,分别在全局、session、graph生效。
说明
如下表格中仅列出当前版本支持的配置参数,如果表中未列出,表示该参数预留或适用于其他版本的昇腾AI处理器,用户无需关注。
基础功能
{"ge.graphRunMode", "0"}; |
|||
{"ge.exec.deviceId", "-1"}; |
|||
当用户需要将不同的模型通过同一个脚本在不同的Device上执行,可以通过该参数指定Device的逻辑ID。 通常可以创建多个线程,每个线程是不同的Session,每个Session传不同的ge.session_device_id。 {"ge.session_device_id", "0"}; |
|||
|
其中,流(Stream)用于维护一些异步操作的执行顺序,确保按照应用程序中的代码调用顺序在Device上执行。
模型中存在Cmo算子和如下控制类算子时,不能使用单Stream特性,只能使用默认值false。
{"ge.enableSingleStream", "false"}; |
|||
用于描述参与集合通信的集群信息,包括Server,Device,容器等的组织信息,填写ranktable文件路径,包含文件路径和文件名; |
|||
rank id,指进程在group中对应的rank标识序号。范围:0~(rank size-1)。对于用户自定义group,rank在本group内从0开始进行重排;对于hccl world group,rank id和world rank id相同。
|
|||
|
|||
|
默认情况下,不开启确定性计算,算子在相同的硬件和输入下,多次执行的结果可能不同。这个差异的来源,一般是因为在算子实现中,存在异步的多线程执行,会导致浮点数累加的顺序变化。当开启确定性计算功能时,算子在相同的硬件和输入下,多次执行将产生相同的输出。但启用确定性计算往往导致算子执行变慢。当发现模型多次执行结果不同,或者是进行精度调优时,可开启确定性计算,辅助模型调试、调优。
{"ge.deterministic", "0"}; |
|||
设置地址不刷新的输入Tensor的索引。该参数仅限于LoadGraph调用。针对不同模型,输入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。 |
|||
随路拷贝场景,设置placement为Host的输入Tensor索引,多个输入的Tensor索引使用英文分号分隔。 随路拷贝是指随着模型内算子地址刷新动作,将Host侧输入的Tensor内存一起拷贝到Device侧。 {"ge.exec.hostInputIndexes", "0;1;2"};
|
内存管理
{"ge.exec.disableReuseMemory", "0"}; |
|||
是否集中清理网络中所有memset算子(含有memset属性的算子都是memset算子)占用的内存。
{"ge.exec.atomicCleanPolicy", "0"}; |
|||
同一个Session内同时加载多个模型时,如果多个模型间的权重能够复用,建议通过此配置项将网络中Const/Constant节点的权重外置,实现多个模型间的权重复用,以减少权重的内存占用。
落盘路径优先级:ge.externalWeightDir > ${ASCEND_WORK_PATH}/tmp_weight_<pid>_<sessionid> >当前执行目录tmp_weight_<pid>_<sessionid>。 模型卸载时,会将tmp_weight_<pid>_<sessionid>目录删除。 {"ge.externalWeight", "1"}; |
|||
{"ge.externalWeight", "1"}; {"ge.externalWeightDir", "$HOME/your_tmp_path"}; |
|||
{"ge.exec.staticMemoryPolicy", "0"}; |
|||
配置feature内存地址是否可刷新。若用户需要自行管理feature内存并需要多次刷新该地址,则可将该参数配置为可刷新。 {"ge.featureBaseRefreshable", "0"}; |
|||
用于配置是否开启图的输入节点的内存复用功能,开启后,输入节点的内存可作为模型执行过程中所需要的中间内存再次使用,从而达到降低内存峰值的目的。 参数取值为输入节点的index;如果对多个输入节点都开启内存复用,多个index间使用英文逗号分隔。输入节点需要设置属性index,说明是第几个输入,index从0开始。
{"ge.exec.inputReuseMemIndexes", "0,1,2"}; |
|||
用于配置是否开启整图输出的内存复用功能,开启后,整图输出的内存可作为模型执行过程中所需要的中间内存再次使用,从而达到降低内存峰值的目的。 如果开启,配置为整图输出的index;如果对多个输出都开启内存复用,多个index间使用英文逗号分隔。
{"ge.exec.outputReuseMemIndexes", "0,1,2"}; |
|||
Host侧输入数据搬运到Device侧时,将用户离散多个输入数据合并拷贝的阈值,最小值为0,最大值为32MB(33554432字节),默认值为128KB(131072字节)。若: 例如用户有10个输入,有2个输入数据大小为100KB,2个输入数据大小为50KB,其余输入大于100KB,若设置:
该参数只在异步静态shape图执行时生效,即使用RunGraphAsync接口运行Graph。 |
|||
Host侧输入数据搬运到Device侧时,是否开启批量内存拷贝功能。 该参数可以提升Host到Device的数据搬运性能,适用于需要频繁搬运数据且PCIE带宽使用率低的场景;开启该参数批量拷贝功能后,可以提升带宽利用率。
{"ge.inputBatchCpy", "0"}; |
动态shape
|
|||
设置ND格式下动态维度的档位,适用于执行推理时,每次处理任意维度的场景。该参数需要与ge.inputShape配合使用。详细使用示例请参见编译并运行Graph场景。 参数取值:通过"dim1,dim2,dim3;dim4,dim5,dim6;dim7,dim8,dim9"的形式设置。 参数值格式:所有档位必须放在双引号中,档位之间使用英文分号分隔,每档内参数使用英文逗号分隔;每档中的dim值与ge.inputShape参数中的-1标识的参数依次对应,inputShape参数中有几个-1,则每档必须设置几个维度。并且要求档位信息必须大于1组。
|
|||
当前不支持dataset和placeholder输入同时为动态输入。 {"ge.dynamicNodeType", "0"}; |
|||
动态shape图中,是否允许AI CPU算子和AI Core算子并行运行。 动态shape图中,开关开启时,系统自动识别图中可以和AI Core并发的AI CPU算子,不同引擎的算子下发到不同流上,实现多引擎间的并行,从而提升资源利用效率和动态shape执行性能。
{"ac_parallel_enable", "1"}; |
算子编译与图编译
表 1
{"ge.op_compiler_cache_mode", "enable"}; |
|||
|
参数值格式:路径支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。
|
|||
图编译磁盘缓存目录,和ge.graph_key配合使用,ge.graph_compiler_cache_dir和ge.graph_key同时配置非空时图编译磁盘缓存功能生效。 图发生变化后,原来的缓存文件不可用,用户需要手动删除缓存目录中的缓存文件或者修改ge.graph_key,重新编译生成缓存文件。 其他使用约束和具体的使用方法请参见图编译缓存。 |
|||
|
该参数与ge.fusionSwitchFile的区别是:ge.fusionSwitchFile仅能关闭图融合和UB融合的规则,并且需要单独配置JSON文件,而该参数适用于所有规则,通过参数就能指定融合规则,不需要再单独设置JSON文件。如果两个参数都配置,且配置了同一个融合规则,则以ge.optimizationSwitch参数配置的为准。 参数取值:"Passname1:on;Passname2:off",可以拼接多个key-value键值对,key为Pass名称,value为on(表示开)或off(表示关),不支持大小写模式匹配,多组配置使用英文分号分隔。可配置的融合规则请参见融合规则列表。 {"ge.optimizationSwitch", "Passname1:on;Passname2:off"}; |
|||
对算子进行图模式编译时,可选择的不同的图遍历模式。主要面向在线推理场景。
{"ge.topoSortingMode", "1"}; |
|||
其中,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例,则安装后文件存储路径为:/usr/local/Ascend/cann。<arch>表示具体操作系统架构,xxx请根据实际产品进行选择。 了解AI Core、Cube Core、Vector Core的关系: 为便于理解AI Core、Cube Core、Vector Core的关系,此处先明确Core的定义,Core是指拥有独立Scalar计算单元的一个计算核,通常Scalar计算单元承担了一个计算核的SIMD(单指令多数据,Single Instruction Multiple Data)指令发射等功能,所以我们也通常也把这个Scalar计算单元称为核内的调度单元。不同产品上的AI数据处理核心单元不同,当前分为以下几类: |
|||
用于使能同一个Session内多线程编译多张图。如果配置为"1",会禁止变量转换格式(参考ge.exec.variable_acc说明)。
{"ge.AllowMultiGraphParallelCompile", "1"}; |
功能调试
精度调优
算子精度模式,配置要求为string类型。不能与ge.exec.precision_mode_v2同时使用,建议使用ge.exec.precision_mode_v2参数。
上述路径中的${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例,则安装后文件存储路径为:/usr/local/Ascend/cann。xxx请根据实际产品进行选择。 训练场景下,针对Atlas A2 训练系列产品/Atlas A2 推理系列产品,参数默认值为“must_keep_origin_dtype”。 训练场景下,针对Atlas A3 训练系列产品/Atlas A3 推理系列产品,参数默认值为“must_keep_origin_dtype”。 |
|||
算子精度模式,配置要求为string类型。不能与ge.exec.precision_mode同时使用,建议使用ge.exec.precision_mode_v2参数。
上述路径中的${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例,则安装后文件存储路径为:/usr/local/Ascend/cann。xxx请根据实际产品进行选择。 训练场景下,针对Atlas A2 训练系列产品/Atlas A2 推理系列产品,参数默认值为“origin”。 训练场景下,针对Atlas A3 训练系列产品/Atlas A3 推理系列产品,参数默认值为“origin”。 |
|||
混合精度场景下,通过此参数指定混合精度黑白灰名单的路径以及文件名,自行指定哪些算子允许降精度,哪些算子不允许降精度。配置为路径以及文件名,文件为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请根据实际产品进行选择。):
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" } }, |
|||
通过该参数自定义模型编译时算子的计算精度,模型中其他算子以ge.exec.precision_mode或ge.exec.precision_mode_v2指定的精度模式进行编译。该参数需要配置为配置文件路径及文件名,例如:/home/test/customize_dtypes.cfg。
# 按照算子名称配置 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 |
精度比对
性能调优
Profiling
{"ge.exec.profilingMode", "0"}; |
|||
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"})"}}; |
AOE
异常补救
图执行时,Stream同步等待超时时间,超过配置时间时报同步失败。单位:ms {"stream_sync_timeout", "-1"}; |
|||
图执行时,event同步等待超时时间,超过配置时间时报同步失败。单位:ms {"event_sync_timeout", "-1"}; |


