Руководства по обучению LoRA с AI Toolkit

Fix: Bus error DataLoader (/dev/shm) — LTX-2 LoRA в AI Toolkit

Траблшутинг по /dev/shm: почему процессы DataLoader worker падают и как это исправить снижением workers/prefetch, увеличением shm-size и уменьшением памяти на sample.

Обучайте диффузионные модели с Ostris AI Toolkit

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):

  1. Откройте Your Training Job Panel
  2. Нажмите Show Advanced (вверху справа)
  3. В YAML‑конфиге найдите элемент датасета под datasets: (блок, в котором есть folder_path)
  4. Добавьте/исправьте эти ключи внутри этого элемента

Сначала попробуйте так (обычно достаточно):

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_frames
  • resolution
  • batch_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).

Готовы начать обучение?