修复:“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)。
准备好开始训练了吗?
