重大進(jìn)展!攻克CUDA護(hù)城河又進(jìn)一步!
2025-07-04 08:59:14 EETOP據(jù) Phoronix 報(bào)道,ZLUDA 是一款 CUDA 轉(zhuǎn)換層,去年險(xiǎn)些停運(yùn),后被某匿名方救助。本周,該項(xiàng)目公布了最新進(jìn)展,提及過去一個(gè)季度在技術(shù)上取得的穩(wěn)步進(jìn)步以及團(tuán)隊(duì)的擴(kuò)充情況。該項(xiàng)目持續(xù)提升自身能力,旨在讓非英偉達(dá)顯卡也能運(yùn)行 CUDA 工作負(fù)載,目前其重心更多放在人工智能領(lǐng)域,而非其他方面。不過,團(tuán)隊(duì)已開始著手支持 32 位 PhysX,這是實(shí)現(xiàn)與基于 CUDA 的舊款游戲兼容的必要條件。
對(duì) ZLUDA 項(xiàng)目而言,或許最重要的一點(diǎn)是,其開發(fā)團(tuán)隊(duì)已從 1 名全職開發(fā)者擴(kuò)充至 2 名。據(jù)最新消息,第二名開發(fā)者名為維奧萊特(Violet),加入尚不足一個(gè)月,卻已帶來了重要改進(jìn),尤其是通過 llm.c 項(xiàng)目推進(jìn)了對(duì)大型語言模型(LLM)工作負(fù)載的支持。
32 位 PhysX
一位名為 @Groowy 的社區(qū)貢獻(xiàn)者開啟了 ZLUDA 支持 32 位 PhysX 的初步工作,他收集了詳細(xì)的 CUDA 日志,很快發(fā)現(xiàn)了若干漏洞。由于其中部分問題可能也會(huì)影響 64 位 CUDA 的功能,修復(fù)這些漏洞已被納入官方路線圖。然而,要完全實(shí)現(xiàn)對(duì) 32 位 PhysX 的支持,仍需開源貢獻(xiàn)者提供進(jìn)一步的幫助。
ZLUDA 的開發(fā)者們正在開展一個(gè)名為 llm.c 的測(cè)試項(xiàng)目,這是一個(gè)小型示例程序,嘗試借助 CUDA 運(yùn)行 GPT-2 模型。盡管該測(cè)試規(guī)模不大,但意義重大,因?yàn)檫@是 ZLUDA 首次嘗試同時(shí)處理常規(guī) CUDA 函數(shù)和 cuBLAS(快速數(shù)學(xué)運(yùn)算庫(kù))等特殊庫(kù)。
該測(cè)試程序會(huì)對(duì) CUDA 函數(shù)進(jìn)行 8186 次單獨(dú)調(diào)用,涉及 44 個(gè)不同的 API。起初,ZLUDA 在第一次調(diào)用時(shí)就會(huì)立即崩潰。多虧維奧萊特貢獻(xiàn)的多項(xiàng)更新,如今它能成功執(zhí)行到第 552 次調(diào)用才失敗。團(tuán)隊(duì)已經(jīng)完成了 44 個(gè)所需函數(shù)中 16 個(gè)的支持工作,離成功運(yùn)行整個(gè)測(cè)試又近了一步。一旦該測(cè)試成功,將有助于 ZLUDA 在未來支持像 PyTorch 這樣更大型的軟件。
ZLUDA 的核心目標(biāo)是讓標(biāo)準(zhǔn) CUDA 程序能在非英偉達(dá)顯卡上運(yùn)行,且盡可能與英偉達(dá)硬件的表現(xiàn)保持一致。這意味著每條指令的結(jié)果要么與英偉達(dá)硬件完全一致(精確到最后一位),要么在嚴(yán)格的數(shù)值公差范圍內(nèi)。在進(jìn)行重大代碼重置之前,舊版本的 ZLUDA 往往會(huì)為了追求其他方面而犧牲準(zhǔn)確性,比如忽略某些指令修飾符或無法保持全精度。
當(dāng)前版本在這方面已取得重大改進(jìn)。為確保準(zhǔn)確性,ZLUDA 運(yùn)行 PTX “全面掃描” 測(cè)試 —— 這是一種利用英偉達(dá)的中間 GPU 語言進(jìn)行的系統(tǒng)性檢查,旨在確認(rèn)所有指令和修飾符組合在各種輸入情況下都能產(chǎn)生正確結(jié)果,這一方法此前從未被使用過。通過這些檢查,發(fā)現(xiàn)了若干編譯器缺陷,隨后均已得到解決。ZLUDA 承認(rèn),并非所有指令都已完成這種嚴(yán)格的驗(yàn)證,但強(qiáng)調(diào)部分最復(fù)雜的情況(如 cvt 指令)現(xiàn)已確認(rèn)達(dá)到位級(jí)精度。
要讓任何基于 CUDA 的軟件在 ZLUDA 上運(yùn)行 —— 無論是游戲、3D 應(yīng)用程序還是機(jī)器學(xué)習(xí)框架,其基礎(chǔ)是獲取程序與 CUDA 交互的日志,其中包括跟蹤直接的 API 調(diào)用、CUDA 運(yùn)行時(shí)(或驅(qū)動(dòng)程序)未公開的部分,以及任何專用性能庫(kù)的使用情況。
在最近的更新中,ZLUDA 的日志系統(tǒng)得到了顯著升級(jí)。新的實(shí)現(xiàn)方式能捕捉到更多以往無法監(jiān)測(cè)到的活動(dòng),包括內(nèi)部行為的詳細(xì)軌跡,例如 cuBLAS 如何依賴 cuBLASLt,以及 cuDNN 如何與底層驅(qū)動(dòng) API 交互。
現(xiàn)代 GPU 框架,如 CUDA、ROCm/HIP、ZLUDA 和 OpenCL,都需要在應(yīng)用程序運(yùn)行時(shí)動(dòng)態(tài)編譯設(shè)備代碼,以確保舊款 GPU 程序無需修改原始代碼,就能在新一代硬件上正確編譯和執(zhí)行。
在 AMD 的 ROCm/HIP 生態(tài)系統(tǒng)中,這種即時(shí)編譯依賴于 comgr 庫(kù)(全稱為 ROCm-CompilerSupport),這是一個(gè)功能豐富的小型庫(kù),可處理編譯、鏈接和反匯編等任務(wù),在 Linux 和 Windows 系統(tǒng)上均能使用。
ROCm/HIP 6.4 版本發(fā)生了一次重大的應(yīng)用程序二進(jìn)制接口(ABI)變更:代表操作的數(shù)字代碼在新的 v3 ABI 中進(jìn)行了重新排列。這導(dǎo)致 ZLUDA 意外調(diào)用了錯(cuò)誤的操作 —— 例如,本應(yīng)編譯卻嘗試鏈接,從而引發(fā)錯(cuò)誤。在 Windows 系統(tǒng)上,情況更為糟糕,該庫(kù)聲稱是 2.9 版本,內(nèi)部卻使用 v3 ABI,導(dǎo)致行為混亂。最近,ZLUDA 團(tuán)隊(duì)已解決了這些問題。
EETOP 官方微信
創(chuàng)芯大講堂 在線教育
半導(dǎo)體創(chuàng)芯網(wǎng) 快訊
相關(guān)文章