Un checkpoint completo para un modelo de 70B incluye: pesos del modelo (~140 GB en FP16), estados del optimizador (~280 GB para Adam, que almacena dos promedios móviles por parámetro), estado del planificador de tasa de aprendizaje, estados del generador de números aleatorios y el paso de entrenamiento actual. Total: ~420 GB por checkpoint. Guardar esto en disco toma tiempo y almacenamiento significativos, razón por la cual los checkpoints se hacen periódicamente en lugar de en cada paso.
Estrategias comunes: guardar cada N pasos (simple pero usa mucho almacenamiento), guardar solo los K checkpoints más recientes (eliminando los antiguos para ahorrar espacio), guardar basándose en métricas de evaluación (conservar el checkpoint con la mejor pérdida de validación), y usar checkpointing asíncrono (guardar en segundo plano mientras el entrenamiento continúa con el siguiente lote). Los entrenamientos grandes a menudo usan todas estas: checkpoints locales frecuentes en almacenamiento NVMe rápido más checkpoints remotos periódicos en almacenamiento de red para recuperación ante desastres.
Diferentes frameworks usan diferentes formatos de checkpoint: state_dict de PyTorch, safetensors de Hugging Face, checkpoints fragmentados de FSDP y checkpoints ZeRO de DeepSpeed. Convertir entre formatos es una tarea común — podrías entrenar con DeepSpeed (fragmentado entre GPUs) pero necesitar un checkpoint consolidado único para inferencia o subir a Hugging Face. El formato safetensors se está convirtiendo en el estándar para compartir porque es rápido de cargar y seguro para la memoria.