Preparar repositorio para despliegue: código fuente limpio
This commit is contained in:
parent
866f5c432d
commit
3eca832c1a
76 changed files with 5434 additions and 3496 deletions
269
QUICKSTART_LLM.md
Normal file
269
QUICKSTART_LLM.md
Normal file
|
|
@ -0,0 +1,269 @@
|
|||
# 🚀 Guía Rápida: Sistema LLM Categorizer
|
||||
|
||||
## ✅ Estado Actual
|
||||
|
||||
- ✓ Aplicación RSS2 levantada y funcionando correctamente
|
||||
- ✓ Todos los contenedores están operativos
|
||||
- ✓ Web accesible en http://localhost:8001
|
||||
- ✓ Nuevo sistema LLM Categorizer creado y configurado
|
||||
|
||||
## 📋 Próximos Pasos
|
||||
|
||||
### 1. Descargar el Modelo LLM (REQUERIDO)
|
||||
|
||||
```bash
|
||||
cd /home/x/rss2
|
||||
./scripts/download_llm_model.sh
|
||||
```
|
||||
|
||||
**Selecciona la opción 1** (Mistral-7B-Instruct-v0.2 GPTQ) - Recomendado para RTX 3060 12GB
|
||||
|
||||
⏱️ **Tiempo estimado**: 10-30 minutos según tu conexión
|
||||
💾 **Espacio necesario**: ~4.5 GB
|
||||
|
||||
### 2. Probar el Sistema (OPCIONAL pero recomendado)
|
||||
|
||||
```bash
|
||||
# Instalar dependencias para prueba local
|
||||
pip3 install exllamav2 torch
|
||||
|
||||
# Ejecutar prueba
|
||||
python3 scripts/test_llm_categorizer.py
|
||||
```
|
||||
|
||||
Esto te permite verificar que el modelo funciona ANTES de levantar el contenedor.
|
||||
|
||||
### 3. Levantar el Servicio LLM
|
||||
|
||||
```bash
|
||||
# Construir y levantar el contenedor
|
||||
docker compose up -d --build llm-categorizer
|
||||
|
||||
# Monitorear los logs
|
||||
docker compose logs -f llm-categorizer
|
||||
```
|
||||
|
||||
**Primera ejecución**: El contenedor tardará 2-5 minutos en cargar el modelo en GPU.
|
||||
|
||||
### 4. Verificar Funcionamiento
|
||||
|
||||
```bash
|
||||
# Ver estado
|
||||
docker compose ps llm-categorizer
|
||||
|
||||
# Ver últimas categorizaciones
|
||||
docker exec -it rss2_db psql -U rss -d rss -c \
|
||||
"SELECT llm_categoria, COUNT(*) FROM noticias WHERE llm_processed = TRUE GROUP BY llm_categoria;"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Configuración
|
||||
|
||||
### Archivos Creados
|
||||
|
||||
```
|
||||
/home/x/rss2/
|
||||
├── workers/
|
||||
│ └── llm_categorizer_worker.py # Worker principal
|
||||
├── Dockerfile.llm_worker # Dockerfile específico
|
||||
├── scripts/
|
||||
│ ├── download_llm_model.sh # Descarga del modelo
|
||||
│ └── test_llm_categorizer.py # Script de prueba
|
||||
├── docs/
|
||||
│ └── LLM_CATEGORIZER.md # Documentación completa
|
||||
└── docker-compose.yml # Actualizado con servicio llm-categorizer
|
||||
```
|
||||
|
||||
### Servicio en docker-compose.yml
|
||||
|
||||
```yaml
|
||||
llm-categorizer:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.llm_worker
|
||||
environment:
|
||||
LLM_BATCH_SIZE: 10 # Noticias por lote
|
||||
LLM_SLEEP_IDLE: 30 # Segundos entre lotes
|
||||
LLM_MODEL_PATH: /app/models/llm
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 10G
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: 1
|
||||
capabilities: [ gpu ]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Cómo Funciona
|
||||
|
||||
1. **Recopilación**: El worker consulta la BD y obtiene 10 noticias sin categorizar
|
||||
2. **Procesamiento**: Envía cada noticia al LLM local (Mistral-7B)
|
||||
3. **Categorización**: El LLM determina la categoría más apropiada
|
||||
4. **Actualización**: Guarda la categoría y confianza en la BD
|
||||
5. **Loop**: Repite el proceso continuamente
|
||||
|
||||
### Categorías Disponibles
|
||||
|
||||
- Política
|
||||
- Economía
|
||||
- Tecnología
|
||||
- Ciencia
|
||||
- Salud
|
||||
- Deportes
|
||||
- Entretenimiento
|
||||
- Internacional
|
||||
- Nacional
|
||||
- Sociedad
|
||||
- Cultura
|
||||
- Medio Ambiente
|
||||
- Educación
|
||||
- Seguridad
|
||||
- Otros
|
||||
|
||||
---
|
||||
|
||||
## 📊 Rendimiento Esperado
|
||||
|
||||
### Con RTX 3060 12GB + Mistral-7B GPTQ
|
||||
|
||||
- **VRAM utilizada**: ~6-7 GB
|
||||
- **Tiempo por noticia**: 2-5 segundos
|
||||
- **Throughput**: ~120-300 noticias/hora
|
||||
- **Precisión**: ~85-90% (depende del contenido)
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Consultas SQL Útiles
|
||||
|
||||
### Ver distribución de categorías
|
||||
|
||||
```sql
|
||||
SELECT llm_categoria, COUNT(*) as total,
|
||||
AVG(llm_confianza) as confianza_media
|
||||
FROM noticias
|
||||
WHERE llm_processed = TRUE
|
||||
GROUP BY llm_categoria
|
||||
ORDER BY total DESC;
|
||||
```
|
||||
|
||||
### Ver noticias de una categoría
|
||||
|
||||
```sql
|
||||
SELECT titulo, llm_categoria, llm_confianza, fecha
|
||||
FROM noticias
|
||||
WHERE llm_categoria = 'Tecnología'
|
||||
AND llm_processed = TRUE
|
||||
ORDER BY fecha DESC
|
||||
LIMIT 20;
|
||||
```
|
||||
|
||||
### Resetear procesamiento (para reprocesar)
|
||||
|
||||
```sql
|
||||
-- Resetear últimas 100 noticias
|
||||
UPDATE noticias
|
||||
SET llm_processed = FALSE
|
||||
WHERE id IN (
|
||||
SELECT id FROM noticias
|
||||
ORDER BY fecha DESC
|
||||
LIMIT 100
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Troubleshooting Rápido
|
||||
|
||||
### ❌ "Out of memory"
|
||||
```yaml
|
||||
# Reducir batch size en docker-compose.yml
|
||||
LLM_BATCH_SIZE: 5
|
||||
LLM_CACHE_MODE: Q4
|
||||
```
|
||||
|
||||
### ❌ "Model not found"
|
||||
```bash
|
||||
# Verificar descarga
|
||||
ls -la models/llm/
|
||||
|
||||
# Re-descargar si necesario
|
||||
./scripts/download_llm_model.sh
|
||||
```
|
||||
|
||||
### ❌ No procesa noticias
|
||||
```bash
|
||||
# Verificar cuántas faltan
|
||||
docker exec -it rss2_db psql -U rss -d rss -c \
|
||||
"SELECT COUNT(*) FROM noticias WHERE llm_processed = FALSE;"
|
||||
|
||||
# Resetear algunas para probar
|
||||
docker exec -it rss2_db psql -U rss -d rss -c \
|
||||
"UPDATE noticias SET llm_processed = FALSE LIMIT 20;"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentación Completa
|
||||
|
||||
Para más detalles, consulta:
|
||||
|
||||
```bash
|
||||
cat docs/LLM_CATEGORIZER.md
|
||||
```
|
||||
|
||||
O abre: `/home/x/rss2/docs/LLM_CATEGORIZER.md`
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Comandos Útiles
|
||||
|
||||
```bash
|
||||
# Ver todos los servicios
|
||||
docker compose ps
|
||||
|
||||
# Reiniciar solo el LLM
|
||||
docker compose restart llm-categorizer
|
||||
|
||||
# Ver uso de GPU
|
||||
nvidia-smi
|
||||
|
||||
# Ver logs + seguir
|
||||
docker compose logs -f llm-categorizer
|
||||
|
||||
# Detener el LLM
|
||||
docker compose stop llm-categorizer
|
||||
|
||||
# Eliminar completamente (rebuild desde cero)
|
||||
docker compose down llm-categorizer
|
||||
docker compose up -d --build llm-categorizer
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚡ Optimizaciones Futuras
|
||||
|
||||
Si quieres mejorar el rendimiento:
|
||||
|
||||
1. **Usar EXL2 en lugar de GPTQ** (más rápido en ExLlamaV2)
|
||||
2. **Aumentar batch size** si sobra VRAM
|
||||
3. **Fine-tune el modelo** con tus propias categorizaciones
|
||||
4. **Usar vLLM** para servidor de inferencia más eficiente
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Soporte
|
||||
|
||||
Si encuentras problemas:
|
||||
|
||||
1. Revisa logs: `docker compose logs llm-categorizer`
|
||||
2. Consulta documentación: `docs/LLM_CATEGORIZER.md`
|
||||
3. Verifica GPU: `nvidia-smi`
|
||||
|
||||
---
|
||||
|
||||
**¡Listo!** El sistema está completamente configurado. Solo falta descargar el modelo y levantarlo. 🚀
|
||||
Loading…
Add table
Add a link
Reference in a new issue