CANN
昇腾CANN — 华为AI计算架构 · 对标CUDA+cuDNN+TensorRT
简介
CANN(Compute Architecture for Neural Networks,异构计算架构神经网络)是华为昇腾AI处理器的核心软件平台,对标NVIDIA的CUDA+cuDNN+TensorRT三位一体生态。CANN提供了面向AI计算的全栈软件解决方案,包括算子开发工具Ascend C、高性能算子库(1500+算子、100+融合算子)、CATLASS模板库、Triton编译器支持,以及AscendCL编程接口和自动调优工具。CANN是华为昇腾AI生态的软件基石,承载从模型开发到推理部署的全流程,全面开源开放后正在构建中国自主AI算力的软件底座。
| 发布/成立 | 2019 | 中国 |
| 最新版本 | CANN 8.0 | |
| 官网 | https://www.hiascend.com/software/cann | |
| GitHub | github.com/Ascend | |
| 开源协议 | Apache 2.0 / 部分商业许可 |
🏗️ 架构概览
CANN采用分层解耦的架构设计,从底层硬件向上依次包括:
- 硬件适配层:支持昇腾310(推理)、昇腾910B(训练)等系列NPU,通过硬件抽象层屏蔽底层差异
- 计算引擎层:核心计算与编译子系统,包括AICPU/Vector Core/Da Vinci Core的调度、算子编译优化、图编译引擎
- 算子库层:AscendCL API、1500+内置算子、100+融合算子、CATLASS模板库
- 编译器层:Ascend C编程语言编译器、Triton编译器、TVM接口兼容
- 框架适配层:提供PyTorch适配(torch_npu)、MindSpore原生支持、TensorFlow/PaddlePaddle等适配
CANN的核心理念是通过"统一计算图+昇腾算子"实现框架无关的高性能计算。开发者无需感知底层硬件细节,即可享受自动化的算子调用和性能优化。
🧮 算子体系(1500+算子 · 100+融合算子)
CANN内置了业界最全面的算子库之一,涵盖:
- 基础算子:矩阵运算(GEMM/GEMV)、卷积(Conv2D/Conv3D)、池化、归一化(BatchNorm/LayerNorm/RMSNorm)、激活函数(ReLU/SiGLU/GELU/SwiGLU)等800+算子
- 融合算子:针对Transformer等大模型架构深度优化的100+融合算子(FlashAttention、FusedRMSNorm、FusedMLP、FusedSoftmax等),将多个连续操作合并为单一kernel,显著减少内存访问和调度开销
- 数学库:对标cuBLAS的BLAS库、对标cuDNN的NN库、对标cuFFT的FFT库、对标cuRAND的随机数库
- 通信算子:AllReduce、AllGather、ReduceScatter等分布式通信算子,与HCCS高速互联协议深度协同
💻 Ascend C编程语言
Ascend C是CANN生态中的核心编程语言,专为昇腾NPU的Da Vinci架构设计。它提供类C++的编程体验,允许开发者直接编写高性能算子kernel。主要特性包括:
- 类CUDA编程模型:采用类似CUDA的grid/block/thread层次模型,降低从CUDA迁移的学习成本
- 多层级存储管理:显式管理L1 Buffer/L2 Buffer/Global Memory,充分挖掘达芬奇架构的计算潜力
- SIMD Vector指令:单指令多数据流向量化编程,实现高效并行计算
- 自动流水线优化:编译器自动将计算任务拆分为取数→计算→写回的流水线阶段
- 算子融合SDK:提供Tiling、多核同步等高级抽象,简化复杂算子开发
Ascend C的出现使得昇腾生态中的自定义算子开发门槛大幅降低,开发者无需深入研究硬件微架构即可编写高性能算子。
📦 CATLASS模板库
CATLASS(CANN Template Library for Ascend)是CANN提供的高性能计算模板库,对标NVIDIA的CUTLASS。它提供了一系列C++模板化的GEMM(通用矩阵乘法)和卷积实现,让开发者可以根据具体需求快速定制和组装算子:
- 模板化矩阵乘法:支持M×N×K各种维度的GEMM变体,包括混合精度(FP16*FP16→FP32、BF16*BF16→FP32等)
- 自定义Epilogue:在矩阵乘法的末尾阶段注入自定义操作(如ReLU、Scale、Bias等),避免额外kernel launch
- Warp级/Block级调度:提供不同粒度的计算调度模板,适应不同规模的GEMM
- 自动调优:通过Auto-tuning自动搜索最优的tiling参数和流水线配置
🔧 Triton编译器支持
CANN的Triton支持是其对标CUDA生态的重要举措。通过集成Triton编译器后端,开发者可以用Python编写自定义算子(类似于PyTorch的Triton DSL),自动编译为昇腾NPU的高效kernel:
- Python DSL:使用Triton的Python领域特定语言编写算子,无需接触C/C++
- 自动并行:编译器自动将算子映射到昇腾的向量计算单元
- 动态shape支持:支持动态输入shape场景下的即时编译(JIT)
- 渐进式迁移:CUDA生态中的Triton算子可经少量修改在昇腾NPU上运行
🌐 全面开源开放
CANN自2024年起加速全面开源开放策略,已开源的核心组件包括:
- torch_npu:PyTorch的昇腾适配插件,GitHub已获得大量星标
- ACL(AscendCL):CANN的应用层编程接口,提供C/C++/Python SDK
- 算子开发工具:Ascend C编译器、TikTok DSL工具
- 模型迁移工具:自动将PyTorch/TensorFlow模型迁移至昇腾平台
- Profiling工具:全链路性能分析和调优工具
开源社区通过GitHub Ascend组织进行管理,提供详细的API文档、示例代码和技术博客。CANN 8.0版本开始支持社区贡献的算子PR。
👥 开发者生态
CANN正在构建中国最大的AI算力开发者生态:
- 开发者数量:CANN开发者注册量突破300万(2025年数据)
- 认证体系:华为认证昇腾工程师(HCIA/HCIP-Ascend)系列课程
- 技术社区:昇腾社区(hiascend.com)提供文档、论坛、SIG组
- 生态伙伴:已适配300+第三方模型和50+ISV解决方案
- 活动赛事:每年举办的昇腾AI开发者大赛,参赛队伍超5000支
🆚 与CUDA生态对标
| CANN | 对标产品 | 说明 |
|---|---|---|
| Ascend C | CUDA | 类CUDA的编程语言,开发自定义算子 |
| BLAS/NN库 | cuBLAS/cuDNN | 高性能数学和神经网络库 |
| CATLASS | CUTLASS | 模板化高性能计算库 |
| ACL(AscendCL) | CUDA Runtime API | 底层运行时编程接口 |
| Ascend Graph引擎 | TensorRT | 推理图编译和优化引擎 |
| Triton后端 | Triton (OpenAI) | Python DSL自定义算子 |
| torch_npu | CUDA PyTorch后端 | PyTorch框架适配 |
| Ascend Profiler | NVIDIA NSight | 性能分析和调试工具 |