尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CANN/GE AutoFuse自动融合概述

CANN/GE AutoFuse自动融合概述 概述【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge什么是AutoFuseAutoFuse是基于Ascend C的自动融合框架支持自动融合范围识别、自动算子代码生成、Auto Tiling优化、动态shape及混合精度等特性在算法网络中由于存在大量的Vector计算各个Vector计算之间会产生大量的内存搬运导致Memory Bound问题。而AutoFuse通过自动将多个算子融合为一个算子减少网络中的算子数量和内存搬运从而缓解了Memory Bound问题释放昇腾算力提升模型的执行性能。收益原理示意图如下图所示自动融合通过将多个算子合并为单个算子理论上在MTE搬运、动态shape调度开销方面都会有一定的收益对于小shape、MTE Bound的推荐网络一般都能获得正收益。图 1收益原理 ![图1示例](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/benefit_principle.png 收益原理?utm_sourcegitcode_repo_files)自动融合特性仅在如下产品型号支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品技术路线自动融合方案基于昇腾NPU底层统一的Ascend C IRAscend C IR是面向Ascend C编程语言做建模的IR如下简称AscIRSchedule与代码生成能力构建了两条融合实现路径如图2所示。第一条路径基于昇腾自研的GE框架注重NPU的亲和性核心包括三部分能力Ascend IRAscend Intermediate Representation的符号化shape推导通过变量符号表达动态变化的shape从而在编译时基于符号化的shape进行代码生成。Ascend IR到AscIR的Lowering实现使用低层级的AscIR表达Ascend IR的计算逻辑确定融合结构。融合策略结合AscIR的特点与约束进行融合结构间的循环轴合并获得融合最优解。第二条路径则对接PyTorch Inductor聚焦于生态支持复用Inductor的融合能力将Inductor IR表达的融合结构转换为Ascend C IR图进行代码生成。当前版本不支持该技术路线。图 2技术路线 ![图2示例](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/technical_route.png 技术路线?utm_sourcegitcode_repo_files)融合原理自动融合的实现包含两部分自动确定融合范围和根据融合范围自动生成融合kernel源码及kernel二进制。前者称为自动融合前端后者称为自动融合的后端对应图2中的公共底层能力前端的实现主要是根据一定规则或配置判断哪些算子能够融合确定一个融合算子的融合范围融合范围用FusedGraph来表达如下图图3所示FusedGraph内部包含1个AscBackend节点AscBackend可以理解为一个类似于ge::op::partitionedcall的Ascend IR算子其携带一个子图对象一个AscBackend节点携带一个AscGraph属性一个AscGraph内包含多个AscIR节点。AscIR与AscGraph详细介绍请参见AscIR与AscGraph。图 3FusedGraph ![图3示例](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/fused_graph.png FusedGraph?utm_sourcegitcode_repo_files)图 4AscBackend对应的AscGraph ![图4示例](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/ascbackend_ascgraph.png AscBackend对应的AscGraph?utm_sourcegitcode_repo_files)后端的实现包含Schedule/Codegen/Auto Tiling等后端接收到FusedGraph后Schedule首先针对计算/搬运类节点分别生成对应的TilingGroup并通过TilingGroup合并策略构建适用于整个融合算子的归一化TilingGroup。最终基于该归一化TilingGroup来生成FusedGraph的Tiling策略。经过Codegen实现和Auto Tiling生成kernel源码、tiling_func源码、tiling_data源码、并编译生成Host和Device交付件。 自动融合的生效方式请参见AutoFuse开启方式。Schedule/Codegen/Auto Tiling的实现原理请分别参见对应章节。【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表