Guía rápida de Stable Cascade Stage C¶
Esta guía explica cómo configurar SimpleTuner para ajustar el prior de Stable Cascade Stage C. Stage C aprende el prior texto‑a‑imagen que alimenta el stack de decodificadores Stage B/C, así que una buena higiene de entrenamiento aquí mejora directamente las salidas del decodificador downstream. Nos enfocaremos en entrenamiento LoRA, pero los mismos pasos aplican a ajustes finos completos si tienes VRAM de sobra.
Aviso: Stage C usa el codificador de texto CLIP‑G/14 de más de 1B parámetros y un autoencoder basado en EfficientNet. Asegúrate de tener torchvision instalado y espera cachés de text‑embed grandes (aprox. 5–6× más grandes por prompt que SDXL).
Requisitos de hardware¶
- Entrenamiento LoRA: 20–24 GB de VRAM (RTX 3090/4090, A6000, etc.)
- Entrenamiento de modelo completo: 48 GB+ de VRAM recomendado (A6000, A100, H100). Offload con DeepSpeed/FSDP2 puede bajar el requisito pero introduce complejidad.
- RAM del sistema: 32 GB recomendado para que el codificador de texto CLIP‑G y los hilos de caché no se queden sin recursos.
- Disco: Reserva al menos ~50 GB para archivos de caché de prompts. Los embeddings CLIP‑G de Stage C son ~4–6 MB cada uno.
Requisitos previos¶
- Python 3.13 (que coincide con el
.venvdel proyecto). - CUDA 12.1+ o ROCm 5.7+ para aceleración GPU (o Apple Metal para Macs M‑series, aunque Stage C se prueba principalmente en CUDA).
torchvision(requerido para el autoencoder de Stable Cascade) yacceleratepara lanzar entrenamiento.
Verifica tu versión de Python:
Instala paquetes faltantes (ejemplo Ubuntu):
Instalación¶
Sigue la instalación estándar de SimpleTuner (pip o fuente). Para una workstation CUDA típica:
python3.13 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install 'simpletuner[cuda]'
# CUDA 13 / Blackwell users (NVIDIA B-series GPUs)
pip install 'simpletuner[cuda13]' --extra-index-url https://download.pytorch.org/whl/cu130
Para contribuidores o quienes trabajen directamente en el repo, instala desde fuente y luego ejecuta pip install -e .[cuda,dev].
Configuración del entorno¶
1. Copia la config base¶
Configura las siguientes claves (los valores mostrados son una buena base para Stage C):
| Clave | Recomendación | Notas |
|---|---|---|
model_family |
"stable_cascade" |
Requerido para cargar componentes Stage C |
model_flavour |
"stage-c" (o "stage-c-lite") |
El flavour lite recorta parámetros si solo tienes ~18 GB de VRAM |
model_type |
"lora" |
El ajuste completo funciona pero requiere mucha más memoria |
mixed_precision |
"no" |
Stage C se rehúsa a correr en precisión mixta a menos que configures i_know_what_i_am_doing=true; fp32 es la opción segura |
gradient_checkpointing |
true |
Ahorra 3–4 GB de VRAM |
vae_batch_size |
1 |
El autoencoder de Stage C es pesado; mantenlo bajo |
validation_resolution |
"1024x1024" |
Coincide con las expectativas del decodificador downstream |
stable_cascade_use_decoder_for_validation |
true |
Asegura que la validación use el pipeline combinado prior+decoder |
stable_cascade_decoder_model_name_or_path |
"stabilityai/stable-cascade" |
Cambia a una ruta local si tienes un decodificador Stage B/C personalizado |
stable_cascade_validation_prior_num_inference_steps |
20 |
Pasos de denoising del prior |
stable_cascade_validation_prior_guidance_scale |
3.0–4.0 |
CFG en el prior |
stable_cascade_validation_decoder_guidance_scale |
0.0–0.5 |
CFG del decoder (0.0 es fotorrealista, >0.0 añade más adherencia al prompt) |
Ejemplo config/config.json¶
Ver ejemplo de config
{
"base_model_precision": "int8-torchao",
"checkpoint_step_interval": 100,
"data_backend_config": "config/stable_cascade/multidatabackend.json",
"gradient_accumulation_steps": 2,
"gradient_checkpointing": true,
"hub_model_id": "stable-cascade-stage-c-lora",
"learning_rate": 1e-4,
"lora_alpha": 16,
"lora_rank": 16,
"lora_type": "standard",
"lr_scheduler": "cosine",
"max_train_steps": 30000,
"mixed_precision": "no",
"model_family": "stable_cascade",
"model_flavour": "stage-c",
"model_type": "lora",
"optimizer": "adamw_bf16",
"output_dir": "output/stable_cascade_stage_c",
"report_to": "wandb",
"seed": 42,
"stable_cascade_decoder_model_name_or_path": "stabilityai/stable-cascade",
"stable_cascade_decoder_subfolder": "decoder_lite",
"stable_cascade_use_decoder_for_validation": true,
"stable_cascade_validation_decoder_guidance_scale": 0.0,
"stable_cascade_validation_prior_guidance_scale": 3.5,
"stable_cascade_validation_prior_num_inference_steps": 20,
"train_batch_size": 4,
"use_ema": true,
"vae_batch_size": 1,
"validation_guidance": 4.0,
"validation_negative_prompt": "ugly, blurry, low-res",
"validation_num_inference_steps": 30,
"validation_prompt": "a cinematic photo of a shiba inu astronaut",
"validation_resolution": "1024x1024"
}
Puntos clave:
model_flavouraceptastage-cystage-c-lite. Usa lite si te falta VRAM o prefieres el prior destilado.- Mantén
mixed_precisionen"no". Si lo cambias, configurai_know_what_i_am_doing=truey prepárate para NaNs. - Habilitar
stable_cascade_use_decoder_for_validationconecta la salida del prior con el decodificador Stage B/C para que la galería de validación muestre imágenes reales en lugar de latentes del prior.
2. Configura el data backend¶
Crea config/stable_cascade/multidatabackend.json:
Ver ejemplo de config
[
{
"id": "primary",
"type": "local",
"dataset_type": "images",
"instance_data_dir": "/data/stable-cascade",
"resolution": "1024x1024",
"bucket_resolutions": ["1024x1024", "896x1152", "1152x896"],
"crop": true,
"crop_style": "random",
"minimum_image_size": 768,
"maximum_image_size": 1536,
"target_downsample_size": 1024,
"caption_strategy": "filename",
"prepend_instance_prompt": false,
"repeats": 1
},
{
"id": "stable-cascade-text-cache",
"type": "local",
"dataset_type": "text_embeds",
"cache_dir": "/data/cache/stable-cascade/text",
"default": true
}
]
Consulta las opciones y requisitos de caption_strategy en DATALOADER.md.
Consejos:
- Los latentes de Stage C se derivan de un autoencoder, así que quédate en 1024×1024 (o un rango ajustado de buckets vertical/horizontal). El decodificador espera grillas latentes de ~24×24 desde una entrada de 1024px.
- Mantén
target_downsample_sizeen 1024 para que los recortes estrechos no exploten las relaciones de aspecto más allá de ~2:1. - Siempre configura un caché dedicado de text‑embeds. Sin él, cada ejecución gastará 30–60 minutos re‑embedding captions con CLIP‑G.
3. Biblioteca de prompts (opcional)¶
Crea config/stable_cascade/prompt_library.json:
Ver ejemplo de config
{
"portrait": "a cinematic portrait photograph lit by studio strobes",
"landscape": "a sweeping ultra wide landscape with volumetric lighting",
"product": "a product render on a seamless background, dramatic reflections",
"stylized": "digital illustration in the style of a retro sci-fi book cover"
}
Habilítala en tu config agregando "validation_prompt_library": "config/stable_cascade/prompt_library.json".
Entrenamiento¶
- Activa tu entorno y lanza la configuración de Accelerate si aún no lo has hecho:
- Inicia el entrenamiento:
accelerate launch simpletuner/train.py \
--config_file config/config.json \
--data_backend_config config/stable_cascade/multidatabackend.json
Durante la primera época, monitorea:
- Throughput del caché de texto – Stage C registrará el progreso del caché. Espera ~8–12 prompts/seg en GPUs de gama alta.
- Uso de VRAM – Apunta a <95% de utilización para evitar OOM cuando corran las validaciones.
- Salidas de validación – El pipeline combinado debería emitir PNGs a resolución completa en
output/<run>/validation/.
Notas de validación e inferencia¶
- El prior de Stage C por sí solo solo produce embeddings de imagen. El wrapper de validación de SimpleTuner los pasa automáticamente por el decodificador cuando
stable_cascade_use_decoder_for_validation=true. - Para cambiar el flavour del decodificador, configura
stable_cascade_decoder_subfolderen"decoder","decoder_lite", o una carpeta personalizada que contenga los pesos de Stage B o Stage C. - Para previews más rápidos, baja
stable_cascade_validation_prior_num_inference_stepsa ~12 yvalidation_num_inference_stepsa 20. Una vez satisfecho, súbelos para mayor calidad.
Funciones experimentales avanzadas¶
Mostrar detalles experimentales avanzados
SimpleTuner incluye funciones experimentales que pueden mejorar significativamente la estabilidad y el rendimiento del entrenamiento. * **[Scheduled Sampling (Rollout)](../experimental/SCHEDULED_SAMPLING.md):** reduce el sesgo de exposición y mejora la calidad de la salida al permitir que el modelo genere sus propias entradas durante el entrenamiento. * **[Diff2Flow](../experimental/DIFF2FLOW.md):** permite entrenar Stable Cascade con un objetivo Flow Matching. > ⚠️ Estas funciones aumentan la sobrecarga computacional del entrenamiento.Solución de problemas¶
| Síntoma | Arreglo |
|---|---|
| "Stable Cascade Stage C requires --mixed_precision=no" | Configura "mixed_precision": "no" o agrega "i_know_what_i_am_doing": true (no recomendado) |
| La validación solo muestra priors (ruido verde) | Asegúrate de que stable_cascade_use_decoder_for_validation sea true y que los pesos del decodificador estén descargados |
| El caché de text embeds tarda horas | Usa SSD/NVMe para el directorio de caché y evita montajes de red. Considera podar prompts o pre‑computar con el CLI simpletuner-text-cache |
| Error al importar autoencoder | Instala torchvision dentro de tu .venv (pip install torchvision --extra-index-url https://download.pytorch.org/whl/cu124). Stage C necesita pesos de EfficientNet |
Próximos pasos¶
- Experimenta con
lora_rank(8–32) ylearning_rate(5e-5 a 2e-4) según la complejidad del sujeto. - Conecta ControlNet/adaptadores de condicionamiento a Stage B después de entrenar el prior.
- Si necesitas iterar más rápido, entrena el flavour
stage-c-litey mantén los pesosdecoder_litepara validación.
¡Buen ajuste!