大規模訓練
檢查點分片(checkpoint sharding)
一次兆級參數的訓練必須週期性地保存其狀態——以挺過硬體故障(在數千張加速器的叢集上這是家常便飯),並供日後續跑。但完整狀態(參數加優化器動量)可能達數 TB,而模型本就已切分在數百個裝置上。檢查點分片把這份狀態寫成許多平行的分片,每個裝置各自持久化它已持有的那一片,而不是把所有東西蒐集到單一 rank、再序列化成一份既慢又吃記憶體的單體檔案。
難處在於把磁碟上的佈局與平行佈局解耦。天真的分片檢查點被綁死在寫出它的那個確切配置上,因此你無法在不同的裝置數、或不同的張量/管線切法上續跑。分散式檢查點格式以儲存每個參數及其描述全域形狀、分片如何鋪排的中介資料來解決此事,使載入器能即時重新切分到續跑作業所用的任何拓樸。非同步檢查點再把成本藏起來:先把張量快速快照到主機記憶體,再於背景沖刷到儲存,同時訓練照常進行。
檢查點分片讓長時間訓練既穩健又有彈性:故障在數分鐘內恢復、而非從零重啟,作業也能在兩次檢查點之間被重塑到不同的叢集拓樸上。它的工程負擔是在並行與拓樸變動下的正確性——一個悄悄遺失或錯置某片的檢查點比沒有更糟,因此這類系統都經過仔細驗證。
分片檢查點的價值取決於它有多麼與拓樸無關:若它無法被載入到與保存時不同的平行配置上,你就失去了當初分片的一半理由——彈性。
又称
另见