ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

DeepSeek牵手华为昇腾:CUDA生态垄断下的国产AI芯片破局

DeepSeek牵手华为昇腾:CUDA生态垄断下的国产AI芯片破局

过去这些年我做模型部署,最深的感受是:AI工程师的肌肉记忆,早就不属于某个框架,而属于CUDA。你写PyTorch代码时随手敲一个.to('cuda'),你给新机器配环境时第一反应是查nvidia-smi,你排查性能瓶颈时习惯性打开Nsight,这些动作看起来稀松平常,但它们共同构成了一个藏得极深的行业标准。CUDA这十年构建的,根本不只是一套API,而是一整套从芯片、驱动、算子库到开发者习惯的完整链条。

所以当DeepSeek和华为的合作消息传出来,我第一反应不是“又一个模型适配新闻”,而是:这次是真正在动CUDA生态的根子。DeepSeek是开源权重模型,华为昇腾是国产AI芯片平台,两者绑在一起,等于把“模型生态”和“芯片生态”做了一次重新配对。这篇文章我想从技术角度拆一拆,为什么CUDA的垄断这么难破,华为这步棋到底动了哪块奶酪,以及作为普通AI工程师,我们该怎么在实操层面接住这波变化。

1. CUDA的十年护城河,本质是"开发者习惯"的惯性

1.1 从nvidia-smi说起:一张显卡如何定义了一个行业

干AI这行的人,几乎都有同一个条件反射:拿到服务器先敲nvidia-smi。这个命令往那一摆,GPU型号、显存、驱动版本、温度全出来了。你不需要看任何文档,就知道这台机器能不能跑深度学习。

这背后折射的其实是CUDA的渗透力。过去十年,整个AI技术栈几乎都以CUDA为地基:PyTorch默认调CUDA后端,TensorRT优化依赖CUDA核心库,vLLM推理引擎的PagedAttention在CUDA上跑得最顺,连拼多模型训练用的分布式通信库NCCL都是英伟达家的。你只要做AI,就躲不开这条链路上的任何一个环节。

很多人把CUDA垄断理解为“英伟达显卡卖得好”,这个理解太浅了。真正的垄断是习惯的垄断。你所在的团队、你用的开源项目、你抄过的博客教程、你踩过的坑的解决方案,全部默认CUDA环境,这就是最大的壁垒。换个芯片,你不仅得换驱动,换算子库,还得把团队里每个人的脑子都换一遍,这个成本没法用钱衡量。

1.2 CUDA生态的四层锁链:驱动、库、框架、工具链

CUDA能锁住行业十年,靠的是从底到顶的四层锁链:

  • 驱动和运行时层:NVIDIA驱动 + CUDA Toolkit,负责把Python里的张量操作翻译成GPU指令。你哪怕只是装一个PyTorch,底层也在依赖CUDA driver。
  • 计算库层:cuBLAS做矩阵乘法,cuDNN做卷积和循环网络,NCCL做多卡通信。这些库的性能是英伟达工程师一行一行调出来的,第三方很难短期追平。
  • 框架绑定层:PyTorch、TensorFlow、JAX都把CUDA作为默认后端,绝大多数学术代码和开源模型都是在这个前提下写的。
  • 开发者工具链层:Nsight、CUDA-GDB、NCCL调试工具、TensorRT模型优化器,这些工具决定了工程师的日常工作流。

所以你看,想让某个AI芯片崛起,不是“性能赶上A100”就行,而是得把上面四层全补齐。华为昇腾过去几年最大的努力,不是在硬件参数上对标,而是在搭这套软件栈,也就是CANN和MindIE那一整套东西,后面我会细聊。

2. DeepSeek牵手华为,打的是"模型与芯片解耦"这张牌

2.1 开源权重模型为什么天生适合生态破局

DeepSeek这个模型有个很关键的性质:开源权重。读到这里,可能有人会问,开源模型遍地都是,Llama不也开源吗?为什么DeepSeek和华为合作意义不一样。

区别在于DeepSeek的架构和合作深度。DeepSeek采用了MoE(混合专家)架构,模型体量极大但每次推理只激活一部分参数,这种设计对推理引擎和芯片厂商来说,意味着巨大的优化空间,也意味着挑战。哪个芯片厂商能把MoE推理吃透,哪个就拿到了下一代大模型部署的船票。华为昇腾在DeepSeek开源的当天就开始适配,实际上就是在抢这个制高点。

开源权重带来的另一个好处是:不依赖单一硬件厂商。以前你拿到一个闭源大模型,必须用厂商指定的云服务或芯片方案;现在DeepSeek的权重是公开的,你可以部署在英伟达GPU上,也可以部署在华为昇腾上,甚至可以部署在国产显卡上。模型和芯片一旦解耦,芯片厂商的软件生态就成了核心竞争力,谁的适配好用、性能高、工具顺手,开发者就流向谁。

2.2 合作的核心内容:把推理引擎适配到昇腾上

这次合作,落到技术层面,本质是两件事。

第一件,让DeepSeek的模型权重能在昇腾NPU上完成推理。华为昇腾的AI Core是基于达芬奇架构设计的,和英伟达GPU的SIMT架构完全不一样,算子执行方式、内存带宽模型、调度策略全都不同。要把DeepSeek这种千亿级MoE模型跑起来,需要在昇腾上实现对应算子,比如矩阵乘、Attention、RMSNorm、专家路由等,还要做内存复用和KV Cache管理。

第二件,做推理引擎层面的适配。现在业界流行用vLLM做大模型推理,vLLM-Ascend就是专门为昇腾适配的推理引擎。它支持连续批处理、PagedAttention这些技术,在昇腾上也实现了类似的效果。DeepSeek和华为合作后,DeepSeek的模型在昇腾上通过vLLM-Ascend或MindIE引擎运行,性能已经达到了可用的水平。

2.3 为什么说这次合作不只是"又一个适配"

我见过太多“XX模型适配XX芯片”的新闻,多数停留在“能跑通demo”阶段。但DeepSeek和华为这次合作,有几个信号不太一样。

第一,DeepSeek的MoE架构本身就是为高效推理设计的,它对算力的需求不像稠密模型那么夸张,这让昇腾芯片在性价比上有了发挥空间。第二,DeepSeek模型权重公开,导致社区在持续做适配优化,你可以在GitHub上看到不少昇腾推理的issue和PR,这说明生态在自发运转,而不是靠一纸合同硬推。第三,华为昇腾在软件栈上已经打出配合:CANN提供底层运算能力,MindIE做推理优化,torch_npu接住PyTorch生态,这使得DeepSeek的适配不是孤立动作,而是一整条软件链路的疏通。

3. 昇腾的底牌不止硬件:CANN架构与CUDA兼容层拆解

3.1 CANN在华为AI技术栈里的位置

想理解华为昇腾能不能挑战CUDA,得先看懂它在软件栈上的布局。我把它和CUDA做个粗略的对应,你就明白了:

CUDA生态华为昇腾生态作用
NVIDIA Driver + CUDA ToolkitAscend HDK + CANN Toolkit驱动和底层运行时
CUDA Runtime APIAscendCL编程接口,负责张量操作、显存管理
cuDNN / cuBLASCANN的算子库高性能算子实现
NCCLHCCL多卡通信
PyTorch CUDA后端torch_npu让PyTorch代码跑在NPU上
TensorRTMindIE推理优化引擎

CANN的全称是Compute Architecture for Neural Networks,它在华为AI生态里的位置,类比就是“神经网络计算的芯片抽象层”。它的作用是把上层框架(PyTorch、MindSpore)发出的计算请求,翻译成昇腾NPU能执行的指令序列。AscendCL是它对外提供的主要编程接口,类似CUDA Runtime API,负责内存管理、流管理、算子执行这些基础操作。

3.2 CUDA兼容层到底兼容了什么

华为很聪明的一点,是没有试图让所有人重写算子,而是提供了CUDA兼容方案。具体来说,它做了一个运行时层面的兼容层,可以把CUDA的一部分API调用翻译成AscendCL调用。

什么概念呢?就是有些CUDA代码,不需要完全重写,通过编译迁移工具做一定改造,就能在昇腾上运行。尤其是PyTorch用户,日常面对的基本是框架层代码,底层CUDA调用都被封装好了。torch_npu做的就是把这个封装层指到昇腾NPU上,你写代码时还是import torch,只要把设备指定成npu,大部分张量操作就能跑。

但这里我必须说清楚,兼容不代表零成本。我试用过CUDA迁移工具,实际遇到的情况是:常用算子(Conv、MatMul、LayerNorm)支持得很好,但碰到一些冷门算子或者自己写的自定义CUDA kernel,就得手动改写。CUDA的__global__kernel在昇腾上是不存在的,你需要用TBE(张量加速引擎)或自定义算子接口重新实现。所以“兼容”是一个迁移友好的起点,不是让你无脑跑。

3.3 迁移成本的真实估算:不是"插上就能跑"

从一个模型迁移的真实流程来看,工作量大概是这样的:

  • 如果你的模型完全基于PyTorch,且用到的算子都在torch_npu支持列表里,那迁移成本很低,改几行设备指定代码就行。
  • 如果你用了CUDA扩展(比如自己编的C++ extension),就需要按昇腾的算子开发规范重新实现。
  • 如果你用了TensorRT优化后的引擎文件,那基本得重新用MindIE或在线推理引擎做一遍编译优化。
  • 如果你依赖NCCL做分布式训练,那要把通信库切到HCCL,通信策略可能要重新调。

所以,昇腾现在的位置更像是一个“能接住主流生态、但需要做工程适配”的平台。对于团队来说,迁移成本取决于你的技术栈离裸CUDA有多远。DeepSeek这种模型之所以适合做迁移标杆,就是因为它没有依赖奇怪的CUDA私有特性,用的都是Transformer核心算子,这类模型在昇腾上适配已经很成熟。

4. 在昇腾上把DeepSeek跑起来:一次迁移实操复盘

4.1 环境准备:驱动、固件、CANN工具链的版本组合

我自己的迁移经验,第一步最容易被忽略:版本组合。昇腾这套环境和CUDA不太一样,它对版本匹配极其敏感,驱动、固件、CANN、PyTorch适配层、Python版本,有一套严格的对应关系。我一开始图省事,随便装了最新CANN,结果跑模型时算子报错,一查是固件版本太老,兼容不上。

参考我走通的组合(目前大部分公开文档里常用的一套):

  • 操作系统:Ubuntu 20.04/22.04的x86或ARM版本
  • NPU驱动:Ascend HDK(310P/910系列)
  • CANN:6.x以上版本(越新对PyTorch的支持越好)
  • Python:3.8或3.10
  • PyTorch:适配的版本需要看torch_npu的发布说明,不能随便升

环境配置过程我建议分四步走:

  1. 安装NPU驱动和固件,装完用npu-smi info确认设备状态,这个命令等同于nvidia-smi。
  2. 安装CANN Toolkit,设置环境变量(source /usr/local/Ascend/ascend-toolkit/set_env.sh)。
  3. 安装对应的torch_npu版本,先确认它匹配你的PyTorch版本。
  4. 用torch.npu.is_available()做一个快速验证。

很多坑都出在前后顺序上,尤其是CANN和PyTorch的适配层,官方文档给的是英文和中文混排,初看容易晕,我建议直接查看对应版本的README安装指引,不要用旧版教程。

4.2 用torch_npu和vLLM-Ascend完成模型加载

环境就绪后,模型加载的逻辑其实很清晰。PyTorch用户只需要把设备指定从cuda改成npu,比如:

import torch import torch_npu # 关键:这个import会注册NPU后端 # 设置NPU设备 device = torch.npu.current_device() print(f"当前设备: {torch.npu.get_device_name(device)}") # 将模型权重迁移到NPU model = model.to(device)

如果你只想做推理,更推荐直接用vLLM-Ascend,它对DeepSeek这类大模型的吞吐优化做得更到位。启动命令大致长这样:

vllm serve deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \ --dtype bfloat16 \ --max-model-len 32768 \ --served-model-name deepseek \ --port 8000

这里开头用轻量蒸馏版本是更稳妥的起步做法。第一次跑,建议先用小参数模型把链路跑通,确认推理结果正常后,再上完整模型,不然遇到问题很难判断是环境问题还是模型太大导致的内存问题。

4.3 部署中踩过的坑与性能调优思路

我最想分享的是几个实际坑。

第一个坑是算子fallback。昇腾上有一部分算子如果没有NPU实现,会回退到CPU上执行,程序能跑,但性能极差,而且很难发现。排查方法是打开算子日志,看一下哪些算子跑在CPU上。我建议正常部署前把这些算子单独列清单,能替换的换掉,能融合的融合掉,否则上线后性能惨不忍睹。

第二个坑是显存分配器。PyTorch默认的显存分配策略对NPU不一定友好,容易显存碎片化。可以尝试开启torch_npu的内存池优化选项,或者调整model runner的显存回收策略,有一定改善空间。

第三个坑是KV Cache与Max Model Length的平衡。DeepSeek这类模型上下文越长,KV Cache占用越大,在昇腾上做推理时尤其要注意内存规划。如果你的并发请求不大,可以把max-model-len适当调低,换取更多并发能力。

性能调优方向,我实际试下来有三个维度最有效:

  • 张量并行:多卡场景下,DeepSeek的层间并行和张量并行要区分清楚,MoE模型的路由层在不同并行方案下通信开销差异很大。
  • 批处理大小:调整vLLM的continuous batching参数,观察吞吐和延迟的拐点。
  • 算子融合:把Attention、RMSNorm、SwigLU等高频算子尽可能融合,减少NPU内部指令搬运次数。

如果你跑出来的性能和CUDA对比还有差距,不用慌,这是正常的。昇腾要走的路还长,但它让我看到了一个完整的、工程上可落地的替代方案,而不是PPT里的概念。

5. 多生态并行时代,AI工程师的技术栈怎么调整

5.1 PyTorch是一层缓冲,但它不是万能

聊到这里,你会发现一个真相:PyTorch帮我们挡住了绝大部分硬件差异。同一个model.to(device),背后在CUDA上是NVIDIA的cuDNN,在昇腾上是CANN的算子库,在AMD上是ROCm,用户感受到的差别被压缩到很小。

但PyTorch这层缓冲不是万能的。你一旦涉及以下任何一块,就得直面硬件差异:

  • 自定义算子(Custom Op)和CUDA扩展
  • 分布式训练(NCCL vs HCCL)
  • 推理引擎优化(TensorRT vs MindIE)
  • 底层性能调优(显存带宽和调度策略)

所以我的判断是:未来AI工程师的分化会越来越明显。一部分人继续深耕英伟达生态,做大模型训练和推理的高性能优化;另一部分人转向多硬件适配,做模型在各种芯片间的迁移和部署。后者目前人才稀缺,因为大多数人的经验都被锁在CUDA单生态里。

5.2 需要补的课:NPU特性、内存带宽和算子融合

如果你打算在新生态里积累经验,我建议重点补这几块:

第一,理解NPU和GPU的架构差异。昇腾的AI Core走的是达芬奇架构,用“统一计算单元+大量标量处理单元”的方式执行算子,调度方式更接近硬件定向设计,不是GPU那种大量线程并行执行。这直接影响了算子怎么写、循环怎么展开。

第二,关注内存带宽模型。大模型推理的瓶颈多数在带宽而不是算力。不同芯片的HBM带宽、L2缓存大小、内存访问模式差异很大,同一个模型在A100和昇腾910B上跑,可能一个带宽受限,一个算力受限,调优思路完全不同。

第三,学会看算子融合。CUDA生态里,TensorRT已经把算子融合做到了极致;昇腾的MindIE和CANN也在做类似的事。你需要学会从图层面理解融合逻辑,判断哪些算子应该融合、哪些不适合,这个能力在哪个芯片生态都用得上。

5.3 我的个人建议:用"算子思维"代替"卡厂思维"

最后说点我对长期趋势的观察。以前我们思考的方式是“卡厂思维”:我用NVIDIA,所以我的工具链是CUDA、TensorRT、Nsight;如果换了AMD,就换一套。但现在模型开源化之后,越来越多人开始用“算子思维”思考:这个模型由哪些算子构成?这些算子在什么硬件上跑最划算?如何把算子映射到不同芯片。

DeepSeek和华为这次合作,最大的价值就是把“算子思维”推到了前台。它证明了一件事:一个优秀的开源模型,可以在不绑定英伟达硬件的情况下,做到“可部署、可运行、可优化”。这对AI生态来说是历史性的变化,至少对我们普通开发者来说,多一个选择,总比没有选择好得多。

我个人的实践体会是,不要等到生态完全成熟再动手。趁现在,找一块昇腾卡或者申请云端NPU资源,把DeepSeek的小模型跑一遍,改几行代码,踩几个坑,你收获的远比看十篇技术分析文章多。多生态这条路,早晚要走,早走的人,至少踩坑的时候还能笑出来。

返回列表