Файловые системы для ML
Storage / File Systems for ML
Выбор файловой системы критичен для производительности обучения: параллельные ФС (GPFS, Lustre, WekaIO) обеспечивают сохранение 2TB чекпоинта за 40 сек, тогда как NFS — за 20+ минут.
Файловые системы для ML
При обучении LLM на кластере файловая система влияет на:
1. Загрузку данных (DataLoader) — не должна быть bottleneck
2. Чекпоинты — быстрое сохранение/восстановление терабайтов
3. Логирование — множество мелких записей от сотен процессов
Типы файловых систем
Параллельные распределённые ФС (лучший выбор)
| ФС | Разработчик | Особенности |
|---|---|---|
| GPFS (IBM Storage Scale) | IBM | Самая надёжная, переменный блок, коммерческая |
| Lustre | Open Source | Стандарт HPC, масштабируется до эксабайт |
| WekaIO | Weka | Высокая IOPS, хорош для мелких файлов |
Эти ФС обеспечивают параллельный доступ от сотен-тысяч клиентов одновременно, что критично для DataLoader и чекпоинтов.
Облачные решения
| Решение | Тип | Производительность |
|---|---|---|
| AWS FSx for Lustre | Lustre в облаке | Хорошая |
| GCS FUSE | Object storage mount | Средняя |
| Azure Blob NFS | Object storage | Средняя |
Локальный NVMe
Лучший вариант для чекпоинтов: сохранить на локальный NVMe, затем фоновым процессом скопировать в облако.
Размер блока файловой системы
Критический параметр, часто упускаемый:
- Блок 16 MB + средний файл 16 KB = 1000× перерасход дискового пространства
- Python (conda) создаёт тысячи мелких файлов — могут закончиться inode
Решение: два раздела с разными блоками:
1. Данные/чекпоинты: блок 2-16 MB (большие файлы)
2. Код/конфиги/conda: блок 4-8 KB (мелкие файлы)
Практические советы
- Локальный NVMe для чекпоинтов — сохранение мгновенное, затем фоновая выгрузка
- Храните 3+ последних чекпоинта локально — быстрый рестарт
- Checksums — проверяйте целостность чекпоинтов после записи
- Не полагайтесь на облачное хранилище для DataLoader — при обучении IDEFICS-80B это заняло недели отладки (Stas Bekman)
- Buffered IO для чтения, Direct IO для записи чекпоинтов
# Проверка производительности ФС
# Последовательная запись (чекпоинты)
fio --name=seq_write --rw=write --bs=1m --size=10G --numjobs=8
# Случайное чтение (DataLoader)
fio --name=rand_read --rw=randread --bs=256k --size=10G --numjobs=64