Fix: “DataLoader worker is killed by signal: Bus error” (memoria compartida /dev/shm) — LTX-2 LoRA en AI Toolkit
Si tu entrenamiento de LoRA LTX-2 se cae con un Bus error, casi siempre es por presión en la memoria compartida (/dev/shm): los workers del DataLoader de PyTorch + el prefetching se quedan sosteniendo en memoria batches de video grandes (muchos frames).
Checklist de arreglo rápido (empieza aquí)
- ✅ Aplica Fix A: baja
num_workersyprefetch_factoren tu configuración del dataset - ✅ Si haces self-hosting en Docker: aplica Fix B y aumenta
/dev/shmcon--shm-size - ✅ Vuelve a ejecutar el entrenamiento y confirma que el log ya no muestra “out of shared memory” / “Bus error”
- ✅ Si estás entrenando 121 frames, prepárate para lidiar también con GPU OOM (ver notas abajo)
1) Confirma que es el mismo problema
Vas por buen camino si tus logs incluyen algo como:
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
Palabras clave comunes:
- Bus error
- out of shared memory
- menciones a DataLoader worker, shared memory limit, /dev/shm
2) Qué está pasando
- El entrenamiento de LTX-2 usa batches de video (muchos frames por sample).
- Con varios workers del DataLoader + prefetching, AI Toolkit puede poner en cola varios batches grandes en
/dev/shm. - Cuando
/dev/shmes demasiado pequeño, un proceso worker se cae → Bus error → el entrenamiento se detiene.
RunComfy ya ofrece más memoria compartida, pero algunos datasets/configuraciones (especialmente num_frames alto como 121) igual pueden excederla.
3) Fixes
Tip: cambia una sola variable a la vez. Empieza con Fix A — esto lo resuelve en la mayoría de los casos.
Fix A (recomendado): reduce workers + prefetch del DataLoader
Esto reduce la presión de memoria compartida sin cambiar tus datos de entrenamiento.
Dónde cambiarlo (RunComfy UI):
- Abre Your Training Job Panel
- Haz clic en Show Advanced (arriba a la derecha)
- En el YAML, encuentra el item del dataset bajo
datasets:(el bloque que contiene tufolder_path) - Agrega/ajusta estas claves dentro de ese item del dataset
Prueba primero esto (suele ser suficiente):
num_workers: 1
prefetch_factor: 1
Si aún crashea (lo más estable, pero más lento):
num_workers: 0
prefetch_factor: null
⚠️ Importante:
- Si pones
num_workers: 0, ponprefetch_factor: null(exactamentenull). - Bajar workers/prefetch afecta el throughput, no la calidad. Solo cambia cómo se cargan los datos.
Fix B (self-hosted / Docker): aumenta /dev/shm
Si ejecutas AI Toolkit en Docker por tu cuenta, aumenta la memoria compartida del contenedor:
docker run --shm-size=32g ...
or safer:
docker run --shm-size=64g ...
También puedes aplicar Fix A para más estabilidad.
Fix C (si todavía pegas límites): reduce la memoria por sample
Si el dataset es muy pesado, reduce una o más de estas cosas:
num_framesresolutionbatch_size
4) Verifica el fix
Un fix exitoso se ve así:
- El entrenamiento pasa la etapa del DataLoader y sigue avanzando steps.
- El log ya no repite “out of shared memory” / “Bus error”.
Si haces self-hosting, asegúrate también de que /dev/shm sea realmente grande dentro del contenedor.
Notas (problema común después: GPU OOM)
- 121 frames es pesado. Después de arreglar
/dev/shm, aún puedes topar con GPU OOM. - Recomendado: H200 para entrenamiento de 121 frames.
- Si no, baja batch_size / resolution / num_frames.
Ejemplo listo para copiar/pegar (bloque de 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
¿Esto significa que mi dataset está roto?
Normalmente no. Esto es un límite de memoria compartida del DataLoader, no un dataset malo.
¿Por qué prefetch_factor: null es obligatorio cuando num_workers: 0?
Sin workers, el prefetching no se usa. Ponerlo en null evita un comportamiento de prefetch inválido/no usado en la config.
¿Debería hacer solo Fix B (aumentar /dev/shm)?
Si estás en RunComfy, empieza con Fix A. Si haces self-hosting en Docker, Fix B suele ser necesario, y Fix A igual ayuda.
Arreglé el Bus error, pero ahora tengo GPU OOM. ¿Qué sigue?
Baja batch_size, resolution o num_frames, o usa una GPU más grande (H200 recomendado para 121 frames).
¿Listo para comenzar el entrenamiento?
