# 策展 · X (Twitter) 🔥

> 作者：Swarnim Jain (@swar_ja) · 平台：X (Twitter) · 日期：2026-03-26

> 原始來源：https://x.com/swar_ja/status/2036842047475519917

## 中文摘要

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 提供的能力中仍有大量未被探索的潛力。

## 標籤

開源專案, macOS, Apple, Grove
