开源CUDA项目起死回生,支持非英伟达芯片,濒临倒闭时神秘机构出手援助
创始人
2025-07-08 09:39:36
0

奕然 发自 凹非寺

量子位 | 公众号 QbitAI

能让非NVIDIA芯片跑CUDA的开源项目ZLUDA,起死回生了。

最新版增加了对大模型工作负载的支持,一举登上GitHub热榜!

该项目一度因AMD停止资助濒临破产,最终被一家神秘机构出手相救。

现在,创始人vosen带来好消息,表示ZLUDA团队新添一员猛将并稳定进行项目恢复中。

过往发展:起起伏伏又起起

开发者@vosen本名Andrzej Janik,曾经在Intel工作。

在2020年,Andrzej Janik想要尝试一下技术突破,让CUDA程序在非NVIDIA平台运行,一尝试,便有了可行性。

之后,ZLUDA被Intel接手,作为一个内部试验项目发展。

Intel分配资源给了ZLUDA,目的很明显了,让其在Intel GPU上跑CUDA程序,作为Intel oneAPI生态的一种补充方式

无疑,这触碰到了NVIDIA的商业生态链。

没过多久,这个项目就被终止了。

2022年,ZLUDA得到了AMD的支持而重启,并支持AMD硬件。

好景不长,这次也仅仅维持2年,2024年2月宣布终止。

一个月后,英伟达就发布CUDA 11.6版本,并明确规定,不允许在非NVIDIA平台上逆向工程、反编译或反汇编CUDA SDK生成的任何结果。

这之后,ZLUDA就陷入“停摆”状态。

直到24年10月份,Andrzej Janik在社区发布消息,说已经获得“神秘机构”的支持,项目能够继续进行。

Andrzej Janik顺便介绍了项目恢复重点和进展:专注机器学习,ZLUDA目标是llm.c、llama.cpp、PyTorch、TensorFlow等;新的ZLUDA将支持多种GPU架构,主线开发基于AMD GPU;降级Windows支持以及代码改进等。

除此之外,Andrzej Janik信誓旦旦,说最终目标是在一年内(2025年第三季度)将“新” ZLUDA的状态恢复到以前。

现在,2025年第三季度已经开始,一起看看ZLUDA具体进展。

开源版CUDA最新进展

ZLUDA第二位全职开发人员Violet加入不到一个月,已经做出了重要改进,特别是通过llm.c项目推进了对大型语言模型 (LLM) 工作负载的支持。

两位“极客”正努力恢复ZLUDA的状态。

支持32位PhysX

一位名为@Groowy 的社区贡献者通过收集详细的CUDA日志,开始了在ZLUDA中启用32位PhysX支持的初步工作,并很快发现一些错误。

由于其中一些问题也可能影响64位CUDA功能,因此已将修复这些问题添加到官方路线图中。然而,完成完整的32位PhysX支持仍需开源贡献者的进一步帮助。

与LLM.c兼容

ZLUDA的开发人员正在开发一个名为llm.c的测试项目,这是一个小型示例程序,尝试使用CUDA运行GPT-2模型。

虽然这次测试规模不大,但意义重大。

这是ZLUDA首次尝试同时处理常规CUDA函数和cuBLAS(快速数学运算)等特殊库。

如果成功,将有助于ZLUDA未来支持像PyTorch这样的大型软件。

该测试程序对CUDA函数进行了8,186次独立调用,分布在44个不同的API上。

最初,ZLUDA会在第一次调用时立即崩溃。

现在,团队已经完成了对44个所需函数中16个函数的支持,距离成功运行整个测试不远了。

提高ZLUDA的准确性

ZLUDA的核心目标是在非NVIDIA GPU上运行标准CUDA程序,同时尽可能精确地匹配NVIDIA硬件。

ZLUDA的早期版本经常会跳过一些指令修饰符影响了准确性和精度。

这个问题目前有了实质性进展。

为了确保准确性,它运行PTX“扫描”测试——使用NVIDIA的中间GPU语言进行系统性检查——以确认每条指令和修饰符组合在所有输入上都能产生正确的结果。

之前从未这么做过。现在做了,很多缺陷解决了。

不过还存在问题,并非百分百精确。再但是,cvt指令,现在确定是精确的。

Improving logging改进日志记录

要让任何基于CUDA的软件在ZLUDA上运行——无论是游戏、3D应用程序还是机器学习框架——其基础是记录程序与CUDA的通信方式。

这包括跟踪直接API调用、CUDA运行时(或驱动程序)的未公开部分以及任何对专用性能库的使用。

在最近的更新中,ZLUDA的日志系统得到了显著升级。

目前实现了以前不可见的、更广阔的活动范围以及内部行为的详细跟踪,例如cuBLAS如何依赖cuBLASLt,或cuDNN如何与底层驱动程序API交互。

运行时编译器兼容性

现代GPU框架如CUDA、ROCm/HIP、ZLUDA和OpenCL都需要在应用程序运行时动态编译设备代码,以确保较旧的GPU程序可以在更新的硬件上正确构建和执行,而无需修改原始代码。

在AMD的ROCm/HIP生态系统中,这种动态编译依赖于comgr库(全称ROCm-CompilerSupport),这是一个功能强大的紧凑型库,能够处理编译、链接和反汇编代码等任务,并且支持Linux和Windows平台。

在ROCm/HIP版本6.4中,一个重要的应用程序二进制接口(ABI)发生变更:代表操作的数值代码在新v3 ABI中重新排列。

这导致ZLUDA意外地调用了错误的操作——例如,尝试链接而不是编译,从而引发了错误。

这个库在Windows上情况更糟,声称是2.9版本,但内部使用了v3 ABI,导致行为混合。

好消息是,ZLUDA团队解决了这些问题。

参考链接

[1]https://vosen.github.io/ZLUDA/blog/zludas-third-life/

[2]https://www.tomshardware.com/software/a-project-to-bring-cuda-to-non-nvidia-gpus-is-making-major-progress-zluda-update-now-has-two-full-time-developers-working-on-32-bit-physx-support-and-llms-amongst-other-things

[3]https://vosen.github.io/ZLUDA/blog/zluda-update-q2-2025/

[5]https://www.phoronix.com/news/Intel-ZLUDA-CUDA-For-GPUs

[6]https://www.youtube.com/watch?v=ze25Sie2gVQ

相关内容

热门资讯

迈腾正常能开15年吗? 迈腾正... 迈腾正常能开15年。根据最新机动车法规,只要通过当地的机动车年审检测以及符合当地的机动车尾气排放标准...
科二模拟是什么意思? 科二模拟... 科目二模拟考试,旨在模仿真实的科目二驾驶技能考试环境,帮助学员熟悉考试流程,提升考试通过率。通过这种...
电喷摩托车熄火是怎么回事? 电... 电喷摩托车熄火的原因可能有多种,其中一个主要原因是电喷系统的电器件出现故障,或是线路接头松动虚接。特...
车上全是沥青怎么清洗? 杞︿笂... 当车身沾上沥青时,可以使用沥青清洁剂进行清洗。关于沥青的介绍如下:沥青清洗方法:首先,准备焦油沥青清...
宝来空调不够冷是什么原因? 宝... 宝来空调不够冷可能有以下几个原因:1. 制冷剂不足或过少:如果制冷剂不足,可以从干燥罐上面的视液镜中...
凯迪拉克xt5耗油箱多少? 凯... 凯迪拉克XT5的油耗为每百公里7.9升。以下是一些关于凯迪拉克XT5耗油箱的介绍:注意事项:1避免长...
model-y的最小离地间隙是... Model-Y的最小离地间隙为150mm,这是指在车辆满载且静止的情况下,汽车底部除车轮外最低点与地...
荣放怎么设置锁车后视镜折叠? ... 对于丰田荣放的锁车后视镜折叠问题,丰田原车并没有提供自动折叠功能,但可以根据个人需要到相关门店进行改...
车辆显示epc打不着火解决方法... 当车辆出现EPC打不着火的情况时,可以通过重新启动汽车来尝试解决问题。如果重启后EPC灯仍然亮着,可...
柴油车加油加成汽油了怎么办? ... 如果您的柴油车不慎加错了汽油,以下是解决方法:首先,需要进行全面检查,清理油箱和油路系统,并对发动机...