Deploy — Servir modelos
godml incluye un servidor de inferencia listo para producción. Una vez que entrenas un modelo con godml run, puedes empaquetarlo en Docker y servirlo como API REST en cualquier entorno.
Requisitos previos
- Haber ejecutado
godml run -f godml.ymlexitosamente - Archivo
output/model.pklgenerado por el pipeline - Docker instalado y corriendo
Verifica que el modelo existe:
ls output/model.pkl
Paso 1 — Dockerfile
Crea un Dockerfile en la raíz de tu proyecto:
Dockerfile
FROM python:3.11-slim
WORKDIR /app
# Instala godml con el extra de API (FastAPI + uvicorn)
RUN pip install --no-cache-dir "godml[api]"
# Copia el modelo al path esperado por el servidor
COPY output/model.pkl models/dev/model.pkl
# Copia la configuración del pipeline
COPY godml.yml .
ENV GODML_ENV=dev \
HOST=0.0.0.0 \
PORT=8000
EXPOSE 8000
CMD ["python", "-m", "uvicorn", "godml.deploy_service.server:app", \
"--host", "0.0.0.0", "--port", "8000"]
Entornos
Cambia GODML_ENV=dev a qa o prod según el entorno. En prod se deshabilita CORS abierto y el endpoint /debug/config.
Paso 2 — Build y run
# Construir la imagen
docker build -t godml-modelo:dev .
# Ejecutar el contenedor
docker run --rm -p 8000:8000 godml-modelo:dev
Deberías ver:
INFO: Started server process [1]
INFO: Waiting for application startup.
· 03:24:50 🚀 Iniciando carga de modelo en DEV
· 03:24:50 ✅ Modelo cargado: /app/models/dev/model.pkl
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
Paso 3 — Endpoints disponibles
GET /health
Verifica que el contenedor y el modelo están listos:
curl http://localhost:8000/health
{
"status": "healthy",
"environment": "dev",
"model_loaded": true
}
POST /predict
Envía un registro para predecir. Las columnas deben coincidir con las usadas en el entrenamiento:
curl -X POST http://localhost:8000/predict \
-H "Content-Type: application/json" \
-d '{
"data": {
"tenure": 24,
"monthly_charges": 65.5,
"total_charges": 1572.0,
"contract": 1,
"support_calls": 2
}
}'
{
"prediction": [0],
"latency": 0.0034
}
GET /metadata
Devuelve las features que espera el modelo:
curl http://localhost:8000/metadata
GET /version
curl http://localhost:8000/version
Saber qué columnas enviar
Las features requeridas son las del CSV de entrenamiento sin la columna target. Para verlas:
python -c "
import joblib, pandas as pd
model = joblib.load('output/model.pkl')
print(model.feature_names_in_.tolist())
"
O vía la API:
curl http://localhost:8000/metadata
Despliegue en producción
- Docker Compose
- Render.com
- Cloud (AWS/GCP/Azure)
docker-compose.yml
services:
modelo:
build: .
ports:
- "8000:8000"
environment:
- GODML_ENV=prod
restart: unless-stopped
docker-compose up -d
- Sube tu proyecto a GitHub (con el
Dockerfileincluido) - En Render → New Web Service → conecta el repo
- Render detecta el
Dockerfileautomáticamente - Agrega la variable de entorno
GODML_ENV=prod - Deploy → tu API queda en
https://tu-app.onrender.com
# Publicar imagen en Docker Hub o ECR
docker tag godml-modelo:dev tu-registry/godml-modelo:v1.0.0
docker push tu-registry/godml-modelo:v1.0.0
# Desplegar en ECS, Cloud Run, o Azure Container Apps
# usando la imagen publicada
Variables de entorno
| Variable | Descripción | Default |
|---|---|---|
GODML_ENV | Entorno (dev, qa, prod) | dev |
HOST | Host del servidor | 0.0.0.0 |
PORT | Puerto | 8000 |
GODML_VERSION | Versión del modelo (informativo) | dev |
¿Algo no funciona?
Revisa la guía de Troubleshooting o abre un issue en GitHub.