ArtificialGuyBR

Home / Blog / AI video

PYTORCH_CUDA_ALLOC_CONF e Otimização de VRAM

Corriga CUDA OOM com PYTORCH_CUDA_ALLOC_CONF, otimize treinamento FLUX com blocks_to_swap e rode Wan2.1 e HunyuanVideo em GPUs de 12 GB.

10 sources cited AI video

TL;DR

  • Adicione PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512 ao webui-user.bat para eliminar a maioria dos erros CUDA OOM.
  • Treine LoRAs FLUX em GPUs de 8–12 GB com --blocks_to_swap 35 --fp8_base e checkpoints T5XXL fp8; espere ~4 GB em 512², ~6 GB em 768², ~7,5 GB em 1024².
  • Rode Wan2.1-T2V-1.3B (8,19 GB) e HunyuanVideo FP8 (13 B parâmetros) em placas de 12 GB; habilite ComfyUI --enable-dynamic-vram para offloading automático.

PYTORCH_CUDA_ALLOC_CONF e Otimização de VRAM para FLUX, Wan2.1 e HunyuanVideo

A variável de ambiente PYTORCH_CUDA_ALLOC_CONF controla o alocador CUDA do PyTorch através de garbage_collection_threshold e max_split_size_mb. Guias da comunidade para Stable Diffusion WebUI recomendam garbage_collection_threshold:0.9,max_split_size_mb:512, mas esta variável não aparece na documentação oficial de semântica CUDA do PyTorch (fonte). Trate isso como um workaround validado pela comunidade, não uma API suportada.

Modelos modernos de difusão e vídeo expõem alavancas específicas: troca de blocos para FLUX, quantização FP8 para Wan2.1 e HunyuanVideo, e modos de VRAM dinâmica no ComfyUI. Este artigo consolida números, flags e mecanismos verificados para que você possa combinar um modelo à sua GPU sem crashes de OOM por tentativa e erro.


Perguntas Frequentes

Questão | Resposta Rápida

|---|---

Quanta VRAM o FLUX.1 precisa para treinamento? | ~4 GB em 512², ~6 GB em 768², ~7,5 GB em 1024² (medições RTX 3060 12 GB, Civitai #9487) O que PYTORCH_CUDA_ALLOC_CONF realmente faz? | Configura o alocador CUDA do PyTorch: garbage_collection_threshold dispara varreduras do pool, max_split_size_mb limita o tamanho do bloco de alocação O ComfyUI suporta VRAM dinâmica? | Sim—--enable-dynamic-vram liga, --disable-dynamic-vram desliga; fallbacks: highvram, gpu_only, novram, cpu (cli_args.py) O Wan2.1 roda em RTX 3060 12 GB? | Sim—o modelo T2V-1.3B precisa de 8,19 GB VRAM segundo seu model card (Wan2.1 model card) O que blocks_to_swap faz no treinamento FLUX? | Move blocos do transformer entre RAM da CPU e VRAM da GPU; até 35 blocos trocáveis, trocando VRAM por tempo de iteração (Kohya docs)


Requisitos de VRAM por Modelo

Modelo | Tarefa | VRAM Necessária | Otimização Principal | Fonte

|---|---|---|---|---

FLUX.1-dev | Treino 512×512 | ~4 GB | --blocks_to_swap | Kohya sd-scripts FLUX.1-dev | Treino 768×768 | ~6 GB | --fp8_base | Kohya sd-scripts FLUX.1-dev | Treino 1024×1024 | ~7,5 GB | --fp8_base + T5XXL fp8 | Kohya sd-scripts Wan2.1-T2V-1.3B | Inferência | 8,19 GB | Compressão latente Wan-VAE | Hugging Face HunyuanVideo | Inferência (FP8) | 13 B+ params → ~6,5 GB pesos | run_sample_video_fp8.sh | Tencent/HunyuanVideo

Nota: Os números do FLUX vêm de um único benchmark comunitário em RTX 3060 12 GB (Civitai #9487). São amplamente citados, mas não reproduzidos independentemente. Mantenha ≥0,5 GB de folga acima dos valores listados.

Mecanismos Técnicos

Por que blocks_to_swap Reduz VRAM no Treinamento FLUX

--blocks_to_swap descarrega blocos do transformer da VRAM da GPU para a RAM do sistema. Cada bloco trocado economiza VRAM proporcional ao tamanho de suas ativações, mas adiciona latência de transferência CPU↔GPU. FLUX.1 expõe até 35 blocos trocáveis; a documentação Kohya afirma: "Números maiores economizam mais VRAM mas reduzem a velocidade de treino" (flux_train_network.md).

Por que Wan-VAE Corta VRAM de Vídeo

Wan-VAE usa uma convolução 3D causal (CausalConv3D) para comprimir vídeo no espaço de pixels em uma grade latente com razões 4× (temporal) / 8× (espacial) / 16× (canal). Isso permite geração 1080p de duração ilimitada sem escalar VRAM linearmente com a duração do clipe (Wan2.1 model card).

Por que FP8 Reduz à Metade a Memória de Pesos do HunyuanVideo

FP8 (E4M3FN) armazena cada parâmetro em 8 bits em vez de 16. Os 13 B+ parâmetros do HunyuanVideo caem de ~26 GB para ~13 GB de memória de pesos. O repo inclui run_sample_video_fp8.sh e fp8_optimization.py para inferência FP8 em um comando (Tencent/HunyuanVideo).

Por que PYTORCH_CUDA_ALLOC_CONF Afeta OOM

O alocador CUDA do PyTorch mantém blocos liberados em cache. garbage_collection_threshold define a fração de memória reservada que dispara uma varredura do cache; max_split_size_mb limita o tamanho de uma única alocação antes que o alocador a divida. A receita comunitária 0.9 / 512 mantém o cache enxuto e previne alocações monolíticas grandes que fragmentam a VRAM. Não documentado nas notas oficiais de CUDA do PyTorch (fonte).


Erros comuns e correções

Sintoma | Causa (verificada) | Correção

|---|---|---

CUDA OOM durante treino Stable Diffusion WebUI | Alocador CUDA do PyTorch retém blocos liberados | Adicione set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512 ao webui-user.bat (dica comunitária, Civitai #194) VRAM não liberada após geração WebUI | GC do Python não devolve VRAM ao driver imediatamente | Clique Unload SD checkpoint to free VRAM em Settings → Actions (Civitai #194) OOM durante treino FLUX em resolução/batch maiores | VRAM do modelo base + ativações excedem capacidade da GPU | Reduza resolução, adicione --blocks_to_swap N, habilite --fp8_base, use checkpoints T5XXL fp8 em GPUs <10 GB (Kohya docs)


Flags de VRAM Dinâmica do ComfyUI

Flag | Efeito

|---|---

--enable-dynamic-vram | Habilita offloading automático do modelo para CPU quando a pressão de VRAM sobe --disable-dynamic-vram | Desabilita o acima --highvram | Mantém tudo na VRAM (mais rápido, maior VRAM) --gpu_only | Sem offload CPU, sem fatiamento de modelo --novram | Offload agressivo; VRAM mínima, mais lento --cpu | Roda inteiramente na CPU Fonte: comfy/cli_args.py no repo ComfyUI (GitHub).


Treinamento FLUX: Combinações Práticas de Flags

VRAM da GPU | Resolução | Flags Recomendadas

|---|---|---

8 GB | 512² | --blocks_to_swap 35 --fp8_base + T5XXL fp8 10–12 GB | 768² | --blocks_to_swap 20-25 --fp8_base 12–16 GB | 1024² | --blocks_to_swap 10-15 --fp8_base 24 GB+ | 1024² | --fp8_base (swap opcional) Baixe T5XXL fp8: t5xxl_fp8_e4m3fn.safetensors de comfyanonymous/flux_text_encoders (Hugging Face).


Lacunas e Claims Não Verificados

  1. PYTORCH_CUDA_ALLOC_CONF na documentação oficial — Não encontrado na página de notas CUDA do PyTorch; pode existir apenas no código-fonte ou docs Docker.
  2. VRAM FLUX 768² / 1024² — Benchmark comunitário de fonte única; nenhuma replicação independente encontrada.
  3. Precisão do plugin VRAM Estimator — Não validado independentemente.
  4. VRAM HunyuanVideo single-GPU — README cobre multi-GPU e FP8, mas não baseline single-GPU.
  5. Tamanho exato do arquivo FLUX.1-dev — Model card confirma safetensors com gate; contagem de bytes não fonteada.
  6. Detalhes de benchmark SageAttention — README alega 2–5× speedup com paridade de acurácia; tabelas completas não lidas.

FAQ

Quanta VRAM o FLUX.1-dev precisa para inferência? VRAM de inferência é menor que treino. Relatos comunitários ~10–12 GB para fp16/bf16 em 1024² com ComfyUI dynamic VRAM desligado; quantizações GGUF de city96/FLUX.1-dev-gguf reduzem para 6–8 GB (Hugging Face).

O que é PYTORCH_CUDA_ALLOC_CONF e como configurar? Variável de ambiente lida pelo alocador CUDA do PyTorch na inicialização do processo. No Windows: defina PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512 no webui-user.bat. No Linux/macOS: exporte PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512 no seu shell rc ou script de inicialização.

O ComfyUI suporta alocação dinâmica de VRAM? Sim. Inicie com --enable-dynamic-vram para permitir offloading automático do modelo quando VRAM estiver apertada. Flags complementares (--highvram, --gpu_only, --novram, --cpu) selecionam estratégias estáticas (ComfyUI cli_args.py).

O Wan2.1 roda em RTX 3060 12 GB? Sim. O modelo T2V-1.3B requer 8,19 GB VRAM segundo seu model card, deixando folga em placa de 12 GB (Wan2.1 model card).

O que blocks_to_swap faz no treino LoRA FLUX? Move até 35 blocos do transformer entre RAM da CPU e VRAM da GPU por iteração. Mais blocos trocados = menor pico de VRAM, maior tempo de passo. Comece em 35 para placas de 8 GB, reduza conforme VRAM permitir (Kohya flux_train_network.md).

Onde consigo checkpoints T5XXL fp8 para treino FLUX low-VRAM? comfyanonymous/flux_text_encoders hospeda t5xxl_fp8_e4m3fn.safetensors. Carregue via nó DualClipLoader do ComfyUI (Hugging Face).

Como SageAttention compara com FlashAttention? O kernel de atenção quantizado do SageAttention alega 2–5× speedup sobre FlashAttention com sem perda de métrica end-to-end em modelos de linguagem, imagem e vídeo (SageAttention GitHub). Integração requer nó customizado ou backend de atenção patchado.


Principais Conclusões

  1. Config de alocador funciona mas não é documentada — PYTORCH_CUDA_ALLOC_CONF é fix padrão comunitário para OOM sem referência oficial do PyTorch.
  2. Treino FLUX cabe em 8–12 GB — Combine --blocks_to_swap, --fp8_base e T5XXL fp8 para atingir ~4 GB em 512².
  3. Modelos de vídeo são VRAM-eficientes por design — Compressão 4/8/16 do Wan-VAE e pesos FP8 do HunyuanVideo miram GPUs consumer.
  4. VRAM dinâmica do ComfyUI é feature de primeira classe — Alterne via CLI; sem mudanças de código necessárias.
  5. Benchmarks comunitários preenchem lacunas de documentação — Trate números de fonte única como pontos de partida, não garantias.