AI 語音朗讀 · Edge TTS
零配置分散式訓練框架的實現
Swarnim Jain 開發了 Grove,一個突破性的分散式機器學習訓練庫,讓 MacBook 無需任何設定就能自動發現彼此並協力訓練模型。核心創新在於利用 Apple 設備內建的 AWDL(Apple Wireless Direct Link)協定繞過網路限制,這正是 AirDrop 背後的技術。
系統架構與發現機制
Grove 採用混合連線策略,根據網路環境自動切換最優路徑:
- 裝置發現始終透過 AWDL 進行,不受網路限制(包括 eduroam 等封鎖對等流量的大學網路)
- 偵測到共享 WiFi 時自動升級至直接連線以獲得更高速度
- 若無法建立 WiFi 直連,所有通訊回退至 AWDL 並離線運作
- 使用 Bonjour 掃描 _grove._tcp 服務進行叢集發現,使用者透過實時更新的互動式選擇器加入
作者認知到 Python 無法直接存取 Apple 的 Network.framework 中的 AWDL 功能,因此設計了一個最小化 Swift 側守護程式在首次執行時自動編譯。Python 負責機器學習邏輯,Swift 管理無線電連線,兩者透過 Unix 域名通訊端(IPC channel)通訊。此二進位檔案的複雜性對使用者完全透明,介面仍為純 Python。
通訊層最佳化與挑戰
實作過程中揭露了多個隱藏的系統邊界問題。初期發現 AWDL 透過 NWConnection 只能可靠地維持單向流量,雙向傳輸會無聲地失敗。作者用 iPhone 搭建 iOS 測試應用模擬 Grove 對等端點進行除錯,最終發現每個對等設備組需開啟兩條連線(各一方向)才能實現流水線式的同步傳送與接收。
梯度同步採用環形拓撲以實現跨 N 臺機器的最有效平均化。每個節點需同時傳送與接收,否則會產生死鎖。單一 send 呼叫推送完整梯度緩衝區會觸發 ENOBUFS 錯誤,作者於演算法層級將環形進程分割成 1 百萬元素的切片,使每條訊息舒適地符合核心緩衝預算,而非透過通常的調整通訊端緩衝區大小或重試機制。
演算法與頻寬耦合的觀察
無線連結無法支援張量平行化或流水線平行化,僅有資料平行化可行。此約束深刻影響選擇何種優化演算法:
DiLoCo(Douillard et al., 2023):各裝置獨立訓練 H 步(預設 500),計算偽梯度(參數起點與終點的差異),跨工作者取平均並用 Nesterov 動量更新全域參數。相比每步通訊,這將通訊頻率降低 500 倍。
SparseLoCo(Sarfi et al., 2025):在 DiLoCo 基礎上添加 top-k 壓縮及誤差回饋。每輪僅傳輸最大的 1-3% 值,未送出的值保留在誤差緩衝區並逐步累積,作為動量形式。實現約 32 倍的承載量壓縮。
DeMo(Peng et al., 2024):每步透過離散餘弦變換(DCT)將梯度轉換至頻率空間,僅傳輸最顯著分量。每步同步但承載量較小,更適合快速區域網路。
作者強調,連結速度不僅影響訓練速度,更決定了何種優化演算法本身可行。
計算與通訊重疊及效能
協調器作為 rank 0 參與訓練而非獨立編排程序,在背景執行心跳監控、落伍者偵測和環形重組。若節點掉線,剩餘節點自動重組並繼續訓練。
基礎 SparseLoCo 迴圈在同步點為同步式,GPU 會在梯度傳輸期間閒置。Grove 採用 Streaming DiLoCo(Douillard et al., 2025)的方法於背景線程中進行通訊重疊:top-k 壓縮及稀疏編碼透過 MLX 在 Metal GPU 上執行,背景線程經由環形傳輸結果,GPU 同時啟動下一批訓練步驟。延遲結果到達時與當前本機參數按 50/50 比例混合,保留本機進度與全域更新。此非同步路徑只能加速,不會減速。
記憶體開銷與預期使用案例
DiLoCo 和 SparseLoCo 需保留起始參數快照及額外優化器狀態,記憶體開銷約為可訓練參數大小的 3 倍。完整微調大型模型時此數值影響重大,但預期使用案例是 LoRA,其中僅約 1% 的參數可訓練。3 倍的 1% 對實際應用可忽略。
對未來發展的反思
作者強調分散式訓練中有趣的問題並非演算法本身——DiLoCo 和 SparseLoCo 的核心各不超過 200 行程式碼。真正的複雜性存在於系統邊界:讓程序在刻意封鎖對等通訊的網路上自動發現彼此,透過 IPC 通訊端橋接 Python 與 Swift 語言邊界,以及發現 AWDL 無聲地違反其他傳輸層假設。Grove 仍處早期階段,但核心訓練迴圈已驗證可行,Apple Silicon 提供的能力中仍有大量未被探索的潛力。
I trained models across MacBooks using Apple's AirDrop protocol.
— Swarnim Jain (@swar_ja) March 25, 2026
grove is a distributed training library for Apple Silicon. Devices discover each other over AWDL, a direct radio link. If there's a shared WiFi network it upgrades to that for speed, otherwise everything goes over… pic.twitter.com/0OrpqdR40z
AWDL is the protocol behind AirDrop. I tested this on eduroam where all peer-to-peer traffic is blocked and it just works. The devices talk directly over radio, bypassing the network entirely. Works offline too. pic.twitter.com/IdKQRiYS6F
— Swarnim Jain (@swar_ja) March 25, 2026
Each device trains independently using DiLoCo, then syncs pseudo-gradients. SparseLoCo compression brings that down to 1-3% of the payload for slower links. Async overlap hides communication behind compute. pic.twitter.com/ez4okuisp6
— Swarnim Jain (@swar_ja) March 25, 2026
Still early (v0.1) and would love to hear feedback, built on MLX. Wrote about the architecture and technical decisions here: https://t.co/Oj08IwH1qV
— Swarnim Jain (@swar_ja) March 25, 2026
GitHub: https://t.co/A1BWsbrklN
pip install grove-ml
