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_workersとprefetch_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):
- Your Training Job Panel を開く
- 右上の Show Advanced をクリック
- YAML config の
datasets:配下で、folder_pathを含む dataset item(ブロック)を探す - その dataset item の中に、次のキーを追加/調整する
まずはこれ(多くの場合これで十分):
num_workers: 1
prefetch_factor: 1
まだクラッシュする場合(最も安定。ただし遅い):
num_workers: 0
prefetch_factor: null
⚠️ 重要:
num_workers: 0にする場合、prefetch_factor: null(nullをそのまま)にしてください。- 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_framesresolutionbatch_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 推奨)。
トレーニングを開始する準備はできましたか?
