在 AI 加速器 NPU 芯片生态中,CANN(Compute Architecture for Neural Networks)可以看作是连接“高层 AI 框架”(例如 PyTorch、TensorFlow、MindSpore)与“底层硬件”(例如 Ascend AI Processor)之间的“翻译 + 优化 + 调度 + 执行”桥梁。
简言之,CANN 的 “异构计算架构”,是AI 生态内的 “框架异构” 与 “硬件 编程异构” 的统一调度平台—— 它解决的是 AI 场景中 “不同框架、不同 AI 硬件无法高效协同” 的异构问题,是针对 AI 场景中 “上层框架异构” 和 “下层硬件 编程异构” 的统一适配,实现不同组件的协同工作:
上层:AI 框架的异构适配
不同 AI 框架(如 TensorFlow、PyTorch、MindSpore 等)本身是 “异构” 的 —— 它们有不同的设计逻辑、模型格式、算子定义、接口规范。CANN 通过 “AI 框架适配层”,将这些异构框架的请求转换为统一的内部格式,让开发者无需为每个框架单独适配底层硬件,实现 “多框架兼容” 的异构协同。
下层:AI 硬件 / 编程方式的异构适配
对下服务的 AI 处理器(如 Ascend 310、910 等不同型号)属于 “硬件异构”—— 不同型号的处理器架构、算力特性、算子支持范围存在差异;同时支持的编程方式(如 Ascend C、ATLAS 接口等)也属于 “编程异构”。CANN 通过核心组件(算子库、异构编译器、运行时调度),将这些异构的硬件、编程接口统一封装,让上层框架无需关注硬件差异,实现 “多硬件 / 多编程方式兼容” 的异构协同。
简单把它比作——如果把 Ascend NPU 想象成一辆性能强劲但“不识路”的超跑,那么 CANN 就是帮你规划路线、设定油门/刹车、让“超跑”能在复杂路况下顺利行驶的那套“引擎 + 驾驶系统 + 路线导航”。它让开发者不需要关心芯片寄存器、数据搬运、硬件调度这些底层细节,也不需要手写汇编或 DSP 指令,就能方便地把深度学习模型跑起来。
为什么最近你读这篇文章,甚至对 CANN 感兴趣,非常有价值?几个重要动因 :
一是AI 模型越来越大、算力需求越来越强:大模型、Transformer、MoE、LLM、长序列推理,底层算力成为瓶颈。
二是硬件 ≠ 性能 ≠ 效率 , 软件优化决定“真正跑得快、跑得稳、跑得省”。一个高端 NPU 如果没有合适的软件支持/编译、图优化、调度、融合机制,很可能“跑不满”。CANN 的作用,就是让 Ascend 系列 AI 芯片“跑满性能”,发挥其硬件潜力。
三是生态与兼容性越来越重要,现代深度学习工程流行使用 PyTorch TensorFlow ONNX / MindSpore 等框架。CANN 支持多种主流框架 — 作为桥梁,它能让已有模型更容易迁移到 Ascend 硬件上。
对于关注“大模型部署/落地”、“国产 AI 基础设施方案/替代方案”、以及想最大化硬件效能的开发者/企业来说,CANN 的重要性不言而喻。
| 常见问题/痛点 | 背后原因/现状 | 如果不用CANN,可能的后果 |
|---|---|---|
| “我的模型在 Ascend NPU 上跑不起来/报错/兼容性差” | 框架 → 硬件 之间缺乏适配层;算子、图结构与硬件不一致 | 项目难启动、调试复杂、开发成本高 |
| “模型可以跑,但慢/显存占用高/性能不稳定” | 没有对算子、图做融合/优化/调度/数据搬运策略没有优化 | 无法利用硬件全部算力;效率低下 |
| “迁移现有 PyTorch / TensorFlow 模型很复杂” | 缺乏对主流框架的兼容支持或迁移工具 | 模型重写成本高,阻碍 Adoption |
| “想做大规模/大并发/多任务推理服务” | 缺少对并行/通信/资源调度/内存管理的支撑 | 系统不稳定、扩展困难、资源浪费 |
CANN 的价值就在于:它让这些在 NPU/Ascend 硬件上部署 AI 模型时的关键问题,有了系统化、框架化、健壮的解决方案。
如果把 AI 模型在硬件上“跑起来”这件事想象成一个完整的工业链条,那 CANN 就是其中最核心、最关键的那套“底层动力系统”。
它负责把来自 PyTorch、TensorFlow、MindSpore 等框架 的计算任务,转化成 NPU 能够理解并高效执行的指令流,同时在这过程中做大量编译、优化、算子融合、调度、内存管理等复杂操作。
华为官方对它的定义是:
CANN(Compute Architecture for Neural Networks)是一套面向 AI 领域的异构计算架构,对上支持各类 AI 框架,对下服务 Ascend AI 处理器,实现 AI 计算的高效编程与执行。
理解它最直观的方法,是从它的整体技术栈结构入手。
整套体系大致分为六个主要层级,从上到下一层层连接着“写模型的世界”与“执行模型的世界”:
AI 框架适配层
算子库、通信库、图引擎、领域加速库
编程语言(Ascend C)、编译器(TBE/其他 DSL)
异构编译器(图编译与优化)
运行时(Runtime)
驱动层(Driver)
这是一条完整的“从模型描述 → 编译优化 → 执行调度 → 硬件执行”的链路,下面我们逐层展开。
当开发者用 PyTorch 写下:
y = model(x)
看似简单的一行代码,包含了巨量的:
计算图构建
张量操作
算子调用
内存分配
执行调度
为了让这些操作能在 Ascend NPU 上运行,CANN 的第一件事,就是在最上层提供完整的 框架适配层(Framework Adapter)。
它的作用非常关键:
把来自不同 AI 框架的算子、图、张量操作翻译成 CANN 能够理解的中间表示,并交给后端进一步优化。
这意味着: 训练在 PyTorch 写的模型,无需重写,也能跑到 NPU 上。
在完成框架适配之后,这一层是 CANN 的“能力核心”,负责提供各种优化、算子与算法支持。
CANN 提供大量预编译、高度优化的基础算子,包括:
NN 基础算子(Convolution、GEMM、Softmax…)
CV 算子(Resize、Pad、WarpAffine…)
Math 数学算子(Exp、Log、Add、Matmul…)
Transformer 常用算子(LayerNorm、Attention 模块相关算子)
其本质是:
把高层模型拆解成一个个“硬件极度擅长处理的小任务”,并用最优方式实现它们。
这就是 CANN 性能的第一来源。
CANN 内置集成了多种分布式通信算法,实现:
AllReduce
Broadcast
ReduceScatter
模型并行 / 数据并行
任务同步 / 异步机制
大模型训练离不开通信,而通信库决定了训练速度能否“拉满”。
这是 CANN 最重要的模块之一,也是它性能强大的核心来源。
图引擎具备以下能力:
算子融合(比如 Gelu + LayerNorm 融成一个算子)
常量折叠(把常量计算提前算好)
内存复用与重分配
消除冗余节点
自动调度执行顺序
它的目标很明确:
把模型从“框架层的教学版结构”变成“硬件最能接受、最高效执行的工业级结构”。
官方支持多种行业/领域的功能扩展库,例如:
ATB(AI Tune Base)
图像处理增强库
NLP 加速套件
视频处理套件
科研计算(SiP 等)
这些库让 CANN 对 CV/NLP/多模态等领域的常见操作都能拥有高度优化的算子与执行路径。
当基础算子不够用、或某些行业模型需要专用算子时,CANN 提供完整的 Ascend C 以及多种算子开发工具链,让开发者可以自己写底层算子。
包括:
Ascend C(类似 CUDA C)
CATLASS(类 CUTLASS 的高性能矩阵库)
TBE DSL、TBE TIK(面向 NPU 的算子开发语言)
支持 Triton 等第三方算子编程语言
有了这层能力,CANN 就不仅是“能跑模型”,还是“能自己扩展模型能力”的平台。
紧接在算子与图优化之后,模型会交由 CANN 的异构编译器完成:
IR(中间表示)生成
任务切分
指令流生成
并行策略选择
内存分配策略
DMA(数据搬运)规划
多核执行调度
可以把它理解成:
模型的“最终翻译官”,把人类写的逻辑翻译成 NPU 能执行的机器级指令。
性能好不好,很大程度取决于这一层的质量。
运行时(Runtime)负责模型真正运行起来的全过程,它包含:
设备上下文管理
Tensor 内存池
执行流(Stream)与事件(Event)机制
任务调度
数据搬运(DMA)
异步执行
简单来说:
Runtime 是 CANN 的指挥中心,决定每一步算子如何执行、何时执行、在哪执行。
它是 CANN 性能与稳定性的核心保障之一。
最底层是驱动层,包括:
板级驱动
加速器驱动
芯片管理
电源 / 温度监控
设备资源调度
通道配置 / 设备发现
这层工作虽然“看不到”,但非常关键: 它负责确保上面的所有编译、优化、调度,都能被真正执行到 Ascend 芯片的 AICore、VectorCore、DMA 引擎等硬件单元上。
贯穿整个体系,CANN 的设计哲学可以总结成三句话:
① 上层统一:兼容主流框架,不改模型即可迁移
这让 PyTorch / TensorFlow 用户能自然地用 Ascend。
② 底层性能:算子优化 + 图编译 + 调度体系全面拉满
真正实现“硬件性能有多少,就能吃到多少”。
③ 多层可扩展:从算子库到自定义算子全开放
保证科研人员、企业开发者、大模型公司都能按照自己需求定制优化路径。
要理解 CANN 究竟能做什么,我们可以换一个更日常、更直观的角度来观察: 它并不是一个抽象的“计算库”,而是一套真正能让模型动起来、跑得快起来、落地起来的 AI“动力系统”。
很多人第一次接触NPU,总会问一句:“它和 GPU 到底有什么差别?模型换过去之后能提升多少速度?” 但实际上,硬件差异只是表层,更关键的,是 CANN 在整个推理与训练流程中做的那些“幕后工作”。你看到的一切性能差距、成本下降、吞吐提升,本质上都是 CANN 的结果。
下面,我们从三个更真实的问题切入:
为什么同一个模型,用 CANN 跑会更快?
为什么企业的多用户并发、海量文档处理、大模型在线推理,都离不开 CANN?
为什么 CANN 可以做到“让硬件吃满”,而不是只吃到一半算力?
让我们从最关键的部分讲起。
如今的大模型,无论是 Transformer、LLM 还是 MoE,最吃性能的地方通常集中在几类典型计算上: 矩阵乘法、Softmax、LayerNorm、Attention… 这些操作看似普通,但在百亿 / 千亿参数规模下,会被重复调用数千次,其效率直接决定推理延迟和吞吐量。
CANN 在这里的作用,可以理解为帮模型做了一次深度装修。原来散落的几十个小步骤,被重新排列组合成更适合硬件执行的流程。
举个简单例子: Transformer 模型里一个常见路径是:
MatMul → Add → LayerNorm → GELU → Dropout
如果按框架原始方式执行,每一步都会:
创建中间张量
分配内存
在计算单元和内存之间不断“搬家”
效率自然下降。
而 CANN 的图引擎会自动把它们重新组合,例如融合成一个更大的算子。 这类似于做菜:本来需要切菜、放调料、翻炒、再放调料,现在把流程整体优化,变成“一气呵成”。
结果:
数据少搬很多次
内存占用降低
指令连续度更高
使用 AICore 这种强算力单元的效率显著提升
在实际场景中,例如 Qwen-7B、Baichuan-13B 等主流大模型迁移到后,CANN 的优化可以实现推理加速,这不是靠堆硬件。
大模型推理不止是算得快,更重要的是“别崩”。 特别是在多用户并发访问时,系统需要同时:
管理显存
分配执行流
调度任务优先级
保证延迟不会暴涨
避免内存碎片与溢出
这些活都落在 CANN 的 Runtime 上。比如企业场景里,你的系统每天要处理上千份 PDF,做 OCR、文本抽取、分类、再调用 LLM 做分析。 如果系统只在“模型本身”上做优化,它最多只能做到“一个人用得快”。 但大量用户同时访问时,没有 Runtime 的调度、流管理、多任务并发支持,性能就会迅速崩盘。
换句话说,企业真正关心的“性能稳定性”,其实来自 CANN 的运行机制。
大模型推理最吃资源的是显存。没有针对性优化时,模型一跑就占满整个设备,甚至连 batch=1 都不稳定。
我们有很多优化思路,CANN同样也提供了很多优化选择:
DMA 数据搬运优化:减少不必要的内存复制
图优化中的冗余节点剔除
算子内部缓存策略调整
计算与通信流水并行
KV Cache 的高效复用(对 LLM 至关重要)
当模型从几十亿参数进一步扩展到百亿、千亿,单卡已经不够用了。 这个时候,通信库与 图调度体系就成为核心。
CANN 在这一部分的能力,可以理解为给多台 Ascend 芯片之间架起了一条高速公路,让参数、梯度、激活值能够高速交换。
在大规模训练时,通信成本常常是最大的瓶颈。有些模型在 GPU 上训练时,80% 的时间都花在通信,而不是计算上。
在未来,随着大模型持续演进、算子形态不断变化、推理成本压力越来越高,CANN 会继续承担重要角色: 既是国产算力体系的坚实底座,也是整个 AI 工业体系的“发动机管理系统”。