在 MacBook 上跑 397B 參數模型:Flash‑MoE 技術精華閱讀筆記

本篇文章更新時間:2026/03/23
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持


在筆電上跑 397B 參數模型的極限挑戰

Flash-MoE 技術解構與我的閱讀筆記

編輯前言:這篇文章來自 GitHub 專案 Flash-MoE,作者展示如何用純 C/Metal,在一台 48GB RAM 的 MacBook Pro 上跑 Qwen3.5-397B-A17B 這種超大 Mixture-of-Experts 模型。我覺得非常值得一讀,因為它重新描繪了「小設備跑大模型」的可能性,且技術細節紮實到令人驚嘆。

核心觀點 (Key Takeaways)

  • 模型不是完全載入記憶體,而是以「SSD 流式載入專家層」方式運作,讓 209GB 的 4-bit 專家權重能在 48GB RAM 上跑起來。
  • 完全不依賴 Python 或框架,全程 C、Objective‑C 與 Metal 手寫 kernel,因此執行效率被壓榨到極致。
  • 最佳化核心在 FMA-optimized dequant kernel 與「相信作業系統的快取」策略,兩者帶來顯著效能提升。

深入解析

這份專案展示了作者如何打造一個純 Metal/C 的推論引擎,讓 397B MoE 模型在筆電上以 4.4 tokens/s 的速度運作。以下是我覺得特別具有洞察力的部分。

“The entire 209GB model streams from SSD… No Python. No frameworks. Just C, Objective‑C, and hand‑tuned Metal shaders.”

1. SSD Expert Streaming:流式載入專家層是關鍵突破

MoE 模型的特性是每層只有部分專家被啟動。Flash-MoE 利用這點,將 512 個專家中只需載入 K=4 個,並透過:

  • SSD 隨選 pread()
  • GCD dispatch groups 併發讀取
  • 完全依賴 macOS page cache 的 LRU(這是關鍵)

本質上,它把 SSD 當成「延伸記憶體」來用,而非嘗試建立自己的快取系統。作者測試過多種自製快取方式(Metal LRU、malloc cache、LZ4 cache),結果都比不上 OS 自帶的 page cache。

2. FMA-Optimized Dequant Kernel:讓 4-bit dequant + matmul 融合成一次 FMA

作者將原本的:

  • (nibble * scale + bias) * x

重新排列成:

  • fma(nibble, scalex, biasx)

這樣一來,GPU 的 FMA 單元可以用一條指令做完整個 dequant 流程。帶來 12% 效能提升,是目前最佳化的核心強化之一。

3. Pipeline 設計與 Deferred Execution:CPU/GPU 交替工作

每一層的運行流程大概是:

  • GPU 做 attention + DeltaNet
  • CPU 計算 routing softmax 和 topK
  • SSD 讀入 K=4 專家
  • GPU 處理專家層 forward + combine + norm

其中最妙的是:

  • CMD3(expert compute)是延後執行的,GPU 會在 CPU 準備下一層時偷偷跑掉

這種 GPU/CPU 重疊,使得 pipeline 維持穩定的 per-layer 速度(平均 4.28ms)。

4. Unified Memory 限制導致「GPU→SSD→GPU」序列化是最佳方案

Apple Silicon 的 unified memory 導致:

  • 背景 SSD DMA 會劇烈干擾 GPU 計算
  • 無法有效地同時進行 IO 與 GPU kernel

因此 Flash-MoE 發現:

  • 序列化流程反而是硬體最佳解

這解釋了為什麼許多「預取策略」都失敗,甚至讓效能下降。

筆者心得與啟發

讀完這個專案,我有幾個強烈的感想:

1. MoE + SSD Streaming 很可能會成為「個人裝置跑大模型」的主流架構。
這篇專案用實作證明:你不需要整個模型都放在記憶體,只要有足夠快的 SSD 和聰明的存取方式,大模型推論完全有可能在邊緣設備上完成。

2. 最讓我驚訝的是:自製快取全部失敗,反而是「相信作業系統」贏了。
這有點反直覺,但也再次說明作業系統的 page cache 已經被高度最佳化,很難打敗它。這讓我重新思考自身工程實務中是否有「過度設計」的地方。

3. 最後,這個專案也展示了:極端效能最佳化通常需要完全脫離高階框架。
在 AI 世界中,我們常倚賴 Python + 巨型框架,但 Flash‑MoE 展現另一種可能:

  • 用專精的系統語言
  • 控制每一層 memory pipeline
  • 手寫 GPU kernel

這條路很硬,但效果也驚人。

如果你對「在小設備上做大模型推論」有興趣,我真心建議深入研究 Flash‑MoE,原 repo 連結如下:

GitHub - danveloper/flash-moe


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon