Files
lora-analyzer/examples.py

247 lines
7.6 KiB
Python

"""
Ejemplos de uso del LoRA Analyzer
Demuestra diferentes formas de usar la herramienta
"""
from lora_analyzer import LoRAAnalyzer, format_analysis_report
import json
def example_basic_analysis():
"""Ejemplo básico: analizar un archivo"""
print("=" * 70)
print("EJEMPLO 1: Análisis Básico")
print("=" * 70)
# Reemplaza con tu archivo real
file_path = "mi_lora.safetensors"
try:
# Crear analizador
analyzer = LoRAAnalyzer(file_path)
# Realizar análisis
analysis = analyzer.analyze()
# Mostrar reporte formateado
print(format_analysis_report(analysis))
except FileNotFoundError:
print(f"⚠️ Archivo no encontrado: {file_path}")
print(" Reemplaza 'mi_lora.safetensors' con tu archivo real")
def example_extract_specific_data():
"""Ejemplo: extraer datos específicos"""
print("\n" + "=" * 70)
print("EJEMPLO 2: Extraer Datos Específicos")
print("=" * 70)
file_path = "mi_lora.safetensors"
try:
analyzer = LoRAAnalyzer(file_path)
analysis = analyzer.analyze()
# Extraer información específica
print("\n📊 Información clave:")
# Rank
rank_info = analysis.get('architecture', {}).get('rank_info', {})
if rank_info:
rank = rank_info.get('most_common_rank', 'N/A')
print(f" • Rank: {rank}")
# Modelo base
metadata = analysis.get('metadata', {})
if metadata:
base_model = metadata.get('ss_base_model', 'N/A')
print(f" • Modelo base: {base_model}")
# Learning rate
lr = metadata.get('ss_learning_rate', 'N/A')
print(f" • Learning rate: {lr}")
# Imágenes de entrenamiento
num_images = metadata.get('ss_num_train_images', 'N/A')
print(f" • Imágenes: {num_images}")
# Epochs
epochs = metadata.get('ss_num_epochs', 'N/A')
print(f" • Epochs: {epochs}")
# Tamaño del archivo
file_size = analysis.get('file_info', {}).get('tamaño_mb', 'N/A')
print(f" • Tamaño: {file_size} MB")
except FileNotFoundError:
print(f"⚠️ Archivo no encontrado: {file_path}")
def example_compare_loras():
"""Ejemplo: comparar múltiples LoRAs"""
print("\n" + "=" * 70)
print("EJEMPLO 3: Comparar Múltiples LoRAs")
print("=" * 70)
# Reemplaza con tus archivos reales
files = [
"lora_v1.safetensors",
"lora_v2.safetensors",
"lora_v3.safetensors"
]
results = []
for file_path in files:
try:
analyzer = LoRAAnalyzer(file_path)
analysis = analyzer.analyze()
results.append({
'file': file_path,
'analysis': analysis
})
except FileNotFoundError:
print(f"⚠️ Archivo no encontrado: {file_path}")
if results:
print("\n📊 Comparación:")
print(f"{'Archivo':<30} {'Rank':<10} {'Tamaño (MB)':<15} {'Imágenes'}")
print("-" * 70)
for result in results:
filename = result['file']
analysis = result['analysis']
rank = analysis.get('architecture', {}).get('rank_info', {}).get('most_common_rank', 'N/A')
size = analysis.get('file_info', {}).get('tamaño_mb', 'N/A')
images = analysis.get('metadata', {}).get('ss_num_train_images', 'N/A')
print(f"{filename:<30} {str(rank):<10} {str(size):<15} {str(images)}")
def example_save_to_json():
"""Ejemplo: guardar análisis en JSON"""
print("\n" + "=" * 70)
print("EJEMPLO 4: Guardar en JSON")
print("=" * 70)
file_path = "mi_lora.safetensors"
output_path = "analysis_result.json"
try:
analyzer = LoRAAnalyzer(file_path)
analysis = analyzer.analyze()
# Guardar en JSON
with open(output_path, 'w', encoding='utf-8') as f:
json.dump(analysis, f, indent=2, ensure_ascii=False)
print(f"✅ Análisis guardado en: {output_path}")
except FileNotFoundError:
print(f"⚠️ Archivo no encontrado: {file_path}")
def example_batch_processing():
"""Ejemplo: procesamiento por lotes"""
print("\n" + "=" * 70)
print("EJEMPLO 5: Procesamiento por Lotes")
print("=" * 70)
import os
# Directorio con archivos LoRA
lora_directory = "loras/"
if not os.path.exists(lora_directory):
print(f"⚠️ Directorio no encontrado: {lora_directory}")
print(" Crea un directorio 'loras/' y coloca tus archivos allí")
return
# Analizar todos los archivos .safetensors
results = []
for filename in os.listdir(lora_directory):
if filename.endswith('.safetensors'):
file_path = os.path.join(lora_directory, filename)
try:
print(f"\n🔍 Analizando: {filename}")
analyzer = LoRAAnalyzer(file_path)
analysis = analyzer.analyze()
results.append(analysis)
# Mostrar resumen rápido
rank = analysis.get('architecture', {}).get('rank_info', {}).get('most_common_rank', 'N/A')
print(f" ✓ Rank: {rank}")
except Exception as e:
print(f" ✗ Error: {str(e)}")
print(f"\n✅ Análisis completado: {len(results)} archivos procesados")
def example_filter_by_rank():
"""Ejemplo: filtrar LoRAs por rank"""
print("\n" + "=" * 70)
print("EJEMPLO 6: Filtrar por Rank")
print("=" * 70)
import os
target_rank = 32
lora_directory = "loras/"
if not os.path.exists(lora_directory):
print(f"⚠️ Directorio no encontrado: {lora_directory}")
return
matching_loras = []
for filename in os.listdir(lora_directory):
if filename.endswith(('.safetensors', '.pt', '.ckpt')):
file_path = os.path.join(lora_directory, filename)
try:
analyzer = LoRAAnalyzer(file_path)
analysis = analyzer.analyze()
rank = analysis.get('architecture', {}).get('rank_info', {}).get('most_common_rank')
if rank == target_rank:
matching_loras.append(filename)
print(f"{filename} - Rank {rank}")
except Exception as e:
continue
print(f"\n📊 Encontrados {len(matching_loras)} LoRAs con rank {target_rank}")
if __name__ == "__main__":
print("\n🔍 EJEMPLOS DE USO - LoRA Analyzer\n")
# Ejecuta los ejemplos
# Nota: Muchos ejemplos fallarán si no tienes archivos reales
# Esto es solo para demostración
print("💡 Estos ejemplos requieren archivos LoRA reales")
print(" Reemplaza los nombres de archivo con tus propios archivos\n")
# Descomenta el ejemplo que quieras probar:
# example_basic_analysis()
# example_extract_specific_data()
# example_compare_loras()
# example_save_to_json()
# example_batch_processing()
# example_filter_by_rank()
print("\n" + "=" * 70)
print("Para usar estos ejemplos:")
print("1. Reemplaza los nombres de archivo con tus archivos reales")
print("2. Descomenta el ejemplo que quieras probar")
print("3. Ejecuta: python examples.py")
print("=" * 70)