269 lines
5.6 KiB
Markdown
269 lines
5.6 KiB
Markdown
# 🚀 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. 🚀
|