Hugging Face DeDLOC: 透過網路進行語言模型的協作訓練

Hugging Face 推出了 DeDLOC (Distributed Deep Learning in Open Collaborations),這是一種全新的協作式分散式訓練方法,允許多個參與者透過網路結合其運算資源來預訓練大型語言模型。這種方法克服了與高效能 GPU 超級電腦相比,傳統網路連線速度緩慢的瓶頸,使更廣泛的機器學習社群能夠在不需要集中式、昂貴硬體的情況下訓練出高品質的模型。

DeDLOC: 透過網路實現分散式訓練

DeDLOC 解決了在大型數據集上訓練 Transformers 的挑戰,這通常需要個人或小型組織無法負擔的硬體資源。雖然數據並行 (data-parallel) 的分散式深度學習通常涉及將數據分配給各個工作節點並對梯度進行平均,但由於連線不穩定和頻寬限制,這個過程在透過網路進行時通常會失敗。

容錯梯度累積 (Fault-Tolerant Gradient Accumulation)

為了處理基於志願者的運算環境的不穩定性,DeDLOC 在執行優化器步驟之前,會在所有參與設備之間累積一個非常大的 batch,然後才進行更新。這種方法提供了內建的容錯機制:

  • Peer Disconnection: 如果參與者斷線,他們的貢獻會直接從當前累積的 batch size 中扣除,其他參與者會進行補償。
  • Scalability: 隨著更多節點加入,目標 batch size 會更快達成,從而自然地加快訓練過程。

自適應平均策略 (Adaptive Averaging Strategy)

為了防止中央伺服器過載並考量到硬體的多樣性,DeDLOC 使用了基於 All-Reduce 原語的自適應平均演算法。系統會根據每個節點的網路速度,動態地將梯度向量分割成不同部分進行數據傳輸優化:

  • High-speed peers 聚合了最大部分的梯度。
  • Firewalled peers 會發送數據進行聚合,但不會自行計算平均值。

這些核心的分散式訓練技術是在 Hivemind 函式庫中實現的。

個案研究:預訓練 sahajBERT

為了展示 DeDLOC 的效能,研究人員透過一場由 40 名志願者參與的協作活動,預訓練了孟加拉語的遮罩語言模型 (masked language model) sahajBERT

模型架構與分詞 (Tokenization)

研究人員選擇了 ALBERT (A Lite BERT) 架構,因為其權重共享機制具有參數效率,能減少節點之間交換的數據量。該模型擁有約 1,800 萬個可訓練參數。

針對孟加拉語,研究人員使用 Unigram Language Model 方法開發了一個自定義的分詞器,具有 32k 的 token 詞彙表。預處理流程包括:

  • Normalization: 進行 NMT 和 NFKC 正規化,移除多餘空格,並統一重複出現的 Unicode 字元,同時特別保留了孟加拉語母音所需的重音符號。
  • Pretokenization: 隔離標點符號與數字,並使用特殊字元 (▁) 來標記單字的起始位置。

數據集串流 (Dataset Streaming)

為了避免要求志願者必須擁有龐大的本地儲存空間,團隊實法了 dataset streaming。這讓參與者可以與訓練過程同步下載並轉換來自孟加拉語 Wikipedia dump 和 OSCAR 數據集的訓練樣本,而不是預先下載整個語料庫。

協作執行與結果

該訓練活動於 5 月 12 日至 5 月 21 日舉行,共有 40 名參與者(30 名孟加拉語使用者志願者與 10 名來自作者所屬組織的人員)參與。實驗使用了 600 個不同的 session,以及 16 個可搶佔式 (preemptible) T4 雲端實例以確保穩定性,累計運行時間總計達 234 天。

性能評估

sahajBERT 在兩個下游任務上進行了評估:WikiANN 上的命名實體識別 (NER) 以及 Soham 文章數據集上的新聞分類 (NCC)。儘管只有約 1,800 萬個參數,sahajBERT 達到的結果與規模大得多的模型相當:

Model NER F1 (mean ± std) NCC Accuracy (mean ± std)
sahajBERT 95.45 ± 0.53 91.97 ± 0.47
XLM-R-large 96.48 ± 0.22 90.05 ± 0.38
IndicBert 92.52 ± 0.45 74.46 ± 1.91
bnRoBERTa 82.32 ± 0.67 80.94 ± 0.45

值得注意的是,sahajBERT 的性能與 XLM-R-large 相當,後者擁有約 5.59 億個參數,且是在數百個 V100 GPU 上訓練的。

Sources

相關