AI Toolkit LoRA 訓練指南

修復:LTX-2 LoRA 訓練 DataLoader Bus error(/dev/shm)

一篇 /dev/shm 排錯指南:解釋 DataLoader workers 為何會因共享記憶體不足而當機,並提供降低 workers/prefetch、增加 shm-size、減少單樣本記憶體來穩定訓練的做法。

使用 Ostris AI Toolkit 訓練擴散模型

修復:「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_workersprefetch_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 workershared 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 裡修改的位置:

  1. 打開 Your Training Job Panel
  2. 點擊右上角 Show Advanced
  3. 在 YAML 設定中找到 datasets: 下的 dataset 項目(包含你的 folder_path 的那個 block)
  4. 在該 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_frames
  • resolution
  • batch_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_sizeresolutionnum_frames,或使用更大的 GPU(121 幀建議 H200)。

準備好開始訓練了嗎?