Este proyecto demuestra diferentes formas de servir modelos de machine learning usando Ray Serve en Kubernetes.
Este repositorio contiene múltiples implementaciones de servicios de ML usando Ray Serve, cada una con diferentes enfoques y niveles de complejidad:
- onnx-base-serve: Servicio básico de modelo ONNX con Docker
- test-serve: Servicio completo con preprocesamiento y validación
- Ejemplos de aplicaciones: Demos de diferentes patrones de Ray Serve
demo-ray-serving/
├── app1.py # Ejemplo: Servicio simple con Faker
├── app2.py # Ejemplo: Mercado de frutas (deployments múltiples)
├── app3.py # Ejemplo: Mercado de frutas mejorado con FastAPI
Servicio básico de modelo ONNX empaquetado en Docker. Ideal para modelos que ya reciben datos preprocesados.
Características:
- Deployment simple de Ray Serve
- Modelo ONNX empaquetado en imagen Docker
- Endpoint REST básico
- Sin preprocesamiento de datos
Ver documentación completa en: onnx-base-serve/README.md
Servicio completo de predicción de ganancias con preprocesamiento avanzado.
Características:
- Preprocesamiento completo (codificación categórica, normalización)
- Validación de esquemas con FastAPI y Pydantic
- Feature engineering (extracción de características temporales)
- Soporte para despliegue con Docker o volúmenes de Kubernetes
Ver documentación completa en: test-serve/README.md
- Kubernetes cluster (o kind/minikube)
- Docker
- Python 3.11+
- kubectl configurado
# Crear entorno virtual
python -m venv env
source env/bin/activate # En Windows: env\Scripts\activate
# Instalar dependencias (si es necesario)
pip install ray[serve] fastapi onnxruntime pandas numpy scikit-learncd onnx-base-serve
docker build -t onnx-base-serving-model:latest .
kind load docker-image onnx-base-serving-model:latest --name ray-cluster
kubectl apply -f config-serve-docker.yamlcd test-serve
docker build -t ray-serving-model:latest .
kind load docker-image ray-serving-model:latest --name ray-cluster
kubectl apply -f config-serve-docker.yamlPara producción, es recomendable publicar las imágenes en un registry de GCP. Consulta las instrucciones detalladas en:
- onnx-base-serve: Ver sección "Publicar la imagen Docker" en onnx-base-serve/README.md
- test-serve: Ver sección "Publicar la imagen Docker" en test-serve/README.md
Resumen rápido:
# 1. Autenticarse con GCP
gcloud auth login
gcloud auth configure-docker
gcloud config set project {PROJECT_ID}
# 2. Crear repositorio (solo la primera vez)
gcloud artifacts repositories create ray-serving-repo \
--repository-format=docker \
--location=us-central1
# 3. Taggear y hacer push
docker tag ray-serving-model:latest \
us-central1-docker.pkg.dev/{PROJECT_ID}/ray-serving-repo/ray-serving-model:latest
docker push us-central1-docker.pkg.dev/{PROJECT_ID}/ray-serving-repo/ray-serving-model:latest
# 4. Actualizar el YAML con la nueva URL de la imagenEjemplo básico de un servicio Ray Serve que genera emails falsos usando la librería Faker.
ray start --head
serve run app1:deploymentEjemplo de múltiples deployments que se comunican entre sí:
MangoStand,OrangeStand,PearStand: Stands individualesFruitMarket: Deployment principal que coordina los stands
ray start --head
serve run app2:deployment_graphVersión mejorada de app2.py con FastAPI para validación HTTP y mejor estructura.
ray start --head
serve run app3:deployment_graphAnaliza un modelo ONNX y muestra información sobre:
- Inputs y outputs del modelo
- Tipos de datos y shapes
- Metadatos del modelo
- Estructura del grafo
python script.pyAnaliza archivos LMDB (Lightning Memory-Mapped Database) y muestra:
- Contenido de la base de datos
- Estadísticas de entradas
- Muestras de datos
python script-data.py| Característica | onnx-base-serve | test-serve |
|---|---|---|
| Preprocesamiento | ❌ | ✅ |
| Validación de esquemas | ❌ | ✅ (FastAPI + Pydantic) |
| Feature engineering | ❌ | ✅ |
| Docker | ✅ | ✅ |
| Volúmenes K8s | ✅ | ✅ |
| Complejidad | Baja | Media-Alta |
| Caso de uso | Modelos preprocesados | Modelos con datos raw |
Framework de Anyscale para servir modelos de ML a escala. Proporciona:
- Escalado automático
- Batching de requests
- Deployments distribuidos
- Integración con Kubernetes
Custom Resource Definition de Kubernetes que permite:
- Desplegar clusters de Ray automáticamente
- Gestionar el ciclo de vida de los servicios
- Escalar automáticamente según la carga
Formato estándar para modelos de ML que permite:
- Interoperabilidad entre frameworks
- Optimización de inferencia
- Despliegue en diferentes plataformas
-
Imagen Docker no encontrada
# Verificar que la imagen existe docker images | grep ray-serving # Cargar en kind kind load docker-image <image-name> --name <cluster-name>
-
Pods no inician
# Ver logs kubectl logs <pod-name> # Ver eventos kubectl describe pod <pod-name>
-
Servicio no responde
# Verificar servicio kubectl get svc # Port-forward manual kubectl port-forward service/<service-name> 8000:8000
- Los modelos ONNX deben estar entrenados y exportados previamente
- El preprocesamiento en
test-serverequiere que los encoders/scalers coincidan con el entrenamiento - Para producción, considera usar un registry de imágenes Docker en lugar de cargar localmente
- Los recursos (CPU/memoria) pueden ajustarse según tus necesidades en los archivos YAML
Este es un proyecto de demostración. Ajusta según tus necesidades.