昇腾训练营报名链接: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主要做三件事:

  1. 屏蔽硬件细节:让开发者不用关心底层硬件怎么工作,专注于算法实现
  2. 提供开发工具:从编译器到调试器,一应俱全
  3. 优化计算性能:自动做很多性能优化,让代码跑得更快

下图是CANN官网(https://www.hiascend.com/software/cann)展示的完整架构:

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的架构可以分为四层,从上到下分别是:

AI框架层
PyTorch/TensorFlow/MindSpore
CANN核心组件层
执行引擎层
昇腾硬件层
NPU/CPU
AscendCL
算子加速库
Graph Engine
图执行引擎
TBE/Ascend C
算子开发

让我详细说说每一层:

2.1 AI框架层

这是我们最熟悉的一层,就是PyTorch、TensorFlow这些框架。CANN对主流框架都做了适配,所以你写的PyTorch代码,基本上不用改就能跑在昇腾NPU上。

从实际案例来看,很多PyTorch模型迁移到NPU,主要就是改设备指定相关的代码,其他的CANN框架层会自动处理。

2.2 CANN核心组件层

这是CANN的"大脑",包含三个关键部分:

  1. 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;
}
  1. Graph Engine(图执行引擎)

    • 负责计算图的调度和执行
    • 做图层面的优化,比如算子融合、内存复用
  2. 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的路线图

根据我这段时间的学习经验,我给大家规划了一个学习路线:

环境搭建
安装CANN toolkit
基础概念
了解算子/Tensor等
AscendCL编程
学会调用API
Ascend C入门
写简单算子
性能优化
向量化/Tiling
实战项目
完整算子库开发

第一阶段:环境搭建(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);

六、学习资源推荐

除了训练营,我还找了一些其他资源,一起分享给大家:

  1. 官方文档:https://www.hiascend.com/document

    • 最权威,但有时候比较枯燥
  2. CANN社区:https://www.hiascend.com/forum

    • 可以提问,响应还挺快的
  3. GitHub开源项目

    • 搜索"ascend"、"cann"能找到不少案例
    • 我就从里面学到了很多实战技巧
  4. 昇腾训练营(强烈推荐):

    • 系统化的课程
    • 有老师答疑
    • 完成任务还有证书和奖品

七、总结

学了一个月CANN,我最大的感受是:它并没有想象中那么难。只要跟着系统的课程(比如训练营)一步步来,很快就能上手。

CANN的核心价值在于:

  1. 让AI开发者能充分利用昇腾硬件的算力
  2. 提供了完整的开发工具链
  3. 在AI计算场景下有很好的性能表现

如果你也对AI加速、算子开发感兴趣,不妨跟着训练营学习一下。反正我是觉得,这个技能在当前AI火热的大环境下,还是很有价值的。

下一篇文章,我会详细讲解如何搭建CANN开发环境,包括各种避坑指南。欢迎大家持续关注!

交流讨论
如果你在学习CANN的过程中遇到问题,欢迎在评论区留言,我们一起交流!

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐