Files
lora-analyzer/README.md

385 lines
9.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔍 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
```bash
# 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:
```bash
# 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:
```bash
# 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:
```bash
# 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
![Web App Screenshot](https://via.placeholder.com/800x400?text=Web+App+Interface)
### 3⃣ API REST
Servidor FastAPI para integración programática:
```bash
# 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
```bash
curl -X POST "http://localhost:8000/analyze" \
-H "Content-Type: multipart/form-data" \
-F "file=@mi_lora.safetensors"
```
```python
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
```python
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
```bash
curl -X POST "http://localhost:8000/compare" \
-F "files=@lora1.safetensors" \
-F "files=@lora2.safetensors"
```
##### `GET /health` - Estado del servicio
```bash
curl http://localhost:8000/health
```
##### `GET /examples` - Ver más ejemplos
```bash
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
```bash
# 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
```bash
# 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
```bash
# Verifica que tu LoRA se entrenó correctamente
python lora_cli.py my_new_lora.safetensors --verbose
```
### 4. Investigación
```python
# 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
```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:**
```python
# En lora_webapp.py, línea 249
app.launch(server_port=8080) # Cambiar de 7860 a 8080
```
**API:**
```python
# 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):
```python
# 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
1. **Privacidad**: Todo el análisis se hace localmente. No se envía información a servidores externos.
2. **Rendimiento**: El análisis de archivos grandes puede tomar tiempo. La CLI es más rápida que la Web App.
3. **Compatibilidad**: Diseñado principalmente para LoRAs de Stable Diffusion, pero puede funcionar con otros tipos.
4. **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 ⭐!