傳DeepSeek繞過CUDA?業內人士稱或為適配國產GPU做準備

儘管春節假期已經過半,但是「來自東方的神秘力量的 DeepSeek」仍在引起全世界熱議,各路業內人士也仍在從不同角度分析 DeepSeek 的模型和技術文章。

南韓 ‌Mirae Asset Securities Research 的一名分析師在 X 撰寫長文分析稱:「這一突破是通過實施大量細粒度優化和使用英偉達的彙編式 PTX 編程,而非通過英偉達 CUDA 中的某些功能來實現的。」

(來源:X)(來源:X)

也就是說 DeepSeek 在研發大模型時繞過了 CUDA。CUDA(Compute Unified Device Architecture,統一計算架構),是由英偉達開發的一種通用編程框架,它允許開發者利用英偉達的圖形處理器(GPU,Graphics Processing Unit)進行通用計算。

如果 DeepSeek 真的繞過了 CUDA,那麼這能說明什麼?圍繞這一主題,DeepTech 採訪了北京航空航天大學黃雷副教授。

圖 | DeepSeek logo(來源:DeepSeek)圖 | DeepSeek logo(來源:DeepSeek)

對於程序開發人員來說,CUDA 好比是一種高級語言,開發者只需要專注於程序和算法最相關的運行邏輯,而不太需要考慮具體的程序是如何在 GPU 等硬件上具體如何執行計算的,從而能夠降低開發難度。

舉例來說,假如一個人會寫彙編語言,雖然能非常高效地操作計算機,但是,彙編語言對於非專業出身的人員難度非常高,哪怕執行一個給變量賦值操作都需要好幾條命令,並且還要瞭解寄存器、內存等計算機基礎概念。

因此,開發者們紛紛轉去使用高級語言進行編程。這時,要想實現同樣操作,開發者只需使用一個變量賦值就可以。CUDA 便是為了方便開發基於 GPU 的算法設計的。

大模型開發商在使用英偉達的 GPU 的時候,一般是基於 CUDA 去做研發。使用 CUDA 的話對於開發者的要求較低,因為 CUDA 裡面已經封裝好一些函數,使用時直接調用接口就行,完全無需理會太多的細節,但是這樣肯定會損失執行效率。

也就是說,CUDA 等於是給開發者框定好了一些常用東西所以具有通用性,這在容易使用的同時也會損失一些靈活性。譬如其設計的矩陣乘法算子,數據加載傳輸算子等,是深度學習開發者常用的算子,因此其在設計時會考慮通用性(即平均條件下最優)。

但對於有特定需求的 GPU 開發者來說,除了開發常用的能力之外,它還需要有更強大的能力,如比較精細地控制某個節點上某個 GPU 主要是用來幹啥,以及如何精細化不同 GPU 之間傳輸數據、權重和梯度等,這在大模型這種要求多機多卡訓練時比較常見。對於這些特定需求下的高效編程,CUDA 目前還未針對性設計一個高效的解決方案。

前面提到,由於 CUDA 是通用型編程框架,因此會損失一些靈活性。當僅僅使用單個 GPU 的時候,CUDA 的確非常適用。但是,當在不同節點使用多個 GPU 的時候,就需要在細粒度上實現更好的控制。

而在這時,如果依然使用 CUDA 那麼在抽像層面的效率就會比較低。原因在於 CUDA 被設計得具備通用性,它要考慮到所有開發者的情況。假如一名開發者希望高效利用 CUDA 的性能,那就可以通過組合一些由 GPU 驅動提供的函數接口,來寫出更高效的程序。

也就是說,如果一位開發者懂得更接近於底層硬件的編程,那麼就可以直接調用硬件提供的接口,從而就能讓大模型研發變得更加高效。與此同時,隨著同類的開源通用編程框架的出現,人們覺得 CUDA 越來越「封閉」。而繞過 CUDA,可以直接根據 GPU 的驅動函數做一些新的開發,從而實現更加細粒度的操作。

譬如 DeepSeek 在多節點通信時繞過了 CUDA 直接使用 PTX(Parallel Thread Execution),其最多隻能實現以算法的方式來高效利用硬件層面的加速。

當然,一旦速度變得更快,打個比方這就意味著別人家的模型要訓練十天,而 DeepSeek 只需要訓練五天,那麼就能給模型喂更多的數據,即能讓模型在同等時間內看到更多的數據,間接提高模型的效果。

事實上,繞過 CUDA 也並非一種新鮮做法。現在也有一些和 CUDA 對標的編程框架,如 Triton 並且其是開源的。此前北京智源研究院的相關研究人員也專門基於 Triton 去加速英偉達以及國產的 GPU,且也可以認為這是一種繞過了 CUDA 去調用 GPU 驅動提供的相關函數的做法。

以目前 AI 方向技術人員為例,通常在本科階段基本上只會接觸到基於深度學習框架(通常為 Python 語言)來訓練神經網絡,還不會直接接觸到各類深度學習框架提供的用 C++ 來寫 CUDA 相關的編程任務(有一些好學者或者有參與科研項目的人員有可能會利用 C++ 來寫 CUDA 實現相關算法的提速)。

這些人員在工作以後有可能由於 AI 項目落地的需要,會接觸到針對具體的硬件資源來適配模型的編程,但要繞過 CUDA 來寫模型的訓練算法,通常沒有這樣的需求。

但現在大模型的訓練的確有這些需求,譬如由於這樣或者那樣的原因導致英偉達 GPU 算力短缺,逼得大模型訓練人員考慮在有限得算力資源下,如何儘可能地高效利用算力。

在 DeepSeek-V3 的技術博文中,DeepSeek 表示其使用了英偉達的 PTX(Parallel Thread Execution)語言。

假如 DeepSeek 的開發者能夠很好地使用 PTX(Parallel Thread Execution)語言,那麼相比使用 CUDA 提供的編程接口,肯定可以更精細地控制 GPU 之間傳輸數據、權重和梯度等。但是,使用 PTX 寫出來的代碼非常複雜,且很難維護,因此需要專業度較高的開發者。

(來源:DeepSeek)(來源:DeepSeek)

也就是說,繞過 CUDA 的做法具有一定的技術難度,這需要開發者既要懂 AI 模型的算法,又要懂計算機系統架構來高效分配硬件資源。如果沒有同時掌握這兩方面技能的開發者,那就要分別招聘懂這些技能的開發者,即需要協調好不同人員。

從 DeepSeek 的技術報告來看,其主體實現還是基於 CUDA 的相關接口,其描述中也闡述繞開了 CUDA 來寫通信,那就意味著它招聘了掌握不同技能的人才,並能將這些人才很好地串了起來。

這也說明 DeepSeek 擁有一些擅長寫 PTX 語言的內部開發者。那麼,假如它之後使用國產 GPU,其在硬件適配方面將會更得心應手,其只要瞭解這些硬件驅動提供的一些基本函數接口,就可以仿照英偉達 GPU 硬件的編程接口去寫相關的代碼,從而讓自家大模型更加容易適配國產硬件。

與此同時,從 DeepSeek 的技術報告來看,其技術從學術研究角度並沒有勝出一籌,但是在工程上面的確非常有技巧。考慮到 AMD 已經宣佈集成 DeepSeek-V3 到 MI300X GPU,因此未來不排除會有更多 GPU 廠商牽手 DeepSeek。

同時,也正如上述南韓分析師在同一篇 X 文章中所說的:「這凸顯了 DeepSeek 非凡的工程水平,並表明美國對華製裁加劇的「GPU 短缺危機」激發了他們緊迫感和創造力。」

運營/排版:何晨龍