🔍 LoRA Analyzer
Herramienta completa para analizar archivos LoRA (Low-Rank Adaptation) y descubrir cómo fueron entrenados.
🌟 Características
- ✅ Análisis completo de arquitectura LoRA (rank, alpha, capas)
- ✅ Extracción de metadatos de entrenamiento
- ✅ Estadísticas de pesos y distribuciones
- ✅ Comparación de múltiples LoRAs
- ✅ Recomendaciones para optimización
- ✅ 3 interfaces diferentes: CLI, Web App y API REST
📁 Formatos Soportados
.safetensors(recomendado).pt/.pth(PyTorch).ckpt(Checkpoints)
🚀 Instalación Rápida
# Clonar o descargar los archivos
cd lora-analyzer
# Instalar dependencias
pip install -r requirements.txt
# ¡Listo para usar!
Instalación opcional de PyTorch
Si no tienes PyTorch instalado, usa:
# CPU only
pip install torch --index-url https://download.pytorch.org/whl/cpu
# CUDA (GPU)
pip install torch --index-url https://download.pytorch.org/whl/cu118
💻 Uso
1️⃣ CLI (Línea de Comandos)
La forma más rápida para análisis desde terminal:
# Analizar un archivo
python lora_cli.py mi_lora.safetensors
# Analizar múltiples archivos
python lora_cli.py lora1.safetensors lora2.pt lora3.ckpt
# Guardar resultado en JSON
python lora_cli.py mi_lora.safetensors --output resultado.json
# Comparar múltiples LoRAs
python lora_cli.py lora1.safetensors lora2.safetensors --compare
# Modo verbose
python lora_cli.py mi_lora.safetensors --verbose
# Ver ayuda
python lora_cli.py --help
Ejemplo de salida:
🔍 Analizando: my_style_lora.safetensors
======================================================================
REPORTE DE ANÁLISIS LORA
======================================================================
📁 INFORMACIÓN DEL ARCHIVO:
Nombre: my_style_lora.safetensors
Tamaño: 144.2 MB
Formato: .safetensors
🏗️ ARQUITECTURA:
Total de capas: 192
Rank más común: 32
Rango de ranks: 32 - 32
⚙️ METADATOS DE ENTRENAMIENTO:
Modelo base: sd_xl_base_1.0.safetensors
Network dim (rank): 32
Alpha: 32
Learning rate: 0.0001
Épocas: 10
Imágenes de entrenamiento: 45
Batch size: 1
Resolución: 1024
💡 RECOMENDACIONES:
1. Rank óptimo (32): Buen balance entre detalle y eficiencia.
2. Dataset mediano (45 imágenes): Bueno para conceptos específicos.
2️⃣ Web App (Interfaz Gráfica)
Interfaz visual con Gradio - ideal para uso interactivo:
# Iniciar la aplicación web
python lora_webapp.py
Luego abre tu navegador en: http://localhost:7860
Funcionalidades:
- 📤 Arrastrar y soltar archivos
- 📊 Vista de análisis con resumen visual
- 📈 Datos JSON completos
- ⚖️ Comparación lado a lado
- 💾 Exportar resultados
3️⃣ API REST
Servidor FastAPI para integración programática:
# Iniciar el servidor API
python lora_api.py
El servidor estará disponible en: http://localhost:8000
Documentación interactiva: http://localhost:8000/docs
Endpoints disponibles:
POST /analyze - Analizar un archivo
curl -X POST "http://localhost:8000/analyze" \
-H "Content-Type: multipart/form-data" \
-F "file=@mi_lora.safetensors"
import requests
with open('mi_lora.safetensors', 'rb') as f:
response = requests.post(
'http://localhost:8000/analyze',
files={'file': f}
)
result = response.json()
print(result)
POST /analyze/batch - Analizar múltiples archivos
import requests
files = [
('files', open('lora1.safetensors', 'rb')),
('files', open('lora2.safetensors', 'rb'))
]
response = requests.post(
'http://localhost:8000/analyze/batch',
files=files
)
print(response.json())
POST /compare - Comparar archivos
curl -X POST "http://localhost:8000/compare" \
-F "files=@lora1.safetensors" \
-F "files=@lora2.safetensors"
GET /health - Estado del servicio
curl http://localhost:8000/health
GET /examples - Ver más ejemplos
curl http://localhost:8000/examples
📊 Información que Puedes Extraer
✅ Lo que SÍ puedes obtener:
-
Arquitectura completa
- Dimensión de rank (8, 16, 32, 64, 128, etc.)
- Factor alpha de escalado
- Capas modificadas (attention blocks, MLP, etc.)
- Total de parámetros
-
Metadatos de entrenamiento (si están incluidos)
- Modelo base utilizado (SD 1.5, SDXL, etc.)
- Learning rate
- Número de epochs
- Batch size
- Resolución de entrenamiento
- Número de imágenes de entrenamiento
- Herramienta usada (Kohya, EveryDream, etc.)
-
Estadísticas de pesos
- Distribución de valores
- Media y desviación estándar
- Intensidad por capa
❌ Lo que NO puedes recuperar:
- Los datos de entrenamiento originales - Técnicamente imposible
- Imágenes específicas del dataset - No están almacenadas en el LoRA
- Prompts exactos usados - Solo si están en metadatos
🎯 Casos de Uso
1. Ingeniería Inversa
# Analiza un LoRA público para aprender de él
python lora_cli.py awesome_public_lora.safetensors
# Compara con tu propio LoRA
python lora_cli.py awesome_public_lora.safetensors my_lora.safetensors --compare
2. Optimización de tus LoRAs
# Analiza diferentes versiones para encontrar la mejor configuración
python lora_cli.py lora_v1_rank16.safetensors lora_v2_rank32.safetensors \
lora_v3_rank64.safetensors --compare
3. Debugging
# Verifica que tu LoRA se entrenó correctamente
python lora_cli.py my_new_lora.safetensors --verbose
4. Investigación
# Analiza múltiples LoRAs programáticamente
import requests
import os
for filename in os.listdir('loras/'):
if filename.endswith('.safetensors'):
with open(f'loras/{filename}', 'rb') as f:
response = requests.post(
'http://localhost:8000/analyze',
files={'file': f}
)
result = response.json()
# Procesar resultados...
🔧 Uso Programático
Como módulo Python
from lora_analyzer import LoRAAnalyzer, format_analysis_report
# Analizar un archivo
analyzer = LoRAAnalyzer('mi_lora.safetensors')
analysis = analyzer.analyze()
# Ver reporte formateado
print(format_analysis_report(analysis))
# Acceder a datos específicos
rank = analysis['architecture']['rank_info']['most_common_rank']
print(f"Rank detectado: {rank}")
# Extraer metadatos
metadata = analysis['metadata']
learning_rate = metadata.get('ss_learning_rate', 'N/A')
print(f"Learning rate: {learning_rate}")
📦 Estructura del Proyecto
lora-analyzer/
├── lora_analyzer.py # Módulo core de análisis
├── lora_cli.py # Aplicación CLI
├── lora_webapp.py # Aplicación Web (Gradio)
├── lora_api.py # API REST (FastAPI)
├── requirements.txt # Dependencias
└── README.md # Esta documentación
🛠️ Requisitos del Sistema
- Python 3.8 o superior
- 4GB RAM mínimo (8GB recomendado)
- Espacio en disco: ~2GB para dependencias
⚙️ Configuración Avanzada
Cambiar puertos
Web App:
# En lora_webapp.py, línea 249
app.launch(server_port=8080) # Cambiar de 7860 a 8080
API:
# En lora_api.py, línea 360
uvicorn.run(app, host="0.0.0.0", port=9000) # Cambiar de 8000 a 9000
Análisis de archivos grandes
Para LoRAs muy grandes (>1GB):
# Aumentar límite de análisis de capas
analyzer = LoRAAnalyzer('huge_lora.safetensors')
# Modifica _analyze_weights para analizar más capas
🤝 Contribuciones
Las contribuciones son bienvenidas! Para reportar bugs o sugerir features, abre un issue.
📝 Notas Importantes
-
Privacidad: Todo el análisis se hace localmente. No se envía información a servidores externos.
-
Rendimiento: El análisis de archivos grandes puede tomar tiempo. La CLI es más rápida que la Web App.
-
Compatibilidad: Diseñado principalmente para LoRAs de Stable Diffusion, pero puede funcionar con otros tipos.
-
Metadatos: La cantidad de información disponible depende de cómo fue guardado el LoRA. LoRAs entrenados con Kohya suelen tener más metadatos.
🔮 Roadmap
- Soporte para análisis de LoRAs de LLMs
- Visualización de distribución de pesos
- Detección automática de estilo/concepto
- Base de datos para indexar LoRAs analizados
- Exportar reportes en PDF
- Integración con Hugging Face Hub
📄 Licencia
Este proyecto es de código abierto y está disponible bajo la licencia MIT.
❓ FAQ
P: ¿Puedo recuperar las imágenes con las que se entrenó el LoRA? R: No, es técnicamente imposible. Los pesos del modelo son el resultado de la optimización, pero no contienen los datos originales.
P: ¿Funciona con cualquier tipo de LoRA? R: Está optimizado para LoRAs de Stable Diffusion, pero puede analizar cualquier LoRA en formato safetensors o PyTorch.
P: ¿Por qué algunos metadatos no aparecen? R: Depende de cómo fue guardado el archivo. Usa herramientas como Kohya que incluyen metadatos extensos.
P: ¿Puedo usar esto para crear LoRAs mejores? R: Sí! Analiza LoRAs exitosos para aprender qué configuraciones funcionan mejor para diferentes casos de uso.
P: ¿Es seguro analizar LoRAs de fuentes desconocidas? R: El análisis es seguro, pero ten cuidado al cargar pesos en un modelo. Los archivos .pt y .ckpt pueden contener código malicioso.
🙏 Agradecimientos
Desarrollado para la comunidad de ML y entusiastas de LoRA.
¿Preguntas o problemas? Abre un issue en el repositorio.
¿Te resultó útil? ¡Dale una estrella ⭐!