修復:「DataLoader worker is killed by signal: Bus error」(共享記憶體 /dev/shm)— AI Toolkit 的 LTX-2 LoRA
如果你在訓練 LTX-2 LoRA 時遇到 Bus error 當機,幾乎都可以歸因於 共享記憶體(/dev/shm)壓力/不足:PyTorch DataLoader 的 workers + 預取(prefetch)會同時把很大的 影片 batch(大量幀)保留在記憶體裡。
快速修復清單(從這裡開始)
- ✅ 先做 Fix A:在 dataset 設定裡降低
num_workers與prefetch_factor - ✅ 如果你是 Docker 自行託管:做 Fix B,用
--shm-size增加/dev/shm - ✅ 重新訓練,確認日誌裡不再出現 “out of shared memory” / “Bus error”
- ✅ 如果你訓練的是 121 幀,後續也很可能會遇到 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 訓練使用 影片 batch(每個樣本包含很多幀)。
- 當 DataLoader worker 數量較多 + 開啟預取時,AI Toolkit 可能會在
/dev/shm裡排隊快取多個很大的 batch。 - 當
/dev/shm太小時,某個 worker 行程會當機 → Bus error → 訓練中止。
RunComfy 已提供更大的共享記憶體,但某些資料集/設定(尤其是 num_frames 很高,例如 121)仍然可能把它撐爆。
3) 修復方案
Tip:一次只改一個變數。先從 Fix A 開始——多數情況下這就夠了。
Fix A(建議):降低 DataLoader 的 workers + prefetch
這會在不改動訓練資料的前提下,明顯降低共享記憶體壓力。
在 RunComfy UI 裡修改的位置:
- 打開 Your Training Job Panel
- 點擊右上角 Show Advanced
- 在 YAML 設定中找到
datasets:下的 dataset 項目(包含你的folder_path的那個 block) - 在該 dataset 項目內加入/調整以下欄位
先嘗試這個(通常就夠):
num_workers: 1
prefetch_factor: 1
如果仍然當機(最穩定,但會更慢):
num_workers: 0
prefetch_factor: null
⚠️ 重要:
- 如果你設定
num_workers: 0,請同時把prefetch_factor: null設好(必須是null)。 - 降低 workers/prefetch 影響的是 吞吐(throughput),不是 品質。它只改變資料載入方式。
Fix B(自行託管 / Docker):增加 /dev/shm
如果你是自己用 Docker 跑 AI Toolkit,請增加容器的共享記憶體:
docker run --shm-size=32g ...
or safer:
docker run --shm-size=64g ...
為了穩定,你也可以同時套用 Fix A。
Fix C(如果仍然碰到限制):降低單樣本記憶體占用
如果資料集非常重,還可以再降低以下一個或多個參數:
num_framesresolutionbatch_size
4) 驗證修復是否生效
修復成功通常表現為:
- 訓練能順利通過 DataLoader 階段並持續往下跑(step 持續增加)。
- 當機日誌不再重複 “out of shared memory” / “Bus error”。
如果你是自行託管,也要確認容器內 /dev/shm 的實際大小確實已增加。
Notes(常見後續問題:GPU OOM)
- 121 幀很重。 修好
/dev/shm之後,你仍然可能會遇到 GPU OOM。 - 建議:121 幀訓練用 H200
- 否則請降低 batch_size / resolution / num_frames
可直接複製貼上的範例(dataset block)
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
這代表我的資料集壞掉了嗎?
通常不是。這是 DataLoader 的共享記憶體限制問題,不是資料集本身有問題。
為什麼 num_workers: 0 時必須設定 prefetch_factor: null?
當沒有 worker 時,prefetch 不會被使用。設為 null 可以避免設定裡出現無效/無意義的 prefetch 行為。
我只做 Fix B(增加 /dev/shm)可以嗎?
如果你在 RunComfy 上,先從 Fix A 開始。如果你是 Docker 自行託管,Fix B 往往是必須的,同時 Fix A 也能提升穩定性。
Bus error 解決了,但現在 GPU OOM 了,怎麼辦?
降低 batch_size、resolution 或 num_frames,或使用更大的 GPU(121 幀建議 H200)。
準備好開始訓練了嗎?
