Fix: «DataLoader worker is killed by signal: Bus error» (shared memory /dev/shm) — LTX-2 LoRA в AI Toolkit
Если обучение LoRA для LTX-2 падает с Bus error, почти всегда причина — давление на shared memory (/dev/shm): воркеры PyTorch DataLoader + prefetch держат в памяти большие видео‑батчи (много кадров) одновременно.
Быстрый чеклист (начните отсюда)
- ✅ Примените Fix A: уменьшите
num_workersиprefetch_factorв конфиге датасета - ✅ Если вы запускаете всё самостоятельно в Docker: примените Fix B и увеличьте
/dev/shmчерез--shm-size - ✅ Перезапустите обучение и убедитесь, что в логе больше нет “out of shared memory” / “Bus error”
- ✅ Если вы обучаете 121 frames, будьте готовы также разруливать GPU OOM (см. примечания ниже)
1) Убедитесь, что это именно та проблема
Вы по адресу, если в логах есть что-то вроде:
DataLoader worker (pid XXX) is killed by signal: Bus error
It is possible that dataloader's workers are out of shared memory
Please try to raise your shared memory limit
Частые ключевые слова:
- Bus error
- out of shared memory
- упоминания DataLoader worker, shared memory limit, /dev/shm
2) Что происходит
- Обучение LTX-2 использует видео‑батчи (много кадров на один sample).
- При нескольких DataLoader workers + prefetch AI Toolkit может держать в очереди несколько больших батчей в
/dev/shm. - Когда
/dev/shmслишком маленький, один из worker‑процессов падает → Bus error → обучение останавливается.
RunComfy уже предоставляет увеличенную shared memory, но некоторые датасеты/настройки (особенно высокий num_frames, например 121) всё равно могут её превысить.
3) Исправления
Совет: меняйте по одному параметру за раз. Начните с Fix A — для большинства запусков этого достаточно.
Fix A (рекомендуется): уменьшить число workers и prefetch у DataLoader
Это снижает нагрузку на shared memory, не меняя сами данные обучения.
Где менять (RunComfy UI):
- Откройте Your Training Job Panel
- Нажмите Show Advanced (вверху справа)
- В YAML‑конфиге найдите элемент датасета под
datasets:(блок, в котором естьfolder_path) - Добавьте/исправьте эти ключи внутри этого элемента
Сначала попробуйте так (обычно достаточно):
num_workers: 1
prefetch_factor: 1
Если всё ещё падает (самое стабильное, но медленнее):
num_workers: 0
prefetch_factor: null
⚠️ Важно:
- Если вы ставите
num_workers: 0, ставьтеprefetch_factor: null(именноnull). - Уменьшение workers/prefetch влияет на скорость (throughput), а не на качество. Это лишь меняет способ загрузки данных.
Fix B (self‑hosted / Docker): увеличить /dev/shm
Если вы запускаете AI Toolkit в Docker у себя, увеличьте shared memory контейнера:
docker run --shm-size=32g ...
or safer:
docker run --shm-size=64g ...
Для стабильности можно дополнительно применить Fix A.
Fix C (если всё ещё упираетесь в лимиты): уменьшить память на sample
Если датасет очень тяжёлый, также уменьшите один или несколько параметров:
num_framesresolutionbatch_size
4) Как проверить, что помогло
Успешное исправление выглядит так:
- Обучение проходит этап DataLoader и продолжает делать шаги (steps).
- В логе больше не повторяются “out of shared memory” / “Bus error”.
Если вы self-host, убедитесь также, что внутри контейнера /dev/shm действительно увеличен.
Notes (частая следующая проблема: GPU OOM)
- 121 frames — это тяжело. После фикса
/dev/shmвы всё ещё можете упереться в GPU OOM. - Рекомендация: для 121‑кадрового обучения используйте H200.
- Иначе уменьшайте batch_size / resolution / num_frames.
Пример для копирования (блок dataset)
datasets:
- folder_path: /app/ai-toolkit/datasets/your_dataset
num_frames: 121
resolution: [512, 768]
caption_ext: "txt"
# Fix shared memory Bus error (start here):
num_workers: 1
prefetch_factor: 1
# If still crashing, use this instead (slowest but most stable):
# num_workers: 0
# prefetch_factor: null
FAQ
Это значит, что мой датасет «сломанный»?
Обычно нет. Это ограничение shared memory у DataLoader, а не проблема «плохого датасета».
Почему нужен prefetch_factor: null, когда num_workers: 0?
Без workers prefetch не используется. Значение null помогает избежать некорректного/неиспользуемого поведения prefetch в конфиге.
Достаточно ли сделать только Fix B (увеличить /dev/shm)?
Если вы на RunComfy — начните с Fix A. Если вы self-host в Docker — Fix B часто необходим, и Fix A тоже помогает.
Я исправил Bus error, но теперь получаю GPU OOM. Что дальше?
Уменьшайте batch_size, resolution или num_frames, либо используйте более крупный GPU (для 121 frames рекомендуется H200).
Готовы начать обучение?
