AI Toolkit LoRAトレーニングガイド

Fix: /dev/shm 共有メモリ Bus error — LTX-2 LoRA (AI Toolkit)

PyTorch DataLoader worker が /dev/shm を使い切って落ちる原因と、workers/prefetch の削減や shm-size 増加で安定化する手順をまとめたトラブルシューティングです。

Ostris AI Toolkitで拡散モデルをトレーニング

Fix: 「DataLoader worker is killed by signal: Bus error」(共有メモリ /dev/shm)— AI Toolkit の LTX-2 LoRA

LTX-2 の LoRA 学習が Bus error でクラッシュする場合、ほとんどは 共有メモリ(/dev/shm)の不足/圧迫 が原因です。PyTorch の DataLoader worker と prefetch が、大きい 動画バッチ(フレーム数が多い)を同時にメモリに保持してしまいます。


クイック修正チェックリスト(ここから)

  • Fix A を適用:dataset config の num_workersprefetch_factor を下げる
  • ✅ Docker で self-host している場合:Fix B を適用し、--shm-size/dev/shm を増やす
  • ✅ 学習を再実行し、ログに “out of shared memory” / “Bus error” が出なくなったことを確認
  • 121 frames を学習している場合は GPU OOM も起きやすい(下の Notes 参照)

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 の学習は 動画バッチ(1 サンプルあたり多数フレーム)を扱います。
  • DataLoader worker を複数起動し、さらに prefetch すると、AI Toolkit が複数の大きなバッチを /dev/shm にキューしてしまいます。
  • /dev/shm が足りないと worker プロセスが落ち → Bus error → 学習停止、という流れになります。

RunComfy は共有メモリを増やした状態で提供していますが、dataset/設定(特に num_frames が 121 のように大きいケース)によっては、それでも超えることがあります。


3) 対処法

Tip: 1 回に変えるのは 1 変数だけにしてください。まずは Fix A から — ほとんどのケースはこれで解決します。

Fix A(推奨):DataLoader の worker 数と prefetch を減らす

学習データ自体は変えずに、共有メモリの圧迫を下げます。

変更場所(RunComfy UI):

  1. Your Training Job Panel を開く
  2. 右上の Show Advanced をクリック
  3. YAML config の datasets: 配下で、folder_path を含む dataset item(ブロック)を探す
  4. その dataset item の中に、次のキーを追加/調整する

まずはこれ(多くの場合これで十分):

num_workers: 1

prefetch_factor: 1

まだクラッシュする場合(最も安定。ただし遅い):

num_workers: 0

prefetch_factor: null

⚠️ 重要:

  • num_workers: 0 にする場合、prefetch_factor: nullnull をそのまま)にしてください。
  • worker/prefetch を下げるのは 速度(throughput) の話で、品質 には影響しません。データの読み込み方が変わるだけです。

Fix B(self-host / Docker):/dev/shm を増やす

AI Toolkit を Docker で自前運用している場合は、コンテナの共有メモリを増やしてください:

docker run --shm-size=32g ...

or safer:

docker run --shm-size=64g ...

安定性のために Fix A も併用できます。


Fix C(まだ限界に当たる場合):1 サンプルあたりのメモリを減らす

dataset がかなり重い場合は、次のうち 1 つ以上を下げてください:

  • num_frames
  • resolution
  • batch_size

4) 修正できたか確認する

修正できた状態の目安:

  • DataLoader の段階を超えて、学習が step を進められる
  • ログに “out of shared memory” / “Bus error” が繰り返し出ない

self-host の場合は、コンテナ内で /dev/shm が実際に大きくなっていることも確認してください。


Notes(よくある次の問題:GPU OOM)

  • 121 frames は重いです。 /dev/shm を直した後でも GPU OOM が出ることがあります。
    • 推奨:121-frame 学習は 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

これは「dataset が壊れている」という意味ですか?

たいてい違います。これは「悪い dataset」ではなく、DataLoader の共有メモリ制限です。

num_workers: 0 のときに prefetch_factor: null が必要なのはなぜ?

worker がない場合、prefetch は使われません。null にしておくことで、設定上の無効/未使用な prefetch 挙動を避けられます。

Fix B(/dev/shm を増やす)だけやればいいですか?

RunComfy ならまず Fix A。Docker self-host なら Fix B が必要なことが多いですが、Fix A も効きます。

Bus error は直ったのに GPU OOM になりました。次は?

batch_size / resolution / num_frames を下げるか、より大きい GPU を使ってください(121 frames は H200 推奨)。

トレーニングを開始する準備はできましたか?