1. 引言:为什么会有昇腾

2018 年前后,AI 算力需求开始以远超摩尔定律的速度增长。Transformer 架构在 2017 年被提出后,模型参数量从亿级迅速膨胀到千亿级,传统的通用 GPU 集群在能效比、互联带宽和供应链稳定性上都开始承压。与此同时,外部环境的变化让"算力自主可控"从一句口号变成了硬约束——高端 GPU 的供应不确定性,直接威胁到国内大模型训练与推理的连续性。

华为在这个背景下推出了昇腾(Ascend)系列 AI 处理器。它不是简单地对 GPU 做"国产替代",而是从指令集、计算单元、互联拓扑到软件栈做了一套相对完整的自研体系。理解昇腾,不能只看单卡参数,而要把它当成"芯片 + 超节点 + 软件栈 + 编程范式"的四层结构来看。

本文按这个层次展开:先讲整体设计与产品谱系,再深入主力 910 系列的架构与参数,接着讨论实际训练/推理表现、超节点方案,最后落到 AscendC 编程范式、CANN 软件栈,以及对 PyTorch、Triton、TileLang 等上层框架的适配。

2. 昇腾的整体设计思路

昇腾系列的核心是华为自研的 达芬奇(Da Vinci)架构。与 GPU 的 SIMT(单指令多线程)模型不同,达芬奇采用 Cube + Vector + Scalar 三类计算单元 的异构组合:

  • Cube 单元:专攻矩阵乘加(MAC),是深度学习中最耗算力的算子形态,用 3D Cube 结构在一个时钟周期内完成大规模矩阵运算。
  • Vector 单元:负责向量运算,如激活函数、归一化、逐元素操作。
  • Scalar 单元:负责标量控制流、地址计算和调度。

这种"专用单元做专用事"的设计,本质上是用更少的晶体管换取更高的矩阵运算能效比。代价是编程模型更复杂——你不能像写 CUDA 那样随意调度线程,而必须把算子拆解成 Cube/Vector 的流水。

在芯片之外,昇腾还定义了一套 Da Vinci 指令集,并围绕它构建了从驱动、编译器到算子库的完整软件栈。产品谱系大致分为两条线:

系列定位典型型号
昇腾 310边缘/推理,低功耗310、310P
昇腾 910数据中心训练/推理910A、910B(B1–B4)、910C
昇腾 950新一代数据中心(2026 年上市)950PR、950DT
昇腾 960下一代(2027 年就绪)960PR、960DT

从路线图看,华为已经把昇腾的演进节奏定为"一年一代":910(2019)→ 950(2026)→ 960(2027)→ 970(2028 规划)。这个节奏背后是芯片、自研 HBM、超节点和 CANN 版本同步推进的系统工程,而不是单颗芯片的孤立迭代。

3. 主力 910 系列:架构与版本演进

910 是昇腾面向数据中心的主力产品,也是国内大模型训练集群中最常见的加速卡。它经历了多个版本的迭代,每一代在制程、算力、互联和显存上都有明显变化。

3.1 达芬奇核心的微架构

910 单芯片内部集成了多个 AI Core,每个 AI Core 又包含若干 Cube 和 Vector 单元。以 910B 为例,其单芯片集成了数十个 AI Core,通过片上网络(NoC)与 HBM 控制器、PCIe 控制器相连。关键设计点包括:

  • 3D Cube 矩阵引擎:单周期可完成 16×16×16 的矩阵乘加,是 FP16/BF16 算力的主要来源。
  • 多级片上缓存:L1/L0 缓存配合 Cube 的流水线,减少对 HBM 的访问压力。
  • HBM 高带宽显存:910 系列普遍采用 HBM2/HBM2E,带宽达到 TB/s 级别,缓解大模型权重加载的瓶颈。

3.2 910A / 910B / 910C 的差异

三个版本的核心差异可以概括为"制程、算力、封装"三条线。需要先说明:910B 与 910C 的不少细节来自第三方分析或非官方渠道,不同信源口径存在差异,下表尽量标注区间。

版本制程 / 封装FP16 算力(单卡)显存互联 / 功耗
910A台积电 7nm EUV256 TFLOPS(INT8 512 TOPS)32GB HBM2HCCS / PCIe 4.0,最大 310W
910B中芯国际 N+1(等效 7nm)约 280–414 TFLOPS(随 B1–B4 型号而异)64GB HBM2EHCCS,带宽提升
910C中芯国际 N+2,双 die 封装约 800 TFLOPS(保守口径 640 TFLOPS)96GB 或 128GB HBM2E,带宽约 1.8–3.2 TB/s高速互联增强,约 310W

910A(2019) 是初代产品,基于台积电 7nm EUV 工艺和第一代达芬奇架构,单芯片集成 32 颗达芬奇 Max 核心,并集成了 CPU、DVPP(数字视觉预处理)等模块,支持 PCIe 4.0 与 HCCS 互联。它的历史意义在于:在 2019 年就把 FP16 算力做到了 256 TFLOPS 量级,同时把"训练卡"这个品类真正做成了可交付的产品。

910B 是在制裁背景下转向国内代工的一代,工艺换成中芯国际 N+1(等效 7nm),并按 B1/B2/B3/B4 细分出多个型号,算力与显存配置各不相同。架构上最重要的变化是 AIC(Cube 核)与 AIV(Vector 核)分离:Cube 核专职矩阵运算,Vector 核专职向量运算,两者通过片上总线协作,这让算子可以更精细地做流水编排,也让 AscendC 的"分离式编程"成为可能。

910C 走的是 Chiplet 双 die 封装 路线:把两颗 910B 级别的计算 die 封到一个封装内,晶体管规模约 530 亿,从而在单卡层面把算力堆到 800 TFLOPS 量级、显存堆到 96–128GB。这条路线的好处是不必等更先进制程,用封装换算力;代价是 die 间互联、功耗与散热设计难度显著上升,也让"单卡"这个概念在软件层面需要处理跨 die 的访存与通信。

需要说明的是,上表中的算力数字来自公开报道与行业分析,实际可用算力会因散热、功耗墙和软件调度而有所折扣。对 910B/910C 的精确核数、细分算力,不同信源尚未完全统一,工程选型时建议以华为官方或昇腾社区发布的技术文档为准。

3.3 910 的关键参数解读

对使用者而言,比"峰值 TFLOPS"更重要的参数是:

  • 显存容量与带宽:决定能装下多大的模型、多长的上下文。64GB HBM2E 意味着单卡可以承载 7B 级模型的全参数推理,或作为大模型训练中的一个分片。
  • 互联带宽:多卡训练时,AllReduce 等集合通信的瓶颈往往在卡间带宽。910 系列通过 HCCS(华为缓存一致性互联)提供远高于 PCIe 的卡间带宽。
  • 功耗:单卡功耗在 300–400W 量级,直接决定了机柜的供电与散热设计。

4. 实际训练与推理表现

4.1 训练场景

在训练侧,昇腾的典型用法是构建 Atlas 训练集群,通过多机多卡并行训练大模型。实际表现受几个因素影响:

  • 算子覆盖率:CANN 提供的算子库对主流模型(Transformer、CNN)覆盖较好,但遇到自定义算子时需要手写 AscendC,这会带来额外开发成本。
  • 通信效率:在千卡规模下,集合通信的效率决定了线性加速比。昇腾通过 HCCL(华为集合通信库)做优化,实测在中等规模集群上可以接近线性扩展。
  • 精度支持:FP16/BF16 是主力,部分场景支持 FP32 和 INT8。混合精度训练需要框架侧配合。

从公开的实践案例看,昇腾集群在训练百亿参数级模型时,单卡有效算力利用率(MFU)与同代 GPU 相比存在差距,但在特定优化过的模型上可以缩小到可接受范围。这个差距主要来自软件栈成熟度和算子调优深度,而非纯粹的硬件峰值。更具体地说,910B 时代的瓶颈集中在跨机通信:HCCS 在单机 8 卡内表现尚可,但跨机依赖 RoCE,AllReduce 长尾延迟可达 18ms 到 60–90ms 不等,长尾占比超过 25%,整集群同步被拖慢。这也是华为在 910C 时代转向超节点、把 384 卡收进一个高速互联域的直接原因(详见 5.3 节)。

4.2 推理场景

推理是昇腾相对更有优势的场景,原因在于:

  • 推理对算子多样性的要求低于训练,主流模型的算子基本被覆盖。
  • 昇腾 310/310P 在边缘推理上功耗优势明显。
  • 910 系列配合 CANN 的图优化、量化工具,可以在 INT8 下获得较高的吞吐。

实际部署中,常见的做法是用 MindIE(昇腾推理引擎)做服务化,支持动态批处理、KV Cache 管理和多卡并行推理。

5. 超节点:把"卡"变成"一台机器"

单卡再强,也架不住大模型对显存和带宽的胃口。昇腾的方案是 超节点(SuperPoD)——通过高速互联把大量加速卡在逻辑上组成一台"超级计算机"。

5.1 架构要点

超节点的核心是 高速总线互联。以 910 时代的 Atlas 900 A3 SuperPoD(常被称为"昇腾 384 超节点")为例,它的设计思路包括:

  • 全互联拓扑:节点内的加速卡通过高速链路两两互联,总线带宽 1:1 无收敛,避免传统树形拓扑的带宽收敛。
  • 统一内存寻址:通过互联协议让跨卡访问的延迟接近片内访问,从而支持模型并行时的频繁通信。
  • 液冷散热:高密度集成带来巨大功耗,液冷成为标配。

需要强调的是,超节点不是"单颗芯片",而是一个把多颗昇腾 910C(部分资料笼统标注为 910)通过高速总线互联、在逻辑上整合为一台"计算机"的大型系统。它由 12 个计算柜 + 4 个总线设备柜 组成,计算柜采用液冷散热,2025 年 3 月左右推出,满配支持 384 卡。华为云基于它构建的 CloudMatrix 384 云服务实例,在系统级算力上对标英伟达的 GB200 NVL72 系统。

计算节点 1

高速互联交换

计算节点 2

计算节点 N

统一资源池

训练任务调度

推理服务

5.2 参数与规模

超节点的关键指标是 节点内卡数、互联带宽、总显存。昇腾的超节点方案随芯片代际同步升级,规模跨度很大:

超节点基于芯片最大卡数系统级算力备注
Atlas 900 A3 SuperPoD910C(部分资料标 910)384 卡307.2 / 288.7 PFLOPS @ FP162025 年 3 月推出,12 计算柜 + 4 总线柜,液冷
Atlas 950 SuperPoD950DT8192 卡(另有 1024 卡配置口径)1 EFLOPS FP8 / 2 EFLOPS MXFP42025 年 9 月发布
昇腾 960 超节点9604096 卡8 EFLOPS FP8首个 NPO 近封装光学超节点

Atlas 900 A3 SuperPoD 的具体规格(华为官方与昇腾社区口径):

  • NPU 规模:最大支持 384 颗 昇腾 910 系列芯片;
  • AI 算力:最大 307.2 / 288.7 PFLOPS @ FP16(具体数值因配置或统计口径略有差异);
  • 互联带宽:芯片间(D2D)双向互联带宽达 784 GB/s,总线带宽 1:1 无收敛;
  • 内存能力:片上内存总容量达 48 TB(由 384 颗芯片各 128 GB 构成),支持统一编址,带宽速率最大 3.2 TB/s;
  • 通信时延:单跳通信时延低至 200 ns。

关于 Atlas 950 SuperPoD 的卡数,公开信息存在两种口径:2025 年 9 月全联接大会发布时为 8192 卡,另有资料按 1024 卡 整机折算单卡算力(1024 卡、2 EFLOPS MXFP4,折合单颗 950DT 约 1.78 PFLOPS)。这可能是产品定义调整或不同配置版本所致,引用时建议注明来源与时间点。

超节点的意义不只是"卡多"。当节点内卡数达到数百乃至数千张、互联带宽达到数百 GB/s 到 TB/s 量级时,千亿甚至万亿参数模型的张量并行、专家并行可以尽量收敛在节点内完成,跨节点通信被压到更少的层数,这才是超节点相对普通集群的真正价值。

5.3 为什么必须造超节点:910 时代的通信瓶颈

理解了超节点的规格,还要理解它为什么会出现。在昇腾 910 时代(尤其是 910B),通信效率偏低确实是训练场景的一个核心短板,而且问题主要出在跨节点、跨机柜的互联上,而不是芯片本身的算力。

跨机通信是主要拖累。 910B 的片间高速总线 HCCS 在单机 8 卡内部表现尚可,双向带宽能与同期英伟达 A800 的 NVLink 持平。但一旦规模扩展到多机多卡,就得依赖 RoCE 网络。有开发者基于 910B 集群训练 70B 模型时反馈,AllReduce(梯度同步)的长尾延迟非常严重:同批次里部分卡只需 18ms,部分卡却要 60–90ms,长尾占比超过 25%,直接导致整集群同步阻塞,算力核心频繁空转。华为官方文档也记录过类似案例:因通信地址未对齐,HCCL 会额外插入一次内存拷贝,使单步通信时间从约 200ms 翻倍到 400ms。

互联拓扑存在先天限制。 910B 的 HCCS 采用对等拓扑,没有类似 NVSwitch 的专用交换芯片,机内 8 卡可以全互联,但跨机就得走外部网络。这导致大规模训练时,通信开销占比很容易被推高。华为自己的仿真数据也承认,传统 8 卡服务器堆叠的 10 万卡集群,集群内通信时间会超过训练总时间的 40%,严重制约算力利用率(MFU)。

华为的解法:用"超节点"换效率。 正因为看到了这个瓶颈,华为在 910C 时代主推的 Atlas 900 A3 SuperPoD(CloudMatrix 384 超节点),核心思路就是用更大的高速互联域来"吃掉"通信损耗:把 384 颗 910C 通过总线全对等互联,卡间带宽提升到 784 GB/s,单跳时延压到 200 ns。华为公布的数据是,相比传统 8 卡服务器集群,4K 超节点组成的 10 万卡集群 MFU 提升了 2.75 倍。

这相当于承认了旧架构的通信效率问题,并用系统级设计去弥补。所以更准确的表述是:昇腾 910 时代,单卡算力并不弱,但跨节点通信效率是训练大规模模型时的真实瓶颈,这也是华为后续从"堆服务器"转向"造超节点"的核心驱动力。

6. AscendC:为达芬奇而生的编程范式

CUDA 的成功很大程度上在于它给了开发者一个"够用"的编程模型。昇腾要建立生态,就必须回答"开发者怎么写算子"这个问题。答案是 AscendC。

AscendC 是华为推出的算子开发语言,本质上是 C++ 的扩展,通过内置的 API 和编程模型来调度 Cube/Vector 单元。它的核心概念包括:

  • 核函数(Kernel):运行在 AI Core 上的计算逻辑。
  • 流水线(Pipeline):显式地把数据搬运(CopyIn)、计算(Compute)、搬出(CopyOut)拆成多级流水,用异步方式掩盖访存延迟。
  • 内存层级管理:开发者需要显式管理 Global Memory、L1、L0 之间的数据搬运。

一个简化的 AscendC 算子结构大致如下:

// 伪代码示意:AscendC 算子的典型三段式流水
extern "C" __global__ __aicore__ void add_custom(
    GM_ADDR x, GM_ADDR y, GM_ADDR z) {
    // 1. CopyIn:从全局内存搬到片上
    // 2. Compute:在 Vector/Cube 单元上计算
    // 3. CopyOut:结果写回全局内存
}

上面只是骨架。下面用一个真正能跑通的 向量加法(z = x + y) 算子,把三段式流水、Tiling 切分和内存层级都填进去。这个例子属于 Vector 类算子,不涉及 Cube,正好适合入门。

6.1 算子实现:Add 的三段式流水

#include "kernel_operator.h"

using namespace AscendC;

constexpr int32_t BUFFER_NUM = 2;   // 双缓冲,让搬运和计算重叠

class KernelAdd {
public:
    __aicore__ inline KernelAdd() {}

    // 初始化:拿到全局内存地址、总长度、当前核负责的数据块
    __aicore__ inline void Init(GM_ADDR x, GM_ADDR y, GM_ADDR z,
                                uint32_t totalLength, uint32_t tileLength) {
        // 每个 AI Core 只处理自己那一段,按 block 均分
        uint32_t blockIdx = GetBlockIdx();
        uint32_t offset = blockIdx * tileLength;

        xGm.SetGlobalBuffer((__gm__ float*)x + offset, tileLength);
        yGm.SetGlobalBuffer((__gm__ float*)y + offset, tileLength);
        zGm.SetGlobalBuffer((__gm__ float*)z + offset, tileLength);

        // 片上队列:每个 buffer 能放 tileLength 个 float
        pipe.InitBuffer(inQueueX, BUFFER_NUM, tileLength * sizeof(float));
        pipe.InitBuffer(inQueueY, BUFFER_NUM, tileLength * sizeof(float));
        pipe.InitBuffer(outQueueZ, BUFFER_NUM, tileLength * sizeof(float));
    }

    __aicore__ inline void Process() {
        // 每个核处理 tileLength 个元素,按 32 个 float 一组循环
        int32_t loopCount = tileLength / 32;
        for (int32_t i = 0; i < loopCount; i++) {
            CopyIn(i);
            Compute(i);
            CopyOut(i);
        }
    }

private:
    // 第一段:Global Memory -> Local Memory(片上)
    __aicore__ inline void CopyIn(int32_t progress) {
        LocalTensor<float> xLocal = inQueueX.AllocTensor<float>();
        LocalTensor<float> yLocal = inQueueY.AllocTensor<float>();
        // DataCopy 是异步搬运,配合队列实现流水
        DataCopy(xLocal, xGm[progress * 32], 32);
        DataCopy(yLocal, yGm[progress * 32], 32);
        inQueueX.EnQue(xLocal);
        inQueueY.EnQue(yLocal);
    }

    // 第二段:在 Vector 单元上做逐元素加法
    __aicore__ inline void Compute(int32_t progress) {
        LocalTensor<float> xLocal = inQueueX.DeQue<float>();
        LocalTensor<float> yLocal = inQueueY.DeQue<float>();
        LocalTensor<float> zLocal = outQueueZ.AllocTensor<float>();

        Add(zLocal, xLocal, yLocal, 32);   // z = x + y,一次算 32 个

        outQueueZ.EnQue<float>(zLocal);
        inQueueX.FreeTensor(xLocal);
        inQueueY.FreeTensor(yLocal);
    }

    // 第三段:Local Memory -> Global Memory
    __aicore__ inline void CopyOut(int32_t progress) {
        LocalTensor<float> zLocal = outQueueZ.DeQue<float>();
        DataCopy(zGm[progress * 32], zLocal, 32);
        outQueueZ.FreeTensor(zLocal);
    }

private:
    TPipe pipe;
    TQue<QuePosition::VECIN, BUFFER_NUM> inQueueX, inQueueY;
    TQue<QuePosition::VECOUT, BUFFER_NUM> outQueueZ;
    GlobalTensor<float> xGm, yGm, zGm;
};

// 核函数入口:每个 AI Core 启动一次
extern "C" __global__ __aicore__ void add_custom(
    GM_ADDR x, GM_ADDR y, GM_ADDR z, GM_ADDR workspace, GM_ADDR tiling) {
    GET_TILING_DATA(tilingData, tiling);   // 从 Host 侧下发的切分参数
    KernelAdd op;
    op.Init(x, y, z, tilingData.totalLength, tilingData.tileLength);
    op.Process();
}

这段代码里有几个 AscendC 的关键点值得对照着看:

  • GlobalTensor 与 LocalTensor:前者代表 HBM 上的全局内存,后者代表片上(L1/UB)的局部内存。算子必须显式地把数据从前者搬到后者,计算完再搬回去,这就是"显式内存层级管理"。
  • TQue 队列 + BUFFER_NUM = 2:双缓冲让第 i 块的 Compute 和第 i+1 块的 CopyIn 并行,搬运延迟被计算掩盖,这是流水线的核心。
  • EnQue / DeQue:入队出队不只是数据传递,还承担同步语义,保证搬运完成后再计算。
  • GetBlockIdx():每个 AI Core 拿到自己的编号,只处理属于自己的数据分片,天然支持多核并行。

6.2 Tiling:把大张量切成核能吃的块

上面的 tileLength 不是拍脑袋定的,它来自 Tiling。一个 1 亿元素的向量不可能一次塞进片上内存,Host 侧需要根据核数、片上 buffer 大小算出切分方案:

// Host 侧:计算 tiling 参数并下发
void ComputeTiling(uint32_t totalLength, uint32_t coreNum,
                   uint32_t& tileLength, uint32_t& tileNum) {
    // 每个核分到的元素数,向上取整
    tileLength = (totalLength + coreNum - 1) / coreNum;
    // 再按片上 buffer 容量切成更小的块
    tileNum = (tileLength + UB_BLOCK_SIZE - 1) / UB_BLOCK_SIZE;
}

Tiling 的本质是 在"核间并行"和"片上容量"之间做权衡:切得太粗,片上放不下;切得太细,循环开销和搬运次数上升。这也是 AscendC 相比 CUDA 更"重"的地方——CUDA 里线程块大小由硬件调度,AscendC 里切分策略要开发者自己算。

6.3 Host 侧调用:从框架到算子

算子写完后,还要通过 AscendCL 在 Host 侧完成内存分配、参数下发和 kernel 启动:

// Host 侧调用流程(简化)
aclrtMalloc(&xDevice, bytes, ACL_MEM_MALLOC_HUGE_FIRST);
aclrtMalloc(&yDevice, bytes, ACL_MEM_MALLOC_HUGE_FIRST);
aclrtMalloc(&zDevice, bytes, ACL_MEM_MALLOC_HUGE_FIRST);

aclrtMemcpy(xDevice, bytes, xHost, bytes, ACL_MEMCPY_HOST_TO_DEVICE);
aclrtMemcpy(yDevice, bytes, yHost, bytes, ACL_MEMCPY_HOST_TO_DEVICE);

// 启动 kernel:blockDim 即使用的 AI Core 数
add_custom<<<blockDim, nullptr, stream>>>(xDevice, yDevice, zDevice,
                                          workspace, tilingDevice);

aclrtSynchronizeStream(stream);
aclrtMemcpy(zHost, bytes, zDevice, bytes, ACL_MEMCPY_DEVICE_TO_HOST);

<<<blockDim, ...>>> 的写法刻意贴近 CUDA,降低迁移心智负担;但底层调度的是 AI Core 而非线程束,blockDim 对应实际启用的核数。

6.4 和 CUDA 写法对比

把同一个加法放到 CUDA 里,差异一目了然:

// CUDA:线程级并行,硬件自动管理缓存层级
__global__ void add_custom(const float* x, const float* y, float* z, int n) {
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    if (i < n) z[i] = x[i] + y[i];
}

CUDA 版本里,开发者只描述"每个线程算什么",缓存、搬运、同步都由硬件和运行时兜底;AscendC 版本里,搬运、缓冲、同步、切分全部显式暴露。这就是前文说的"学习曲线更陡,但能更精细控制硬件"的具体含义:多出来的代码量,换的是对流水和带宽的确定性掌控。

对于追求极致性能的算子,这种显式控制是必要的代价;而对于大多数业务算子,优先用 CANN 算子库或 Triton/TileLang 这类更高层的 DSL,只在热点算子上才下沉到 AscendC。

7. CANN:昇腾的软件栈底座

CANN(Compute Architecture for Neural Networks) 是昇腾的异构计算架构,地位类似 CUDA + cuDNN 的组合。它的分层大致是:

层次组件作用
应用层MindSpore / PyTorch 适配上层框架接入
图引擎GE(Graph Engine)图优化、算子融合、内存规划
算子层AscendCL、算子库算子调用与实现
运行时Runtime任务调度、流管理
驱动Driver硬件抽象

CANN 的关键能力包括:

  • 图编译优化:把框架的计算图转成昇腾的图,做算子融合、常量折叠、内存复用。
  • 算子库:提供覆盖主流模型的算子实现,减少手写 AscendC 的需求。
  • 集合通信库 HCCL:多卡多机通信。
  • 量化与调优工具:支持 INT8 量化、性能分析(Profiling)。

8. 框架适配:PyTorch 与 Triton / TileLang

8.1 PyTorch 适配

昇腾通过 torch_npu 插件接入 PyTorch。使用方式上,开发者只需把 .cuda() 换成 .npu(),大部分模型代码可以低改动迁移:

import torch
import torch_npu

device = "npu:0"
model = MyModel().to(device)
x = torch.randn(1, 3, 224, 224).to(device)
y = model(x)

torch_npu 负责把 PyTorch 的算子映射到 CANN 的算子,并处理设备管理、流同步等细节。实际迁移中,难点通常不在 API 替换,而在少数不支持的算子需要回退或手写实现。

8.2 Triton 与 TileLang 适配

Triton 是近年来在 GPU 生态中流行的算子 DSL,用 Python 写 kernel,由编译器生成底层代码。昇腾对 Triton 的适配思路是提供 后端编译器,把 Triton IR 降到昇腾的指令上。这能让熟悉 Triton 的开发者以较低成本在昇腾上写算子。

TileLang 则是更偏向"以 tile 为单位"的 DSL,强调用分块(tile)抽象来描述计算,天然契合 Cube 单元的矩阵分块运算。对昇腾而言,TileLang 这类 DSL 的价值在于:它把"如何切分矩阵、如何安排流水"这类硬件相关决策交给编译器,开发者只需描述 tile 级的计算逻辑。

这两条路线的共同目标是 降低算子开发门槛——AscendC 给了极致控制,Triton/TileLang 给了开发效率,形成梯度。

9. 昇腾 950:第三代达芬奇与双型号布局

昇腾 950 系列的信息在 2025 年 9 月 18 日的华为全联接大会 2025 上首次系统公布,轮值董事长徐直军披露了芯片演进路标与 950PR / 950DT 的规划及上市时间(分别为 2026 年 Q1 和 Q4)。与早期"参数不明"的印象不同,950 的架构与规格目前已经比较公开。

9.1 核心架构:第三代达芬奇 + Chiplet

昇腾 950 基于华为自研的 第三代达芬奇(Da Vinci)架构,并采用 多 Die 合封的 Chiplet 设计。以 950DT 为例,整颗芯片包含:

  • 36 个 AI 子系统:每个子系统含 1 个 Cube Core 和 2 个 Vector Core,延续并强化了 910B 开始的 AIC/AIV 分离思路;
  • 4 个 AI CPU Cluster:搭载自研 Linx816 CPU,负责控制流与调度;
  • 128MB L2 Cache:单颗芯片集成,缓解大模型权重与 KV Cache 的访存压力;
  • 精度支持:新增对 HiF8、MXFP8、MXFP4 等低精度格式的原生支持,直接面向大模型训练与推理的吞吐优化。

低精度原生支持是这一代最值得关注的变化之一。MXFP4 这类格式把单个参数的位宽压到 4 bit,配合分块缩放(block scaling)在精度可接受的前提下大幅提升吞吐,这正是当下大模型推理降本的主流方向。

9.2 950PR 与 950DT:同架构、不同内存

两款芯片共用同一套芯片架构,差异主要在搭载的 自研 HBM 上,从而面向不同场景:

项目昇腾 950PR昇腾 950DT
目标场景推理 Prefill 阶段、推荐业务推理 Decode 阶段、训练
自研内存HiBL 1.0HiZQ 2.0
容量128GB最高 144GB(部分配置 96GB)
带宽1.6 TB/s4 TB/s
算力峰值MXFP4 约 1784 TFLOPS;FP8/HiF8 约 919 TFLOPSMXFP4 约 1.78 PFLOPS(按 Atlas 950 整机折算)
互联灵衢 2.0,双向最大 2 TB/s灵衢 2.0,支持 PCIe 5.0、UBoE

这个分工很符合大模型推理的实际负载特征:Prefill 阶段 是一次性处理长 prompt,计算密集、对算力敏感,950PR 用较低带宽、较高算力的内存配置即可;Decode 阶段 是逐 token 生成,访存密集、对带宽和容量敏感,950DT 用 4 TB/s 的 HiZQ 2.0 把带宽拉满。训练场景同样吃带宽,因此也归到 950DT 一侧。

9.3 配套超节点

基于 950DT,华为推出了 Atlas 950 SuperPoD,最大支持 8192 张 NPU 高速互联(另有 1024 卡配置口径),提供 1 EFLOPS(FP8)或 2 EFLOPS(MXFP4)的系统级算力。它通过灵衢(UnifiedBus)网络把节点内互联延伸到集群层面,是 950 这一代"芯片—系统"协同的主要载体。

10. 昇腾 960 与后续路线

昇腾 960 的进展比原计划更快。根据华为在 2026 年 9 月全联接大会上公布的信息,昇腾 960 芯片性能实现倍增,研发进度超出预期:

  • 昇腾 960DT:比原计划提前三个季度,预计 2027 年 Q1 就绪;
  • 昇腾 960PR:比原计划提前一个季度,预计 2027 年 Q3 就绪。

在芯片就绪之前,基于 960 的 昇腾 960 超节点 已于 2026 年 9 月发布。它是首个采用 NPO(近封装光学) 技术的超节点,主打十万亿参数规模的大模型训练与推理,关键规格为:可扩展至 4096 卡,提供 8 EFLOPS FP8 算力,系统可用度达 99.8%;通过灵衢网络连接,最大可支持 100 万卡 的昇腾超节点集群。

NPO 的意义在于用光互联替代部分电互联,把长距离、高带宽、低功耗的互连能力推到封装附近,这是超节点从"千卡"走向"万卡、十万卡"的关键技术。按华为公布的节奏,后续的昇腾 970 计划在 2028 年推出,昇腾将坚持"一年一代"的演进。

11. 总结

昇腾的价值不能只用"单卡跑分"衡量。它是一套从达芬奇架构、910/950/960 系列芯片、超节点互联,到 AscendC 编程范式、CANN 软件栈、PyTorch/Triton/TileLang 适配的完整体系。这套体系目前的短板在软件生态成熟度和算子覆盖深度,优势在于自主可控、系统级协同和推理场景的能效比。

从代际演进看,昇腾的路线已经比较清晰:910 解决"有没有",用 910C 的双 die 封装把算力堆上去,并用 Atlas 900 A3 SuperPoD 把 384 卡收进一个高速互联域来对冲跨机通信瓶颈;950 解决"好不好用",用第三代达芬奇、自研 HBM 和 HiF8/MXFP4 低精度格式对齐大模型负载,并用 PR/DT 双型号区分 Prefill 与 Decode;960 则用 NPO 光互联把超节点推向万卡以上规模。
对开发者而言,务实的路径是:先用 torch_npu 跑通现有模型,遇到性能瓶颈再用 CANN 的 Profiling 定位,最后对热点算子用 AscendC 或 Triton 做定制。理解这套分层,比记住几个 TFLOPS 数字更有用。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐