NPU 全景——昇腾/寒武纪/TPU/苹果生态 / The NPU Landscape: Ascend, Cambricon, TPU, and Apple
📅 创建时间:2026-06-02 🏷️ 标签:#NPU #昇腾 #寒武纪 #TPU #CoreML #边缘AI 📚 前置知识:[[03-gpu-architecture]](GPU 架构) [[04-cuda-programming-model]](CUDA 编程) 📚 相关知识:[[13-future-trends]](未来趋势)
先抓住直觉
NPU、TPU、GPU 都是在计算、存储和数据通路之间做不同取舍。学习这一章不应背厂商参数,而应比较:擅长哪些算子、数据如何流动、软件栈是否成熟、迁移成本有多高。
- 必须理解:专用化为何能提高效率;硬件能力与软件生态缺一不可。
- 用到再查:芯片型号、峰值算力、SDK 名称和版本差异。
- 读完能回答:选型时为什么不能只比较 TOPS/TFLOPS?
场景:除了 NVIDIA,还有哪些 AI 芯片?
┌─────────────────────────────────────────────────────────────┐
│ │
│ 你在写简历,技能栏写的是: │
│ "熟悉 CUDA 编程" │
│ │
│ 面试官问: │
│ "你们公司用昇腾 NPU 吗?" │
│ "对苹果的 ANE 了解多少?" │
│ "TPU 和 GPU 训练有什么区别?" │
│ │
│ 你一脸茫然。 │
│ 这章让你对这些 NPU 有一个全局认识, │
│ 至少被问到时能说出个所以然。 │
│ │
└─────────────────────────────────────────────────────────────┘第1节:为什么需要 NPU?
┌─────────────────────────────────────────────────────────────┐
│ AI 芯片市场格局 │
├─────────────────────────────────────────────────────────────┤
│ │
│ NVIDIA GPU: │
│ - 霸主地位,80%+ 市场份额 │
│ - CUDA 生态完善 │
│ - 训练推理通吃 │
│ - 价格贵,供货不稳定 │
│ │
│ 原因导致市场需要替代品: │
│ 1. 美国出口管制 → 中国公司需要国产替代 │
│ 2. 移动端/边缘端 GPU 太贵太耗电 → 专用 NPU │
│ 3. 成本控制 → 不同场景用不同芯片 │
│ │
│ 主要玩家: │
│ - 昇腾 NPU(华为) │
│ - 寒武纪 MLU(国内) │
│ - Google TPU(云端) │
│ - 苹果 ANE(移动端) │
│ - 高通/联发科 NPU(移动端) │
│ │
└─────────────────────────────────────────────────────────────┘第2节:昇腾 NPU(华为)
基本信息
┌─────────────────────────────────────────────────────────────┐
│ 昇腾 NPU 系列 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 昇腾 910(训练): │
│ - 16×16 NPU Core(达芬奇架构) │
│ - FP16 算力:256 TFLOPS │
│ - 32 GB HBM │
│ - 对标 A100 │
│ │
│ 昇腾 310(推理): │
│ - 8×8 NPU Core │
│ - INT8 算力:64 TOPS │
│ - 功耗:8W(移动端) │
│ - 用于手机、汽车、IoT │
│ │
│ 生态: │
│ - CANN(Compute Architecture for Neural Networks) │
│ - Ascend CL(类 CUDA C++ 编程) │
│ - MindSpore(华为自研框架) │
│ - 支持 PyTorch、TensorFlow(通过 ACL) │
│ │
└─────────────────────────────────────────────────────────────┘编程模型(Ascend C)
// Ascend C:昇腾的类 CUDA 编程语言
// 类比 CUDA,但语法和 API 不同
#include "acl/acl.h"
// 数据类型
aclFloat16* d_a; // 类比 float*
// 内存分配
aclrtMalloc(&d_a, size, ACL_MEM_MALLOC_HUGE_FIRST, ACL_MEMTYPE_UNIFIED);
// 内存拷贝
aclrtMemcpy(d_a, size, h_a, size, ACL_MEMCPY_HOST_TO_DEVICE);
// Kernel 类比 __global__
class MatMulKernel : public KernelBuild {
public:
bool Compute(KernelContext& ctx) {
// 类似 CUDA kernel
int32_t pos = GetBlockDim() * GetBlockIdx() + GetThreadIdx();
// 矩阵乘法计算...
return true;
}
};
// 启动
MatMulKernel kernel;
kernel.SetBlockDim(8);
kernel.Execute(inputs, outputs);生态对比
┌─────────────────────────────────────────────────────────────┐
│ CUDA vs CANN 对比 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 维度 │ CUDA(NVIDIA) │ CANN(昇腾) │
│ ──────────────┼────────────────────┼─────────────────── │
│ 编程语言 │ CUDA C++ (.cu) │ Ascend C / Python│
│ 编译器 │ nvcc │ ACCA / ACL │
│ 调试工具 │ cuda-gdb │ msRuntime │
│ 性能分析 │ Nsight │ Ascend Profiler │
│ 深度学习框架 │ PyTorch/TF │ MindSpore/PyTorch │
│ 生态成熟度 │ ★★★★★ │ ★★★☆☆ │
│ │
└─────────────────────────────────────────────────────────────┘第3节:寒武纪 MLU
┌─────────────────────────────────────────────────────────────┐
│ 寒武纪 MLU 系列 │
├─────────────────────────────────────────────────────────────┤
│ │
│ MLU290(训练): │
│ - 架构:Cambricon MLUv02 │
│ - FP16 算力:256 TFLOPS │
│ - 内存:64 GB HBM │
│ │
│ MLU370(推理): │
│ - INT8 算力:256 TOPS │
│ - 功耗:150W │
│ │
│ 编程生态: │
│ - NeuWare SDK │
│ - 支持 PyTorch、TensorFlow │
│ - 类 CUDA 编程风格 │
│ │
│ 国内市场:主要在智算中心、政府项目 │
│ │
└─────────────────────────────────────────────────────────────┘第4节:Google TPU
┌─────────────────────────────────────────────────────────────┐
│ Google TPU 系列 │
├─────────────────────────────────────────────────────────────┤
│ │
│ TPU v4(当前主力): │
│ - 架构:专用矩阵乘法器(Systolic Array) │
│ - BF16 算力:275 TFLOPS/chip │
│ - 互联:ICL(Inter-Core Interconnect) │
│ - 用途:Google 内部训练,主要给 Google Cloud 用户用 │
│ │
│ TPU 特点: │
│ - 不支持任意 CUDA 代码(专用) │
│ - 只运行 TensorFlow / JAX / PyTorch(via XLA) │
│ - 通过 XLA(Accelerated Linear Algebra)编译优化 │
│ - 训练和推理效率极高 │
│ │
│ 使用方式: │
│ - Google Cloud TPU 虚拟机 │
│ - JAX 或 PyTorch + XLA │
│ - 没法本地跑,只能云端用 │
│ │
└─────────────────────────────────────────────────────────────┘TPU vs GPU 架构差异
┌─────────────────────────────────────────────────────────────┐
│ Systolic Array vs GPU │
├─────────────────────────────────────────────────────────────┤
│ │
│ GPU(SIMD): │
│ - 通用并行计算 │
│ - 灵活,支持任意算法 │
│ - CUDA 生态完善 │
│ │
│ TPU(Systolic Array): │
│ - 专用矩阵乘法 │
│ - 矩阵乘效率极高(省去寄存器访问) │
│ - 但灵活性差 │
│ │
│ 比喻: │
│ GPU = 瑞士军刀(什么都能干,但不是每个都最快) │
│ TPU = 专用冲床(只能冲孔,但冲孔极快) │
│ │
└─────────────────────────────────────────────────────────────┘第5节:苹果 Apple Silicon ANE
┌─────────────────────────────────────────────────────────────┐
│ 苹果 ANE(Neural Engine) │
├─────────────────────────────────────────────────────────────┤
│ │
│ Apple Silicon 系列(M1/M2/M3 芯片): │
│ - ANE:16 核神经网络引擎 │
│ - INT8 算力:38 TOPS(M2 Ultra) │
│ - 功耗:极低(手机/PC 级别) │
│ - 主要用于:图像处理、语音识别、AR │
│ │
│ 编程方式: │
│ - Core ML(Apple 的机器学习框架) │
│ - 开发者通过 Core ML 部署模型 │
│ - 不需要手写 kernel,框架自动调度 ANE │
│ │
│ #include <CoreML/CoreML.h> │
│ MLModel* model = [[MLModel alloc] initWithContentsOfURL:url];│
│ MLFeatureProvider* input = ...; │
│ MLFeatureProvider* output = [model predictionFromFeatures:input];│
│ │
│ 特点: │
│ - 完全不需要理解硬件 │
│ - 苹果屏蔽了所有底层细节 │
│ - 开发者体验好,但控制力弱 │
│ │
└─────────────────────────────────────────────────────────────┘第6节:各 NPU 生态对比
┌─────────────────────────────────────────────────────────────────────────┐
│ AI 芯片生态全景对比 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 芯片 │ 公司 │ 算力(FP16) │ 生态成熟度 │ 编程方式 │
│ ────────────┼───────────┼──────────────┼─────────────┼─────────────────│
│ A100/H100 │ NVIDIA │ 312/989 TFLOPS│ ★★★★★ │ CUDA C++ │
│ 昇腾 910 │ 华为 │ 256 TFLOPS │ ★★★☆☆ │ Ascend C/CANN │
│ MLU290 │ 寒武纪 │ 256 TFLOPS │ ★★☆☆☆ │ NeuWare │
│ TPU v4 │ Google │ 275 TFLOPS │ ★★★★☆ │ XLA/JAX/TF │
│ ANE │ 苹果 │ N/A (INT8) │ ★★★★★ │ Core ML │
│ Hexagon │ 高通 │ ~60 TOPS(INT8)│ ★★★☆☆ │ SNPE/QNN │
│ │
│ 选择建议: │
│ - 深度学习训练/研究:→ NVIDIA GPU(CUDA 生态) │
│ - 国产化/昇腾项目:→ 昇腾 NPU + CANN │
│ - 云端大模型训练:→ Google TPU 或 NVIDIA H100 │
│ - 移动端/边缘推理:→ 苹果 ANE / 高通 Hexagon │
│ - 成本敏感项目:→ 国产 NPU(昇腾/寒武纪) │
│ │
└─────────────────────────────────────────────────────────────────────────┘升华:理解 NPU 生态的价值
┌─────────────────────────────────────────────────────────────┐
│ 为什么工程狮要了解 NPU? │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 面试加分 │
│ 能说出昇腾 vs GPU 的生态差异,比只会 CUDA 更全面 │
│ │
│ 2. 国产化趋势 │
│ 越来越多的政府和国企项目要求使用国产芯片 │
│ │
│ 3. 场景适配 │
│ 移动端用 ANE,服务器用 GPU,智算中心用昇腾 │
│ 不同场景选不同芯片是工程能力 │
│ │
│ 4. 理解计算本质 │
│ 所有 NPU/GPU 都是矩阵乘法的加速器 │
│ 理解了本质,换平台只是 API 不同 │
│ │
└─────────────────────────────────────────────────────────────┘"AI 可查 vs 必须理解"清单
AI 可查:
✅ 昇腾/寒武纪/TPU 的具体 SDK API
✅ Core ML 的具体使用方法
✅ 各芯片的具体算力参数
必须理解:
🔴 NVIDIA CUDA 是生态最完善的,其他都是类比
🔴 昇腾用 CANN + Ascend C,类 CUDA 但生态不如 CUDA
🔴 TPU = Systolic Array,专为矩阵乘法设计,效率高但灵活性差
🔴 苹果 ANE = Core ML 屏蔽底层,开发者体验好但控制力弱
🔴 选型原则:训练用 GPU/TPU,移动端用 NPU,国产化用昇腾/寒武纪学习状态:🟡 开始学习
历史选型说明
本页保留早期 NPU 生态比较,厂商工具、算子覆盖和性能参数可能已变化。
引用结论前应在目标版本重新确认:
- 模型与算子;
- 精度和量化;
- 编译器;
- 内存;
- 动态形状;
- 部署工具;
- 调试能力;
- 延迟、吞吐和能耗;
- 供应与维护周期。
当前选型不能只依赖历史峰值和笼统生态评价。
怎样使用历史比较
历史文章中的产品名称、工具链和参数反映当时可观察状态,适合帮助读者理解不同加速器的设计方向,不适合直接充当今天的采购清单。引用某个“更适合训练”或“更适合端侧”的结论时,应找到当时对应的模型、精度、功耗和软件版本,并在当前候选环境重新运行同一类工作负载。缺少这些条件时,保留原结论的历史语境,不把它改写成普遍规律。
峰值指标的限制
TOPS、FLOPS 和内存带宽描述不同硬件上限,通常基于特定数据类型与理想工作负载。真实模型还受到算子覆盖、形状、融合、内存规划和 Host 回退影响。历史峰值可以解释厂商设计重点,但无法代替端到端延迟、吞吐和能效测量。跨厂商比较前必须统一精度、Batch、输入和统计口径。
软件栈变化
NPU 的可用能力很大程度由编译器、运行时和框架适配决定。新版本可能增加算子,也可能改变量化、布局和部署格式。复现历史示例时要记录 SDK、驱动、编译器、模型转换器和运行时版本。无法获得原版本时,当前运行结果属于迁移实验,不能声称完全复现历史数据。
算子回退
模型转换成功不代表整图在 NPU 上运行。检查编译报告和运行 Trace,确认不支持算子是否回退到 CPU,以及回退前后是否发生设备同步和张量转换。少量位于关键路径的回退就可能破坏加速收益。历史文章没有记录回退时,应把对应性能数字标为证据不足。
精度边界
旧版文章中对低精度的描述需要结合当前模型重新验证。校准数据、量化粒度、累加精度和后处理都会影响结果。通用分类准确率不是所有领域的正确性标准,工业或科学场景还要检查阈值行为、误差分布和领域不变量。性能数字与正确性证据必须成对保存。
复现报告
复现历史 NPU 内容时,报告应包含原文来源提交、当前硬件、软件栈、模型、输入、编译诊断、设备与 Host 时间、内存、功耗和结果差异。对于无法验证的厂商内部架构,只描述公开接口和测量现象,不从相似 API 推断实现。这样归档既保留历史,也不会误导当前工程决策。
与当前文章的关系
当前权威文章负责更新选型方法与共同指标,历史页面负责保留原始分类和早期生态观察。发现旧内容仍有独特案例时,应核验后迁移到当前文章;发现旧命令失效时,可以增加迁移注释,但不应无记录覆盖原文。读者需要最新结论时先看当前文章,需要追溯变化时再回到本页。