Asynchronous checkpointing is common at scale. In this scheme, the GPU is only blocked when copying checkpoint data from GPU memory to host CPU memory. The GPU then proceeds with computing while the CPU asynchronously flushes the checkpoint data to nonvolatile storage.
There may be multiple levels of nonvolatile storage that are used at different intervals to further reduce bandwidth requirements and increase durability of the checkpoints.
Supported frameworks
Microsoft’s Nebula framework does this by
- Synchronously checkpointing to CPU memory
- Asynchronously copying that to an adjacent node’s local SSD to protect against a single-node failure
- Asynchronously copying that to object storage to protect against multi-node failures, allow rollback, and store checkpoints long-term
Nebula was a project out of Microsoft Research which has been abandoned, but I think DeepSpeed has adopted async checkpointing.
NVIDIA’s NeMo Framework also supports asynchronous checkpointing.
PyTorch also supports asynchronous checkpointing. It sounds very similar to what NeMo has implemented.
Ray offers ways to perform asynchronous checkpointing and recommends writing to local disk.1 It also offers distributed checkpointing
Google offers transparent “multi-tier checkpointing” using Replicator, which automatically replications node-local checkpoints to peer nodes and automatically drains to GCS.
Companies who use it
Meta uses asynchronous checkpointing to train its Muse models.2
ByteDance’s MegaScale does this.3