其实自 2021 年以来,Nvidia 就已经在其在线列出的许可条款中禁止使用翻译层(translation layers)在其他硬件平台上运行基于 CUDA 的软件,但之前的警告并未包含在安装过程中放置在主机系统上的文档。
但据报道,最近,这个描述已添加到安装 CUDA 11.6 及更高版本时包含的 EULA 中。该限制似乎旨在阻止英特尔和 AMD 最近参与的ZLUDA等计划,或许更关键的是,一些中国 GPU 制造商利用带有翻译层的 CUDA 代码。
软件工程师Longhorn注意到了这些术语。安装的 EULA 文本文件中的一个条款写道:“您不得对使用 SDK 元素生成的输出的任何部分进行逆向工程、反编译或反汇编,以将此类输出工件转换为目标非 NVIDIA 平台。” _(You may not reverse engineer, decompile or disassemble any portion of the output generated using SDK elements for the purpose of translating such output artifacts to target a non-NVIDIA platform.,")_
与 CUDA 11.4 和 11.5 版本一起安装的 EULA 文档中不存在该条款,并且可能包含该版本之前的所有版本。但是,它存在于 11.6 及更高版本的安装文档中。
作为一个领导者,这有好的一面,也有坏的一面。一方面,每个人都依赖你;另一方面,每个人都想站在你的肩膀上。后者显然是 CUDA 所发生的情况。由于 CUDA 和 Nvidia 硬件的组合已被证明非常高效,因此大量程序都依赖它。
然而,随着更多有竞争力的硬件进入市场,更多的用户倾向于在竞争平台上运行他们的 CUDA 程序。有两种方法可以做到这一点:重新编译代码(可供各个程序的开发人员使用)或使用翻译层。
出于显而易见的原因,使用ZLUDA 这样的转换层是在非 Nvidia 硬件上运行 CUDA 程序的最简单方法。我们所要做的就是获取已编译的二进制文件并使用 ZLUDA 或其他转换层运行它们。
但ZLUDA 现在似乎陷入困境,AMD 和英特尔都放弃了进一步开发它的机会,但这并不意味着翻译不可行。
出于显而易见的原因,使用转换层威胁到了 Nvidia 在加速计算领域的霸权,特别是在人工智能应用方面。这可能是 Nvidia 决定禁止使用翻译层在其他硬件平台上运行 CUDA 应用程序的推动力。
重新编译现有的 CUDA 程序仍然完全合法。为了简化这一点,AMD 和 Intel 都有工具分别将 CUDA 程序移植到他们的 ROCm和 OpenAPI平台。
随着 AMD、英特尔、Tenstorrent 和其他公司开发出更好的硬件,更多的软件开发人员将倾向于为这些平台进行设计,而 Nvidia 的 CUDA 主导地位可能会随着时间的推移而减弱。
此外,专门为特定处理器开发和编译的程序将不可避免地比通过翻译层运行的软件运行得更好,这意味着 AMD、英特尔、Tenstorrent 和其他公司能够在与 Nvidia 的竞争中获得更好的竞争地位——如果他们能够吸引软件开发人员加入的话。
GPGPU仍然是一个重要且竞争激烈的竞技场,我们将密切关注未来事态的进展。
ZLUDA,一个有雄心的项目
早在2020年,一个名为ZLUDA的项目被描述为“英特尔 GPU 上 CUDA 的直接替代品”,它正在威胁 Nvidia 专有的 CUDA(统一计算设备架构)生态系统。
该独立项目(并非由AMD或Intel推动)当时已经提供了在非 Nvidia 显卡上运行未更改的 CUDA 应用程序的概念证明。
ZLUDA 的基础正是英特尔的oneAPI Level Zero规范。这是一个私人项目,与英特尔或英伟达没有任何关系。在刚发起的时候,ZLUDA 仍处于早期阶段,缺乏完整的 CUDA 支持。因此,许多 CUDA 应用程序无法与 ZLUDA 一起使用。
但ZLUDA 的创建者当时声称,它提供了“接近原生”的性能,暗示几乎没有性能损失。他提供了Intel Core i7-8700K的 GeekBench 5.2.3 结果,该处理器配备 Intel 的 UHD Graphics 630 iGPU,并运行 OpenCL 和 ZLUDA。对于后者,作者欺骗 GeekBench 认为 Intel iGPU 是速度较慢的 Nvidia GPU。然而,结果来自相同的 iGPU。
结果表明,与 OpenCL 性能相比,ZLUDA 的性能提高了 10%。总体而言,我们预计较基准组提高 4%左右。
作者明确表示,ZLUDA 与 AMD HIP 或 Intel DPC++ 完全不同,因为后两者是程序员将应用程序移植到所选特定 API 的工具。另一方面,ZLUDA 不需要任何额外的工作,因为 CUDA 应用程序只需在 Intel GPU 上运行。当然,只要支持 CUDA 子集即可。
经过几年的发展,该项目同样支持了AMD的GPU。据了解,今天的 ZLUDA 与 2020 年的版本有很大不同。它不是基于英特尔的 oneAPI 构建并包括对该公司 GPU 的支持,而是基于 AMD 的竞争 ROCm 解决方案,并且仅支持 Radeon GPU。目前还不完全清楚为什么英特尔的支持被取消,但这可能与 ZLUDA 2020 版本仅支持 Xe 之前的集成显卡有关。当 Arc Alchemist GPU 于 2022 年问世时,项目开发者Janik 已与 AMD 合作。开发人员也表示 ,ZLUDA“仅可能收到运行我个人感兴趣的工作负载 (DLSS) 的更新”,这意味着该项目或多或少已经完成。Janik 的最终目标似乎是获得英特尔或 AMD 的支持。
但进入今年二月中,有消息指出,该项目似乎不会进行进一步的工作,至少不会进行重大更新,ZLUDA 开发人员 Andrzej Janik(代号 vosen)表示,随着这两家公司(Intel和AMD)退出,他表示“我们已经没有 GPU 公司了”。
“实际上,该项目现在已经被放弃了。”Janik说。
由此可见,英特尔和 AMD 对让其 GPU 与现有 CUDA 生态系统兼容不感兴趣,这一点很能说明问题。看起来他们更愿意与带有 oneAPI 和 ROCm 的 CUDA 正面交锋,它们更新且开发程度较低,但拥有开源的好处。
迄今为止,CUDA 仍然是专业和数据中心图形软件中更流行的解决方案,目前尚不清楚这种情况是否会很快改变,特别是如果 Nvidia 的 GPU 在功能和性能方面继续领先英特尔和 AMD 的话。
打破CUDA霸权?
关于CUDA霸权这个论调,已经不是什么新鲜事了。
例如英特尔首席执行官帕特·基辛格 (Pat Gelsinger)在去年年底于纽约举行的一次活动中首先对 Nvidia 的 CUDA 技术大加赞赏,并声称推理技术将比人工智能训练更重要。但在接受提问时,基辛格表示 Nvidia 在训练方面的 CUDA 主导地位不会永远持续下去。
他同时说道,“你知道,整个行业都在积极消除 CUDA 市场,”基辛格说。他列举了 MLIR、 Google和 OpenAI等例子,暗示他们正在转向“Pythonic 编程层”,以使 AI 训练更加开放。
英特尔 CTO Greg Lavender在2023年9月的一个演讲中更是毫不掩饰地打趣道:“我将向所有开发人员提出一个挑战。让我们使用大模型和 Copilot 等技术来训练机器学习模型,将所有 CUDA 代码转换为 SYCL。”_(原文:I'll just throw out a challenge to all the developers. Let's use LLMs and technologies like Copilot to train a machine learning model to convert all your CUDA code to SYCL)。_
其中的SYCL 就是英特尔为打破 CUDA 对 AI 软件生态系统束缚做得的最新举措。据介绍,SYCL(或更具体地说 SYCLomatic)是一个免版税的跨架构抽象层,为英特尔的并行 C++ 编程语言提供支持。简而言之,在将 CUDA 代码移植为可在非 Nvidia 加速器上运行的过程中,SYCL 处理大部分繁重工作(据称高达 95%)。但正如您所期望的那样,通常需要进行一些微调和调整才能使应用程序全速运行。
当然,,SYCL 绝不是编写与加速器无关的代码的唯一方法。如Curley 所说,OpenAI 的 Triton 或 Google 的 Jax 等框架就是其中两个例子。
AMD CEO Lisa Su在接受采访谈到英伟达CUDA是表示,不相信护城河。她直言,像 PyTorch 这样的东西往往具有与硬件无关的功能。她同时指出,这意味着现在在 PyTorch 上运行 CUDA 的任何人都可以在 AMD 上运行,因为我们已经在那里完成了工作。坦率地说,它也可以在其他硬件上运行。
在去年的Advancing AI 大会上,AMD总裁Victor Peng就介绍了并行计算框架的最新版本ROCm 6,该框架专门针对 AMD Instinct 的综合软件堆栈进行了优化,特别适合生成 AI 中的大型语言模型。
专注于微调大型语言模型的初创公司 Lamini 则透露,它已经“秘密地在 100 多个AMD Instinct MI200 系列 GPU 上运行,并表示该芯片设计商的 ROCm 软件平台“已经实现了与 Nvidia 针对此类模型的主导 CUDA 平台的软件对等(software parity)。
曾从事 x86、Arm、MISC 和 RISC-V 处理器研究的传奇处理器架构师Jim Keller早前也批评了Nvidia 的 CUDA架构和软件堆栈,并将其比作 x86,他称之为沼泽。他指出,就连英伟达本身也有多个专用软件包,出于性能原因,这些软件包依赖于开源框架。
keller在后续帖子中写道。“如果你确实编写 CUDA,它可能不会很快。[...] Triton、Tensor RT、Neon 和 Mojo 的存在是有充分理由的。”
即使在Nvidia 本身,也有不完全依赖 CUDA 的工具。例如,Triton Inference Server 是 Nvidia 的一款开源工具,可简化 AI 模型的大规模部署,支持 TensorFlow、PyTorch 和 ONNX 等框架。Triton 还提供模型版本控制、多模型服务和并发模型执行等功能,以优化 GPU 和 CPU 资源的利用率。
Semianalysis作者Dylan Patel之前在一篇文章中也强调,随着 PyTorch 2.0 和 OpenAI Triton 的到来,英伟达在这一领域的主导地位正在被打破。具体可参考文章_《CUDA正在被赶下神坛》_。
作为读者,你是如何看英伟达这个决定和CUDA的未来啊?