Guía rápida de zlab i1¶
Esta guía cubre el entrenamiento de LoRA para zlab-princeton i1. i1 es un transformer flow-matching de 3B publicado con receta JAX/TPU y pesos de inferencia PyTorch. SimpleTuner lo entrena con una integración PyTorch nativa y usa una conversión Diffusers safetensors en bghira/zlab-i1-diffusers.
i1 usa el VAE de FLUX.2, un text encoder T5Gemma, latentes de 32 canales y una caption nula aprendida para CFG.
Requisitos de hardware¶
Para entrenamiento LoRA a 1024px, empieza con:
- una GPU moderna de 24G con cuantización int8 para LoRAs pequeñas
- 40G+ para trabajar con más margen
- multi-GPU si subes rank, dataset o reduces cuantización
Los ejemplos usan int8-quanto, bf16, gradient_checkpointing=true y train_batch_size=1. CUDA es la ruta esperada; Apple GPU no es recomendable.
Ejemplos incluidos¶
simpletuner train example=zlab_i1/3b/default/peft-lora
simpletuner train example=zlab_i1/3b/default/lycoris-lokr
Empieza con PEFT LoRA. Usa LyCORIS LoKr cuando quieras esa factorización en lugar de un LoRA estándar.
Ajustes clave¶
{
"model_type": "lora",
"model_family": "zlab_i1",
"model_flavour": "3b",
"pretrained_vae_model_name_or_path": "black-forest-labs/FLUX.2-dev",
"validation_resolution": "1024x1024",
"validation_guidance": 12.0,
"validation_guidance_rescale": 0.7,
"validation_num_inference_steps": 250
}
El flavour 3b resuelve a bghira/zlab-i1-diffusers, con el transformer en el subfolder Diffusers estándar transformer/ y pesos safetensors. Solo define pretrained_transformer_model_name_or_path si pruebas una conversión propia.
Validación¶
La validación funciona con el pipeline nativo de i1. Para una prueba rápida:
simpletuner train example=zlab_i1/3b/default/peft-lora validation_num_inference_steps=4 num_eval_images=1
Cuatro pasos solo comprueban que el pipeline genera y guarda imágenes. Usa 250 pasos antes de evaluar calidad.
Funciones avanzadas¶
i1 usa las rutas comunes de transformers de SimpleTuner:
- TwinFlow funciona en modo flow-matching nativo. El timestep de i1 se ignora como en upstream, así que TwinFlow modifica la trayectoria latente ruidosa y el objetivo, no añade un embedding temporal nuevo.
- CREPA Self-Flow y LayerSync usan el buffer de hidden states de tokens de imagen. Configura los índices de bloque contra las 29 capas transformer de i1.
- TREAD enruta solo tokens de imagen. Los tokens de texto permanecen intactos para conservar la semántica de la máscara de T5Gemma.
- La validación acepta CFG Zero*, salto de CFG con
validation_no_cfg_until_timestepy skip-layer guidance convalidation_guidance_skip_layers. - RamTorch, Musubi block swap y VAE tiling están soportados. Mantén RamTorch y Musubi como opciones mutuamente excluyentes.
Dataset¶
i1 necesita cachés VAE propias porque espera latentes de 32 canales del VAE de FLUX.2. No reutilices cachés de SDXL, Flux.1, PixArt u otras familias.
[
{
"id": "my-i1-dataset",
"type": "local",
"instance_data_dir": "/datasets/my-subject",
"caption_strategy": "textfile",
"resolution": 1024,
"resolution_type": "pixel_area",
"cache_dir_vae": "cache/vae/zlab_i1/my-i1-dataset"
}
]
Empieza sin cambiar el ejemplo PEFT, verifica benchmark base, pérdidas finitas, imagen de validación y pytorch_lora_weights.safetensors; luego cambia dataset y prompts.