GE 引擎进阶:依赖图的原子性管理与异构算子协作调度

CANN 组织链接https://atomgit.com/cann
GE 仓库链接https://gitcode.com/cann/ge


1. 图的原子性与依赖关系的最小化表示

GE 必须将复杂的神经网络结构转化为一个最小化的、无歧义的依赖图,以供 Runtime 进行精确调度。

1.1 算子边界的原子性定义

图中的每一个节点(算子)都被视为一个原子执行单元。这意味着 GE 必须确保:

  • 输入数据完整性:在算子开始执行前,其所有输入张量(来自上游算子或模型输入)的数据必须是完全就绪的,这由 GE 构造的依赖边来保证。
  • 输出一致性:算子执行完成后,其输出张量必须是稳定且一致的,可供下游算子安全读取。

1.2 通信与计算的依赖融合

在模型并行场景下,GE 将通信操作(HCCL/SHMEM)视为具有特定依赖性的特殊算子。

  • 同步依赖的强化 :如果算子 S B S_B SB 依赖于 S A S_A SA 的输出,而 S A S_A SA 的输出需要通过跨卡通信才能到达 S B S_B SB 所在的 NPU,GE 会在 S A S_A SA 的通信完成事件和 S B S_B SB 的计算启动之间建立一个强依赖关系,确保数据在计算开始前到达。

2. 异构算子协作的调度一致性

GE 负责协调 ops-nn 标准算子、自定义 Ascend C/PyPTO 算子以及可能的回退 CPU 算子之间的执行顺序。

2.1 算子实现的类型标记

GE 在图构建时,会查询每个算子的实现类型:

  • 硬件实现标记:如果一个节点被映射到 NPU 硬核(如 ops-nn 的 MatMulV3),GE 知道它可以利用最高并行度。如果被映射到自定义 Ascend C 核,GE 则参考该自定义算子注册的 Tiling 信息来估算其资源需求。
  • 运行时性能模型:GE 内部维护了不同算子在不同硬件配置下的性能模型。在调度时,GE 会尝试将计算量大、依赖性少的任务优先分配给空闲的 NPU 核心。

2.2 资源分配的静态约束

GE 在图编译时静态地预先分配资源,这需要对算子的资源使用有精确的预测。

  • Local Memory 预留:GE 估算每个算子在执行期间所需的 Local Memory 峰值占用。由于 Local Memory 是稀缺资源,GE 需要确保在同一时间段内被调度的所有核函数(即使它们在不同的 AI Core 上)的总 L0/L1 占用不超过物理限制。

3. 结论

GE 在 CANN 体系中扮演着资源仲裁者和执行规划师的角色。它通过对计算图进行原子化分解和深度依赖分析,结合对算子实现的类型标记和资源消耗的精确预测,生成最优的执行计划。这种对图拓扑和硬件资源之间关系的精确管理,是实现高性能和高稳定性的关键。


CANN 组织链接https://atomgit.com/cann
GE 仓库链接https://gitcode.com/cann/ge

相关推荐
美酒没故事°19 小时前
Open WebUI安装指南。搭建自己的自托管 AI 平台
人工智能·windows·ai
云烟成雨TD19 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Wenweno0o19 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨19 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg32132119 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
AI攻城狮19 小时前
用 Obsidian CLI + LLM 构建本地 RAG:让你的笔记真正「活」起来
人工智能·云原生·aigc
鸿乃江边鸟19 小时前
Nanobot 从onboard启动命令来看个人助理Agent的实现
人工智能·ai
lpfasd12319 小时前
基于Cloudflare生态的应用部署与开发全解
人工智能·agent·cloudflare
gelald19 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川19 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java