9月30日,DeepSeek开源了面向华为昇腾的基础设施组件。官方通告里那句话被转了很多次,核心是“所有组件与此前面向英伟达平台的开源组件一一对应”。每日经济新闻
评论区很快出现一种读法:代码不用改了。
“组件对应”和“代码不用改”是两件事。真要估迁移成本,得先问清楚:你说的是哪一层代码?
如果你只是调用一个现成模型,改动确实不大。9月17日的华为全联接大会上,昇腾成了PyTorch官网可直接安装的算力平台,支持2.7.1到2.12。装好环境、把设备名换掉,工作基本停在胶水层。有人把这形容成“从换房子降级成装家具”——但家具装好不等于住得舒服,算子覆盖率和调优深度跟CUDA的差距还在。智算深一度
如果你要写算子,TileLang确实让事情简单了。同一套Tile程序可以喂给不同后端,官方仓库里那个GEMM+ReLU的例子,性能跟主线Ascend C打得有来有回,代码行数少了好几倍。可昇腾的存储层级不会自己消失:T.alloc_l1、T.alloc_l0a/l0b/l0c、T.SimtVF/T.SimdVF、T.dual_copy,这些接口你得知道什么时候用。跑通和跑满是两回事。知乎
再往下,是推理框架的内核。DeepInfer开源后,有人数过:昇腾版的TileLang kernel大约7400行,CUDA版大约5000行。同一个推理栈,昇腾侧多出约一半的kernel代码。这大概是“迁移一个生产级推理栈”最诚实的数字。知乎
最底下,是编译器后端。有人统计过,TileLang为了适配昇腾,提交了八万行代码。普通开发者不会碰这个数字,但前面所有“少改一点”,都建立在它上面。
所以“改多少代码”没有统一答案。从改设备名,到七千四百行,再到八万行,说的是三个不同的位置。越往上,你改得越少;越往下,成本越集中。
但行数还不是最贵的部分。
DeepSeek的V4-Pro有个细节:隐藏层维度是7168,而英伟达TensorRT-LLM的融合内核把4096写死了,模型直接跑不起来。工程师最初的处理是删掉报错检查,结果默认配置下静默输出错误结果,等第三方提交修复,前后花了一周多。你改了几万行都没事,一个常量就能让你停摆。DeepTech深科技
8卡昇腾910B部署V4.1-Flash的社区方案也一样:14项性能补丁、固定commit、还有一个把self用错的补丁——不打,服务起来第一个请求就抛NameError。模型代码可能一行没动,时间全花在部署栈上。知乎
这些边界,DeepSeek自己也没藏。FlashMLA的仓库写明,部分融合算子和稠密注意力算子仍只支持CUDA。DeepEP-Ascend的测试数据来自PoC硬件,还经过额外人工配置。昇腾环境要求950加CANN 9.2.0以上,它不是“所有昇腾卡、所有版本”的承诺。知乎
回到开头。迁移的成本从来不按行计费,它按你踩到的那个硬编码常量、那个没打上的补丁、那个只在特定shape下才出错的kernel计费。DeepSeek这次给出的,不是“零代码迁移”,而是把那八万行最贵的底层摊开——让下一个团队不用从零再付一遍。