ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

昇腾/GE基于fallback形式下发算子

昇腾/GE基于fallback形式下发算子 基于fallback形式下发算子【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge简介Atlas 200I/500 A2 推理产品不支持该特性。GE提供了两种常规的模型调度模式下沉调度和Host调度用于实现Host和Device之间的高效协同。下沉调度模式通常适用于静态shape模型由于输入tensor shape固定不变可以在编译阶段完成内存编排和Tiling计算因此可以将模型中的算子以整图形式下发到Device上执行时只需在Host侧下发一个模型执行的Task即可触发模型在Device上调度执行从而提升模型调度性能。Host调度模式通常适用于动态shape模型由于输入tensor的shape不确定必须在上一个算子完成shape推导后才能确定下一个算子的输入shape等信息因此整个模型无法下沉执行通常需要将每个算子Kernel逐一下发到Device执行。基于fallback形式下发算子属于Host调度模式的一种用户可以在Host侧通过fallback函数执行算子例如可直接调用aclnnXX单算子API执行算子。用户仅需在算子开发过程中调用Ascend C的EnableFallBack接口即可自动生成fallback函数供GE自动回调fallback函数的主要任务就是将GE的输入输出及属性转换为aclnnXX单算子API所需的参数格式然后调用aclnnXX接口执行算子。图 1常规Host调度模式和fallback下发的对比 ![图示](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/compare.png 常规Host调度模式和fallback下发的对比?utm_sourcegitcode_repo_files)适用场景不支持离线推理场景仅适用于训练或在线推理场景。通常建议针对动态shape模型中的多Kernel算子启用fallback下发。主要原因是在静态shape场景下aclnnXX接口包含Host操作无法以整图形式下发需要断图后以子图形式下发这可能会对性能产生较大影响。在极少数情况下算子开发者为了实现算子的极致性能优化开发了多Kernel算子如昇腾内置的Matmul和MC²等算子。这类算子对应多个Kernel实现在执行时需要Launch多个Kernel。由于Kernel的数量不确定GE无法按照上述常规方式统一处理因此需要通过fallback方式下发算子。对于单Kernel算子启用fallback下发方式可能会导致性能下降。目前基于Ascend C自定义算子工程自动生成的aclnnXX接口均为单Kernel算子API因此不建议用户针对这些算子启用fallback下发。实现原理动态shape模型中多Kernel算子启用fallback下发的流程如下图所示。图 2动态shape模型中的多Kernel算子下发执行流程 ![图示](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/dynamic_shape_multi_kernel_exec_flow.png 动态shape模型中的多Kernel算子下发执行流程?utm_sourcegitcode_repo_files)fallback函数的主要任务是将GE的输入输出及属性转换为aclnn单算子API所需的参数格式然后通过调用aclnnXX接口执行算子。以concat算子为例fallback函数的格式为static graphStatus ConcatExecuteFunc(OpExecuteContext* host_api_ctx)OpExecuteContext指针入参中主要包含计算fallback所需的信息例如输入输出的shape和datatype等具体请参考《基础数据结构和接口》gert命名空间OpImplSpaceRegistryV2类。用户无需手动实现fallback函数在算子原型注册过程中只需调用EnableFallBack接口系统将自动生成fallback函数并注册到GE。使用指导算子开发阶段用户在算子原型注册过程中调用Ascend C的EnableFallBack接口自动生成fallback函数class CustomOp : public OpDef { public: CustomOp(const char* name) : OpDef(name) { // 定义算子的输入/输出信息包括是否必选、输入输出支持的DataType、Format this-Input(x).ParamType(REQUIRED).DataType({ge::DT_FLOAT}).Format({ge::FORMAT_ND}); this-Input(y).ParamType(REQUIRED).DataType({ge::DT_FLOAT}).Format({ge::FORMAT_ND}); this-Output(z).ParamType(REQUIRED).DataType({ge::DT_FLOAT}).Format({ge::FORMAT_ND}); // 注册Shape推导函数 this-SetInferShape(ge::InferShapeFunc); this-SetInferDataType(ge::InferDataTypeFunc); // 通过AddConfig注册算子支持的AI处理器型号 this-AICore().AddConfig(ascendxxx); this-EnableFallBack(); } }; OP_ADD(CustomOp);当前fallback函数支持support_aclnn和aclnn_only两种调用模式可通过ExtendCfgInfo接口的aclnnSupport.value参数进行配置详细可参见《Ascend C API》。support_aclnn此模式下静态Shape场景中该算子通过模型下沉执行动态Shape场景则在Host侧调用fallback函数下发算子。如果调用了EnableFallBack则默认采用该模式。aclnn_only此模式下动静态Shape场景中该算子均以fallback形式下发。不建议用户使用该模式后续版本将被废弃。基于GE图模式进行训练或在线推理时会自动回调fallback函数执行相关算子。功能调试support_aclnn模式和aclnn_only模式下的关键日志为xxx, setting fallback attribute【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表