預訓練
張量與管線平行(tensor and pipeline parallelism)
當一個模型大到連單一份副本都放不進一個裝置時,你就必須切分模型本身,而不只是切分資料。張量平行與管線平行是切它的兩種方式。張量平行橫著切過一層:一個巨大的矩陣乘法被分給好幾個裝置,各自算出輸出的一部分,再把結果縫合回來。管線平行則往另一個方向切,把不同的層放到不同的裝置上。
兩者各有特徵性的代價。張量平行需要在層中途進行非常頻繁、高頻寬的通訊,所以會限制在一組緊密相連、共享高速互連的 GPU 之內。管線平行像生產線一樣把激活值從一個層組傳到下一個,這會冒著「氣泡」的風險——前段或後段在等工作時閒置;巧妙的微批次排程能讓管線保持填滿、把氣泡縮到最小。
兩者都不會單獨使用。真實系統會在節點內疊上張量平行、跨節點疊上管線平行、最上層再加資料平行——這正是讓一個數千億參數模型,能在「沒有任何單一裝置裝得下它一小部分」的叢集上訓練的三維平行。
又称
另见