Um checkpoint completo para um modelo 70B inclui: pesos do modelo (~140 GB em FP16), estados do otimizador (~280 GB para Adam, que armazena duas médias móveis por parâmetro), estado do scheduler de learning rate, estados do gerador de números aleatórios e o passo de treinamento atual. Total: ~420 GB por checkpoint. Salvar isso em disco leva tempo e armazenamento significativos, e é por isso que checkpointing é feito periodicamente em vez de a cada passo.
Estratégias comuns: salvar a cada N passos (simples mas usa muito armazenamento), salvar apenas os K checkpoints mais recentes (deletando os mais antigos para economizar espaço), salvar baseado em métricas de avaliação (manter o checkpoint com a melhor loss de validação) e usar checkpointing assíncrono (salvar em segundo plano enquanto o treinamento continua no próximo lote). Treinamentos grandes frequentemente usam todos esses: checkpoints locais frequentes em armazenamento NVMe rápido mais checkpoints remotos periódicos em armazenamento de rede para recuperação de desastres.
Diferentes frameworks usam diferentes formatos de checkpoint: state_dict do PyTorch, safetensors do Hugging Face, checkpoints fragmentados do FSDP e checkpoints ZeRO do DeepSpeed. Converter entre formatos é uma tarefa comum — você pode treinar com DeepSpeed (fragmentado entre GPUs) mas precisar de um checkpoint único consolidado para inferência ou upload para o Hugging Face. O formato safetensors está se tornando o padrão para compartilhamento porque é rápido de carregar e seguro para memória.