前言:
CUDA最初是为科学计算领域设计的,英伟达致力于在消费级游戏显卡之外拓展新的市场机遇。
借助CUDA的发展,英伟达成功地在数据中心等高性能计算领域找到了第二个增长点。
作者| 方文三
图片来源|网 络
让英伟达确立主导地位的并非芯片本身
GPU与CPU在设计上存在本质差异。
CPU作为处理复杂任务的全能型处理器,一次仅能处理有限数量的任务;
而GPU则如同流水线工人,擅长于同时执行大量简单且重复的计算。
自21世纪初,研究人员开始意识到GPU的非凡潜力。
然而,当时GPU编程的复杂性令人望而却步。
程序员需借助多种图形API来引导GPU执行非图形任务,效率极低。
对此,英伟达的工程师们深感忧虑。于是,在2006年,英伟达推出了CUDA。
一个允许程序员直接使用C语言(后续还支持Python、Fortran等语言)来控制GPU的平台。
从此,GPU的角色不再局限于游戏的[渲染机器],而是转变为一个功能强大的通用计算引擎。
随后,英伟达还推出了CUDA Toolkit,其中集成了调试工具、优化器等,使得编程体验更加流畅。
正是这些创新,使得CUDA从一项技术演变为一个平台,吸引了众多开发者的加入。
这一成就归功于人工智能的兴起,特别是深度学习的迅猛发展。
2012年,深度学习模型AlexNet在ImageNet图像识别大赛中大放异彩,震惊了科技界。
该模型的训练需要大量的矩阵计算,而GPU与CUDA正是这类计算的理想选择。
这一生态系统的关键[种子]在2016年播下。
OpenAI接受了英伟达的捐赠,标志着[世界上首台专为人工智能设计的超级计算机]的诞生,其核心由8个基于Volta架构的V100 GPU构成。
数年后,随着GPT系列的成功,行业标准被纳入CUDA的语法之中,训练流程、算子接口、资源调度均围绕CUDA构建。
OpenAI的成功路径迅速成为整个行业的默认选择。
无论是谷歌的TensorFlow、Facebook的PyTorch,还是后来的Hugging Face transformers,都依赖于CUDA的底层支持。
英伟达借助这股东风,在AI崛起的关键时刻,悄然将CUDA从一个选项转变为行业标准。
CUDA构成的三大核心要素
①开发函数库:基于CUDA技术,提供了一系列应用开发库。
CUDA数学库(包括CUBLAS、CUFFT等)中,CUBLAS是基础的线性代数子程序库,它提供了矩阵乘法、向量运算等高性能线性代数操作函数,显著提升了线性代数计算的效率;
CUFFT则是快速傅里叶变换库,用于高效计算离散傅里叶变换及其逆变换,在信号处理、图像处理等领域具有广泛的应用。
CUDA深度学习库(CUDNN)专为深度学习设计,提供了卷积、池化、归一化等深度学习常用操作的高性能实现,是深度学习框架如TensorFlow、PyTorch等在GPU上高效运行的关键支撑。
此外,还有其他实用库,CUDA的并行算法库Thrust,它提供了类似于C++STL的并行算法和数据结构,包括排序、搜索、规约等操作。
②CUDA运行时库:提供了应用开发接口和运行期组件,涵盖了基本数据类型的定义以及各类计算、类型转换、内存管理、设备访问和执行调度等函数。
这些函数用于在主机(CPU)与设备(GPU)之间进行数据传输、内存管理、内核启动等操作。
例如,开发者可以利用运行时库函数将数据从主机内存复制到GPU内存,随后启动GPU内核对这些数据进行计算,最终再将计算结果从GPU内存复制回主机内存。
③CUDA驱动:负责与底层GPU硬件通信,将CUDA程序转换为GPU可理解的指令和数据格式,并管理GPU资源,如显存分配、线程调度等。
它是CUDA程序与GPU硬件之间的桥梁,确保程序能够在不同型号的英伟达 GPU 上顺利运行。
防御壁垒的深度甚至超越了硬件本身
英伟达的CUDA生态系统并非单纯的软件工具集合,而是一个构建于[开发者粘性-工具链垄断-框架绑定-商业利益]之上的闭环体系。
①关于开发者粘性,CUDA之所以能够占据主导地位,得益于其先发优势和规模效应。
经过二十年的积累,众多开发者已经形成了难以改变的[代码惯性]。
若试图将CUDA代码迁移到其他平台,很可能需要重写30%-50%的核心逻辑(例如内存管理、并行优化),同时面临30%-60%的性能损失,迁移成本极为庞大。
②就工具链垄断而言,英伟达在过去二十年中不断完善CUDA生态系统,最终实现了从开发到部署的[全链条捆绑]。
举例来说,CUDA拥有众多卓越的深度学习加速库,其底层库如cuDNN、cuBLAS的优化程度远超竞争对手。
在ResNet-50推理任务中,cuDNN的性能是ROCm的MIOpen的2.3倍,是Intel oneDNN的3.1倍。
再如,CUDA的推理引擎TensorRT能够将模型推理延迟降低至毫秒级别;
而AMD的MIGraphX在相同精度下的延迟高出55%,华为昇腾的CANN引擎仅支持有限的算子。
③CUDA与主流AI框架的深度耦合,也助其形成了[框架即生态]的隐形垄断。
以全球使用率最高的深度学习框架PyTorch为例,在其V2.3版本中,85%的算子优化代码仅针对CUDA实现。
至于PyTorch的新功能(如动态shape推理)也会优先适配CUDA 12.x版本,而AMD ROCm则需等待社区贡献代码,适配周期平均会延迟六个月。
此外,CUDA在框架底层就获得了英伟达的独家优化特权,与其他竞品形成了显著的性能差距。
例如,PyTorch的TorchScript在编译时会自动调用CUDA专属优化(如自动内核融合);
而ROCm版本则需要开发者手动插入HIP API,这极大地增加了代码的复杂性。
④英伟达通过Inception计划,支持了众多AI初创公司,这些公司被纳入[英伟达生态]后,被要求优先使用CUDA,并将代码共享至NGC(英伟达GPU Cloud)模型库。
从底层逻辑到上层策略的生态系统
CUDA及其衍生工具(如PTX、Run:AI、Omniverse)所构建的,已不仅仅是一套工具链,而是一套从底层执行逻辑到上层调度策略的完整操作系统。
一旦采用CUDA,就必须使用其编译器,并遵循其张量并行模型设计;
使用Run:AI,就必须在该工具定义的资源调度规则中优化算力;
使用PTX,就要接受其底层线程分配和执行方式。
换言之,从底层硬件编程到上层应用开发、调试、优化以及集群管理的各个层面,均由英伟达所定义。
今日之CUDA已不再是一种工具,而是一整套控制结构。
英伟达所控制的,不仅仅是某个产品,而是整个AI工程世界的[运行方式]。
在Windows平台上运行AI框架时,英伟达实际上控制着[中间三层],即AI软件栈中最核心的执行与接口层,这与微软当年通过Windows控制PC行业的情形如出一辙。
你可以更换键盘、鼠标,但无法更换操作系统。同样,在AI时代,你可以更换供应商,但无法绕过CUDA的接口。
CUDA在英伟达硬件生态中的核心地位
①与GPU硬件的深度融合:CUDA与英伟达GPU硬件之间存在着深度融合的关系,二者相辅相成,共同为用户提供强大的计算能力。
CUDA 能够充分发挥英伟达GPU硬件的性能优势,这得益于其独特的设计和优化。
以深度学习中的卷积计算为例,CUDA通过精心设计的线程调度和内存访问模式,能够让GPU的大量CUDA核心同时参与计算,极大地提高了卷积计算的速度。
在硬件加速功能方面,CUDA与英伟达GPU硬件紧密联系,许多硬件加速功能只有通过CUDA才能充分发挥出来。
例如,英伟达GPU中的Tensor Core专门用于加速矩阵乘法和累加运算。
CUDA提供了相应的编程接口,使得开发者能够方便地利用Tensor Core的强大性能,在深度学习训练中实现更快的计算速度和更高的效率。
此外,CUDA对英伟达GPU硬件的调用具有独特性,它能够直接访问GPU的硬件资源,实现高效的并行计算。
这种直接访问硬件的方式,减少了中间层的开销,提高了计算效率,使得CUDA在处理大规模数据和复杂计算任务时具有明显的优势。
②推动硬件产品的发展与迭代:CUDA的发展对英伟达硬件产品的更新换代起到了重要的推动作用。
随着CUDA功能的不断增强和应用场景的不断拓展,对英伟达GPU硬件的性能和架构提出了更高的要求,促使英伟达不断优化硬件架构,提升硬件性能,以满足CUDA的需求。
在硬件架构优化方面,英伟达根据CUDA的并行计算需求,不断改进GPU的架构设计。
例如,从早期的Fermi架构到后来的Volta、Ampere架构,英伟达不断增加CUDA核心的数量,优化内存带宽和缓存机制,提高GPU的并行计算能力和数据处理速度。
同时,CUDA的发展也促使英伟达不断推出新的硬件产品,以适应不同应用场景的需求。
例如,英伟达推出的A100、H100等高端GPU产品,不仅在硬件性能上有了大幅提升,还针对CUDA进行了深度优化,为人工智能、高性能计算等领域提供了更强大的计算支持。
这些新的硬件产品,反过来又促进了CUDA的发展和应用,形成了良性循环。
③构建完整的硬件生态系统:CUDA在英伟达的硬件生态系统中扮演着连接硬件与软件的关键角色。
它促进了基于英伟达GPU硬件的软件和应用的开发,构建了一个完整的硬件生态系统。
在这个生态系统中,CUDA作为核心平台,吸引了众多开发者基于其进行软件和应用的开发。
从深度学习框架到科学计算软件,从数据分析工具到图形图像处理应用,基于CUDA开发的软件和应用涵盖了多个领域,满足了不同用户的需求。
以深度学习领域为例,TensorFlow、PyTorch等主流深度学习框架都对CUDA提供了良好的支持。
开发者可以利用这些框架在英伟达GPU上快速搭建和训练深度学习模型,实现高效的图像识别、自然语言处理等任务。
在科学计算领域,诸如Matlab、LAMMPS等软件也借助CUDA加速计算过程,提高了科研工作的效率。
结尾:
经济学中有一个经典理论:[当一个生态系统的迁移成本远高于留存成本时,该生态系统便被锁定。]
这正是CUDA的厉害之处——它使用户产生了路径依赖,而这种依赖不再局限于硬件层面的[兼容性],而是将整个AI工程师的思维方式纳入其结构之中。
无论是OpenCL/OneAPI、TVM/XLA、MLIR,抑或其他一些出发点良好的项目,我们目睹了众多旨在构建统一AI基础设施的有力尝试。
但遗憾的是,尚未有任何一个能提供令开发者完全满意的结果。
项目逐渐走向碎片化,承诺未能兑现,使用替代硬件的用户手中的工具往往不尽人意。
现实情况是:唯有英伟达真正解决了这一问题。
部分资料参考:InfoQ:《GPU 编程[改朝换代]:英伟达终为CUDA 添加原生 Python 支持,百万用户变千万?》,科鲁叔叔趣说AI:《CUDA:英伟达的魔法引擎如何改变世界》,Rog3r:《究竟什么是英伟达的CUDA?真的坚不可摧吗?》,半导体行业观察:《如何打破CUDA垄断?LLVM奠基人长文解读》,牛山AI公园:《DeepSeek是否真绕开了CUDA?一文搞懂CUDA为何是英伟达的核心壁垒》