AIV Direct Drive
一句话先懂
把跨卡通信想成寄快递:数据是包裹,AIV 是整理包裹的仓库工人,AICPU 或 Host CPU 是调度员,通信硬件是车辆和道路。
传统路径需要多一次交接:
1 | AIV 整理数据 → AICPU/Host 下发任务 → 通信硬件搬运 → AIV 继续处理 |
AIV 直驱把细粒度任务提交下沉到设备侧:
1 | AIV 整理数据并提交任务 → 通信硬件搬运 → AIV 检查完成并继续处理 |
“直”是控制路径更直接,不是 AIV 亲自取代网卡。Host 通常仍负责初始化通信资源、建立连接和启动 AIV Kernel;进入 Kernel 后,AIV 才接管高频的提交、同步与后处理。
先认清 AIV
在昇腾 AI Core 的分离模式中,AIC 和 AIV 是一组不同职责的计算核。官方架构文档将 AIC 定义为 Cube Core,将 AIV 定义为 Vector Core;AIV 包含独立的 Scalar 调度单元、Vector 计算单元和搬运单元,因此能够加载并执行自己的代码段,而不只是一个被动的向量运算器。昇腾 AI Core 基本架构
| 部件 | 主要职责 | 在直驱中的位置 |
|---|---|---|
| AIC / Cube Core | 矩阵乘等 Cube 计算 | 通常是被通信流水喂数据的计算侧 |
| AIV / Vector Core | 向量处理、标量控制和数据整理 | 执行通信算法、准备描述符、提交与检查通信 |
| AICPU / Host CPU | 通用控制和任务编排 | 非直驱路径中的中间下发者;直驱后退出高频关键路径 |
| HCCS / RoCE / RDMA / URMA | 跨卡或跨机的数据传输 | 真正完成字节搬运的传输路径 |
“直驱”直在哪里
HCCL 的公开文档给出了较宽泛的 AIV 通信引擎路径:Host 先提交一个 AIV Kernel,调度器把 Kernel 发送到 Vector Core,随后通信步骤由 Vector Core 执行,并直接利用 HCCS 或 RoCE 完成数据搬运。HCCL 通信引擎
这里的“直接”是相对于两种更长的控制路径:
- Host CPU + TS:Host 把内存拷贝、同步等操作逐项提交给 Device 侧 Task Scheduler。
- AI CPU + TS:Host 先启动 AI CPU Kernel,再由 AICPU 提交通信任务,之后调度到执行器。
- AIV 引擎:Host 启动一次 AIV Kernel,通信算法的高频步骤留在 Vector Core 内推进。
更窄的 AIV 直驱 RDMA 还会把 WQE 提交从 AICPU 下沉到 AIV。WQE(Work Queue Element)可以理解为提交给 RDMA 工作队列的一条描述项,包含源/目的地址、长度、对端和操作类型等信息。
1 | 非直驱:AIV 准备地址与长度 → AICPU 生成/提交 WQE → RDMA 传输 |
昇腾公开的 MoE 案例指出,AICPU 驱动 RDMA 时 WQE 串行下发会阻碍深度流水;改为多个 AIV 核并行下发 WQE 后,可以减少提交时延,并把发送粒度从按目标 Rank 聚合进一步细化到 Token。CANN MoE 通算融合案例
对象与执行过程
下面采用一个教学化对象表。不同芯片、CANN 版本和通信协议的真实字段会变化;表中对象用于说明谁生产、谁消费以及何时结束生命周期,不冒充未公开源码。
| 对象 | 生产者 | 消费者 | 形状或内容 | 生命周期 |
|---|---|---|---|---|
input_tokens |
上游模型阶段 | AIV 预处理 | [T, H],FP16/BF16 示例 |
形成发送切片前保持存活 |
route_rank |
MoE Router | AIV 控制逻辑 | [T, K],目标专家或 Rank |
完成 Dispatch 规划后释放 |
send_slice |
AIV Gather/Reorder | 通信硬件 | [t, H] |
对应传输完成前保持存活 |
channel_ctx |
Host/HCCL 初始化 | AIV Kernel | Channel、对端地址和传输句柄 | 跨多次传输持久存在 |
wqe |
直驱路径中的 AIV | RDMA 工作队列 | 地址、长度、对端、操作 | 从提交到完成状态返回 |
notify_or_flag |
对端或通信协议 | AIV 等待逻辑 | Notify、Flag 或完成状态 | 覆盖一次同步区间 |
remote_buffer |
通信硬件写入 | 接收侧 AIV | [T_recv, H] |
后处理和下游消费期间存活 |
output_tokens |
接收侧 AIV | 本地专家或下一层 | [T_recv, H] |
作为机制输出继续向下游传递 |
AIV 通信算子的公开资源模型也对应这张表:Vector Core 表达 Rank 内并发,Notify 提供核内或跨 Rank 的软件同步,Channel 提供跨 Rank 数据通道。AIV 通信资源
下面的伪代码表达完整教学路径,不对应某个公开 API:
1 | def host_prepare(group, topology): |
读图时应特别注意:AICPU 被旁路的是每次 WQE 的高频提交,不是所有初始化工作;蓝色实线表示数据,橙色虚线表示控制;wqe 是控制描述符,不是 Token 张量。
MoE 中为何重要
MoE Dispatch 先根据 Router 结果,把每个 Token 发到对应专家所在的 Rank。此时通信通常具有三个特征:消息小、目标分散、每轮频繁发生。这恰好放大了固定下发时延,而不是只考验链路峰值带宽。
如果 WQE 主要由 AICPU 串行下发,为减少提交次数,实现往往倾向先把同一目标 Rank 的 Token 聚合成大块,再统一传输。这会引入等待:较早准备好的 Token 也要等同组数据聚齐。AIV 并行提交 WQE 后,可以让更多小块更早进入传输路径,并把机间接收、机内转发和接收后处理形成更深的流水。
公开案例报告 MoeDistributeDispatch 和 MoeDistributeCombine 在该实现与测试条件下,相比前一阶段的 AIV+AICPU 分层方案平均性能提升 **10%+**。这个数字只证明该案例中的相对结果;公开文章没有给出足以外推到其他模型、Shape、拓扑、硬件或 CANN 版本的完整原始数据,因此不能把它当作“AIV 直驱必然提升 10%”的通用结论。
收益与代价
把一次通信粗略拆为:
$$
T_{comm}=T_{launch}+T_{submit}+T_{transport}+T_{sync}+T_{post}
$$
其中,$T_{launch}$ 是 Kernel 启动时间,$T_{submit}$ 是工作描述符准备与提交时间,$T_{transport}$ 是链路传输时间,$T_{sync}$ 是完成确认与同步时间,$T_{post}$ 是接收后处理时间。AIV 直驱主要降低或掩盖 $T_{submit}$,并通过流水重叠部分 $T_{transport}$、$T_{sync}$ 与 $T_{post}$;它不会自动提高物理链路带宽。
| 维度 | 直接收益 | 新代价或限制 |
|---|---|---|
| 控制路径 | 减少 Host/AICPU 中转 | 设备侧协议和错误处理更复杂 |
| 提交并行度 | 多个 AIV 核可并行提交 | 需要正确划分队列、Channel 和同步资源 |
| 通信粒度 | 小块或 Token 可以更早发送 | WQE 数量、状态轮询与元数据开销增加 |
| 通算流水 | 预处理、传输、转发、后处理可重叠 | 依赖拓扑、资源和完成语义正确配合 |
| Vector 资源 | AIV 可直接推进协议 | 通信与激活、量化等 Vector 计算竞争核资源 |
| 带宽上限 | 更容易减少空洞、接近可用带宽 | 链路饱和后,继续缩短提交路径收益有限 |
HCCL 文档明确把 AIV 引擎定位为低时延方案,同时提醒它会占用 Vector Core,并可能与计算算子争用;算法选择章节进一步把它指向数据量较小、时延敏感的推理通信。AIV 算法选择
要报告数值收益,至少应在同一模型、Batch/Token 分布、精度、EP 拓扑、硬件、CANN 版本和测量窗口下,对比端到端算子时间、WQE 提交时间、链路利用率、AIV 占用率以及 P50/P99 时延。
边界与误解
AIV 直驱通常值得优先评估的场景包括:
- 小而频繁的推理通信,固定提交时延占比较高。
- MoE Dispatch/Combine 或 AllToAllV,目标不规则且需要细粒度流水。
- 通信与 Vector 后处理融合,AIV 可以立即消费完成状态和接收数据。
- Host/AICPU 下发成为瓶颈,Profiler 能观察到提交串行或任务间空洞。
以下情况则不能仅凭“直驱”二字判断更优:
- 大块传输已经受链路带宽限制,控制时延占比很小。
- AIV 正在执行繁重的激活、量化或数据变换,通信会争抢 Vector Core。
- 组网、通信域、算子、数据类型或产品版本不支持对应引擎。
- 业务依赖复杂错误恢复、多通信域并行或尚未验证的完成语义。
从实现归属看,通信域、Channel、Notify、内存注册和传输能力属于 CANN/HCCL 与底层 Runtime;具体算子的 Tiling、数据重排、WQE 粒度、完成状态消费和异常处理属于算子实现。迁移到新芯片、协议或新 MoE 结构时,至少要重新适配资源申请、目标映射、队列并发、同步协议、错误恢复和性能阈值,不能只替换一个“直驱”开关。
最常见的四个误解是:
- 把 AIV 当成 AIC。AIV 是 Vector Core,AIC 主要负责 Cube 矩阵计算。
- 把直驱理解成 AIV 亲自传完数据。AIV 负责控制与编排,传输硬件负责数据面搬运。
- 把直驱理解成完全没有 Host。Host 仍可能负责资源初始化、建链、内存注册和 Kernel 启动。
- 把低时延理解成带宽凭空增加。直驱主要减少软件提交开销;链路上限不会因此消失。
总结
理解 AIV 直驱时记住三条规则即可:先问旁路了谁,再问驱动了什么,最后问数据究竟由谁搬。在公开 CANN 语境下,宽泛定义是 Vector Core 执行通信算法并直接使用通信通路;在 AIV 直驱 RDMA 的窄义场景中,则进一步表示 AIV 自己提交 WQE、旁路 AICPU 的逐次下发。它的价值来自更短的控制路径、更高的提交并行度和更深的通算流水,代价是 AIV 占用、同步复杂度与严格的版本适配边界。