正文
因此,对故障的鲁棒性与训练进度之间很难做到权衡,但现在有了异步Checkpoint,PyTorch 分布式训练能够显著缓解这种张力,并以最小的影响整体训练时间的方式实现频繁Checkpoint。
大约一年前(https://pytorch.org/blog/performant-distributed-checkpointing/),我们展示了分布式Checkpoint如何大幅加速Checkpoint时间,从最初的
torch.save()
功能开始。正如 IBM 研究团队指出的那样,
torch.save
可能需要长达 30 分钟才能检查一个 11B 模型(PyTorch 1.13)。
随着分布式Checkpoint的进步,对于高达 30B 的模型大小,Checkpoint可以在 4 分钟内完成。使用异步Checkpoint,Checkpoint导致的训练时间损失现在降至 30 秒以下,通常仅需 6 秒。
需要明确的是,异步Checkpoint不会压缩实际的序列化Checkpoint时间,如之前的更新所展示的那样。相反,
它将最终的Checkpoint过程移出关键路径(到 CPU 线程),以允许 GPU 训练在单独的线程下完成Checkpoint的同时继续进行
。
如上图所示,异步Checkpoint比一年前的改进进一步提高了 10 倍到 23 倍。