Inicio rápido de Stable Diffusion XL¶
En este ejemplo, entrenaremos un modelo Stable Diffusion XL usando el toolkit SimpleTuner y usaremos el tipo de modelo lora.
Comparado con modelos modernos y más grandes, SDXL es bastante modesto en tamaño, así que puede ser posible usar entrenamiento full, pero eso requerirá más VRAM que el entrenamiento LoRA y otros ajustes de hiperparámetros.
Requisitos previos¶
Asegúrate de tener Python instalado; SimpleTuner funciona bien con 3.10 a 3.12 (máquinas AMD ROCm requieren 3.12).
Puedes comprobarlo ejecutando:
Si no tienes Python 3.12 instalado en Ubuntu, puedes intentar lo siguiente:
Dependencias de imagen de contenedor¶
Para Vast, RunPod y TensorDock (entre otros), lo siguiente funcionará en una imagen CUDA 12.2-12.8 para permitir compilar extensiones CUDA:
Instalación¶
Instala SimpleTuner vía 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 instalación manual o setup de desarrollo, consulta la documentación de instalación.
Configuración del entorno¶
Para ejecutar SimpleTuner, necesitarás configurar un archivo de configuración, los directorios de dataset y modelo, y un archivo de configuración del dataloader.
Archivo de configuración¶
Un script experimental, configure.py, puede permitirte omitir por completo esta sección mediante una configuración interactiva paso a paso. Incluye funciones de seguridad que ayudan a evitar errores comunes.
Nota: Esto no configura completamente tu dataloader. Todavía tendrás que hacerlo manualmente más adelante.
Para ejecutarlo:
⚠️ Para usuarios ubicados en países donde Hugging Face Hub no es fácilmente accesible, debes añadir
HF_ENDPOINT=https://hf-mirror.coma tu~/.bashrco~/.zshrcdependiendo de qué$SHELLuse tu sistema.
Si prefieres configurar manualmente:
Copia config/config.json.example a config/config.json:
Pasos adicionales para AMD ROCm¶
Lo siguiente debe ejecutarse para que un AMD MI300X sea utilizable:
apt install amd-smi-lib
pushd /opt/rocm/share/amd_smi
python3 -m pip install --upgrade pip
python3 -m pip install .
popd
Ahí, necesitarás modificar las siguientes variables:
Ver ejemplo de config
model_family- Configura esto ensdxl.model_flavour- Configura esto enbase-1.0, o usapretrained_model_name_or_pathpara apuntar a un modelo diferente.model_type- Configura esto enlora.use_dora- Configura esto entruesi quieres entrenar DoRA.output_dir- Configura esto al directorio donde quieras guardar tus checkpoints e imágenes de validación. Se recomienda usar una ruta completa.validation_resolution- Configura esto en1024x1024para este ejemplo.- Además, Stable Diffusion XL fue afinado con buckets multi-aspect, y se pueden especificar otras resoluciones separándolas con comas:
1024x1024,1280x768 validation_guidance- Usa el valor con el que estés cómodo para pruebas en inferencia. Configura entre4.2y6.4.sdxl_validation_pipeline_mode- Manténtrained-stagepara la validación normal. Usafull-pipelinepara validar con la división SDXL base/refiner: stage 1 corre hasta1 - refiner_training_strengthcon salida latente y stage 2 continúa desde el mismo límite.- Al entrenar solo un stage,
sdxl_validation_stage1_modelysdxl_validation_stage2_modelpueden sobrescribir el checkpoint fijo base/refiner usado como peer stage. use_gradient_checkpointing- Probablemente esto debería sertruea menos que tengas MUCHÍSIMA VRAM y quieras sacrificar algo para hacerlo más rápido.learning_rate-1e-4es bastante común para redes de bajo rango, aunque1e-5puede ser una opción más conservadora si notas "burning" o sobreentrenamiento temprano.
Hay algunas más si usas una máquina Mac M-series:
mixed_precisiondebería configurarse enno.- Esto solía ser cierto en pytorch 2.4, pero quizá bf16 pueda usarse ahora a partir de 2.6+
attention_mechanismpodría configurarse enxformerspara aprovecharlo, pero está algo obsoleto.
Entrenamiento de modelos cuantizados¶
Probado en sistemas Apple y NVIDIA, Hugging Face Optimum-Quanto puede usarse para reducir la precisión y los requisitos de VRAM del Unet, pero no funciona tan bien como en modelos Diffusion Transformer como SD3/Flux, por lo que no se recomienda.
Si estás con restricciones de recursos, aún puedes usarlo.
Para config.json:
Ver ejemplo de config
Funciones experimentales avanzadas¶
Mostrar detalles experimentales avanzados
SimpleTuner incluye funciones experimentales que pueden mejorar significativamente la estabilidad y el rendimiento del entrenamiento, particularmente para datasets pequeños o arquitecturas antiguas como SDXL. * **[Scheduled Sampling (Rollout)](../experimental/SCHEDULED_SAMPLING.md):** reduce el sesgo de exposición y mejora la calidad de salida dejando que el modelo genere sus propias entradas durante el entrenamiento. * **[Diff2Flow](../experimental/DIFF2FLOW.md):** permite entrenar SDXL con un objetivo Flow Matching, potencialmente mejorando la rectitud y la calidad de generación. > ⚠️ Estas funciones aumentan la sobrecarga computacional del entrenamiento.Consideraciones de dataset¶
Es crucial contar con un dataset sustancial para entrenar tu modelo. Hay limitaciones en el tamaño del dataset y debes asegurarte de que sea lo suficientemente grande para entrenar el modelo de manera efectiva. Ten en cuenta que el tamaño mínimo del dataset es TRAIN_BATCH_SIZE * GRADIENT_ACCUMULATION_STEPS. El dataset no será detectable por el trainer si es demasiado pequeño.
💡 Consejo: Para datasets grandes donde el espacio en disco es una preocupación, puedes usar
--vae_cache_disablepara realizar la codificación VAE en línea sin cachear los resultados a disco. Esto se habilita implícitamente si usas--vae_cache_ondemand, pero añadir--vae_cache_disableasegura que no se escriba nada a disco.
Dependiendo del dataset que tengas, necesitarás configurar el directorio de dataset y el archivo de configuración del dataloader de forma diferente. En este ejemplo, usaremos pseudo-camera-10k como dataset.
En tu directorio OUTPUT_DIR, crea un multidatabackend.json:
Ver ejemplo de config
[
{
"id": "pseudo-camera-10k-sdxl",
"type": "local",
"crop": true,
"crop_aspect": "square",
"crop_style": "random",
"resolution": 1.0,
"minimum_image_size": 0.25,
"maximum_image_size": 1.0,
"target_downsample_size": 1.0,
"resolution_type": "area",
"cache_dir_vae": "cache/vae/sdxl/pseudo-camera-10k",
"instance_data_dir": "/home/user/simpletuner/datasets/pseudo-camera-10k",
"disabled": false,
"skip_file_discovery": "",
"caption_strategy": "filename",
"metadata_backend": "discovery"
},
{
"id": "text-embeds",
"type": "local",
"dataset_type": "text_embeds",
"default": true,
"cache_dir": "cache/text/sdxl/pseudo-camera-10k",
"disabled": false,
"write_batch_size": 128
}
]
Consulta las opciones y requisitos de caption_strategy en DATALOADER.md.
Luego, crea un directorio datasets:
mkdir -p datasets
huggingface-cli download --repo-type=dataset bghira/pseudo-camera-10k --local-dir=datasets/pseudo-camera-10k
Esto descargará alrededor de 10k muestras de fotografías a tu directorio datasets/pseudo-camera-10k, que se creará automáticamente.
Inicia sesión en WandB y Huggingface Hub¶
Querrás iniciar sesión en WandB y en HF Hub antes de comenzar el entrenamiento, especialmente si estás usando push_to_hub: true y --report_to=wandb.
Si vas a subir elementos manualmente a un repositorio Git LFS, también deberías ejecutar git config --global credential.helper store
Ejecuta los siguientes comandos:
y
Sigue las instrucciones para iniciar sesión en ambos servicios.
Ejecutar el entrenamiento¶
Desde el directorio SimpleTuner, solo tienes que ejecutar:
Esto iniciará el caché en disco de los embeddings de texto y las salidas VAE.
Para más información, consulta los documentos dataloader y tutorial.
Seguimiento de puntuación CLIP¶
Si deseas habilitar evaluaciones para puntuar el rendimiento del modelo, consulta este documento para información sobre cómo configurar e interpretar las puntuaciones CLIP.
Pérdida de evaluación estable¶
Si deseas usar pérdida MSE estable para puntuar el rendimiento del modelo, consulta este documento para información sobre cómo configurar e interpretar la pérdida de evaluación.
Vistas previas de validación¶
SimpleTuner soporta streaming de vistas previas intermedias de validación durante la generación usando modelos Tiny AutoEncoder. Esto te permite ver imágenes de validación generándose paso a paso en tiempo real vía callbacks de webhook.
Para habilitarlo:
Requisitos: - Configuración de webhook - Validación habilitada
Configura validation_preview_steps a un valor más alto (p. ej., 3 o 5) para reducir el overhead del Tiny AutoEncoder. Con validation_num_inference_steps=20 y validation_preview_steps=5, recibirás vistas previas en los pasos 5, 10, 15 y 20.