CANN是什么?从零开始理解昇腾AI计算架构
说实话,刚开始接触CANN的时候,我一脸懵。什么是CANN?和CUDA有啥区别?为啥要学这个?这些问题在我脑子里转了好几天。后来跟着训练营一步步学下来,慢慢理解了CANN的价值和定位。今天我把这些学习心得整理出来,希望能帮到和我一样从零开始的同学。这是我们训练营的核心内容。当现有算子库不能满足需求时,可以用Ascend C开发自己的算子。某个特殊的激活函数定制化的attention机制特定领域的数
CANN是什么?从零开始理解昇腾AI计算架构
昇腾训练营报名链接:https://www.hiascend.com/developer/activities/cann20252#cann-camp-2502-intro
训练营简介:2025年昇腾CANN训练营第二季,基于CANN开源开放全场景,推出0基础入门系列、码力全开特辑、开发者案例等专题课程,助力不同阶段开发者快速提升算子开发技能。获得Ascend C算子中级认证,即可领取精美证书,完成社区任务更有机会赢取华为手机、平板、开发板等大奖。
前言
说实话,刚开始接触CANN的时候,我一脸懵。什么是CANN?和CUDA有啥区别?为啥要学这个?这些问题在我脑子里转了好几天。后来跟着训练营一步步学下来,慢慢理解了CANN的价值和定位。今天我把这些学习心得整理出来,希望能帮到和我一样从零开始的同学。
一、CANN到底是什么?
CANN的全称是 Compute Architecture for Neural Networks(神经网络计算架构)。简单来说,它是华为昇腾为AI计算打造的异构计算架构平台。
用个通俗的比喻:如果把昇腾NPU(Neural-network Processing Unit)比作一台超级跑车,那CANN就是这台跑车的驾驶系统和工具箱。它让我们能够更方便地操控这台"跑车",发挥出它的最大性能。
1.1 CANN的核心作用
CANN主要做三件事:
- 屏蔽硬件细节:让开发者不用关心底层硬件怎么工作,专注于算法实现
- 提供开发工具:从编译器到调试器,一应俱全
- 优化计算性能:自动做很多性能优化,让代码跑得更快
下图是CANN官网(https://www.hiascend.com/software/cann)展示的完整架构:

从官方架构图可以看到,CANN包含:
- AI框架适配层:支持PyTorch、TensorFlow等主流框架
- 异构计算架构:算子库、通信库、图引擎等核心组件
- 编程语言:Ascend C编程接口
- Runtime运行时:控制流、内存管理、任务调度
- Driver驱动:板级驱动、加速器驱动
- MindStudio:全流程开发工具链
1.2 CANN与CUDA的对比
很多人(包括我)第一次听到CANN,都会想到NVIDIA的CUDA。它们确实很像,但也有不少区别:
| 对比项 | CANN | CUDA |
|---|---|---|
| 硬件平台 | 昇腾NPU(Atlas系列) | NVIDIA GPU |
| 编程语言 | Ascend C(类似C++) | CUDA C/C++ |
| 核心优势 | AI计算优化,功耗比高 | 生态成熟,通用性强 |
| 应用场景 | AI训练/推理、科学计算 | 通用并行计算、图形渲染 |
| 开发工具 | MindStudio、msopst等 | Nsight、nvprof等 |
个人感受:CANN更专注于AI计算,在这方面做了很多针对性优化。比如它对Transformer、卷积网络这类常见AI模型有专门的加速策略。
二、CANN的整体架构
CANN的架构可以分为四层,从上到下分别是:
让我详细说说每一层:
2.1 AI框架层
这是我们最熟悉的一层,就是PyTorch、TensorFlow这些框架。CANN对主流框架都做了适配,所以你写的PyTorch代码,基本上不用改就能跑在昇腾NPU上。
从实际案例来看,很多PyTorch模型迁移到NPU,主要就是改设备指定相关的代码,其他的CANN框架层会自动处理。
2.2 CANN核心组件层
这是CANN的"大脑",包含三个关键部分:
- AscendCL(Ascend Computing Language)
- 提供设备管理、内存管理、算子调用等API
- 相当于CUDA Runtime API的角色
- 代码示例:
// 初始化AscendCL
aclError ret = aclInit(nullptr);
if (ret != ACL_SUCCESS) {
std::cout << "acl init failed" << std::endl;
return -1;
}
// 获取设备ID
int32_t deviceId = 0;
ret = aclrtSetDevice(deviceId);
if (ret != ACL_SUCCESS) {
std::cout << "set device failed" << std::endl;
return -1;
}
-
Graph Engine(图执行引擎)
- 负责计算图的调度和执行
- 做图层面的优化,比如算子融合、内存复用
-
TBE/Ascend C(算子开发工具)
- TBE:基于TVM的算子开发框架(老方式)
- Ascend C:新一代算子开发语言(推荐)
- 这是我们训练营的重点内容
2.3 执行引擎层
这一层负责把计算任务真正派发到硬件上执行。它会处理:
- 任务调度
- 内存管理
- 数据搬运
- 同步机制
2.4 昇腾硬件层
最底层就是物理硬件了:
- AI Core:专门做AI计算的核心,类似GPU的CUDA Core
- AI CPU:辅助处理一些控制逻辑
- DVPP:数字视觉预处理单元,做图像编解码
- HCCS:昇腾内部互联,连接多个NPU
三、CANN的典型应用场景
学了这么多理论,CANN到底能用来干啥?我总结了几个常见场景:
3.1 AI模型训练
训练大模型时,CANN可以充分发挥昇腾NPU的算力。在昇腾Atlas 800等服务器上,可以高效运行Llama等大模型的训练任务,充分利用NPU的并行计算能力。
3.2 AI模型推理
很多公司会用昇腾服务器做推理服务。CANN提供的推理优化能力,能让模型在保证精度的前提下跑得更快、更省电。
3.3 自定义算子开发
这是我们训练营的核心内容。当现有算子库不能满足需求时,可以用Ascend C开发自己的算子。比如:
- 某个特殊的激活函数
- 定制化的attention机制
- 特定领域的数据处理算子
3.4 科学计算
除了AI,CANN也支持一些科学计算场景,比如:
- 矩阵运算
- 信号处理
- 仿真计算
四、学习CANN的路线图
根据我这段时间的学习经验,我给大家规划了一个学习路线:
第一阶段:环境搭建(1-2天)
- 安装CANN开发套件
- 配置开发环境
- 跑通Hello World
第二阶段:基础学习(1周)
- 理解算子、Tensor等概念
- 学习AscendCL API
- 了解内存管理机制
第三阶段:算子开发(2-3周)
- Ascend C语法
- 开发简单算子(Add、Mul等)
- 学习调试技巧
第四阶段:性能优化(2-3周)
- 向量化编程
- Tiling策略
- Cache优化
第五阶段:实战项目(持续)
- 开发复杂算子
- 模型适配
- 性能调优
五、我踩过的坑
分享几个我刚开始学CANN时踩的坑,希望大家能避免:
坑1:环境变量没配对
刚装完CANN toolkit,兴冲冲地写代码,结果编译报错找不到头文件。后来才发现是环境变量没设置好。
解决方法:安装完记得执行:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
建议把这行加到 ~/.bashrc 里,省得每次都要手动执行。
坑2:内存没对齐
写第一个算子的时候,运行总是报内存错误。查了半天才知道,CANN对内存对齐有要求,很多数据类型要32字节对齐。
坑3:忘记释放资源
AscendCL编程需要手动管理资源(内存、Stream等),我一开始经常忘记释放,导致内存泄漏。养成好习惯很重要:
// 申请内存
void* devPtr = nullptr;
aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY);
// 使用内存
// ...
// 一定要释放!
aclrtFree(devPtr);
六、学习资源推荐
除了训练营,我还找了一些其他资源,一起分享给大家:
-
官方文档:https://www.hiascend.com/document
- 最权威,但有时候比较枯燥
-
CANN社区:https://www.hiascend.com/forum
- 可以提问,响应还挺快的
-
GitHub开源项目:
- 搜索"ascend"、"cann"能找到不少案例
- 我就从里面学到了很多实战技巧
-
昇腾训练营(强烈推荐):
- 系统化的课程
- 有老师答疑
- 完成任务还有证书和奖品
七、总结
学了一个月CANN,我最大的感受是:它并没有想象中那么难。只要跟着系统的课程(比如训练营)一步步来,很快就能上手。
CANN的核心价值在于:
- 让AI开发者能充分利用昇腾硬件的算力
- 提供了完整的开发工具链
- 在AI计算场景下有很好的性能表现
如果你也对AI加速、算子开发感兴趣,不妨跟着训练营学习一下。反正我是觉得,这个技能在当前AI火热的大环境下,还是很有价值的。
下一篇文章,我会详细讲解如何搭建CANN开发环境,包括各种避坑指南。欢迎大家持续关注!
交流讨论:
如果你在学习CANN的过程中遇到问题,欢迎在评论区留言,我们一起交流!
更多推荐



所有评论(0)