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

准备好开始训练了吗?