開源CUDA項(xiàng)目起死回生,支持非英偉達(dá)芯片,瀕臨倒閉時(shí)神秘機(jī)構(gòu)出手援助
能讓非NVIDIA芯片跑CUDA的開源項(xiàng)目ZLUDA,起死回生了。
最新版增加了對(duì)大模型工作負(fù)載的支持,一舉登上GitHub熱榜!

該項(xiàng)目一度因AMD停止資助瀕臨破產(chǎn),最終被一家神秘機(jī)構(gòu)出手相救。
現(xiàn)在,創(chuàng)始人vosen帶來好消息,表示ZLUDA團(tuán)隊(duì)新添一員猛將并穩(wěn)定進(jìn)行項(xiàng)目恢復(fù)中。
過往發(fā)展:起起伏伏又起起
開發(fā)者@vosen本名Andrzej Janik,曾經(jīng)在Intel工作。
在2020年,Andrzej Janik想要嘗試一下技術(shù)突破,讓CUDA程序在非NVIDIA平臺(tái)運(yùn)行,一嘗試,便有了可行性。
之后,ZLUDA被Intel接手,作為一個(gè)內(nèi)部試驗(yàn)項(xiàng)目發(fā)展。
Intel分配資源給了ZLUDA,目的很明顯了,讓其在Intel GPU上跑CUDA程序,作為Intel oneAPI生態(tài)的一種補(bǔ)充方式。
無疑,這觸碰到了NVIDIA的商業(yè)生態(tài)鏈。
沒過多久,這個(gè)項(xiàng)目就被終止了。
2022年,ZLUDA得到了AMD的支持而重啟,并支持AMD硬件。
好景不長(zhǎng),這次也僅僅維持2年,2024年2月宣布終止。
一個(gè)月后,英偉達(dá)就發(fā)布CUDA 11.6版本,并明確規(guī)定,不允許在非NVIDIA平臺(tái)上逆向工程、反編譯或反匯編CUDA SDK生成的任何結(jié)果。
這之后,ZLUDA就陷入“停擺”狀態(tài)。
直到24年10月份,Andrzej Janik在社區(qū)發(fā)布消息,說已經(jīng)獲得“神秘機(jī)構(gòu)”的支持,項(xiàng)目能夠繼續(xù)進(jìn)行。
Andrzej Janik順便介紹了項(xiàng)目恢復(fù)重點(diǎn)和進(jìn)展:專注機(jī)器學(xué)習(xí),ZLUDA目標(biāo)是llm.c、llama.cpp、PyTorch、TensorFlow等;新的ZLUDA將支持多種GPU架構(gòu),主線開發(fā)基于AMD GPU;降級(jí)Windows支持以及代碼改進(jìn)等。

除此之外,Andrzej Janik信誓旦旦,說最終目標(biāo)是在一年內(nèi)(2025年第三季度)將“新” ZLUDA的狀態(tài)恢復(fù)到以前。
現(xiàn)在,2025年第三季度已經(jīng)開始,一起看看ZLUDA具體進(jìn)展。
開源版CUDA最新進(jìn)展
ZLUDA第二位全職開發(fā)人員Violet加入不到一個(gè)月,已經(jīng)做出了重要改進(jìn),特別是通過llm.c項(xiàng)目推進(jìn)了對(duì)大型語(yǔ)言模型 (LLM) 工作負(fù)載的支持。
兩位“極客”正努力恢復(fù)ZLUDA的狀態(tài)。
支持32位PhysX
一位名為@Groowy 的社區(qū)貢獻(xiàn)者通過收集詳細(xì)的CUDA日志,開始了在ZLUDA中啟用32位PhysX支持的初步工作,并很快發(fā)現(xiàn)一些錯(cuò)誤。
由于其中一些問題也可能影響64位CUDA功能,因此已將修復(fù)這些問題添加到官方路線圖中。然而,完成完整的32位PhysX支持仍需開源貢獻(xiàn)者的進(jìn)一步幫助。
與LLM.c兼容
ZLUDA的開發(fā)人員正在開發(fā)一個(gè)名為llm.c的測(cè)試項(xiàng)目,這是一個(gè)小型示例程序,嘗試使用CUDA運(yùn)行GPT-2模型。
雖然這次測(cè)試規(guī)模不大,但意義重大。
這是ZLUDA首次嘗試同時(shí)處理常規(guī)CUDA函數(shù)和cuBLAS(快速數(shù)學(xué)運(yùn)算)等特殊庫(kù)。
如果成功,將有助于ZLUDA未來支持像PyTorch這樣的大型軟件。
該測(cè)試程序?qū)UDA函數(shù)進(jìn)行了8,186次獨(dú)立調(diào)用,分布在44個(gè)不同的API上。
最初,ZLUDA會(huì)在第一次調(diào)用時(shí)立即崩潰。
現(xiàn)在,團(tuán)隊(duì)已經(jīng)完成了對(duì)44個(gè)所需函數(shù)中16個(gè)函數(shù)的支持,距離成功運(yùn)行整個(gè)測(cè)試不遠(yuǎn)了。
提高ZLUDA的準(zhǔn)確性
ZLUDA的核心目標(biāo)是在非NVIDIA GPU上運(yùn)行標(biāo)準(zhǔn)CUDA程序,同時(shí)盡可能精確地匹配NVIDIA硬件。
ZLUDA的早期版本經(jīng)常會(huì)跳過一些指令修飾符影響了準(zhǔn)確性和精度。
這個(gè)問題目前有了實(shí)質(zhì)性進(jìn)展。
為了確保準(zhǔn)確性,它運(yùn)行PTX“掃描”測(cè)試——使用NVIDIA的中間GPU語(yǔ)言進(jìn)行系統(tǒng)性檢查——以確認(rèn)每條指令和修飾符組合在所有輸入上都能產(chǎn)生正確的結(jié)果。
之前從未這么做過?,F(xiàn)在做了,很多缺陷解決了。
不過還存在問題,并非百分百精確。再但是,cvt指令,現(xiàn)在確定是精確的。
Improving logging改進(jìn)日志記錄
要讓任何基于CUDA的軟件在ZLUDA上運(yùn)行——無論是游戲、3D應(yīng)用程序還是機(jī)器學(xué)習(xí)框架——其基礎(chǔ)是記錄程序與CUDA的通信方式。
這包括跟蹤直接API調(diào)用、CUDA運(yùn)行時(shí)(或驅(qū)動(dòng)程序)的未公開部分以及任何對(duì)專用性能庫(kù)的使用。
在最近的更新中,ZLUDA的日志系統(tǒng)得到了顯著升級(jí)。
目前實(shí)現(xiàn)了以前不可見的、更廣闊的活動(dòng)范圍以及內(nèi)部行為的詳細(xì)跟蹤,例如cuBLAS如何依賴cuBLASLt,或cuDNN如何與底層驅(qū)動(dòng)程序API交互。
運(yùn)行時(shí)編譯器兼容性
現(xiàn)代GPU框架如CUDA、ROCm/HIP、ZLUDA和OpenCL都需要在應(yīng)用程序運(yùn)行時(shí)動(dòng)態(tài)編譯設(shè)備代碼,以確保較舊的GPU程序可以在更新的硬件上正確構(gòu)建和執(zhí)行,而無需修改原始代碼。
在AMD的ROCm/HIP生態(tài)系統(tǒng)中,這種動(dòng)態(tài)編譯依賴于comgr庫(kù)(全稱ROCm-CompilerSupport),這是一個(gè)功能強(qiáng)大的緊湊型庫(kù),能夠處理編譯、鏈接和反匯編代碼等任務(wù),并且支持Linux和Windows平臺(tái)。
在ROCm/HIP版本6.4中,一個(gè)重要的應(yīng)用程序二進(jìn)制接口(ABI)發(fā)生變更:代表操作的數(shù)值代碼在新v3 ABI中重新排列。
這導(dǎo)致ZLUDA意外地調(diào)用了錯(cuò)誤的操作——例如,嘗試鏈接而不是編譯,從而引發(fā)了錯(cuò)誤。
這個(gè)庫(kù)在Windows上情況更糟,聲稱是2.9版本,但內(nèi)部使用了v3 ABI,導(dǎo)致行為混合。
好消息是,ZLUDA團(tuán)隊(duì)解決了這些問題。


























