Skip to content

Latest commit

 

History

History
246 lines (181 loc) · 7.01 KB

File metadata and controls

246 lines (181 loc) · 7.01 KB

Demo Ray Serving

Este proyecto demuestra diferentes formas de servir modelos de machine learning usando Ray Serve en Kubernetes.

📋 Descripción General

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

🏗️ Arquitectura del Proyecto

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

📁 Carpetas Principales

onnx-base-serve/

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

test-serve/

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

🚀 Inicio Rápido

Prerrequisitos

  • Kubernetes cluster (o kind/minikube)
  • Docker
  • Python 3.11+
  • kubectl configurado

Configuración del Entorno

# 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-learn

Desplegar un Servicio

Opción 1: Servicio básico (onnx-base-serve)

cd 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.yaml

Opción 2: Servicio completo (test-serve)

cd 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.yaml

Publicar Imágenes en Google Cloud Platform

Para producción, es recomendable publicar las imágenes en un registry de GCP. Consulta las instrucciones detalladas en:

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 imagen

📚 Ejemplos de Aplicaciones

app1.py - Servicio Simple con Faker

Ejemplo básico de un servicio Ray Serve que genera emails falsos usando la librería Faker.

ray start --head
serve run app1:deployment

app2.py - Mercado de Frutas (Deployments Múltiples)

Ejemplo de múltiples deployments que se comunican entre sí:

  • MangoStand, OrangeStand, PearStand: Stands individuales
  • FruitMarket: Deployment principal que coordina los stands
ray start --head
serve run app2:deployment_graph

app3.py - Mercado de Frutas con FastAPI

Versión mejorada de app2.py con FastAPI para validación HTTP y mejor estructura.

ray start --head
serve run app3:deployment_graph

🔧 Scripts de Utilidad

script.py

Analiza 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.py

script-data.py

Analiza 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

🎯 Comparación de Servicios

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

📖 Conceptos Clave

Ray Serve

Framework de Anyscale para servir modelos de ML a escala. Proporciona:

  • Escalado automático
  • Batching de requests
  • Deployments distribuidos
  • Integración con Kubernetes

RayService CRD

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

ONNX (Open Neural Network Exchange)

Formato estándar para modelos de ML que permite:

  • Interoperabilidad entre frameworks
  • Optimización de inferencia
  • Despliegue en diferentes plataformas

🔍 Troubleshooting

Problemas Comunes

  1. 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>
  2. Pods no inician

    # Ver logs
    kubectl logs <pod-name>
    
    # Ver eventos
    kubectl describe pod <pod-name>
  3. Servicio no responde

    # Verificar servicio
    kubectl get svc
    
    # Port-forward manual
    kubectl port-forward service/<service-name> 8000:8000

📝 Notas Adicionales

  • Los modelos ONNX deben estar entrenados y exportados previamente
  • El preprocesamiento en test-serve requiere 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

🔗 Recursos

📄 Licencia

Este es un proyecto de demostración. Ajusta según tus necesidades.