ArtificialGuyBR

Home / Blog / Training LoRAs

Configuración de entrenamiento LoRA: qué funciona y qué no

Qué configuraciones de LoRA realmente funcionan y cómo probarlas por tu cuenta.

6 sources cited Training LoRAs

Configuración de entrenamiento LoRA: qué funciona y qué no

TL;DR

  • Recorte manual frente a agrupación por relación de aspecto es una decisión de flujo de trabajo, no una técnica demostrada. Ambos existen en la herramienta; no hay comparación controlada.
  • Eliminar las imágenes de regularización generadas automáticamente ayudó a un usuario, pero ningún test A/B lo respalda. El mecanismo es plausible pero sigue siendo una observación única.
  • Repeticiones bajas con muchas épocas (5/50) frente a repeticiones altas con pocas épocas (10/20) es una compensación sin probar. La documentación no prescribe ninguna de las dos.
  • Rango 64 con alpha 32 coincide con la regla documentada alpha ≈ 0.5 × dim, pero no hay evidencia de que esta combinación supere a las alternativas.
  • "15–20 minutos en RTX 3080" no puede verificarse independientemente: depende del tamaño del conjunto de datos, el tamaño del lote y el checkpoint.

Configuraciones de entrenamiento LoRA que funcionan

Varios ajustes de la comunidad coinciden con la documentación oficial de Kohya_ss sd-scripts [1,2].

ConfiguraciónAfirmación de la comunidadPredeterminado/documentado / rangoVeredictoFuente
Learning rate0.0001 para U-Net y codificador de texto1e-4 es el punto de partida común (1e-4 a 1e-3)Confirmado [1]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md
Agendador de LRcosine con reanudacionescosine_with_restarts es una opción soportadaConfirmado [1]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md
Precisión mixtabf16 en RTX 30-seriesbf16 y fp16 son soportados; bf16 es preferido si el GPU lo soportaConfirmado [1]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md
Guardar cada N épocas1--save_every_n_epochs N está documentadoConfirmado [1]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md
MaxTrainEpochs vs. maxTrainStepsLas épocas tienen prioridadSi max_train_epochs está definido, anula a max_train_stepsConfirmado [1]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md
Alpha ≈ mitad de dimalpha 32 con rank 64"generalmente recomendado ponerlo en aproximadamente la mitad del valor de network_dim"Confirmado [1]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md
Rango de redRank 64 usado"Valores entre 4 y 128 se usan comúnmente"Confirmado [1]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md
SDXL rango de redN/A en la fuente32 o 64 se prueban con frecuencia para SDXLConfirmado [2]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network_advanced.md
SDXL learning rateN/A en la fuente1e-4 ~ 4e-5 U-Net, 1e-5 ~ 2e-5 codificadores de textoConfirmado [2]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network_advanced.md
Gradient checkpointingNo está en la fuente"reduce significativamente el uso de memoria pero disminuye ligeramente la velocidad"Confirmado [1]https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md

Nota terminológica: la fuente de la comunidad escribe "Koya_ss". El nombre correcto es Kohya_ss (kohya-ss/sd-scripts) [1] — es un error de escritura, no una herramienta diferente.

Afirmaciones de configuración que no se pueden verificar

Estas configuraciones específicas aparecen solo como recomendaciones personales sin corroboración independiente:

  • Rank 64 / alpha 32 con cosine_with_restarts y 12 ciclos LR — cada componente está documentado, pero ningún test controlado compara esto con alternativas como rank 32 con LR constante.
  • 5 repeticiones / 50 épocas vs. 10 repeticiones / 20 épocas — la autocorrección del autor ("Edit 7-19") es una observación única, no un hallazgo replicado.
  • "LoRA completa en 15–20 minutos en RTX 3080" — depende del tamaño del conjunto de datos (225 e 79 imágenes en la fuente), el tamaño del lote y el checkpoint. No existe un benchmark.

Trata estas opciones como puntos de partida para tu propio testing, no como recomendaciones basadas en evidencia.

La afirmación de imágenes de regularización

El hallazgo más llamativo: eliminar 2.500 imágenes de regularización generadas automáticamente mejoró la calidad del LoRA [7]. El autor reporta pasar de "resultados OK a malos" a "bastante buenos" después de desecharlas.

El mecanismo es plausible: las imágenes con subtítulos generadas automáticamente a partir del modelo fuente pueden crear un bucle de retroalimentación donde el LoRA reproduzca los sesgos del modelo fuente en lugar de aprender el concepto del conjunto de datos, un riesgo conocido del ajuste fino.

Pero esto fue sin controlar. El autor no comparó con/sin lado a lado, ni aisló las imágenes de regularización como única variable (la selección del conjunto de datos, el recorte y la edición de etiquetas cambiaron al mismo tiempo). Un test controlado entrenaría dos LoRAs con conjuntos de datos idénticos excepto por las imágenes de regularización, y luego evaluaría a ciega.

Recorte manual frente a agrupación por relación de aspecto

El autor abandonó la agrupación y recortó manualmente a 512×512 usando Inbac [3], citando el control sobre la composición y un entrenamiento más suave.

Kohya_ss soporta ambas opciones mediante enable_bucket en el TOML del conjunto de datos [1]. La agrupación agrupa por relación de aspecto para evitar la distorsión, crucial para imágenes no cuadradas. El recorte manual da control a nivel del marco, pero descarta la diversidad de relaciones de aspecto.

No existe una comparación controlada. Elige según tus datos: si las imágenes son casi cuadradas y curadas, el recorte manual funciona. Si las relaciones de aspecto varían, la agrupación evita recortes agresivos.

Etiquetado WD14 y edición de etiquetas

El flujo usa el etiquetador WD14 (en Automatic1111 y sd-scripts) para auto-subtítulos, y luego BooruDatasetTagManager [4,5] para editar. El autor elimina las etiquetas de color del ojo y del cabello porque el etiquetador "se equivoca mucho".

El propósito documentado de BooruDatasetTagManager es un editor de etiquetas para conjuntos de datos de hiperredes, embeddings y LoRA con edición por lotes y auto-etiquetado vía AiApiServer [4]. Soporta etiquetas ponderadas, traducción y autocompletado estilo booru [4].

No se probó si los errores de color del ojo/cabello de WD14 son comunes suficientes como para justificar su eliminación rutinaria. La práctica es una heurística razonable, pero puede descartar información semántica que Ayude a distinguir sujetos similares.

Cómo ejecutar tu propia comparación controlada

Aísla una variable a la vez:

  1. Elige un modelo base fijo. (sd-legacy/stable-diffusion-v1-5 en HuggingFace es ampliamente usado).
  2. Prepara dos conjuntos de datos idénticos. Misma imágenes, subtítulos, divisiones de entrenamiento/prueba. Solo difiere la variable probada.
  3. Registra cada ejecución. Guarda salidas por época, por prompt, semillas fijas. Kohya_ss soporta --save_state para esto.
  4. Evalúa a ciega. Una segunda persona (o tu mismo después de un retraso) clasifica las salidas sin saber qué configuración las produjo.
  5. Mide, no adivinas. Usa prompts de evaluación consistentes y compara lado a lado.

Todas las configuraciones mencionadas en la comunidad (network_dim, network_alpha, learning_rate, lr_scheduler, mixed_precision, save_every_n_epochs) son argumentos de línea de comandos de Kohya_ss [1], lo que hace los intercambios de una variable simples. consulta nuestra guía de entrenamiento LoRA Kohya_ss para una referencia completa de flags.

Errores comunes y soluciones

Error en publicaciones de la comunidadDice la documentaciónSoluciónFuente
"Koya_ss" en vez de Kohya_ssRepositorio es kohya-ss/sd-scripts [1]Clona kohya-ss/sd-scripts, no un fork con nombre similarhttps://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md
Esperar 20 épocas como "el número correcto"El autor dice que no usa 20 pero quería suficiente para encontrar el punto óptimo [7]Ejecuta más épocas, guarda cada una y evaluá cuál es el mejor checkpointhttps://civitai.com/articles/1161
Usar fp16 en RTX 30-series (Ampere)bf16 y fp16 son soportados; bf16 es preferido si el GPU lo soporta [1]Usa bf16 cuando esté disponible; fp16 es para hardware más antiguohttps://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md
Dejar las imágenes de regularización en el conjunto de datosEl autor encontró que degradaban los resultados [7]Prueba con y sin imágenes generadas automáticamente, evalúa a ciegahttps://civitai.com/articles/1161

FAQ

¿Cuál es el mejor rango de red para entrenar LoRA? No hay un mejor universal. Los rangos de 4 a 128 son comunes; la documentación predetermina 16 [1]. Los rangos más altos aumentan la expresividad, el tamaño del archivo y el cálculo. Un rango 64 sirve para conceptos complejos pero produce archivos más grandes.

¿Debería usar cosine_with_restarts o una tasa de aprendizaje constante? Ambas son válidas [1]. Cosine_with_restarts eleva periódicamente el LR (num_cycles controla las reanudaciones [2]), lo que puede ayudar a escapar de mínimos locales en ejecuciones largas. La constante es más simple y efectiva para muchos flujos de trabajo.

¿Cuántas repeticiones necesito? La fuente usó 10 repeticiones para 225 imágenes y 20 para 79, sugiriendo más tarde 5/50 como alternativa [7]. No hay evidencia que favorezca ninguna. La documentación no prescribe recuentos de repeticiones. Comienza con lo que entra en tu presupuesto, y evalúa la calidad de la salida en cuenta de los pasos.

¿Puedo usar SD v1.5 para entrenar LoRA y aplicar el LoRA a otros modelos? El autor reporta entrenar en sd-legacy/stable-diffusion-v1-5 y probar con Photon V1 y Reliberate V10 [7]. La transferibilidad cruzada de LoRA no está documentada en ninguna fuente verificada. Los resultados varían según la arquitectura objetivo y la compatibilidad del checkpoint base. Consulta nuestra guía de compatibilidad cruzada de LoRA para más.

¿Qué precisión mixta debo usar? Usa bf16 si tu GPU lo soporta (Ampere y nuevos); fp16 en hardware más antiguo [1]. bf16 reduce VRAM y puede mejorar la velocidad en GPUs soportadas. Vuelve a fp16 si bf16 es inestable.

¿Es mejor el recorte manual que la agrupación por relación de aspecto? Ninguno es sistemáticamente mejor [1]. La agrupación evita la distorsión en imágenes no cuadradas; el recorte manual da control a nivel del marco. Ambos son soportados.

¿Cómo sé cuál época es el punto óptimo? Guarda cada época (save_every_n_epochs=1), y luego evalúa distintas épocas. El autor recomienda comenzar en la época 10 y avanzar/receder [7].

¿Cuál es la diferencia entre network_dim y network_alpha? Network_dim es el rango de LoRA: la dimensionalidad de la matriz adaptadora. Network_alpha escala los pesos del LoRA durante el entrenamiento; la documentación recomienda ~la mitad de network_dim [1]. Un LoRA de rango 64 con alpha 32 entrena con la mitad de la tasa de aprendizaje efectiva que un rango 64 con alpha 64.

Fuentes

  • https://civitai.com/articles/1161 — Publicación comunitaria de entrenamiento LoRA por doublerig (jul 2023)
  • https://civitai.com/articles/1019 — Propuesta TecnoIA para laboratorios organizados de entrenamiento LoRA (jul 2023)
  • https://civitai.com/articles/11684 — Publicación No Need LoRA por Kisaku_KK77 (feb 2025)
  • https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network.md — Documentación oficial de entrenamiento LoRA Kohya_ss; confirma network_dim, network_alpha, learning_rate, lr_scheduler, mixed_precision
  • https://github.com/weclaw1/inbac — Inbac: recortador interactivo de imágenes por lotes; confirma pip install, selección de relación de aspecto, resize
  • https://github.com/starik222/BooruDatasetTagManager — BooruDatasetTagManager; confirma edición de etiquetas de conjunto de datos, auto-etiquetado, flujos de trabajo multiimagen
  • https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network_advanced.md — Documentación avanzada de Kohya_ss; confirma guía de rango de red SDXL y agendador de LR num_cycles
  • https://huggingface.co/sd-legacy/stable-diffusion-v1-5 — Tarjeta de modelo de HuggingFace para sd-legacy/stable-diffusion-v1-5; confirma checkpoint, datos de entrenamiento (595k pasos a 512×512 en la escala laion-aesthetics v2 5+), marcos compatibles
  • https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#wd14-tagger — Wiki de WebUI; confirma el etiquetador WD14 como característica de auto-etiquetado