訓練時候的平行化可分為:
- Model Parallel: 所有 GPUs 跑同一個 batch 但是各自跑模型不同部分
- Data Parallel: GPUs 跑不同的 batches, 但跑同一個完整的模型
由於 Data Parallel 跑同一個完整模型且各 GPU 都用自己複製的一份, 在 update 參數時要如何確保更新一致? 可分為 synchronous 和 asynchronous update. (文章後面會詳細討論)
本文討論 Data Parallel with Synchronous update.
既然要做 data parallel, 第一件事情便是如何對不同 GPU 分派不同的 batches, 接下來我們就使用 PyTorch 做這件事.