一、DeepSeek 是否真的绕开了 CUDA?
首先笔者认为,DeepSeek 本质上还是没有完全绕开 CUDA。
DeepSeek 没有直接使用 CUDA 的 API,而是直接使用 PTX,PTX(Parallel Thread Execution)语言是英伟达(NVIDIA)开发的,专门为其 GPU 设计的中间指令集架构,位于高级 GPU 编程语言(如 CUDA C/C++或其他语言前端)和低级机器代码(流处理汇编或 SASS)之间。PTX 是一种接近底层的指令集架构,将 GPU 呈现为数据并行计算设备,因此能够实现寄存器分配、线程/线程束级别调整等细粒度优化,这些是 CUDA C/C++等语言无法实现的。
为什么 DeepSeek 会抛开 CUDA API 而直接使用 PTX? 根本原因还是为了配合大模型特征更好的压榨 GPU 的性能
直接使用 PTX 的优势是可以对计算过程进行更细粒度的控制。因为 PTX 作为中间语言,能够更接近底层硬件的执行逻辑。DeepSeek 可以根据模型的特点和需求,对 PTX 代码进行针对性的优化,从而更好地发挥英伟达 GPU 的性能。比如,针对 DeepSeek 模型中某些特定的矩阵运算或者算法逻辑,通过直接编写和优化 PTX 代码,可以减少不必要的计算开销,提高计算效率。但是使用 PTX 也有缺点,就是这种编程非常复杂且难以维护,要求技术人员对 GPU 工作机制非常熟悉。从上述内容可以看出,DeepSeek 还是基于 CUDA 的能力,并没有完全抛开 CUDA。
那么 CUDA是什么,有什么样的魔力让其成为 NVIDIA 的核心壁垒?
二、CUDA 是什么
CUDA(Compute Unified Device Architecture,计算统一设备架构)是 NVIDIA 开发的一种 并行计算平台 和 编程模型,它为开发者提供了一种类似于 C、C++、Python 等编程语言的编程接口,使得他们可以使用这些熟悉的语言来编写能够在 GPU 上运行的代码,而无需深入了解 GPU 的底层硬件细节。通过 CUDA,GPU 可以被视为一个由大量处理核心组成的并行计算引擎,能够同时处理大量的数据,从而实现比传统 CPU 计算快得多的性能。特别适用于 AI 训练、科学计算、数据分析、计算机视觉等场景。
CUDA 的核心组成:
1、开发函数库:是基于 CUDA 技术所提供的应用开发库
CUDA 数学库(CUBLAS、CUFFT 等):CUBLAS 是 CUDA 的基本线性代数子程序库,提供了矩阵乘法、向量运算等高性能的线性代数操作函数,能大大提高线性代数计算的效率;CUFFT 是快速傅里叶变换库,用于高效地计算离散傅里叶变换和逆变换,在信号处理、图像处理等领域有广泛应用。
CUDA 深度学习库(CUDNN):专门为深度学习设计,提供了卷积、池化、归一化等深度学习中常用的操作的高性能实现,使用 CUDNN 能显著加速深度学习模型的训练和推理过程,是深度学习框架如 TensorFlow、PyTorch 等在 GPU 上高效运行的重要支撑。
其他实用库:如 CUDA 的并行算法库 Thrust,提供了类似于 C++ STL 的并行算法和数据结构,如排序、搜索、规约等操作,方便开发者进行并行计算的开发;还有用于图像处理的 NPP 库等,为特定领域的应用提供了便捷的开发工具。
2、CUDA 运行时库:提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。用于在主机(CPU)和设备(GPU)之间进行数据传输、内存管理、内核启动等操作。例如,开发者可以使用运行时库函数将数据从主机内存复制到 GPU 内存,然后启动 GPU 内核来对这些数据进行计算,最后再将计算结果从 GPU 内存复制回主机内存。
3、CUDA 驱动:负责与底层的 GPU 硬件进行通信,将 CUDA 程序转换为 GPU 能够理解的指令和数据格式,并管理 GPU 的资源,如显存分配、线程调度等。它是 CUDA 程序与 GPU 硬件之间的桥梁,确保程序能够在不同型号的 NVIDIA GPU 上正确运行。
三、CUDA 的意义
在 CUDA 诞生之前,使用 GPU 进行计算加速是一个 复杂且高度依赖硬件 的过程,而 CUDA 的出现极大地 简化了 GPU 编程,降低了开发门槛,使 GPU 计算能力能够被更广泛地应用。
笔者认为 CUDA 的重要作用有以下几点:
1、降低了开发门槛:CUDA 提供简单编程接口,大幅降低了 GPU 并行编程门槛,让开发者无需熟悉复杂的GPU硬件知识,使用熟悉的编程语言就能开发高效并行程序
2、成为软硬件的桥梁:NVIDIA 的硬件性能十分强悍,但要发挥其最大潜力,离不开与之相匹配的软件支持。CUDA 正是这样一个桥梁,它提供了大量的计算函数库,而且 NVIDIA 在针对硬件特性持续不断地优化这些库,使得开发者能够充分利用 GPU 硬件进行高性能计算加速。
3、推动 AI 和深度学习的发展:CUDA 作为 AI 计算加速的核心技术,赋能 PyTorch、TensorFlow 等主流深度学习框架,使开发者能轻松利用 GPU 进行高效训练和推理,从而大幅提升 AI 计算的速度和效率。
四、CUDA 为什么是 NVIDIA 的护城河
CUDA 一直是国产 GPU 绕不开的门槛,国内 GPU 厂商目前有两种技术路线,一种完全另起炉灶,完全定义一套跟 CUDA 类似的技术生态,典型如华为昇腾,这种路线难度很大,意味着需要构建一套全新的技术生态;另外一种则是天然兼容 CUDA,这样原来在 NVIDIA 上运行的应用可以少量甚至是不改动就可以平移过来。
CUDA 通过多年的积累,在开发生态、兼容性、性能、应用生态等方面构建了领先于其他 GPU 厂商的优势:
1、完善的开发生态系统
CUDA 的最大优势之一是其 开发生态系统。通过 CUDA,英伟达构建了一个高度集成的并行计算平台,提供了编译器、工具链、开发库等,降低了开发 GPU 加速应用的门槛。CUDA 采用了类似于 C/C++ 的编程语言,使得开发者可以轻松将并行计算任务映射到 GPU 上。相比之下,其他 GPU 厂商,但由于缺乏类似于 CUDA 的成熟平台和生态系统,开发者很难找到一个功能全又易用的替代方案。
2、持续优化与兼容性
CUDA 的一个关键特性是它的 向后兼容性 和 易扩展性。随着英伟达不断推出新一代的 GPU 架构,CUDA 能够保证开发者的应用程序无需做大的修改即可在新硬件上运行并获得更好的性能。通过 CUDA,开发者编写的程序可以自动适配功能更强的新版本硬件,而不需要根据硬件的细节进行频繁修改。这种向后兼容性和扩展性让开发者在长期使用中能够最大化硬件的性能优势,而不必担心频繁的技术变动带来的影响。同时 NVIDIA 也在持续的优化 CUDA 计算库,提升性能。
3、简化大规模并行计算
CUDA 的并行编程模型为开发者提供了一个 简洁高效的方式 来利用 GPU 进行大规模并行计算。开发者只需编写类似于 C\C++语言的程序,而 CUDA 编译器会自动将其转换为 GPU 上的并行执行程序。这种简化的编程方式降低了并行编程的复杂性,使得开发者可以专注于高层的应用逻辑,而无需过多关注底层硬件的细节。这是 CUDA 成为 GPU 编程标准的一个重要原因。
4、开发者社区与行业应用支持
CUDA 的成功也离不开 大量的开发者社区 和 广泛的行业应用支持。自 2006 年发布以来,CUDA 已经成为 AI、深度学习、科学计算 等领域的主流工具,全球有成千上万的应用程序和框架通过 CUDA 加速。例如,深度学习框架如 TensorFlow、PyTorch 都依赖于 CUDA 来实现 GPU 加速。大量的开发者社区和行业应用支持不仅为 CUDA 提供了丰富的应用场景和案例,也推动了技术的不断创新和完善。
五、总结
在大模型领域,以后会不会不再用 CUDA API,而是直接用 PTX 这类更底层的技术呢?我觉得很有可能,主要有这几个原因:
1、成本问题:现在用大模型成本太高了,这严重阻碍了大模型的推广和普及,是行业里大家都头疼的难题。所以大模型厂商都在想找办法降低成本、提升性能,自然就有动力去采用新的技术。
2、技术因素:像 PTX 这种底层技术,用起来确实很复杂,维护也麻烦。不过,现在基础大模型有逐渐收敛的趋势,越来越多专业人才都聚集到几家头部模型厂商去了。等人才集中起来,技术复杂的问题也就不算什么大问题了。
3、软硬件适配:基础模型一旦收敛,市场上大概率就只剩几个主流模型。到那时,GPU 厂商和模型厂商就能针对这几个模型,进行更深入的软硬件适配和优化。CUDA 主要是为了方便广大开发者,提供了一套简单通用的开发工具。但当模型数量减少,那么在该场景中 CUDA 的重要性也就没那么高了 。
以上是个人对CUDA以及PTX未来趋势的一个推测,以供参考
免责声明:寰云数据遵守行业规则,本站所转载的稿件都标注作者和来源。 转载稿件或作者投稿可能会经编辑修改或者补充. 如有异议可投诉至: hydatapb@yundatas.com