AMD显卡跑起CUDA应用:ZLUDA三步上手
【免费下载链接】ZLUDACUDA on non-NVIDIA GPUs项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA
用 nvcc 把 llama.cpp 编译出来,目标架构只有 NVIDIA 的 sm_86,可这个二进制没改一行,直接在 AMD 的 RDNA 显卡上跑起了推理,速度也没有掉太多。做到这件事的是 ZLUDA 项目:它让按 CUDA 编译好的软件原封不动地跑在非 NVIDIA 的 GPU 上。
一分钟读懂:ZLUDA 是什么
ZLUDA 是一个 CUDA 兼容层,官方对自己的定位是"drop-in replacement"(可直接替换)。它面向手里有现成 CUDA 应用、但手里只有 AMD 显卡的人。和虚拟化方案的关键区别在于:它不装成一张假的 NVIDIA 卡,而是真的拦截应用的 CUDA API 调用,再把随应用分发的 GPU 代码(叫 PTX,一种跨 GPU 的虚拟指令集)重新编译后在 AMD 卡上执行,性能接近原生。应用代码一行不用动。目前硬件支持 RX 5000 系列及更新型号,官方文档明确说项目还在快速开发期,跑不通的应用先查 FAQ。
三步跑通第一个 CUDA 应用
第一步,装好 AMD GPU 驱动,再装 HIP SDK(AMD 的 GPU 编程套件,文档里专门有一章讲怎么装)。
第二步,拿到 ZLUDA 文件:去官方发布页下载最新的预编译包,或者自己从源码构建(最后一节有命令)。
第三步,跑应用。Linux 上把 ZLUDA 目录挂到LD_LIBRARY_PATH最前面,然后照常启动你的程序:
LD_LIBRARY_PATH="~/ZLUDA/zluda:$LD_LIBRARY_PATH" ./your_appWindows 上更省事:把 ZLUDA 全部文件(含nvcuda.dll)拷到应用目录,或者直接用官方启动器zluda.exe -- <应用> <参数>。如果应用在 Steam 里,把同样的命令粘贴进启动项那一栏,点开始就行。
它怎么把 CUDA 指令翻成 AMD 听得懂的话
可以把它理解成机场里的翻译加海关。应用是个只说 CUDA 方言的外国人,ZLUDA 就是关口。它翻两类东西:一类是 API 调用——应用调cuLaunchKernel这类函数时,ZLUDA 提供的libcuda.so先签收、改写语义,再转交给 AMD 的驱动接口(HIP,AMD 的 GPU 编程层);另一类是核函数代码——PTX 像一份"通用稿",可读但没有硬件直接执行它,ZLUDA 内置了一个基于 LLVM 的 PTX 编译器,把这份稿子重排成 AMD GPU 能执行的机器码,编译结果还会进缓存,第二次启动不用重编。
CUDA 应用 │ cuLaunchKernel(...) ← API 调用全部被拦截 ▼ ZLUDA libcuda.so(API 翻译 + PTX 编译) ▼ AMD GPU(经 HIP/ROCm 原生执行)走一遍真实场景:llama.cpp 本地推理
如果你要用 llama.cpp 跑大模型推理,官方文档有专门一页。编译时只需要注意一件事:CUDA 架构列表里带上 86,并强制启用 cuBLAS,否则速度会明显下降:
cmake -B build -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES="86" -DGGML_CUDA_FORCE_CUBLAS=true编译完成后按前面说的启动器方式跑起来。这一步如果卡住了通常是因为架构列表只填了 90(那是 Hopper 专属),或者关掉了 cuBLAS——回到编译参数里对一下就行。
排查踩坑:三个高频问题
应用报 CUDA 错误或者直接退出,多半是 ZLUDA 的驱动根本没被加载:Windows 上给zluda.exe加--zluda-trace参数,Linux 上按文档里的 trace 用法跑一次,它会逐条记录 CUDA 调用日志,哪个调用失败一目了然。
第一次启动特别慢,那是 GPU 代码在按需现编译:用zluda_precompile <目录>先扫一遍应用,把所有核函数编译进缓存,之后再启动就快了。
看到"不支持的指令"之类的报错,先翻 FAQ:项目还在开发中,且只支持 RX 5000 系列及更新,老卡或暂缺的指令把日志带上反馈即可。
读源码、查文档:下一步往哪走
想看翻译是怎么做的,核心在 ptx/src/pass/,每条 PTX 指令的处理是一个独立的 pass;运行时驱动在 zluda/src/。文档入口在 docs/src/,快速上手看 docs/src/quick_start.md,软硬件支持范围都写在 docs/src/faq.md。想参与开发就从源码构建:
git clone --recursive https://gitcode.com/GitHub_Trending/zl/ZLUDA cd ZLUDA && cargo xtask --release一行启动命令,不用改应用,也不用虚拟化。挑一个你现有的 CUDA 程序跑一遍,十分钟就能摸到它的边界。
【免费下载链接】ZLUDACUDA on non-NVIDIA GPUs项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考