ArtificialGuyBR

Home / Blog / AI video

PYTORCH_CUDA_ALLOC_CONF y VRAM: FLUX, Wan2.1 y HunyuanVideo

Arregla el CUDA OOM con PYTORCH_CUDA_ALLOC_CONF, optimiza el entrenamiento de FLUX con blocks_to_swap y ejecuta Wan2.1 y HunyuanVideo en GPUs de 12 GB.

10 sources cited AI video

TL;DR

  • Añade PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512 a webui-user.bat para eliminar la mayoría de los errores CUDA OOM.
  • Entrena los LoRAs de FLUX en GPUs de 8–12 GB con --blocks_to_swap 35 --fp8_base y comprobaciones de T5XXL en fp8; espera ~4 GB a 512², ~6 GB a 768², ~7.5 GB a 1024².
  • Ejecuta Wan2.1-T2V-1.3B (8.19 GB) y HunyuanVideo FP8 (13 B params) en tarjetas de 12 GB; activa --enable-dynamic-vram de ComfyUI para el desplazamiento automático.

PYTORCH_CUDA_ALLOC_CONF y optimización de VRAM para FLUX, Wan2.1 y HunyuanVideo

La variable de entorno PYTORCH_CUDA_ALLOC_CONF controla el asignador de memoria CUDA de PyTorch a través de garbage_collection_threshold y max_split_size_mb. Las guías de la comunidad para Stable Diffusion WebUI recomiendan garbage_collection_threshold:0.9,max_split_size_mb:512, pero esta variable no aparece en la documentación oficial de semántica CUDA de PyTorch (source). Trata esto como un workaround validado por la comunidad, no como una API soportada.

Los modelos modernos de difusión y vídeo exponen palancas propias: el intercambio de bloques para FLUX, la cuantificación FP8 para Wan2.1 y HunyuanVideo, y los modos de VRAM dinámica en ComfyUI. Este artículo reúne números verificados, banderas y mecanismos para que ajustes un modelo a tu GPU sin fallos OOM de prueba y error.


Preguntas frecuentes

PreguntaRespuesta rápida
¿Qué VRAM necesita FLUX.1 para entrenar?~4 GB a 512², ~6 GB a 768², ~7.5 GB a 1024² (mediciones RTX 3060 12 GB, Civitai #9487)
¿Qué hace PYTORCH_CUDA_ALLOC_CONF?Configura el asignador CUDA de PyTorch: garbage_collection_threshold dispara barridos del pool, max_split_size_mb fija el tamaño máximo de bloque de asignación
¿ComfyUI soporta VRAM dinámica?Sí: --enable-dynamic-vram lo activa, --disable-dynamic-vram lo desactiva; rutas de respaldo: highvram, gpu_only, novram, cpu (cli_args.py)
¿Puede ejecutarse Wan2.1 en un RTX 3060 12 GB?Sí: el modelo T2V-1.3B necesita 8.19 GB de VRAM según su tarjeta de modelo (Wan2.1 model card)
¿Qué hace blocks_to_swap en el entrenamiento de FLUX?Mueve los bloques del transformador entre la RAM del CPU y la VRAM de la GPU; hasta 35 bloques intercambiables, intercambiando VRAM por tiempo de iteración (Kohya docs)

Requisitos de VRAM por modelo

ModeloTareaVRAM requeridaOptimización claveSource
FLUX.1-devEntrenamiento 512×512~4 GB--blocks_to_swapKohya sd-scripts
FLUX.1-devEntrenamiento 768×768~6 GB--fp8_baseKohya sd-scripts
FLUX.1-devEntrenamiento 1024×1024~7.5 GB--fp8_base + T5XXL fp8Kohya sd-scripts
Wan2.1-T2V-1.3BInferencia8.19 GBCompresión latente Wan-VAEHugging Face
HunyuanVideoInferencia (FP8)13 B+ params → ~6.5 GB weightsrun_sample_video_fp8.shTencent/HunyuanVideo
Nota: Los números de FLUX provienen de un benchmark de la comunidad en un RTX 3060 12 GB (Civitai #9487). Se citan ampliamente pero no se reproducen de forma independiente. Mantén ≥0.5 GB de margen sobre los valores indicados.

Mecanismos técnicos

Por qué blocks_to_swap reduce la VRAM en el entrenamiento de FLUX

--blocks_to_swap saca fuera los bloques del transformador de la VRAM de la GPU y los guarda en la RAM del sistema. Cada bloque intercambiado ahorra VRAM proporcional al tamaño de sus activaciones, pero añade latencia de transferencia CPU↔GPU. FLUX.1 expone hasta 35 bloques intercambiables; la documentación de Kohya dice: "Higher numbers save more VRAM but reduce training speed" (flux_train_network.md).

Por qué Wan-VAE reduce la VRAM del vídeo

Wan-VAE usa una convolución causal 3D (CausalConv3D) para comprimir la imagen de vídeo en una cuadrícula latente con proporciones 4× (temporal) / 8× (espacial) / 16× (canal). Esto permite la generación de 1080p de longitud ilimitada sin escalar la VRAM linealmente con la duración del clip (Wan2.1 model card).

Por qué FP8 reduce a la mitad la memoria de pesos de HunyuanVideo

FP8 (E4M3FN) guarda cada parámetro en 8 bits en lugar de 16. Los 13 B+ parámetros de HunyuanVideo pasan de ~26 GB a ~13 GB de memoria de pesos. El repositorio incluye run_sample_video_fp8.sh y fp8_optimization.py para la inferencia FP8 en un solo comando (Tencent/HunyuanVideo).

Por qué PYTORCH_CUDA_ALLOC_CONF afecta a los OOM

El asignador CUDA de PyTorch guarda los bloques liberados en una caché. garbage_collection_threshold fija la fracción de memoria reservada que dispara un barrido de la caché; max_split_size_mb fija el tamaño de una sola asignación antes de que el asignador la divida. La combinación comunidad-prescrita 0.9 / 512 mantiene la caché mínima y evita las asignaciones monolíticas grandes que fragmentan la VRAM. No está documentada en las notas oficiales de CUDA de PyTorch (source).


Errores comunes y soluciones

SíntomaCausa (verificada)Solución
CUDA OOM durante el entrenamiento de Stable Diffusion WebUIEl asignador CUDA de PyTorch retiene los bloques liberadosAñade set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512 a webui-user.bat (truco de la comunidad, Civitai #194)
La VRAM no se libera tras la generación de WebUILa recolección de basura de Python no devuelve la VRAM al controlador de inmediatoPulsa Unload SD checkpoint to free VRAM en Configuración → Acciones (Civitai #194)
OOM durante el entrenamiento de FLUX a mayor resolución/tamaño de loteLa VRAM base del modelo + las activaciones superan la capacidad de la GPUBaja la resolución, añade --blocks_to_swap N, activa --fp8_base y usa comprobaciones de T5XXL fp8 en GPUs de menos de 10 GB (Kohya docs)

Banderas de VRAM dinámica de ComfyUI

BanderaEfecto
--enable-dynamic-vramHabilita el desplazamiento automático del modelo al CPU cuando sube la presión de VRAM
--disable-dynamic-vramDesactiva lo anterior
--highvramGuarda todo en VRAM (más rápido, mayor VRAM)
--gpu_onlySin desplazamiento al CPU, sin segmentación del modelo
--novramDesplazamiento agresivo; mínima VRAM, más lento
--cpuSe ejecuta totalmente en el CPU

Source: comfy/cli_args.py del repositorio de ComfyUI (GitHub).


Entrenamiento de FLUX: combinaciones prácticas de banderas

VRAM de GPUResoluciónBanderas recomendadas
8 GB512²--blocks_to_swap 35 --fp8_base + T5XXL fp8
10–12 GB768²--blocks_to_swap 20-25 --fp8_base
12–16 GB1024²--blocks_to_swap 10-15 --fp8_base
24 GB+1024²--fp8_base (opcional el intercambio)

Descarga de T5XXL fp8: t5xxl_fp8_e4m3fn.safetensors desde comfyanonymous/flux_text_encoders (Hugging Face).


Huecos y afirmaciones sin verificar

  1. Documentación oficial de PYTORCH_CUDA_ALLOC_CONF — No se encontró en la página de notas de CUDA de PyTorch; puede existir solo en la documentación de fuente o Docker.
  2. VRAM de FLUX 768² / 1024² — Benchmark de la comunidad de una sola fuente; no se halló reproducción independiente.
  3. Precisión del complemento VRAM Estimator — No se validó de forma independiente.
  4. VRAM de una sola GPU de HunyuanVideo — El README cubre multi-GPU y FP8, pero no una línea base de una sola GPU.
  5. Tamaño exacto de archivo de FLUX.1-dev — La tarjeta de modelo confirma un safetensors con acceso restringido; el recuento de bytes no se ha incluido fuente.
  6. Detalles de los benchmarks de SageAttention — El README afirma una aceleración de 2–5× con paridad de precisión; las tablas completas no se leyeron.

Preguntas frecuentes

¿Qué VRAM necesita FLUX.1-dev para la inferencia? La inferencia requiere menos VRAM que el entrenamiento. Los informes de la comunidad indican ~10–12 GB para fp16/bf16 a 1024² con ComfyUI dynamic VRAM desactivado; las cuantificaciones GGUF de city96/FLUX.1-dev-gguf bajan este valor a 6–8 GB (Hugging Face).

¿Qué es PYTORCH_CUDA_ALLOC_CONF y cómo se configura? Una variable de entorno leída por el asignador CUDA de PyTorch al inicio del proceso. En Windows: establece PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512 en webui-user.bat. En Linux/macOS: exporta PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512 en tu shell rc o script de inicio.

¿ComfyUI soporta asignación de VRAM dinámica? Sí. Inicia con --enable-dynamic-vram para permitir el desplazamiento automático del modelo cuando la VRAM está agotada. Las banderas complementarias (--highvram, --gpu_only, --novram, --cpu) seleccionan estrategias estáticas (ComfyUI cli_args.py).

¿Puede ejecutarse Wan2.1 en un RTX 3060 12 GB? Sí. El modelo T2V-1.3B requiere 8.19 GB de VRAM según su tarjeta de modelo, lo que deja margen en una tarjeta de 12 GB (Wan2.1 model card).

¿Qué hace blocks_to_swap en el entrenamiento de LoRAs de FLUX? Mueve hasta 35 bloques del transformador entre la RAM del CPU y la VRAM de la GPU en cada iteración. Más bloques intercambiados = menor VRAM máximo, mayor tiempo de paso. Empieza por 35 en tarjetas de 8 GB y reduce según la VRAM (Kohya flux_train_network.md).

¿Dónde consigo comprobaciones de T5XXL fp8 para entrenar FLUX con poca VRAM? comfyanonymous/flux_text_encoders aloja t5xxl_fp8_e4m3fn.safetensors. Cárgalo con el nodo DualClipLoader de ComfyUI (Hugging Face).

¿Cómo se compara SageAttention con FlashAttention? El kernel de atención cuantificada de SageAttention afirma una aceleración de 2–5× sobre FlashAttention sin pérdida de métrica end-to-end en modelos de lenguaje, imagen y vídeo (SageAttention GitHub). La integración requiere un nodo personalizado o un backend de atención parcheado.


Conclusiones clave

  1. La configuración del asignador funciona, pero no está documentada — PYTORCH_CUDA_ALLOC_CONF es un fix de la comunidad estándar para OOM sin referencia oficial de PyTorch.
  2. El entrenamiento de FLUX entra en 8–12 GB — Combina --blocks_to_swap, --fp8_base y T5XXL fp8 para llegar a ~4 GB a 512².
  3. Los modelos de vídeo son eficientes en VRAM por diseño — La compresión 4/8/16 de Wan-VAE y los pesos FP8 de HunyuanVideo apuntan a GPUs de consumo.
  4. La VRAM dinámica de ComfyUI es una característica de primer nivel — Ábala mediante la CLI; no necesitas cambios de código.
  5. Los benchmarks de la comunidad llenan las brechas de la documentación — Trata los números de una sola fuente como puntos de partida, no como garantías.