ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CANN/GE自动融合开启方式

CANN/GE自动融合开启方式 AutoFuse开启方式【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge简介前提条件安装软件包准备带有AI处理器的硬件环境并安装驱动固件和CANN软件包具体安装步骤请参见《CANN 软件安装》。GCC版本要求9.5.0及以上建议使用9.5.0版本。CMake要求3.20.0版本及以上建议使用3.20.0版本。安装msptimspti有两种获取方式开启PGO特性时需要安装该依赖直接获取编译好的匹配release包获取链接https://gitcode.com/Ascend/mspti/releases安装命令如下./mindstudio-profiler-tools-interface_{version}_{arch}.run --install --install-path{cann_install_path}--install-path指定安装路径需要为上述CANN软件包的安装路径。源码编译将开源仓clone到本地命令如下以使用HTTPS协议为例git clone https://gitcode.com/Ascend/mspti.git执行编译命令如下bash script/build.sh替换CANN软件包文件编译成功后将csrc/include头文件目录复制到{cann_install_path}/cann/tools/mspti/include将build/libmspti.so动态库目录复制到{cann_install_path}/cann/tools/mspti/lib64cann_install_path需要为上述CANN软件包的安装路径。安装完成后设置环境变量安装CANN软件后使用CANN运行用户进行编译、运行时需要以CANN运行用户登录环境执行source ${INSTALL_DIR}/set_env.sh命令设置环境变量。${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例安装后文件默认存储路径为/usr/local/Ascend/cann。启用AutoFuse在TensorFlow图模式流程中自动融合的开启方式由环境变量控制包括功能控制与DFX控制自动融合开箱只需要打开功能控制DFX控制用于辅助定位或优化。功能控制的环境变量名为AUTOFUSE_FLAGSDFX控制的环境变量名为AUTOFUSE_DFX_FLAGS环境变量值以字符串--keyvalue形式配置每一项不同的key代表一个具体控制点 多项配置使用英文分号分隔。自动融合目前支持以下类别算子的融合具体开启方式如下表 1自动融合支持的算子类型|融合类型|开启方式|Auto Tiling求解算法|Auto Tiling算法精度|融合算子生成时的中间过程文件|PGO调优算法| |--|--|--|--|--|--| |Elemwise|默认开启|默认轴排序算法|默认高精度求解|默认不保留|默认控核算法| |Broadcast|默认开启|默认轴排序算法|默认高精度求解|默认不保留|默认控核算法| |Reduce|环境变量显式控制|默认轴排序算法|默认高精度求解|默认不保留|默认控核算法| |Concat|环境变量显式控制|默认轴排序算法|默认高精度求解|默认不保留|默认控核算法|以Reduce和Concat算子为例开启自动融合功能的配置示例如下功能控制export AUTOFUSE_FLAGS--enable_autofusetrue;--autofuse_enable_passreduce,concatDFX控制export AUTOFUSE_DFX_FLAGS--att_accuracy_level1;--att_profilingtrue上述环境变量中每一项的详细解释请参见AUTOFUSE_FLAGS环境变量控制点、AUTOFUSE_DFX_FLAGS环境变量控制点。[!NOTE]说明支持离线推理静态shape场景开启自动融合功能方法为设置环境变量开启自动融合功能比如export AUTOFUSE_FLAGS--enable_autofusetrue使用ATC离线模型编译工具转换模型生成om离线模型自动融合场景下不支持单算子转om即不支持--singleop参数使用aclgrphBuildModel接口编译模型生成om离线模型自动融合场景下不支持单算子转om即不支持INSERT_OP_FILE参数。模型加载与推理使用acl接口加载生成的om模型完成推理。关于ATC工具详细使用方法请参见《ATC离线模型编译工具》。 关于acl接口推理详细说明请参见《应用开发 (CC)》中的“模型推理”。AUTOFUSE_FLAGS环境变量控制点--enable_autofuse控制整体自动融合功能是否开启。取值true表示开启。false默认值表示关闭。不配置表示关闭整体自动融合功能关闭时以下其他控制点全部失效无论是否配置。配置示例--enable_autofusetrue使用约束配置开启后Elemwise算子与Broadcast算子间的自动融合能力便开启。--autofuse_disable_pass控制拓展融合能力是否关闭。取值reduce控制Reduce类算子融合能力关闭。concat控制Concat类算子融合能力关闭。配置多个取值时使用英文逗号分割默认为空Reduce类、Concat类算子的融合能力目前默认不开启。配置示例--autofuse_disable_passreduce,concat使用约束与--autofuse_enable_pass不能同时配置相同的取值。--autofuse_enable_pass控制拓展融合能力是否开启。取值reduce控制Reduce融合能力开启。concat控制Concat融合能力开启。配置多个取值时使用英文逗号分割默认为空Reduce类、Concat类算子的融合能力目前默认不开启。配置示例--autofuse_enable_passreduce,concat使用约束与--autofuse_disable_pass不能同时配置相同的取值。--autofuse_enable_pgo控制是否开启PGOProfile-Guided Optimization基于采样数据的优化调优。PGO调优是通过预上板采样选取表现相对更好的Tiling以提升模型执行性能。取值true表示开启。false默认值表示关闭。配置示例--autofuse_enable_pgotrue使用约束仅支持对静态图调优首次配置时不能与其他Profiling功能同时开启后续配置时无限制。--autofuse_enhance_precision_blacklist控制自动融合局部融合节点不做提升精度操作。某个AscGraph中所有的AscIR都配置到黑名单中该AscGraph才不会升精度。取值AscIR类型的字符串组合多个类型使用英文逗号分割默认值为空字符串表示所有AscGraph都会提升精度。该参数中的AscIR类型是Dump图中对应节点type中的取值例如Dump图中某节点type的取值为ge:Add则实际配置为Add。all表示将所有节点列入黑名单从而禁止自动融合时的精度提升操作避免不必要的升精度开销。配置示例--autofuse_enhance_precision_blacklistLe,Where,Sub,Add,Sigmoid使用约束Sum、Mean、Prod不支持低精度类型默认必须提升精度因此不能配置到提升精度黑名单中即使配置为all仍旧提升精度。不提升精度可以获得更高性能但可能会引发精度问题。因此在配置不提升精度后用户需确保精度满足业务要求。Dump图的方法请参见《环境变量参考》 图编译 DUMP_GE_GRAPH。--experimental_enable_jit_executor_v2控制是否打开切图编译。取值true表示开启。false默认值表示关闭。切图编译是将原始图在无法推导符号的边界进行断图处理切成N个图将上游图的输出作为下游图的输入hint继续符号推导并执行。配置示例--experimental_enable_jit_executor_v2true使用约束如下场景不支持切图动态分档场景图上包含资源类算子输入或者输入的类型是DT_RESOURCE如TensorArrayWrite图上包含V1版本控制算子如Switch,StreamSwitch,Merge,StreamMerge,Enter,Exit,LoopCond,NextIteration开启数据预处理下沉开启AOE调优的场景--max_fusion_size配置最多可融合节点的个数。取值[0-uint64_t类型最大值]配置为0表示不融合。配置示例--max_fusion_size64上述示例表示最多支持融合64个Ascir节点。使用约束无--recomputation_threshold控制自动融合重计算阈值。该参数用于设置单输出算子的引用阈值当单输出节点引用个数超过阈值时首次融合会在当前节点进行融合截断。**取值**0-255间的任意整数默认为1。配置示例--recomputation_threshold5使用约束无。AUTOFUSE_DFX_FLAGS环境变量控制点--autofuse_att_algorithm控制Auto Tiling求解算法选择。取值HighPerf高性能算法。AxesReorder默认值轴排序算法。配置示例--autofuse_att_algorithmHighPerf使用约束轴排序算法是默认算法高性能算法属于试验性算法不一定能获取到更好的算子执行性能只是算法理论上限较高。配置非法值时会恢复为默认值。--att_accuracy_level控制Auto Tiling算法求解精度理论上精度越高kernel性能越好。取值1默认值高精度求解。0低精度求解。默认为低精度求解保证Tiling耗时不至于过长。配置示例--att_accuracy_level1使用约束高精度求解可能会得出更优的tiling解但需要更长的Tiling执行时间低精度求解则反之。配置非法值时会恢复为默认值。--att_enable_multicore_ub_tradeoff用于控制att_corenum_threshold和att_ub_threshold功能是否开启。取值true开启。false默认值不开启。配置示例--att_enable_multicore_ub_tradeofftrue**使用约束**配置非法值时会恢复为默认值。--att_ub_threshold控制Auto Tiling的Tiling策略保证Tiling求解结果与算子实现结合UB占用率不低于该控制点设置的取值若UB占用率不满足指定阈值则按可求解的最大UB占用率设置该控制点可用于性能问题的定位。**取值**0-100间的任意整数默认值为20。配置示例--att_ub_threshold20使用约束该参数需要和--att_enable_multicore_ub_tradeoff配合使用只有--att_enable_multicore_ub_tradeoff开启时设置了--att_ub_threshold控制点才能生效。配置非法值时会恢复为默认值。--att_corenum_threshold控制Auto Tiling的Tiling策略保证Tiling求解结果与算子实现结合多核利用率不低于该控制点设置的取值若多核利用率不满足指定阈值则按可求解的最大多核占用率设置该控制点可用于性能问题的定位。**取值**0-100间的任意整数默认值为40。当--att_enable_multicore_ub_tradeoff开启时默认值为40否则不会设置该策略。配置示例--att_corenum_threshold40使用约束该参数需要和--att_enable_multicore_ub_tradeoff配合使用只有--att_enable_multicore_ub_tradeoff开启时设置的--att_corenum_threshold控制点才能生效。配置非法值时会恢复为默认值。--att_profiling用于控制Auto Tiling的Profiling是否开启。取值true开启Profiling特性。false默认值关闭Profiling特性。配置示例--att_profilingtrue使用约束该控制点仅用于定位Auto Tiling模块本身的执行时间问题。配置非法值时会恢复为默认值。--autofuse_pgo_algo控制PGO调优算法不同算法求Tiling方式不同。取值core_select默认值使用控核算法。pruning使用剪枝算法。默认为控核算法保证Tiling耗时不至于过长剪枝算法理论上可能求出更优的Tiling解但需要远长于控核算法的Tiling时间。配置示例--autofuse_enable_pgotrue --autofuse_pgo_algocore_select使用约束该参数需要与--autofuse_enable_pgo配合使用只有--autofuse_enable_pgo开启时设置的--autofuse_pgo_algo控制点才能生效。配置非法值时会恢复为默认值。--autofuse_pgo_step_max控制PGO剪枝算法步长。**取值**2-1024间任意2的幂次默认为16。配置示例--autofuse_enable_pgotrue --autofuse_pgo_algopruning --autofuse_pgo_step_max16使用约束该参数需要和--autofuse_pgo_algo配合使用只有--autofuse_pgo_algopruning且生效时设置的--autofuse_pgo_step_max控制点才能生效。当step值较小时可能会得出更优的tiling解但需要更长的Tiling执行时间step值较大时则反之。配置非法值时会恢复为默认值。--autofuse_pgo_topn设置参与PGO静态调优的解的数量。取值0选择所有解参与静态调优。任意正整数表示可选解的数量默认值为5。配置示例--autofuse_enable_pgotrue --autofuse_pgo_topn5使用约束该参数需要与--autofuse_enable_pgo配合使用只有--autofuse_enable_pgo开启时设置的--autofuse_pgo_topn控制点才能生效。配置非法值时会恢复为默认值。--codegen_compile_debug控制是否保留融合算子生成时的中间过程文件。取值true保留文件。false默认为false不保留文件。配置示例--codegen_compile_debugtrue设置为true保留文件后在脚本执行目录下将生成kernel_meta_*文件夹其中包含生成的kernel源码、Tiling源码、cmake工程以及编译结果同时会在{debug_dir}/autofuse_compile_debug/路径下生成融合算子Schedule各个过程中的AscGraph Dump图。**使用约束**无--debug_dir指定融合中AscGraph dump图保存路径支持大小写字母a-zA-Z、数字0-9、下划线_、中划线-、句点.、中文字符执行用户需对该路径具有读、写、执行权限。若未指定该选项文件将保存至脚本执行的当前目录。配置示例--codegen_compile_debugtrue;--debug_dir/path/to/dump**使用约束**需要先配置--codegen_compile_debugtrue;打开自动融合debug开关。--disable_lifting用于控制lifting功能是否关闭。自动融合会将算子融合成名为AscBackend的新算子lifting则将未能满足条件的AscBackend回滚到原算子。取值true关闭lifting功能。false默认值开启lifting功能。配置示例--disable_liftingtrue使用约束该控制点仅用于定位Ascbackend回滚结构的分析问题开启该控制点可能会导致ApplyAdamD算子精度异常。--skip_node_names_cfg设置跳过融合的算子名字或算子类型。取值设置了算子名称或者算子类型的配置文件.ini格式路径以及文件名每个算子单独一行支持同时设置算子名称或者算子类型算子类型必须为基于Ascend IR定义的算子的类型。配置示例ini配置文件示例如下[ByNodeName] op_name1 op_name2 [ByNodeType] op_type1 op_type2参数使用示例--skip_node_names_cfg./skil_node.ini使用约束配置文件中的内容为非法值时该配置项不生效。【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表