Serving Large Language Models on Huawei CloudMatrix384

Serving Large Language Models on Huawei CloudMatrix384

在华为超节点上部署大模型

October 3, 2025  Last modified on October 6, 2025

华为超节点(CloudMatrix384)是华为在 2025 年发布的一种突破了冯·诺伊曼体系结构,将各类异构资源通过 UB(Unified Bus,统一总线)整合而成的超大规模计算节点,专为 LLM(Large Language Model,大语言模型)服务而设计。在此基础上,华为还提出了 CloudMatrix-Infer 推理系统,提出了 PDC(Prefill-Decode-Cache)分离架构、LEP(Large Expert Parallel,大规模专家并行)等创新技术,为大语言模型的高效推理提供了强大支持。

arXiv 论文链接

核心创新点

  1. CloudMatrix 超节点架构
    • 通过 UB 互连,使多个节点在逻辑上组成一个整体计算机
  2. CloudMatrix-Infer 推理系统
    • 采用 PDC 分离架构,将 prefill、decode 和 caching 三个阶段分离部署
    • 引入 LEP 大规模专家并行技术,有效支持 MoE 模型推理
    • 采用硬件感知量化方案,针对 Ascend 910 硬件特性优化 INT8 量化
  3. 突破性性能指标
    • 4K 长度提示词下实现 6688 tok/s1,TPOT 达到 1943 tok/s

CloudMatrix 架构详解

超节点的设计理念

CloudMatrix 超节点的设计理念

超节点设计的核心思路在于突破传统的冯·诺依曼体系结构,将各类异构资源通过 UB 统一总线整合而成的超大规模计算节点。这些异构资源包括 NPU、NPU、存储、网卡等,它们都是分离式且可扩展的。

关键的核心在于超高带宽且低延迟的 UB,优势在于:

  • 消除了节点间的通信瓶颈,特别是对于 LLM(MoE)模型中的 TP 和 EP。
  • 所有的异构资源解耦,可根据任务特性(如计算密集型的 prefill 和访存密集型的 decode)调整 CPU/NPU 配比。
  • 使多任务负载混合流水线执行,提高资源利用率。
  • 存储分离消除传统 I/O 瓶颈,支持高吞吐量的 K/V 缓存存储。

CloudMatrix384 案例分析

CloudMatrix384 是一种搭载了 384 个 Ascend 910 NPU 和 192 个 Kunpeng CPU 的超节点,每个节点配备 8 个 NPU 和 4 个 CPU。据此可推得一个超节点内共有 48 个节点。

CloudMatrix384 的设计要点是:

  • peer-to-peer 点对点通信
  • fully interconnected 全互联
  • ultra-high-bandwidth 超高带宽

CloudMatrix384 超节点的架构

超节点的三层网络平面:

  1. UB 平面:实现非阻塞的 NPU/CPU 全互联,支持 TP/EP (超节点内)跨节点和跨设备存储访问
    • 1 级 UB:节点内 NPU/CPU 全互联
    • 2 级 UB:超节点内跨节点 NPU/CPU 全互联
  2. RDMA 平面:支持跨超节点的 NPU 间通信,传输因 PDC 分离产生的 K/V 缓存
  3. VPC2 平面:负责上层的部署、调度、管理和监控等功能

硬件组件

Ascend 910C 架构

一块 Ascend 910C 芯片由两块 Ascend 910D3 组成。

CloudMatrix384 超节点内的一个节点

CloudMatrix384 超节点内的 UB 交换系统

CloudMatrix-Infer 部署 DeepSeek 模型

基于 P2P 的 PDC 分离部署

CloudMatrix384 超节点内的 PDC 分离部署架构

Prefill 集群:

  • 每个 P 实例配备 16 块 NPU
  • 并行策略:
    • MLA:分阶段混合并行
    • MoE:EP=32,其中每个 rank:
      • 1 个共享专家
      • 8 个路由专家
      • 1 个冗余专家

Decode 集群:

  • 每个 D 实例配备 160 块 NPU
  • 并行策略:
    • MLA:DP=320
    • MoE:EP=320,每个 rank 包含 1 个专家,共包括:
      • 32 个共享专家
      • 256 个路由专家
      • 32 个冗余专家

此外,MoE 阶段均采用了 EPLB(Expert Parallelism Load Balancer)优化。

P/D 分离部署的并行策略除 Prefill 的 MLA 外,其余与 DeepSeek-V3 的技术报告中所述一致。

可以进一步推得,在一个 CloudMatrix384 超节点内:

  • P 实例共有 4 个,需要共计 64 个 NPU
  • D 实例共有 2 个,需要共计 320 个 NPU

注意到 P/D 之间的 hidden states 通过 RDMA 平面通信。而 P 节点的 K/V 缓存则通过 UB 存储到远程 C 节点上,D 节点则从 C 节点远程读取之。于是,PDC 三者之间形成生产者-消费者模型。

P2P 架构和 K/V 缓存中心化架构对比

K/V 缓存中心化架构主要由过去一些系统(如 Nvidia DynamoMooncake)提出和采用。它的最大特点是请求调度与本地 K/V 缓存读写是紧耦合的。这带来的挑战是,节点内访存带宽大大高于节点间通信带宽,因此远程 K/V 缓存访问延迟成为了性能瓶颈。

如果采用 CloudMatrix 所提出的 P2P 架构,它的最大特点是扁平化的,P/D 都可以直接访问。而且,超节点内的通信都是基于 UB 的,因此不存在节点间通信瓶颈。总而言之,其优势在于:

  • 轻量级、无状态的调度,不受数据局部性的限制
  • 调度机制需求低
  • 增加存储器资源利用率

此外,在长序列任务绘制用户会话异步到达与离开等场景中,负载通常是异步的。为了更好地提高资源利用率,CloudMatrix-Infer 会强制伪同步执行。

Decode:大规模专家并行

MoE 优化:融合计算通信算子

CloudMatrix-Infer 与传统 MoE 计算流程的对比

传统的基于 EP 的 MoE 计算过程,需要 2 次 Dispatch 和 1 次 Combine。其中的 2 次 Dispatch 分别是为了交换路由元数据,以及分发各个词元到不同的专家。这带来的挑战如下:

  • 共计 3 次的 A2A4 通信成本高
  • 每个专家推理的词元数量不同,需要动态分配内存和频繁的 CPU-NPU 同步
  • 算子之间存在依赖关系,顺序执行资源利用率低

解决方案:通信计算融合算子,包括 FusedDispatch 和 FusedCombine。这些算子使用原生的 Send/Recv 算子,取代了 A2A,并且在 UB 的加持下降低通信开销。具体来说,这其中用到了如下的优化技术:

  • AIV-Direct5 取代 SDMA 实现远程 NPU 内存访问【参考图 11】
  • 在 Dispatch 之前就量化,降低通信开销
  • 静态预分配内存
  • 数据传输流水线【参考图 12】

CloudMatrix-Infer 的 AIV-Direct 与传统的 SDMA 之异同

如图所示,AIV-Direct 相比于 SDMA,无需走本地 NPU 内存,可直接对远程 NPU 内存进行访问。

CloudMatrix-Infer 实现数据传输流水线的三个阶段

如图所示,整个融合计算通信算子要解决一个问题,把数据写到远程 NPU 的内存。首先就需要先算出写到哪里(目标偏移地址)。如果按照顺序执行(先算偏移 → 再传数据),就会产生等待,导致流水线停顿。为了解决这个问题,可以将整个过程拆分为如下三个阶段:

  1. 拷贝阶段:把下一个 token 放进本地的缓存(UBuffer)。
  2. 计算阶段:算出目标 NPU 内存中的偏移地址,如果启用了量化,就在这一步把数据转成 INT8。
  3. 传输阶段:通过 AIV-Direct 把数据写到对方 NPU 的内存中。

这样多个任务就可以流水线执行,避免了等待。

MLA 优化

如果直接将 DeepSeek 的算子迁移到昇腾上有几点挑战:

  • 细粒度的算子启动开销
  • K/V 缓存格式转换开销
  • 序列长度变化对基于 MTP 的负载均衡的影响

解决方案:

  1. 融合算子【图 13】
    • 将 RMSNorm、Q/K/V projections、RoPE 融合为一个算子 MLAProlog
    • FlashAttention 和前后的切片与合并操作融合为一个算子 Fused Attention (FA)
  2. N-Zigzag 格式化 K/V 缓存
  3. 使用 BNSD ([Batch, NumHeads, Sequence, HeadDim]) 而不是 BSND

CloudMatrix-Infer Attention 融合算子的优化

Pipeline & Overlapping

CloudMatrix-Infer 与 DeepSeek 在 Decode 阶段的通算掩盖对比

根据 DeepSeek-V3 技术报告中的内容,在 Decode 阶段,共享专家和路由专家是协同部署的。在此基础上,结合 EPLB 算法,就可以实现如果某个专家被调用频繁、负载高,就可以把这个专家在多个设备或节点上复制多个副本,以分散负载。

而在 CloudMatrix384 的设计中,每个 NPU Die 上通常只有一个专家。直观来看,这是为了降低推理时延。然而,这样做会导致注意力算子(图中所示的 ATTN-0)不足以完全掩盖 Dispatch。

解决的方案是不简单按照 DeepSeek 的通算掩盖6思路,而是按照 block 来划分。具体来说:

  • Stream 0 (Attention Path):负责计算密集型或访存密集型任务(主要是 Attention 部分)
  • Stream 1 (MoE Path):负责 MoE 的计算和通信

MTP 优化

MTP(Multi-Token Prediction,多词元预测)的机制是每次推理出一个词元时,还会预测接下来的几个词元,然后在后续的生成中验证。尽管它能提高解码效率,但是其带来的挑战是频繁的 CPU-NPU 同步,这会导致流水线中断的问题。

不采用 MTP、采用 MTP 和 CloudMatrix-Infer 优化后的 MTP 流水线对比

如图 15b 所示,MTP 预测多个 token 然后验证一次这个过程是串行的,其问题根源是:

  • CPU 需要频繁介入来初始化和传递动态元数据,MTP 需要用到 LLM 验证后确定的序列长度
  • CPU 介入采样(选出下一个 token)中断 NPU 执行

那么解决的方案【图 15c】就在于设置一个机制避免 NPU 的中断和频繁的 CPU-NPU 同步。具体来说可以:

  • 不要等到每个 graph 执行前才由 CPU 单独准备元数据,而是在解码开始时一次性把所有需要的 metadata 全部准备好。
  • 把整个采样过程完全移到 NPU 内部执行,不再依赖 CPU。

Prefill:分阶段混合并行

Prefill 阶段面临的主要挑战:

  • 输入序列长度不均匀
  • MoE 通信开销

MLA 优化

在传统的纯 DP 并行策略下,MLA 的现有问题主要包括:

  • 序列长度不齐:短序列需要等待长序列处理完毕,导致资源浪费。
  • 低效并发:如果 DP 并行度太高(假设 DP=32)时,如果一批请求没有达到 32 个,必然有设备空闲;如果硬要攒到 32 个请求,平均的 TTFT 时延显著增加。

分阶段混合并行策略与纯 DP 之比较

解决方案:分阶段混合并行策略。在 MLA block 内,计算 Attention 时采用 TP,前后则采用 SP。具体来说,SP 用到了序列打包:第一阶段的 down_proj 和第三阶段的 o_proj。

分阶段混合并行策略的通信

采用混合并行策略的代价在于引入了两次额外的通信:

  • 阶段 1 和 2 之间 AG
  • 阶段 2 和 3 之间 A2A

尽管通信次数增加了,但是单位通信量减小(得益于 TP)。

TODO: 单位通信量减小的理论分析

Pipeline & Overlapping

DeepSeek-V3 技术报告中提出的双微批次通算掩盖的策略直接应用到 CloudMatrix384 上会存在硬件架构不适配的问题。根据 CloudMatrix384 的特点,首先可以将低强度的辅助计算卸载到 AIV,使 AIC7 能够专注于计算密集型算子;其次,可以显式地路由大容量数据传输,特别是 MoE 的 A2A。【详见图 18b】

CloudMatrix-Infer 与 DeepSeek 在 Prefill 阶段的通算掩盖对比

关于 P/D 的优化策略之异同,可以参考如下表格:

特性 Decode Prefill
核心目标 低延迟 高吞吐量
工作负载 处理短序列,逐个生成 token 处理长序列和大微批次
主要挑战 减少单个 token 的生成时间 避免计算单元空闲,管理资源争用
设计哲学 紧密耦合:通信与计算交错,快速响应 分离与重叠:通信与计算分离,并尽可能并行执行

P/D 低干扰传输

关于 P/D 实例之间的 K/V 缓存的传输问题,这会根据其网络拓扑决定。在 CloudMatrix384 中,是采用 RDMA 平面来传输的,且调度过程是异步的。而至于 P/D 实例之间的映射问题,存在如下定义:

  • P/D 比率 r=dtppredtpdec r = \dfrac{d_{tp}^{pre}}{d_{tp}^{dec}}
  • 组的大小 g=ddpdecr g = \dfrac{d_{dp}^{dec}}{r}

按照此定义,结合本文实验部分给出的配置,即:

阶段 Prefill Decode
实例 6 1
每个实例的节点数 2 20
每个实例的 NPU 数 16 160
相应的 NPU Die 数 32 320
MLA 模块并行策略 SP-TP-SP=32 DP=320
MoE 模块并行策略 EP=32 EP=320

可以推得

r=dtppredtpdec=110g=ddpdecr=3200 \begin{aligned} r &= \dfrac{d_{tp}^{pre}}{d_{tp}^{dec}} = \dfrac{1}{10} \\ g &= \dfrac{d_{dp}^{dec}}{r} = 3200 \end{aligned}

这说明 CloudMatrix-Infer 在一对 P/D 实例内维护 3200 个组,每个组都会负责管理 PDC 节点的一部分的存储空间。具体来说,其 rank 按照如下的计算规则:

  • 组内下标 ig=idpdecg i_g = \lfloor \dfrac{i_{dp}^{dec}}{g} \rfloor ,其中 idpdec i_{dp}^{dec} 表示 Decode 阶段的 DP 组内下标。
  • Prefill 阶段的 TP 组内下标 itppre=igdtpdec+itpdec i_{tp}^{pre} = i_g d_{tp}^{dec} + i_{tp}^{dec}

一般来说,解码阶段可以采用混合 TP-DP 的并行策略来提升吞吐量,而预填充阶段通常使用较大的 TP 度来加速长输入序列的处理。在两阶段不同的并行策略下,可能会产生冗余(主要是因为 Decode 阶段的 DP 和 Prefill 阶段的实例比 Decode 更多)。于是,上述定义的组可以管理一对 P/D 实例之间的 hidden states 和 K/V 缓存传输。


  1. tok/s: Tokens per second 每秒处理的令牌数 ↩︎

  2. VPC: Virtual Private Cloud 虚拟私有云 ↩︎

  3. Ascend 910D 中的“D”是“Die”的缩写,指的是 NPU 的晶粒或芯片核心。 ↩︎

  4. A2A: All-to-All 集合通信算子。有关集合通信的内容,可以参考并行计算集合通信初步。 ↩︎

  5. AIV: AI vector,一种专为人工智能计算优化的向量处理单元或计算核心。 ↩︎

  6. 关于 DeepSeek 的通算掩盖技术,可以参考 DeepSeek 团队在 Github 上的 Profiling Data in DeepSeek Infra。 ↩︎

  7. AIC: AI cube cores,专用矩阵计算单元 ↩︎