MLOps и инструменты 14 просмотров

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 Раз в день Зависит от детекции
Ошибка файловой системы Раз в месяц Часы-дни

Чекпоинтинг

Правила

  1. Сохранять часто: каждые 15-60 минут
  2. Сохранять быстро: использовать локальный NVMe, фоновую выгрузку в облако
  3. Хранить несколько: минимум 3 последних чекпоинта (на случай corrupted данных)
  4. Проверять: валидировать чекпоинт после сохранения (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) позволяет продолжить обучение при потере части узлов, динамически изменяя количество воркеров.

Связанные термины

Используется в

Попробуйте на практике

Арендуйте GPU и запустите ML-модели в Intelion Cloud

Начать работу