128 lines
3.2 KiB
YAML
128 lines
3.2 KiB
YAML
services:
|
|
db:
|
|
image: postgres:15
|
|
container_name: rss_db
|
|
environment:
|
|
- POSTGRES_DB=${DB_NAME}
|
|
- POSTGRES_USER=${DB_USER}
|
|
- POSTGRES_PASSWORD=${DB_PASS}
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
- ./init-db:/docker-entrypoint-initdb.d
|
|
restart: always
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
web:
|
|
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:
|
|
- "8001:8000"
|
|
environment:
|
|
- DB_HOST=db
|
|
- DB_PORT=5432
|
|
- DB_NAME=${DB_NAME}
|
|
- DB_USER=${DB_USER}
|
|
- DB_PASS=${DB_PASS}
|
|
- SECRET_KEY=${SECRET_KEY}
|
|
# Opcionales UI
|
|
# - NEWS_PER_PAGE=20
|
|
# Mostrar traducciones por defecto en la web
|
|
- WEB_TRANSLATED_DEFAULT=1
|
|
- DEFAULT_LANG=es
|
|
- TRANSLATION_PREFERRED_LANGS=es
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
restart: always
|
|
|
|
scheduler:
|
|
build:
|
|
context: .
|
|
args:
|
|
TORCH_CUDA: cu121
|
|
container_name: rss_scheduler
|
|
command: python scheduler.py
|
|
environment:
|
|
- DB_HOST=db
|
|
- DB_PORT=5432
|
|
- DB_NAME=${DB_NAME}
|
|
- DB_USER=${DB_USER}
|
|
- DB_PASS=${DB_PASS}
|
|
- SECRET_KEY=${SECRET_KEY}
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
restart: always
|
|
|
|
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 # estable con 1.3B en 12 GB; ajusta si cambia la VRAM disponible
|
|
- ENQUEUE=200
|
|
- TRANSLATOR_SLEEP_IDLE=5
|
|
|
|
# Tokens (equilibrio calidad/VRAM ~<7GB)
|
|
- 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:
|
|
|