作者:九林
最近,软件工程师Longhorn注意到,安装的 EULA 文本文件中的一个条款写道:“不得对使用 SDK 组件生成的软件产品的任何部分进行逆向工程、反编译或反汇编,以便转换此类软件产品、从而在非英伟达平台上运行。” (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 的软件”的警告。实际上,英伟达在2021年已经在网上公示的许可条款中禁止,不过之前这则警告并未出现在安装过程中添加到主机系统上的文档中。
而现在,这个警告已经添加到了安装 CUDA 11.6 及更新版本时所附的最终用户许可协议(EULA)中。
英伟达针对CUDA 11.6及更高版本的突发举动,引发了业内震动。不少人士认为,这一招是针对Intel、AMD都有参与的ZLUDA等第三方项目,摩尔线程MUSA、登临科技GPU+以及中国厂商的兼容方案。
英伟达突然出手的背后,是CUDA的“霸权”受到威胁。
01、CUDA的“霸权”
CUDA是什么?简单来说,CUDA是英伟达推出的并行计算框架。
CUDA不仅可以调用GPU计算,还可以调用GPU硬件加速,让GPU拥有了解决复杂计算问题的能力,可以帮助客户为不同的任务对处理器进行编程。
在CUDA之前,英伟达的GPU仅仅是一个负责在屏幕上绘制图像的“图形处理单元”,也就是原本只能当作独立显卡的存在。有了CUDA后,GPU就可以通用了。GPU通用的意思就是,所有类似显卡运算的简单量大的工作,GPU都能干。例如AI深度学习,就需要GPU。
CUDA之于英伟达,可以说是历史的转折点。
自从2006年开始,英伟达将大笔资金投入到CUDA的研发中。为了把旗下的所有芯片都纳入CUDA的架构里,英伟达累计花了超过100亿美元。
2009年开始,也就是CUDA推出两三年后,英伟达每年的研发费用从营收的15%陡增到25%甚至30%。为了显示这个研发费用的超高,给大家举几个例子:苹果每年不足10%,微软每年15%-20%,英特尔每年20%左右。
所以可以看出来,英伟达在CUDA里,投入了大量的财力。
同时,CUDA的出现,也确实让英伟达在AI芯片领域快速起飞。CUDA推出后,英伟达迅速打开了新业务的大门,在航空航天、天文学、气象学领域里都有GPU的身影。
深谙需要利用工具和应用来帮助扩展自己的市场的英伟达,对于CUDA的策略是:“不开源,但免费提供,并处于英伟达的严格控制之下。”
因此,英伟达为人们获取自身硬件设置了非常低的门槛,包括 CUDA 工具包。CUDA在“使用人数越多,CUDA平台就越好用,新开发者就越倾向于选择CUDA”的良性循环中,加固了生态优势。
知名分析师本·汤普森(Ben Thompson)曾说:“英伟达既不是一家硬件公司,也不是一家软件公司:它是一家将两者融为一体的公司。”
CUDA最强的护城河事实上在于软件-芯片协同设计。英伟达强大的软硬件协同完善的生态,让第三方软件公司难以打破英伟达的CUDA领先地位。
尝试超越CUDA的企业往往会出现三种可能。
第一种,陷入追赶状态。第三方软件公司在研究透彻英伟达的GPU后,需要半年到一年的时间才能实现性能基本匹配CUDA,但很难在新GPU发布后立即实现性能匹配甚至领先。
第二种,时间滞后。第三方软件公司适配新的人工智能加速硬件需要时间,而在一年后等到其方案达到接近CUDA的水平时,英伟达已经发布了下一代GPU。这种时间滞后导致芯片公司无法及时利用最新的技术。
第三种,无法打破领先地位。由于英伟达的不断创新和市场领先,第三方软件公司很难打破这种局面。他们不仅面临着技术上的挑战,还面临着市场竞争的压力。
英伟达靠着 CUDA 绑定了数百万 AI 开发者,吸引着大型云计算公司采购它的 GPU。目前,CUDA生态合作者规模翻倍增长。
根据英伟达2023财年年报,目前有400万名开发者正在与CUDA合作,而且规模还在不断扩大。英伟达通过12年的时间达到200万名开发者,在过去的两年半里该数字翻了一番。目前CUDA的下载量已经超过了4000万次。
02、CUDA的兼容问题
事实证明 CUDA 和英伟达硬件的结合非常高效,大批程序都依赖这种结合。然而,随着更多竞争性的硬件涌入市场,更多的用户倾向于在与英伟达竞争的平台上运行其 CUDA 程序。
有两种方法可以做到这一点:重新编译代码(这种方法可供相应程序的开发人员使用),或使用转换层(也就是兼容)。
其实这里的“兼容”并不是真正的兼容。因为CUDA不是开源代码,是“黑盒子”,因此100%兼容CUDA在技术上是无法实现的。这里是说,通过架构的相似性,使产品可以比较容易地运行CUDA的代码。
使用像 ZLUDA 这样的转换层是在非英伟达硬件上运行 CUDA 程序的最简单方法。你要做的就是拿来已经编译好的二进制代码,然后使用 ZLUDA 或其他转换层运行它们。
谈到这里,我们可以一起来了解一下ZLUDA。其实,这个项目是在2020年时候开始的,被描述为‘英特尔GPU 上 CUDA 的直接替代品’。这个项目提出了一个概念:在非英伟达显卡上运行未更改的 CUDA 应用程序。
不过,随着英特尔、AMD转向支持自有软件平台,ZLUDA 现在似乎举步维艰。今年2月,AMD放弃资助ZLUDA项目。受到资金的限制,“ZLUDA”项目已经在 GitHub 上开源。
现在,英伟达已经禁止第三方公司兼容CUDA。
显而易见,使用转换层威胁到了英伟达在加速计算领域的霸主地位,尤其是在 AI 应用领域。这可能是英伟达决定禁止使用转换层在其他硬件平台上运行 CUDA 应用程序背后的初衷。
其实,从全球来看,许多国外的做算力芯片企业,例如 Graphcore、SambaNova、tenstorrent,没有一家兼容CUDA。而之所以不去兼容CUDA,归根结底,是因为各家希望探索出更适合做AI计算的路。
许多算力芯片企业选择在软件栈上另辟蹊径,主要是因为担心“兼容”CUDA会成为自家产品发展的“天花板”。
03、CUDA遭到业内“炮轰”
其实,英伟达的CUDA一直是业内被频频提及的话题。
在去年12月时,英特尔CEO 帕特·基辛格曾公开抨击英伟达,称其 CUDA 技术护城河又浅又小,并声称对于人工智能来说推理技术将比训练更重要。
在接受采访的时候,基辛格还在暗示英伟达CUDA的主导地位不会永远持续下去。
基辛格说到:“你知道,整个行业都在想如何消灭 CUDA 市场。”“我们认为 CUDA 护城河又浅又窄。因为整个行业都致力于为广泛的训练、创新、数据科学等领域带来更广泛的技术。”
顶级芯片大师吉姆・凯勒也在今年2月发布推文,吐槽英伟达 CUDA,认为CUDA是“沼泽”而不是“护城河”。
凯勒在后续推文中表示:“CUDA 毫无美感,只是粗暴地堆砌而成。基本上没有人会写 CUDA,即便是写了相关代码,其执行速度也不快。这也是为何 Triton、Tensor RT、Neon、Mojo 孕育而出的原因。”
凯勒认为 CUDA 像 X86 一样,英伟达为了确保软件和硬件的向后兼容性,逐步增加功能的过程中拖慢了性能,增加了程序开发的难度。与此同时,许多开源软件开发框架可以比 CUDA 更高效地使用。
不过,此前Semi Analysis首席分析师Dylan Patel曾表示:“随着PyTorch支持更多GPU厂商,再加上OpenAI的Triton搅局,英伟达手中的利器CUDA 逐渐锋芒不再。”
Triton实际上是Open AI推出了个“简化版CUDA”。Triton是种新的语言和编译器。它的操作难度比CUDA低,但性能却可与后者媲美。
OpenAI声称:“Triton只要25行代码,就能在FP16矩阵乘法shang上达到与cuBLAS相当的性能。”值得一提的是,Triton是开源的。相较于闭源的CUDA,其他硬件加速器能直接集成到Triton中,大大减少了为新硬件建立AI编译器栈的时间。
04、国内企业作出回应
在国内,目前一部分国产GPU厂商采取兼容CUDA的策略,以确保用惯了英伟达产品的客户在迁移时没有障碍。另外也有厂商着手培育自己的软件生态,其中包括摩尔线程、壁仞科技、登临科技等。如摩尔线程推出基于旗下GPU产品的“MUSA”软件架构。
昨日晚间,摩尔线程发布声明,强调摩尔线程MUSA/MUSIFY未受影响。
摩尔线程MUSA/MUSIFY不涉及英伟达EULA相关条款,开发者可放心使用。摩尔线程表示,MUSA是摩尔线程自主研发、拥有全部知识产权、软硬一体的全功能GPU先进计算统一系统架构,与CUDA无任何依赖关系。
MUSIFY是摩尔线程面向广大MUSA开发者提供的开发工具,方便用户在MUSA计算平台上进行应用移植与开发,可以让开发者将自己的C++源代码,转换成MUSA C++源代码,再通过MUSA编译器MCC编译生成基于MUSA指令集的二进制代码,最终运行在摩尔线程全功能GPU上。
总体来说,目前,英伟达只是在CUDA 11.6协议中增加了警告条款,尚未有实际行动。不过,这次警告,也代表着英伟达对兼容CUDA的一种态度。
重新编译现有的 CUDA 程序仍然完全合法。为了简化这项工作,AMD 和英特尔都有工具将 CUDA 程序分别移植到 ROCm(1)平台和 OpenAPI 平台上。
AMD于去年12月发布ROCm 6.0之后,正马不停蹄地推进6.1版本更新,从而进一步增强同英伟达CUDA的竞争力。AMD在 2月向 GitHub 公共仓库提交了大量关于 ROCm 6.1 的提交,这表明 AMD 有望在近期发布新版本。