1. 先搞清楚CANN是什么,为什么这次开源这么受关注
1.1 一个类比:CANN在整个AI开发栈里的位置
先把定位说清楚。CANN的全称是Compute Architecture for Neural Networks,翻译成大白话就是“面向神经网络的异构计算架构”。它不像PyTorch、MindSpore那样是大家天天直接写模型的框架,也不像芯片本身那样是看得见的硬件,而是夹在两者中间、负责“翻译”和“调度”的那一层。
我习惯用一个厨房类比:AI框架是菜谱,上面写了“要做红烧肉,先切肉、再热锅、然后下调料”;昇腾AI处理器是炉灶和锅具,能产生火力、能翻炒;CANN就是那个站在灶台前的主厨,把菜谱的每一句翻译成具体的动作——开哪个火、倒多少油、什么时候颠勺,还要同时管好灶台上七八个锅,保证菜品不糊、速度够快。没有主厨,菜谱写得再漂亮,炉子也只能空烧。
所以CANN直接面对的不是搞模型的算法工程师,而是两类人:一类是算子开发工程师,需要在昇腾硬件上实现新算子或优化已有算子;另一类是框架适配工程师,要把PyTorch、MindSpore、ONNX这些生态里的模型顺利“翻译”到昇腾硬件上跑起来。凡是涉及模型迁移、算子移植、性能调优的工作,绕不开CANN。
1.2 为什么过去很多开发者觉得CANN门槛高
过去很长时间里,CANN一直被“软件栈黑盒”的问题困扰。上层API能拿到,但底层的图优化逻辑、算子实现细节、运行时调度策略,开发者都是只可调用、不可修改、也不容易看清。遇到性能不达标的情况,只能靠Profiler数据一层层猜,猜不透就只能去工单或者社区提问,一等就是半天。
这种模式的典型问题是:文档写得再细,也无法覆盖所有场景。尤其在做自定义算子的时候,你看到的可能就是几个接口说明,底层的Tiling策略、Buffer分配、数据搬运路径全部不可见。遇到编译报错,回溯栈里全是没看过源码的底层库函数,排错像在走迷宫。不少从CUDA切过来的开发者都有同感:上手成本比想象中高得多。
开源之后,局面就不一样了。底层源码可以拉下来直接看,报错能追到具体实现,行为异常可以自己加日志重编。对认真研究底牌的人而言,这才是真正能做深做透的状态。
1.3 全面开源开放后的三个直观变化
从开发者视角看,CANN转向开源开放以后,最直观的变化有三个。
第一个变化是可见性。算子实现、图编译流程、运行时调度、集合通信这些模块的源码陆续开放,开发者可以按图索骥,不再需要靠猜测判断行为。出问题时先查源码,很多疑问自己能解决。
第二个变化是参与感。以前开发者是“使用者”,只能提需求,等官方排期解决;现在是“共建者”,遇到问题可以直接提PR,修复后还能同步给全社区用户。这种从“看客”到“贡献者”的身份转换,带来的技术成长速度完全不同。
第三个变化是生态联动。CANN开源后,和MindSpore、openEuler、开源鸿蒙生态在边缘场景的协同也会更顺。完整的代码链条全部开放,意味着从上层框架到底层硬件的全链路优化成为可能,这也是一批系统级工程师最期待的部分。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开源开放到底开放了什么:不只有代码
2.1 软件栈层面的开放范围
很多人以为开源就是“把代码扔到Gitee上”。但对CANN这种体量的软件栈来说,“开源”分好几个层次,只放一个空仓库没意义,必须有完整的分层配套。
CANN作为异构计算架构,内部至少包含这么几块:统一的编程接口层,负责给上层框架提供稳定的API入口;图编译引擎,负责把前端图做解析、优化、算子选择和融合;算子库和算子开发工具链,负责提供高频算子的现成实现以及自定义算子开发能力;运行时和调度器,负责管理设备资源、任务下发和同步;还有集合通信库,负责多卡场景下的数据交换。每一层都要开放,开发者才能真正理解一个计算任务从框架下发到硬件执行,中间到底经历了什么。
我在写“全面开源”相关稿件时,特别关注的一点是:不能只看宣传稿里列出的仓库数量,更要看仓库之间的脉络是否完整。目前昇腾在Gitee上相关的开源仓库已经形成了从编译、运行时
