開源CUDA項目起死回生,支持非英偉達芯片,瀕臨倒閉時神秘機構出手援助
能讓非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團隊解決了這些問題。

























