DeepSeek V3 论文详情:如何绕过 CUDA 垄断!
DeepSeek 最近发布的两个型号 DeepSeek-V3 和 DeepSeek-R1,其性能可与 OpenAI 的类似型号相媲美,而成本却低得多。
据国外媒体报道,在短短两个月的时间里,他们在由 2048 个 H800 GPU 组成的集群上训练出了一个拥有 6710 亿个参数的 MoE 语言模型,其效率是顶级人工智能的 10 倍。
这一突破不是通过 CUDA 实现的,而是通过大量细粒度优化和使用英伟达类似汇编的 PTX(并行线程执行)编程实现的。
深度搜索 与 OpenAI 和其他公司在硬件限制下依靠蛮力计算能力的做法不同,OpenAI 被迫走上了另一条道路。它采用了一系列技术创新,在实现性能提升的同时降低了模型的功耗要求。
一些网民的热情评论
"在这个世界上,如果有任何一群人会疯狂地说出'CUDA 太慢了'这样的话!
天才极客微调 PTX,最大限度提高 GPU 性能
英伟达 PTX(并行线程执行)是专为英伟达 GPU 设计的中间指令集架构,介于高级 GPU 编程语言(如 CUDA C/C++)或其他语言前端与低级机器代码(流式汇编或 SASS)之间。
PTX 是一种低级指令集架构,将 GPU 作为数据并行计算设备,实现了寄存器分配和线程/线程束级调整等细粒度优化,而 CUDA C/C++ 等语言无法实现这些优化。
将 PTX 转换为 SASS 时,会针对特定一代英伟达™(NVIDIA®)GPU 进行优化。
在训练 V3 模型时,DeepSeek 重新配置了英伟达 H800 GPU:
在 132 个流处理器内核中,有 20 个被分配用于服务器间通信,主要用于数据压缩和解压缩,以突破处理器的连接限制,提高事务处理速度。
为了最大限度地提高性能,DeepSeek 还通过额外的细粒度线程/线程束级别调整,实施了先进的流水线算法。
这些优化远远超出了传统的 CUDA 开发水平,但却极难维护。然而,这种优化水平正是 DeepSeek 团队杰出技术能力的充分体现。
V3 文件特别提到了 PTX 的细节
这是因为,在全球 GPU 短缺和美国限制的双重压力下,DeepSeek 等公司不得不寻求创新的解决方案。
幸运的是,他们在这一领域取得了重大突破。
一位开发人员认为,"低级 GPU 编程是正确的方向。优化越多,成本就越低,或者说性能预算就越低,就可以用于其他进展,而无需额外支出"。
这一突破对市场产生了重大影响,一些投资者认为,新模式将减少对高性能硬件的需求,从而可能影响英伟达等公司的销售业绩。
不过,包括英特尔前首席执行官帕特-盖尔辛格在内的业内资深人士认为,人工智能应用可以充分利用所有可用的计算能力。
盖尔辛格认为,DeepSeek 的这一突破是在面向大众市场的低成本设备中嵌入人工智能功能的新途径。
PTX 和 CUDA
那么,DeepSeek 的出现是否意味着开发尖端 LLM 不再需要大规模 GPU 集群?
谷歌在计算资源方面的巨大投资、 OpenAIMeta 和 xAI 最终会被浪费掉吗?人工智能开发人员普遍认为情况并非如此。
但可以肯定的是,在数据处理和算法优化方面仍有巨大的潜力可挖,未来一定会出现更多创新的优化方法。
随着 DeepSeek V3 型号的开源,其技术报告中披露了详细的细节。
报告记录了 DeepSeek 进行的深度底层优化。简而言之,优化程度可以概括为 "他们从头开始重建了整个系统"。
如上所述,在使用 H800 GPU 训练 V3 时,DeepSeek 定制了 GPU 的核心计算单元(流式多处理器内核或 SM),以满足特定需求。
在总共 132 个 SM 中,他们特别分配了 20 个用于处理服务器之间的通信任务,而不是计算任务。
这种定制是在 PTX(并行线程执行)级别完成的,PTX 是英伟达™(NVIDIA®)图形处理器的底层指令集。
PTX 在接近汇编语言的级别上运行,可进行细粒度优化,如寄存器分配和线程/线程束级别调整。然而,这种精细控制既复杂又难以维护。
这就是为什么开发人员通常更喜欢使用 CUDA 等高级编程语言的原因,因为这些语言可为大多数并行编程任务提供足够的性能优化,而且无需进行底层优化。
然而,当需要最大限度地提高 GPU 资源的效率并实现特定的优化要求时,开发人员不得不求助于 PTX。
然而,技术障碍依然存在
对此,网民 Ian Cutress 说:"Deepseek 使用 PTX 并不能消除 CUDA 的技术障碍"。
CUDA 是一种高级语言。它使使用英伟达™(NVIDIA®)GPU 开发库和接口变得更容易,并支持快速迭代开发。
CUDA 可以通过微调底层代码(即 PTX)来优化性能,而且基本库已经完成。目前,大多数生产级软件都是基于 CUDA 构建的。
PTX 更类似于 GPU 可直接理解的汇编语言。它在低层次上工作,允许微观层面的优化。
如果选择使用 PTX 编程,就意味着无法使用上述内置的 CUDA 库。这是一项非常繁琐的任务,需要深入了解硬件和运行时问题的专业知识。
不过,如果开发人员完全了解自己在做什么,他们确实可以在运行时获得更好的性能和优化。
目前,英伟达生态系统的主流仍然是使用 CUDA。
那些希望从计算负载中获得额外 10-20% 性能或能效的开发人员,如在云中部署模型和销售令牌服务的公司,确实已经从 CUDA 级别优化到了 PTX 级别。他们愿意投入时间,因为从长远来看这是值得的。
需要注意的是,PTX 通常针对特定的硬件型号进行了优化,除非专门编写了适配逻辑,否则很难在不同的硬件之间进行移植。
此外,手动调整计算内核需要极大的毅力、勇气和保持冷静的特殊能力,因为程序可能每 5000 个周期就会出现一次内存访问错误。
当然,对于那些确实需要 PTX 的情况,以及那些有足够报酬来处理这些问题的开发人员,我们表示充分的理解和尊重。
对于所有其他开发人员,建议继续使用 CUDA 或其他基于 CUDA 的高级变体(或 MLIR)。