初创公司硬刚英伟达:在AMD卡上模拟CUDA,原版程序直接编译运行

  克雷西发自凹非寺

  量子位公众号 QbitAI

  无需任何修改转换,AMD 显卡也跑起原版 CUDA 程序了!

  英国一家初创公司,推出了针对 AMD 的 CUDA 程序编译工具,而且免费商用。

  工具一经发布就引发了网友们的广泛热议,并登顶了 HackerNews 热榜。

  该工具名为 SCALE,开发者给它的定位是一个 GPGPU(通用 GPU)编程工具包。

  目前已有大模型框架 llama-cpp 等 9 个程序通过测试,实现了正常运行。

  与其他实现方式不同,SCALE 直接模拟 CUDA 工具包的安装,不需要转换成其他语言就能源到源地完成编译。

  因此,像内联 PTX 这种英伟达专用的中间语言,SCALE 同样能够提供支持。

  无需转换,让 AMD 跑起 CUDA

  官网介绍显示,SCALE 主要有三个组成部分——兼容的 nvcc 编译器、CUDA 运行时和驱动 API 的 AMD 实现,以及 ROCm 库。

  其中编译器可以把用包括 nvcc、内联 PTX 等在内的 CUDA 专属语言编写的程序,直接编译成可在 AMD GPU 上运行的二进制代码。

  ROCm 库则用来提供“CUDA-X”API,SCALE 在处理 cuBLAS 和 cuSOLVER 等库时均采用这种方式。

  SCALE 的关键创新点在于按原样接受 CUDA 程序,而不必将它们移植到另一种语言,兼容 nvcc 和 clang 等多种编译方式,同时现有的构建工具和脚本(如 cmake)可以正常工作。

  按照官方的说法,SCALE 实现了对 CUDA 的完全兼容,让开发者无需针对不同 GPU 平台分别编写代码。

  这一点与 AMD 推出的 HIP 存在很大不同,因为 HIP 是通过一定方式对 CUDA 代码进行重写,遇到复杂的宏可能无法正确理解,也不支持内联 PTX 等专属语言。

  甚至 SCALE 作者认为,HIP 并不能解决 CUDA 兼容性问题。

  另外,SCALE 的语言是 CUDA 的超集,提供一些可选的语言扩展,可以使希望摆脱 nvcc 的开发者更轻松、更高效地编写 GPU 代码。

  作者表示,希望未来开发者可以只编写一次代码,就能不同硬件平台上运行,并正在着手通过弥合流行的 CUDA 编程语言和其他硬件供应商之间的兼容性差距。

  目前,SCALE 对 AMD 各系列 GPU 的支持情况如下:

  • 已支持:gfx1030(RX6000 系列)和 gfx1100(RX7000 系列)
  • “似乎有效”(seem to work):gfx1010(RX5000 系列)和 gfx1101
  • 正在适配:gfx900(RX Vega 系列)

  另外,作者测试了一些 CUDA 开源项目,并利用 SCALE 成功运行了 9 款 CUDA 应用。

  不过,SCALE 毕竟是个全新的项目,所以作者也准备了从安装到编译的一系列教程,给出了不同类型的示例程序。

  教程关键步骤都附有相关代码,甚至包括了如何判断自己 GPU 的型号,可以说是非常细致了。

  如果使用过程中遇到问题,作者也介绍了常见故障的排除方式,同时还开通了 Discord 论坛,可与开发团队直接沟通交流。

  打造出 SCALE 的这家初创公司名为 Spectral Compute,2018 年成立于英国,自称对 CPU 和 GPU 的架构有深入的了解,目标是帮助开发者高效利用算力资源。

  网友:挑战英伟达护城河?

  有网友认为,如果 SCALE 真能有(宣传中的)效果,那么将对英伟达护城河发起挑战,让 AMD 与之展开直接竞争。

  不过,现在下定论未免为时过早,毕竟 SCALE 官方也承认目前和原版 CUDA 相比还存在一些缺陷。

  而且开发者也明确表示有一些 CUDA API 和功能并不被支持,但也没有给出具体的列表。

  关于“AMD 方案”的更多不足,一名自称和 SCALE 团队交流过的网友表示,目前的 SCALE 还无法操作 TensorCore,也就意味着 AMD 上跑不了 FlashAttention 加速框架。

  另外由于N卡上有强大的矩阵乘法单元,所以即使能编译运行,AMD 卡上的性能可能也不及N卡。

  更有网友认为,英伟达一家独大的原因是 AMD 不愿意投资让其 GPU 拥有更高的机器学习性能(而不只是拥有 CUDA 这一个优势)。

  即便能够高效运行,AMD 卡是否真的经济实惠且容易获得,同样是一个问题。

  还有一波网友的观点是,最大的问题不是技术上能不能运行,而是背后的法律问题。

  这个问题同样引发了广泛的讨论,不过目前也暂未有定论。

  有人认为 SCALE 像 ZLUDA(另一种在 AMD 上运行 CUDA 程序的方式)一样存在法律疑点,有可能招致英伟达的诉讼。

  具体来说,根据英伟达的 EULA 条款,CUDA SDK 只允许开发在N卡上运行的应用程序,这可能禁止了类似 SCALE 这样的兼容实现。

  但立马就又有网友说,SCALE 并没有用到英伟达的“SDK”,何谈 SDK 使用协议呢?

  总之,无论是技术不足还是法律问题,对于这个新工具的讨论都还在持续进行。

  至于到底好不好用,这就要由开发者用脚投票了。

  参考链接:

  [1]https://docs.scale-lang.com/

  [2]https://news.ycombinator.com/item?id=40970560