DeepSeek 绕开 CUDA 垄断,针对英伟达 PTX 进行优化实现最大性能,英伟达护城河还在吗?

英伟达刚刚从DeepSeek-R1引发的4万亿元暴跌中缓过劲来,又面临新的压力?

硬件媒体Tom‘s Hardware带来开年最新热议:
DeepSeek甚至绕过了CUDA,使用更底层的编程语言做优化。

这一次是DeepSeek-V3论文中的更多细节,被人挖掘出来。
来自Mirae Asset Securities Research(韩国未来资产证券)的分析称,V3的硬件效率之所以能比Meta等高出10倍,可以总结为“他们从头开始重建了一切”。
在使用英伟达的H800 GPU训练DeepSeek-V3时,他们针对自己的需求把132个流式多处理器(SMs)中的20个修改成负责服务器间的通信,而不是计算任务
变相绕过了硬件对通信速度的限制。

DeepSeek-V3 Technical Report
这种操作是用英伟达的PTX(Parallel Thread Execution)语言实现的,而不是CUDA。
PTX在接近汇编语言的层级运行,允许进行细粒度的优化,如寄存器分配和Thread/Warp级别的调整。
这种编程非常复杂且难以维护,所以行业通用的做法是使用CUDA这样的高级编程语言。
换句话说,他们把优化做到了极致。
有网友表示,如果有一群人嫌CUDA太慢而使用PTX,那一定是前量化交易员。

一位亚马逊工程师提出灵魂质问:CUDA是否还是护城河?这种顶尖实验室可以有效利用任何GPU。

甚至有网友开始畅想,如果“新源神”DeepSeek开源了一个CUDA替代方案……

那么事情是否真会如此?
DeepSeek真的绕过了CUDA?

首先要明确的是,PTX仍然是英伟达GPU架构中的技术,它是CUDA编程模型中的中间表示,用于连接CUDA高级语言代码和GPU底层硬件指令。
PTX类似汇编语言,代码大概长这样:

来自http://tinkerd.net
在实际编译流程中,CUDA代码首先被编译为PTX代码,PTX代码再被编译为目标GPU架构的机器码(SASS,Streaming ASSembler)。
CUDA起到了提供高级编程接口和工具链的作用,可以简化开发者的工作。而PTX作为中间层,充当高级语言和底层硬件之间的桥梁。
另外,这种两步编译流程也使得CUDA程序具有跨架构的兼容性和可移植性。
反过来说,像DeepSeek这种直接编写PTX代码的做法,首先不仅非常复杂,也很难移植到不同型号的GPU。
有从业者表示,针对H100优化的代码迁移到其他型号上可能效果打折扣,也可能根本不工作了。

所以说,DeepSeek做了PTX级别的优化不意味着完全脱离了CUDA生态,但确实代表他们有优化其他GPU的能力。
事实上,我们也能看到DeekSeek已经与AMD、华为等团队紧密合作,第一时间提供了对其他硬件生态的支持。

One More Thing

还有人提出,如此一来,让AI擅长编写汇编语言是AI自我改进的一个方向。

我们不知道DeepSeek内部是否使用AI辅助编写了PTX代码——
但是确实刚刚见证DeepSeek-R1编写的代码显著提升大模型推理框架的运行速度
Llama.cpp项目中的一个新PR请求,使用SIMD指令(允许一条指令同时处理多个数据)显著提升WebAssembly在特定点积函数上的运行速度,提交者表示:
这个PR中的99%的代码都是由DeekSeek-R1编写的。我唯一做的就是开发测试和编写提示(经过一些尝试和错误)。
是的,这个PR旨在证明大模型现在能够编写良好的底层代码,甚至能够优化自己的代码。


llama.cpp项目的创始人检查了这段代码后表示“比预期的更爆炸”。
收藏者
0
被浏览
88

5 个回答

奔跑的蜗牛 LV

发表于 4 天前

1.deepseek绕开cuda,类似用cython的人绕开c语言。
2.非cs技术人员信原神那个搞笑答案的,可以理解,cs技术人员信了,一律看做彩笔辣鸡,简历可以丢垃圾桶。
用cpp写低时延代码时,偶尔也需要在c代码里插入x86汇编语句来提升性能,那么问题来了,这种和架构绑定的汇编语句换mips,arm和sparc上能运行吗?
cuda本质上是个c库,ptx本质上是nv架构gpu的专属汇编代码,写cuda事内联进去。
拿ptx当java那种中间码,堪比拿着x86的汇编跑别的架构上运行,说明这人基础真的不行,别写代码了,干点别的吧。

叶弟 LV

发表于 4 天前

又看见编程界著名原神了。
笑死个人的内容和置顶评论,除了暴露技术稀烂之外毫无用处。神他妈PTX绕过了CUDA。

木木 LV

发表于 4 天前

我以前在阿里的时候,认识一些公关部的朋友,有时候他们会让我帮他们审核他们即将发布的稿件(可能只是条微博)里面有没有一些技术上的错误。
当我看到利用ptx绕开cuda护城河这个公关稿的时候,我就想发明这个说法的人应该一行代码也没写过。

developer LV

发表于 4 天前

“DeepSeek甚至绕过了CUDA”,工程师灵魂提问:英伟达护城河还在吗?当前这个回答实在过于抽象,很怀疑现在的人是不是问了问llm就开始胡编乱造。
ptx是相比cuda更底层的,和nv gpu绑定更深的语言。
ptx是相比cuda更底层的,和nv gpu绑定更深的语言。
ptx是相比cuda更底层的,和nv gpu绑定更深的语言。
如果你能理解这一点,就能知道所谓绕过cuda,使用ptx实际上并不是和nv解藕,而是更深度的优化。
原有的模型执行层级:

  • 模型层
  • 算子层
  • 实现层(cublas, cutlass, 手写cuda, 自动生成cuda, 一般来说是这些混合实现的)
  • 汇编层
所谓绕过cuda,指的是在实现层加入手写/自动生成ptx来增加一种kernel实现,这样做的目的是更深度的优化。从ptx到汇编层完全依赖nvidia的编译器实现,而目前没有任何已知工具可以从ptx编译到其他平台的汇编层。而cuda,反而是有工具来做这件事的,并且已经证明是可行的。有人会为了绕过cuda的护城河来进入比cuda更深的ptx护城河吗?
如果需要绕过cuda,最简单的办法就是在算子层对其他平台进行支持,事实上其他公司也是这么做的。
如果真的想实现一种虚拟字节码来支持不同的gpu,那它一定不是ptx。并且这个字节码一定会编译到ptx来执行。不过鉴于现在的gpu并没有一个通用架构,也事实上并不支持任何程度的解释执行,这种做法相比于直接实现一个多平台算子库/算子编译器没有任何优势,所以也不可能有人往这个方向做。

absct LV

发表于 4 天前

你以为的:DeepSeek 绕过 CUDA 使用 PTX。
实际上的:DeepSeek 通过在 CUDA 代码里塞入一堆 PTX 代码来优化 CUDA 性能,然后和其他现成 CUDA 工具链结合,在可接收的开发时间内完成了开发,换成别的 GPU 还是做不到。
英伟达的护城河是 CUDA 的生态,而不是 CUDA 本身,而 PTX 是 CUDA 生态的一环

CUDA 生态包括高级 API 和丰富的工具链,庞大的库和框架支持,而这些在其他显卡生态上都还不够完善。
PTX 是 CUDA 的汇编,你可以理解为 CUDA 是一步一步翻译到显卡能照着执行的代码的,PTX 是 CUDA 的下一步。
现阶段的用 PTX 开发,是指把 PTX 插入到 CUDA 代码里,比如
// CUDA 内核函数,用于向量相加
__global__ void vectorAdd(const float* A, const float* B, float* C, int N) {
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    if (idx < N) {
        float a = A[idx];
        float b = B[idx];
        float c;

        // 插入 PTX 汇编代码
        asm volatile(
            "add.f32 %0, %1, %2;"  // PTX 汇编指令:将 %1 和 %2 相加,结果存入 %0
            : "=f"(c)              // 输出操作数:c
            : "f"(a), "f"(b)       // 输入操作数:a 和 b
        );

        C[idx] = c;
    }
}常见的误区

PTX 编程是整个代码用 PTX 写

PTX 的开发效率特别低,PTX 现在只被用来优化某些关键部分,是以镶嵌在 CUDA 里的形式存在的。
PTX 是跨芯片的

PTX 肯定不是跨芯片的,AMD 上与之对应的概念是 GCN ISA。
兼容 PTX 是分分钟的事

CUDA 编译后的结果是 PTX,要是兼容 PTX 简单,显卡厂商早拿着 CUDA 编译出来的中间结果到自己显卡上跑了,事实上,兼容 PTX 比兼容 CUDA 更难。
误解护城河的含义

我们现在说的英伟达的护城河一直是他做得更快(包括开发更快以及跑得更快),而不是其他显卡不能做。
CUDA 生态的东西太多了,其他生态的东西相比之下又太贫瘠了,DeepSeek 这个事件不仅没有说明 CUDA 护城河的消失,反而是在证明 CUDA 护城河仍然坚固。
只有当以下事件发生时,才是大众理解的护城河消失的征兆

  • 其他显卡的理论性能超过英伟达
  • 发生类似华为制裁导致的生态大迁徙(比如完全禁用 N 卡,被迫开始重复造轮子),丰富了其他生态
CUDA 护城河会破吗

其实,从业者一直是相信 CUDA 不会永远一家独大的,近几年越来越多的业务开始用 AMD 的显卡,尤其是推理侧。过往是迁移到其他显卡的成本太大,但是随着英伟达吃相越来越难看,N 卡越来越不划算,这个迁移是肉眼可见的。
但是,我最想吐槽的点就是,DeepSeek 用 PTX 这件事,和打破 CUDA 护城河是一点关系都没有,甚至这个事情应该是 CUDA 护城河的体现。
硬要扯上关系,就是未来其他显卡的生态需要一群高水平的从业者来开发,DeepSeek 如果愿意的话,他们有这个能力来完成这个事情,但到底能不能实现,还要看包括 DeepSeek 在内的高级开发者是否愿意为爱发电做迁移,或者是其他显卡展现出足够的潜力。
但是,CUDA 地位动摇这件事早已有之,和 DeepSeek 真是一点关系都没有,用 PTX 来优化 CUDA 至少三年前就开始大规模在干了,而且仍然是 CUDA 护城河内部的事情,现在突然被拿出来东拼西凑了一个故事。

<hr/>这个问题火了,而且评论区吵得厉害,我觉得有争议的点不是护城河,而是城本身,也就是训练用的显卡的需求会变少吗,这是一般认为 Nvidia 股价下跌的主要原因
DeepSeek 推出后 Nvidia 的股价下跌意味着什么

DeepSeek 提出了一个新颖的算法,用 1/10 的成本在 N 卡上完成了训练,证明训练大模型不需要那么多显卡,又因为训练大模型一直是用 N 卡,所以 Nvidia 的股票跌的厉害。
也就是

  • N 卡仍然是训练时的主流(目前大模型竞赛需要的领域)
  • 但是未来训练端需要的显卡可能会变少
所以以今天的情况来看,N 卡的总需求可能会因为训练端需要的显卡变少而减少。
可能减少是因为微软 CEO 在第二天提出了一个有意思的观点
杰文斯悖论:蒸汽机发明了,煤炭就少用了吗?提高资源使用效率反而可能增加其总消耗量。
这个观点认为技术进步提高了资源使用效率,效率提高降低了资源使用成本,成本下降刺激了资源需求的增长,需求增长可能超过效率提升带来的节约,最终导致资源总消耗增加。
举一些例子就是:

  • 蒸汽机发明提高了煤炭的利用效率,但是每年煤炭的需求反而在提高
  • LED 照明技术比传统更节能,全球照明用电需求仍在上升
  • 家电能效提升,但家庭总用电量仍在增长
  • 数据中心的能效提高,数据中心能耗仍在上升
数据来源:2020-2025 电力电量分析与展望

DeepSeek 绕开 CUDA 垄断,针对英伟达 PTX 进行优化实现最大性能,英伟达护城河还在吗?-1.jpg


用电量增速一直是正的

DeepSeek 绕开 CUDA 垄断,针对英伟达 PTX 进行优化实现最大性能,英伟达护城河还在吗?-2.jpg


能耗一直是上升的

但这个观点对于显卡来说会不会成立,我们以目前的眼光是看不到的。当然 Nvidia 股票下跌还受到中国科技实力上升对美国科技企业产生冲击之类的影响,不能完全反应美股市场对显卡数量问题的看法。

您需要登录后才可以回帖 登录 | 立即注册