update: traducción NLLB y compose

This commit is contained in:
jlimolina 2025-10-09 21:53:56 +02:00
parent 8109dbf274
commit da4c59a0e1
5 changed files with 593 additions and 21 deletions

View file

@ -1,7 +1,4 @@
version: '3.8'
services:
# Servicio de la Base de Datos PostgreSQL
db:
image: postgres:15
container_name: rss_db
@ -10,21 +7,21 @@ services:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASS}
volumes:
# Volumen para persistir los datos de la base de datos
- postgres_data:/var/lib/postgresql/data
# Monta la carpeta local con los scripts SQL para inicializar la BD la primera vez
- ./init-db:/docker-entrypoint-initdb.d
restart: always
healthcheck:
# Comprueba si la base de datos está lista para aceptar conexiones
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
interval: 5s
timeout: 5s
retries: 5
# Servicio de la Aplicación Web (Gunicorn)
web:
build: .
build:
context: .
args:
# La imagen llevará torch-cu121 por reutilizar Dockerfile; web no usa GPU.
TORCH_CUDA: cu121
container_name: rss_web
command: gunicorn --bind 0.0.0.0:8000 --workers 3 app:app
ports:
@ -36,15 +33,17 @@ services:
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASS}
- SECRET_KEY=${SECRET_KEY}
# - NEWS_PER_PAGE=20 # opcional
depends_on:
db:
# Espera a que el healthcheck de la base de datos sea exitoso antes de iniciar
condition: service_healthy
restart: always
# Servicio del Planificador de Tareas (Scheduler)
scheduler:
build: .
build:
context: .
args:
TORCH_CUDA: cu121
container_name: rss_scheduler
command: python scheduler.py
environment:
@ -56,10 +55,69 @@ services:
- SECRET_KEY=${SECRET_KEY}
depends_on:
db:
# También espera a que la base de datos esté saludable
condition: service_healthy
restart: always
# Define el volumen nombrado para la persistencia de datos
translator:
build:
context: .
args:
TORCH_CUDA: cu121 # PyTorch con CUDA 12.1 en la imagen
container_name: rss_translator
command: python translation_worker.py
environment:
# --- DB ---
- DB_HOST=db
- DB_PORT=5432
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASS}
# --- Worker ---
- TARGET_LANGS=es
- TRANSLATOR_BATCH=4 # 1.3B: más seguro en 12 GB (sube a 4 si ves VRAM libre)
- ENQUEUE=200
- TRANSLATOR_SLEEP_IDLE=5
# Tokens (equilibrio calidad/VRAM)
- MAX_SRC_TOKENS=512
- MAX_NEW_TOKENS=256
# Beams: mejor título, cuerpo eficiente
- NUM_BEAMS_TITLE=3
- NUM_BEAMS_BODY=2
# Modelo NLLB 1.3B
- UNIVERSAL_MODEL=facebook/nllb-200-1.3B
# Dispositivo (forzar GPU si está disponible; el worker cae a CPU si hay OOM)
- DEVICE=cuda
# Rendimiento / estabilidad
- PYTHONUNBUFFERED=1
- HF_HOME=/root/.cache/huggingface
- TOKENIZERS_PARALLELISM=false
- PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:64,garbage_collection_threshold:0.9
# GPU (requiere NVIDIA Container Toolkit en el host)
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
volumes:
- hf_cache:/root/.cache/huggingface
depends_on:
db:
condition: service_healthy
restart: always
# Habilita GPU (Compose v2 + nvidia-container-toolkit)
gpus: all
# Alternativa con 'deploy':
# deploy:
# resources:
# reservations:
# devices:
# - capabilities: [gpu]
volumes:
postgres_data:
hf_cache: