Fault Tolerance
Fault Tolerance / Checkpointing
Fault Tolerance — механизмы обеспечения устойчивости обучения LLM к сбоям: чекпоинтинг, автоматический рестарт, обнаружение зависаний. При обучении на сотнях GPU аппаратные сбои — не исключение, а норма.
Что такое Fault Tolerance
При обучении на сотнях/тысячах GPU сбои оборудования (GPU, сеть, диски) происходят регулярно — раз в часы или дни. Fault tolerance — система мер для минимизации потерь при сбоях.
Виды сбоев
| Тип | Частота (1000 GPU) | Потеря |
|---|---|---|
| GPU Out of Memory | Несколько раз в день | Минуты |
| GPU hardware error | Раз в 1-3 дня | Часы |
| Сетевой сбой (InfiniBand) | Раз в неделю | Часы |
| Зависание NCCL | Раз в день | Зависит от детекции |
| Ошибка файловой системы | Раз в месяц | Часы-дни |
Чекпоинтинг
Правила
- Сохранять часто: каждые 15-60 минут
- Сохранять быстро: использовать локальный NVMe, фоновую выгрузку в облако
- Хранить несколько: минимум 3 последних чекпоинта (на случай corrupted данных)
- Проверять: валидировать чекпоинт после сохранения (checksums)
Производительность
BLOOM-176B (384 GPU):
Чекпоинт = 2.3 TB
Сохранение на GPFS: 40 секунд (параллельно)
Сохранение на NFS: 20+ минут
Асинхронный чекпоинтинг
Сохранение чекпоинта не должно блокировать обучение:
1. Скопировать состояние в CPU RAM (быстро)
2. Фоновый процесс записывает на диск
3. Crontab выгружает в облачное хранилище
Обнаружение зависаний
При распределённом обучении один зависший процесс блокирует все GPU. Это может стоить десятки тысяч долларов в месяц при масштабе (2-3% кластера, по опыту Яндекса).
# PyTorch: включить обнаружение зависаний в NCCL
os.environ["NCCL_ASYNC_ERROR_HANDLING"] = "1"
# Таймаут для коллективных операций
dist.init_process_group(timeout=timedelta(minutes=10))
Тест: добавьте sleep(3600) в случайное место кода и проверьте, обнаружит ли система зависание.
Автоматический рестарт
# Slurm: автоматический рестарт при сбое
#SBATCH --requeue
#SBATCH --signal=SIGUSR1@120 # сигнал за 120 сек до конца
# В коде: перехватить сигнал и сохранить чекпоинт
import signal
signal.signal(signal.SIGUSR1, save_checkpoint_and_exit)
Elastic Training
PyTorch Elastic (torchrun) позволяет продолжить обучение при потере части узлов, динамически изменяя количество воркеров.