Guías de entrenamiento LoRA con AI Toolkit

Fix: Bus error de DataLoader (/dev/shm) — LTX-2 LoRA en AI Toolkit

Guía de troubleshooting sobre /dev/shm: por qué los workers del DataLoader se caen y cómo estabilizar el training reduciendo workers/prefetch, aumentando shm-size y bajando la memoria por sample.

Entrena modelos de difusión con Ostris AI Toolkit

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_workers y prefetch_factor en tu configuración del dataset
  • ✅ Si haces self-hosting en Docker: aplica Fix B y aumenta /dev/shm con --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/shm es 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):

  1. Abre Your Training Job Panel
  2. Haz clic en Show Advanced (arriba a la derecha)
  3. En el YAML, encuentra el item del dataset bajo datasets: (el bloque que contiene tu folder_path)
  4. 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, pon prefetch_factor: null (exactamente null).
  • 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_frames
  • resolution
  • batch_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?