ZLUDA:让非 NVIDIA GPU 运行 CUDA 应用
一、初识 ZLUDA
ZLUDA 是个啥呢?简单说,它是个能替代 CUDA 的技术,让非 NVIDIA 显卡也能跑 CUDA 应用。CUDA 是 NVIDIA 专属的,很多高性能计算、AI 领域的程序都基于它。可是,没有 NVIDIA 显卡,这些程序就跑不了?ZLUDA 不答应!
它专门支持 AMD Radeon RX 5000 系列及更新的显卡,无论是台式机还是集成显卡都能用。想在 AMD 显卡上跑那些原本只给 NVIDIA 开绿灯的 CUDA 程序?ZLUDA 来帮你实现。
ZLUDA 还在持续发展完善中,想第一时间了解它的进展,可以去它的官方开发页面看看,或者在 Discord 社区里交流。要是想更详细地了解它的来龙去脉,这个博客 公告 也值得细读。
二、ZLUDA 的魅力所在
(一)打破 NVIDIA 显卡垄断
以前想跑 CUDA 应用,几乎只能用 NVIDIA 显卡。这就像一个俱乐部,只对 NVIDIA 会员开放,AMD 显卡等其他品牌只能在外面干瞪眼。ZLUDA 就像是那个打破俱乐部围墙的“叛逆者”,它让 AMD 显卡也能顺利进入 CUDA 应用的世界。对于不想被 NVIDIA 显卡“绑架”,同时又钟爱 AMD 显卡性能或者受预算限制的用户来说,这是个超级好消息。
(二)性能接近原生
ZLUDA 并不是简单地凑合着让程序跑起来,它追求的是让程序在非 NVIDIA 显卡上以接近原生的性能运行。这意味着,你不用担心因为换了个显卡,程序就慢得像蜗牛一样。它的性能表现足够优秀,能让你几乎察觉不到和在 NVIDIA 显卡上的差异。这对于对性能要求苛刻的计算密集型任务,比如科学计算、机器学习模型训练等来说,至关重要。
三、ZLUDA 的使用场景
目前 ZLUDA 还处于重开发阶段,不过已经能支持 Geekbench 这个基准测试软件了。未来,随着它的不断完善,会有更多 CUDA 应用程序能被它“解锁”在非 NVIDIA 显卡上运行。
接下来,咱们就看看在不同系统上怎么用它吧。
(一)Windows 系统
-
安装 AMD 显卡驱动 -
你得先安装最新的 AMD 显卡驱动,也就是“AMD Software: Adrenalin Edition”。这就好比先给你的 AMD 显卡装上一个“操作系统”,让它能正常工作。
-
-
运行 CUDA 应用的两种方式 -
推荐方式:把 ZLUDA 提供的 nvcuda.dll
和nvml.dll
文件从它存放的路径(如果是从源码编译出来的,就在target\release
文件夹里;如果是下载的预编译包,就在zluda
文件夹里)复制到你的应用程序会加载 CUDA 的路径。一般情况下,应用程序的.exe
文件所在的目录就是这个路径。 -
使用 ZLUDA 启动器:这种方式有点小问题,不太稳定。不过你可以试试。在命令提示符(CMD)里,输入 <ZLUDA_DIRECTORY>\zluda_with.exe -- <APPLICATION> <APPLICATIONS_ARGUMENTS>
。这里<ZLUDA_DIRECTORY>
是 ZLUDA 文件所在的路径,<APPLICATION>
是你想运行的应用程序名,<APPLICATIONS_ARGUMENTS>
是应用程序的参数。这就像给你的应用程序穿上了 ZLUDA 的“外衣”,让它能借助 ZLUDA 的力量在 AMD 显卡上跑起来。
-
(二)Linux 系统
在 Linux 下,操作相对简单。你只需要在运行应用程序时,先设置环境变量。输入 LD_LIBRARY_PATH=<ZLUDA_DIRECTORY> <APPLICATION> <APPLICATIONS_ARGUMENTS>
。其中 <ZLUDA_DIRECTORY>
对应的是存放 ZLUDA 提供的 libcuda.so
文件的目录(从源码编译的话在 target/release
文件夹,下载预编译包的话在 zluda
文件夹),<APPLICATION>
和 <APPLICATIONS_ARGUMENTS>
同样是你的应用程序名和参数。这就像是在 Linux 的“地图”上给程序指明了 ZLUDA 这个“工具箱”的位置,让它能顺利找到并使用 ZLUDA。
(三)MacOS 系统
MacOS 用户暂时没办法享受 ZLUDA 带来的好处,它目前还不支持这个系统。
四、ZLUDA 的构建过程
要是你是个技术爱好者,想自己动手构建 ZLUDA,那得先准备好一些“工具”。
(一)依赖项
-
Git:这是一个版本控制系统,能帮你从网上把 ZLUDA 的源码“克隆”到本地。就好比你去别人家借了一本书(源码),Git 帮你把书完整地拿回来。 -
CMake:它是构建过程中的“指挥官”,能根据项目的配置文件,把源码一步步地编译成能用的程序。 -
Python 3:在构建过程中,有些脚本是用 Python 写的,Python 3 就是运行这些脚本的“舞台”。 -
Rust 编译器(最新版本):ZLUDA 是用 Rust 语言写的,Rust 编译器就是把 Rust 代码变成计算机能懂的机器码的关键工具。 -
C++ 编译器:有些部分可能需要用 C++ 来处理,所以 C++ 编译器也不能少。 -
Ninja 构建系统(可选但推荐):它就像是一个高效的“建筑工人”,能让构建过程更快更顺利。
(二)构建步骤
-
克隆代码仓库 -
打开终端或者命令提示符,输入 git clone --recursive https://github.com/vosen/ZLUDA.git
。这个命令会把 ZLUDA 的代码仓库完整地复制到你的电脑上。其中--recursive
参数很重要,它能确保把项目里的子模块(就像是代码仓库里的“小插件”)也一并下载下来。
-
-
进入目录并构建 -
进入刚克隆下来的 ZLUDA 文件夹,输入 cargo xtask --release
。这一步可能会花不少时间,因为编译器要处理大量的代码,把它们变成最终能用的程序。就好比你把一堆原材料(源码)交给厨师(编译器),让它慢慢烹饪出美味的菜肴(可执行程序)。
-
五、ZLUDA 的贡献机制
ZLUDA 背后有商业支持,但它也欢迎大家贡献自己的力量,不过不接受捐款哦。
(一)代码贡献
要是你发现 ZLUDA 有个小毛病,或者有个好点子能改进它,你可以直接在 GitHub 上开一个 Pull Request。这就像给 ZLUDA 项目的“拼图”添上新的一块。不过在动手之前,你可以先从项目的两个重要部分入手了解:
-
ptx
(PTX 编译器):PTX 是 CUDA 的中间表示语言,这个编译器负责把 PTX 代码转换成能在 AMD 显卡上跑的代码。你可以在cargo test -p ptx -- ::add_hip
这个简单的测试用例下,用调试器看看它是怎么工作的,就像是先在小池塘里试试水深浅。 -
zluda
(AMD GPU 运行时):这是 ZLUDA 的核心部分之一,它负责在 AMD 显卡上实际执行代码。理解它的运行机制会让你对整个 ZLUDA 的工作流程有更清晰的认识。
(二)新手友好任务
在 GitHub 上,有一些标着“help wanted”的问题。这些问题定义得很清楚,虽然难度不一,但都是独立的任务。对于刚接触 ZLUDA 想贡献自己一份力的人来说,这是个不错的起点。要是你在贡献过程中有疑问,还可以去 Discord 的 #devtalk 频道问问。
六、常见问题解答(FAQ)
(一)ZLUDA 能完全替代 CUDA 吗?
目前还不能完全替代。ZLUDA 正在积极开发中,目前只支持 Geekbench 这个基准测试软件。不过随着开发的推进,未来有望支持更多的 CUDA 应用程序。
(二)我用的是旧款 AMD 显卡,能用 ZLUDA 吗?
暂时不行。ZLUDA 主要支持 AMD Radeon RX 5000 系列及更新的显卡。旧款显卡可能在硬件架构或者驱动支持上不符合要求。
(三)ZLUDA 支持 Linux 上的所有发行版吗?
理论上,只要你的 Linux 发行版满足 ZLUDA 的构建和运行依赖,就应该可以使用。不过它主要是在常见的 Linux 发行版(如 Ubuntu、Fedora 等)上进行了测试,其他小众发行版可能会有一些兼容性问题。
(四)我按照说明操作了,ZLUDA 还是没法正常工作,怎么办?
你可以先检查一下是不是按照安装和使用步骤准确无误地操作了。要是还是不行,可以在 ZLUDA 的 GitHub 项目页面上查看有没有类似的问题,或者在 Discord 社区寻求帮助。也有可能是因为你的应用程序本身和 ZLUDA 还存在一些兼容性问题,毕竟 ZLUDA 还没有完全成熟。
七、结语
ZLUDA 的出现就像是在显卡计算领域打开了一扇新的大门。它让 AMD 显卡用户看到了在非 NVIDIA 平台上运行 CUDA 应用的希望。虽然现在它还在成长过程中,但它的潜力巨大。无论是对于想节省成本选择 AMD 显卡的用户,还是对于追求技术多样性和开放性的开发者来说,ZLUDA 都是一个值得关注和期待的项目。随着它不断进步,未来可能会在高性能计算、AI 开发等领域发挥越来越重要的作用,让我们一起拭目以待吧!