CANN/ge图引擎概念原理

发布时间:2026/9/10 20:49:19

CANN/ge图引擎概念原理 概念原理【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/geTensor/Node/GraphAscend IRAscend Intermediate Representation昇腾中间表示是AI处理器专用的抽象数据结构用于表达计算流程。基于GE图引擎能力PyTorch、TensorFlow、MindSpore、PaddlePaddle等主流AI框架的算法模型可以统一转换为使用Ascend IR表示的计算图同时也支持用户自定义构建计算图后续的编译加速优化均基于该计算图完成。图 1使用Ascend IR表示的计算图 ![IR表示的计算图](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/ascend_ir_compute_graph.png 使用Ascend-IR表示的计算图?utm_sourcegitcode_repo_files)Ascend IR主要包括张量Tensor、NodeOperator、Graph三个维度的信息。Tensor包括Tensor描述及数据两部分Tensor描述包括了该Tensor的name、dtype、shape、format信息。表 1TensorDesc属性说明|属性|定义| |--|--| |名称name|用于对Tensor进行索引不同Tensor的name需要保持唯一。| |形状shape|Tensor的形状例如(10, )或者(1024, 1024)或者(2, 3, 4)等。如形状(3, 4)表示第一维有3个元素第二维有4个元素(3, 4)表示一个3行4列的矩阵数组。形式(i1, i2, …, in)其中i1到in均为正整数。| |数据类型dtype|Tensor对象的数据类型。取值范围float16, float32, int8, int16, int32, uint8, uint16, bfloat16, bool等。| |数据排布格式format|数据的物理排布格式详细请参见数据排布格式。|NodeNodeOperator包括算子的name、type、输入、输出、属性等信息。表 2Operator属性说明|属性|定义| |--|--| |名称name|算子的名称用于标识图中的某个算子同一图中算子的名称需要保持唯一。如图2所示Conv1、Pool1、Conv2都是图中的算子名称其中Conv1与Conv2算子的类型为Convolution表示分别做一次卷积运算。| |类型type|图中每一个算子根据算子类型进行实现的匹配相同类型的算子的实现逻辑相同。在一个图中同一类型的算子可能存在多个例如上图中的Conv1算子与Conv2算子的类型都为Convolution。| |输入input|算子的输入Tensor数据。| |输出output|算子的输出Tensor数据。| |属性Attributes|定义算子行为和功能常见的算子属性包括轴Axis、权重Weight、偏差Bias。|图 2算子名称表示的计算图 ![名称表示的计算图](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/op_name_compute_graph.png 算子名称表示的计算图?utm_sourcegitcode_repo_files)GraphGraph包括name、算子列表、输入算子、输出算子等信息。表 3Graph属性说明|属性|定义| |--|--| |名称name|图的名称用于标识网络中的某个Graph同一网络中Graph的名称需要保持唯一。| |算子列表|图中所有的节点列表。| |输入算子input|图的输入算子。| |输出算子output|图的输出算子。|GE的工作原理图构建GE提供了两种构图方式onnx/pb等模型图构建用户通过ATC命令行工具或者C语言的Parser接口通过前端框架算子逐一映射成CANN算子从而将框架模型文件如*.onnx和*.pb等格式解析成Ascend IR表示的计算图。图 1Parser解析计算图 ![Parser解析计算图](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/parser_parse_compute_graph.png Parser解析计算图?utm_sourcegitcode_repo_files)ATC命令行工具详细说明请参见《ATC离线模型编译工具》。使用Parser接口构建图请参见使用Parser接口将原始模型解析为Graph。使用图引擎接口全新构建Graph用户通过图引擎接口将计算函数算子进行组合构建成Ascend IR表示的计算图。下图展示了图构建的基本过程详细过程可参考使用图引擎接口全新构建Graph。图 2全新构建计算图 ![全新构建计算图](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/build_compute_graph_new.png 全新构建计算图?utm_sourcegitcode_repo_files)图编译与图优化对于Ascend IR表示的计算图GE适配底层硬件运行要求进行一系列的编译优化、编译生成om格式的离线模型主要过程包括图准备根据算子的输入张量信息、算子逻辑及算子属性等信息提前推理出算子的输出张量描述包括张量的形状、数据类型及数据排布格式等信息算子构图准备阶段就可以为所有的张量静态分配内存避免动态内存分配带来的开销此过程通常称之为inferShapeAndType、inferFormat。同时进行与硬件无关的、算法层级的优化包括但不限于常量折叠、冗余分支消除等。图拆分根据执行引擎AI Core/AI CPU等对算子分类拆分形成不同的子图方便后续在不同的硬件上进行针对性优化。图优化通过算子融合等图优化手段提升图的执行性能。可以进行和硬件无关的优化比如将多个算子融合成1个或几个算子节省计算时间或者进行与硬件相关的优化比如通过UB融合缩短数据在硬件内存上的搬运时间从而提升执行效率。Ascend 950PR/Ascend 950DT不支持UB融合。图编译根据计算图分配运行资源包括内存分配、stream资源分配等并编译生成.om离线模型。图加载与图执行加载编译生成的离线模型文件完成真实运行资源分配并将stream/task下发到Device上执行主要过程包括图加载解析离线模型分配真实的内存、创建stream运行资源。图执行拷贝输入数据将stream/task下发到Device由AI Core/AI CPU等执行对应的算子Device计算完成后返回给Host用户程序。模型下沉调度特性简介在AI模型运行中通常需要CPU和AI专用处理器如NPU又称AI处理器协同工作。CPU所在位置称为主机端Host而NPU所在位置称为设备端Device。主机端擅长处理复杂的逻辑计算而设备端擅长进行高并行计算。通过高效的计算调度机制实现Host和Device之间的高效协同是提高AI模型性能的关键能够显著提升异构系统资源的利用率。Host CPU将模型中的算子依次下发到Device执行如下图中的标号①所示每一个算子在执行流上以1个或多个Task的形式存在昇腾AI处理器依次拉取执行流上的Task执行。这种Host调度带来的问题是需要Host和Device频繁交互在实际的训练或推理场景中模型会运行多次每次运行都会触发Host把模型上的所有算子遍历下发一遍。图 1Host调度示意图 ![Host调度示意图](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/host_scheduling_diagram.png Host调度示意图?utm_sourcegitcode_repo_files)对于输入tensor shape固定不变的静态shape的模型在编译时即可确定所有算子的输入输出shape结合昇腾内存复用算法可完成模型级内存编排静态shape模型在编译时还可提前完成所有算子的Tiling计算等Host侧计算。因此GE提供了静态图下沉调度模式让模型中的算子在加载阶段提前以整图的形式下发到Device上在执行时只需在Host侧下发一个模型执行的Task即可触发模型在Device上调度执行。相比于Host调度模式下沉调度模式可大大降低Host侧调度开销有效减少Host和Device之间的交互。图 2静态图下沉调度示意图 ![静态图下沉调度示意图](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/static_graph_scheduling_diagram.png 静态图下沉调度示意图?utm_sourcegitcode_repo_files)实现原理模型下沉调度分为两个阶段模型加载和模型执行。模型加载模型加载的具体动作和Host调度类似即遍历图中的所有算子并将其整体下发至Device流上区别在于下发到流上不立即执行。模型加载是一次性的动作在首次模型执行时完成模型加载如上图中的过程1所示。模型执行模型加载完成之后可以像下发单算子Task一样向执行流下发一个模型执行Task昇腾AI处理器调度到该Task时如上图 “执行流”中的E执行模型中所有Task如上图中的过程3。如果需要多次运行模型仅需多次下发模型执行Task如上图中的过程2所示。Host Bound调度和模型下沉调度的时序比较如下图所示可以看出模型下沉执行的开始有一个模型下发的头开销模型下沉执行E2E会有一个相对于Host调度的收益模型的下沉头开销越小性能提升幅度将越大。模型下沉调度Host/Device时序分析如下所示每次模型下发时支持更新模型的Feature Map内存地址和输入输出内存地址。如果模型的Feature Map内存和模型输入输出内存发生了更新则在模型下沉头开销即上图中的m_l_t中会完成模型内算子相关地址的刷新。【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 20:44:19

CANN/GE模型描述获取API

aclmdlGetDescFromFile 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Ten…

2026/9/10 20:44:19

cann/ge 获取数据集缓冲区API

aclmdlGetDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

2026/9/10 21:44:28

Simulink风电场无功控制建模与仿真实践

1. 项目背景与核心挑战小型风电场接入无限电网时,无功功率控制是确保系统稳定运行的关键技术。不同于传统发电机组,风力发电具有间歇性和波动性特点,这使得电网电压调节面临新的挑战。在Simulink环境下搭建仿真模型,能够有效验证控…

2026/9/10 21:44:28

ACSL-7210-06RE光耦特性与高速隔离通信设计

1. ACSL-7210-06RE光耦器件的基本特性解析ACSL-7210-06RE是一款采用CMOS工艺制造的双通道双向高速光耦合器,在现代工业自动化和通信系统中扮演着关键角色。这款器件最显著的特点是能够在两个独立通道上实现双向信号隔离传输,数据传输速率可达10Mbps&…

2026/9/10 21:44:28

白名单执念:为什么总有人想申请免验证

白名单执念:为什么总有人想申请免验证 每隔一段时间就会出现的提问,格式高度统一: 「有没有办法让千牛不弹验证?」「申请白名单要什么条件?」「听说充钱到多少级就不验证了?」——每隔一阵就出现的统一提问…

2026/9/10 21:44:28

电商运营的一天:一条验证码时间线的全记录

电商运营的一天:一条验证码时间线的全记录 一位运营把自己某天的验证码遭遇记成了流水账,看完只想递纸巾: 「8:47改价弹滑块;10:12巡检弹点选;13:05午休回来第一件事补验证;16:40批量改库存,弹…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码