跳到主内容
快讯直播
AI智模界
AI 词典

CANN:昇腾 NPU 里那个「CUDA」到底管什么

一句话定义

CANN(Compute Architecture for Neural Networks)是华为为昇腾(Ascend)NPU 打造的异构计算软件栈,位置相当于英伟达生态里的 CUDA:把上层框架写好的算法,翻译、拆解成芯片真正能执行的一大堆指令。

为什么需要它

NPU(Neural-network Processing Unit,神经网络处理器)本身只会做很「笨」的事:搬运数据、做矩阵乘法、做累加。而模型代码里写的是「一层注意力」「一次归一化」。中间隔着一条巨大的鸿沟——谁来把大算子拆成小指令?谁来安排成千上万个计算核心先干哪一步、后干哪一步?谁来管数据什么时候搬进搬出?CANN 干的就是这件事。

打个比方:昇腾 NPU 是一支庞大的施工队,个个力大无穷,但只会听具体口令;PyTorch 这类框架是甲方,只会说「我要盖一栋楼」。CANN 就是中间的项目经理——拆图、排工序、派活、盯进度。没有这层项目经理,甲方的需求和施工队根本接不上话。

往下拆,CANN 大致包含几块:负责图编译和调度的图引擎、负责算子加速的库(对应 CUDA 里 cuDNN 那一类角色)、负责多卡集合通信的 HCCL、对外的应用侧接口 AscendCL,以及用 Ascend C 这类专有方式编写自定义算子的能力。

和 CUDA 的区别

对比项CUDACANN
服务的硬件NVIDIA GPU昇腾 NPU
定位统一的异构计算软件栈统一的异构计算软件栈
写自定义算子CUDA C/C++Ascend C
应用侧接口CUDA Runtime APIAscendCL
上层框架适配PyTorch、TensorFlow 等PyTorch 昇腾插件、MindSpore 等
生态成熟度经营多年,近乎事实标准起步更晚,正在追赶

两者填的是同一个坑,但接口、算子写法、通信库都不通用。一份为 CUDA 写的算子,搬到昇腾上要重写一遍。

为什么最近常被提起

一个模型从英伟达迁到昇腾,不是改一行代码:算子要重写、通信要重写、精度和性能要重新调。当 DeepSeek 把面向昇腾的基础组件开源出来时(注意力算子、通信库这类底层件),大家讨论的其实正是这些组件的昇腾版本最终落在了哪一层——答案就是 CANN。这也侧面说明:模型层的繁荣,是踩在算力软件栈的肩膀上的。

对你的实际意义

如果你在昇腾上跑模型,多数时候不会直接调用 CANN,但你遇到的「慢」「跑不起来」「提示算子不支持」,多半都出在这一层。评估国产算力时,除了看芯片参数,更值得问的是:这层软件好不好用,开发者愿不愿意在上面写算子。对普通人来说,芯片是硬件,能不能真正开得动,看的是这套软件。具体支持范围与最新进展,以官方页面为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。