在 DwarfStar 上分散式執行 LLM 推論
原文由 Salvatore Sanfilippo 于 發布,訂閱此部落格
高階 NVIDIA 顯示卡,加上驅動它們所需的伺服器與電力,花費非常可觀,尤其是當你想湊到足以執行大型模型的 VRAM 時。到目前為止,替代方案一直是 Apple 的硬體,或是 DGX Spark——即便因為記憶體頻寬而受到嚴重限制,執行 LLM 的提示處理(prefill)速度仍算夠快。Mac Studio 提供了高達 512GB 的統一記憶體,記憶體頻寬只能算普通(但比 Spark 好得多),加上運算能力,以當前的局勢來看,價格算是相對合理。
舉例來說,透過 DwarfStar,搭載 M3 Ultra、512GB 的 Mac Studio 跑 DeepSeek v4 PRO 可以達到約 150 t/s 的 prefill 和約 10-13 t/s 的解碼速度,稱不上出色,但對某些使用情境來說已經堪用。即使是 2-bit 量化,DeepSeek v4 PRO 的表現依然非常能打,跟同樣量化的 Flash 差不多(今天我讓 PRO 寫了一個 C 編譯器,影片很快就會發布)。能在家裡用總計約 12k 美元的預算就跑起前沿模型,我不覺得這是一件微不足道的事。
照理說情況應該會越來越好,但放眼未來,前景卻顯得有些混沌。NVIDIA 的方案幾乎不可能變便宜,即使是小公司也很難輕易買下並維護一座小型資料中心來做本地推論。同時,記憶體短缺也讓我們不太可能看到搭載 M5 Ultra、具備 1.2T/s 記憶體頻寬與更強算力的 Mac Studio(M5 Max 在運算上其實已經更快,而且每個 GPU 核心內都有神經加速器,對某些模型很有幫助)。
所以就本地推論的現況而言,最好的機器搞不好反而是筆電。128GB 的 M5 Max 跑 2-bit 量化的 DeepSeek v4 Flash 和 Mimo V2.5,在 prefill 和解碼速度上都相當不錯。我們說的是約 500 t/s 的 prefill 和約 35-40 t/s 的解碼速度,而且隨著上下文長度增加,效能下降的幅度也在可接受的範圍內。依配置不同,價格約 6-7k 美元,目前算是相當划算的選擇。
既然現況如此,對一般的本地推論專案來說,尤其是對 DwarfStart 而言,開始考慮分散式推論就變得很有意思了。如果我們有兩台、三台、四台 M5 Max 的 MacBook 呢?或者有兩台 512GB 的 M3 Ultra 又能做什麼?
傳統上跑分散式推論主要有兩種方式。一種是把記憶體翻倍的做法:把 Transformer 的其中 50% 層載入到電腦 A,剩下 50% 載到電腦 B,然後依序執行推論。這種情況下只需要傳遞 activations,概念上非常簡單,而且透過一些 micro-batching 的技巧,不只能把記憶體翻倍,理論上還能大幅提升提示處理的速度(但解碼不行:生成單一 token 時,你還是得等 A 機器跑完前半層,再等 B 機器跑完後半層,以此類推——不過至少發熱會降低,所以比較能維持長時間的負載),這已經相當不錯了。舉例來說,幸運擁有兩台 512GB Mac Studio 的人,就能跑全尺寸的 DeepSeek v4 PRO(雖然 2-bit 量化版跑起來已經非常、非常好了),而且透過 micro-batching 還能享有更快的 prefill。
另一種做法是利用 Apple RDMA,把執行過程平行分散到兩台機器上,基本上就是一種垂直切分。舉例來說,可以試著在 A、B 兩台機器上都載入相同的 2-bit 量化模型,讓兩邊都剛好放得下,而且每一邊都擁有全部的 routed experts。接著對每一層,我們可以協調讓一半的 experts 在 A 機器上執行,另一半在 B 機器上執行,以此類推(注意兩台機器都有全部的 experts,所以無論路由器怎麼選,我們都能把 50% 的運算分給另一台機器,而且 activations 非常小)。這對 routed experts 大得多的 PRO 來說更可行,因此通訊帶來的損耗相對不那麼明顯。但這是否真的能運作得很好,還有待觀察。
你可能也在想,還有 tensor parallelism 對吧?但我敢說,以兩台 Apple 電腦、兩台 DGX Spark 之間的通訊速度,這根本不可行(去查一下 NVLink 的速度就知道了)。上面那兩種模式厲害的地方,就在於需要傳輸的資料非常少。
好,講到這裡我猜你在想,這不就是大家早就知道的那些平行跑 LLM 的老套路嗎,沒錯,的確是。但這篇文章就是為了要帶到這個重點才寫的。如果我們能用一種完全不同的方式來平行化兩台 Mac 或 DGX 呢?開源權重模型現在正值黃金時期,我們有非常多選擇,而且很多都非常強大。在 128GB、2-bit 量化這個級別就有不少有趣的選擇:Minimax M2.7、Mimo V2.5、DeepSeek v4 Flash,還有幾個。與此同時,最近有人指出 LLM ensemble(https://arxiv.org/abs/2502.18036)是一個被低估的可能性,它能讓兩個模型在兩台不同機器上以完全 shared-nothing 的方式各自執行,只在最後合併 logits 或挑選最佳的接續內容。做法有很多種,即使兩個模型的詞彙表不同也行得通:你可以挑 perplexity 較低的那個接續(也就是挑比較有把握的模型:就像一個隱含路由的雙專家 MoE),也有可能直接合併 logits(會因為詞彙表不同而有些複雜度)再從中取樣。更新近的論文則建議把這兩種技巧混用效果最好。總之:這些技巧看起來真的有效,模型合起來表現似乎比單獨跑還好。就好像它們的知識被提升了,因為每一方都對接下來要說什麼貢獻了自己的觀點。
或許除了前兩種之外,這是最合乎邏輯的第三種嘗試方向。我真的希望在接下來的幾個月裡,能找到時間好好玩玩這些東西。
隨機一篇部落格
留言
登入後參與討論