0Pricing
Learn AI with Python · Lección

Carga y servicio de modelos de ML

Carga de modelos joblib/keras al iniciar la aplicación, inferencia segura para hilos y endpoints de predicción por lotes.

Carga y servicio de modelos de ML es una lección gratuita de Learn AI with Python en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn AI with Python, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn AI with Python incluye 4 lecciones en total.

El problema de la carga

Cargar un modelo desde el disco es lento. Si lo vuelve a cargar en cada solicitud, la latencia se dispara. La solución consiste en cargar el modelo una sola vez durante el inicio y reutilizarlo para todas las solicitudes.

El evento de inicio

El hook @app.on_event("startup") se ejecuta una vez cuando se inicia el servidor, por lo que es el lugar perfecto para cargar el modelo antes de que llegue cualquier solicitud.

from fastapi import FastAPI
import joblib

app = FastAPI()

@app.on_event("startup")
def load_model():
    app.state.model = joblib.load("model.joblib")

app.state para almacenamiento seguro para hilos

app.state es el lugar recomendado para guardar objetos compartidos, como el modelo. Al almacenarlo una vez durante el inicio y leerlo únicamente durante las solicitudes, evita los problemas de las variables globales mutables a nivel de módulo.

from fastapi import Request

@app.post("/predict")
def predict(req: PredictRequest, request: Request):
    model = request.app.state.model
    return {"prediction": model.predict([req.features])[0]}

¿Por qué no una variable global?

Una variable global sencilla de módulo funciona, pero vincula la carga al momento de la importación y dificulta las pruebas o el intercambio del objeto. app.state vincula el ciclo de vida del objeto al de la aplicación, lo que resulta más limpio y constituye el patrón recomendado por FastAPI.

El enfoque moderno lifespan

Las versiones más recientes de FastAPI sustituyen on_event por un gestor de contexto lifespan, que gestiona el inicio y el cierre en un solo lugar.

from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app):
    app.state.model = joblib.load("model.joblib")  # startup
    yield
    app.state.model = None                          # shutdown

app = FastAPI(lifespan=lifespan)

Calentamiento del modelo

La primera predicción suele ser lenta porque los frameworks se inicializan de forma diferida en la primera llamada. Haga un calentamiento del modelo durante el inicio con una predicción ficticia para que la primera solicitud real del usuario sea rápida desde el principio.

@app.on_event("startup")
def load_and_warm():
    app.state.model = joblib.load("model.joblib")
    app.state.model.predict([[0.0, 0.0, 0.0, 0.0]])  # warm-up

Por qué es importante el calentamiento

Sin calentamiento, la primera solicitud después del despliegue puede tardar muchas veces más, lo que perjudica la latencia de cola y puede hacer que fallen las comprobaciones de estado. Una sola inferencia ficticia durante el inicio asume este coste fuera de la ruta crítica.

Un endpoint de predicción por lotes

Predecir muchas filas en una sola llamada es mucho más eficiente que realizar muchas llamadas individuales, ya que los modelos vectorizan los datos de un lote. Acepte una lista de vectores de características y devuelva una lista de predicciones.

class BatchRequest(BaseModel):
    items: list[list[float]]

@app.post("/predict/batch")
def predict_batch(req: BatchRequest, request: Request):
    model = request.app.state.model
    preds = model.predict(req.items)
    return {"predictions": preds.tolist()}

Individual frente a por lotes

  • Individual: una entrada, la menor latencia por llamada y clientes sencillos.
  • Por lotes: muchas entradas a la vez, un rendimiento mucho mayor e ideal para la puntuación sin conexión.

Ofrecer ambas opciones cubre los casos de uso en tiempo real y en volumen.

Leer desde el estado en los endpoints

Cada endpoint lee el modelo compartido mediante request.app.state.model y nunca vuelve a cargarlo, por lo que todas las solicitudes comparten una única instancia en memoria.

Unir todas las piezas

Una configuración lista para producción: cargue y caliente el modelo en lifespan/startup, almacénelo en app.state y exponga endpoints de predicción individual y por lotes que lean desde el estado. Esto minimiza la latencia y maximiza el rendimiento.

Comprobación rápida

Compruebe sus conocimientos sobre cómo servir modelos.

Resumen

Cargó el modelo una vez mediante startup/lifespan, lo almacenó en app.state para reutilizarlo de forma segura entre hilos, añadió una predicción ficticia de calentamiento y expuso un endpoint por lotes para aumentar el rendimiento. Siguiente tema: dockerizar la API.

Preguntas frecuentes

¿La lección «Carga y servicio de modelos de ML» es gratis?

Sí — el texto completo de «Carga y servicio de modelos de ML» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn AI with Python, actualiza a CoddyKit PRO. El curso de Learn AI with Python incluye 4 lecciones en total.

¿Qué aprenderé en «Carga y servicio de modelos de ML»?

Carga de modelos joblib/keras al iniciar la aplicación, inferencia segura para hilos y endpoints de predicción por lotes. Practicas Learn AI with Python con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Learn AI with Python?

No se requiere experiencia previa. Learn AI with Python en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Carga y servicio de modelos de ML»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Learn AI with Python?

Sí. Cada lección de Learn AI with Python incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Fundamentos de FastAPI para ingenieros de ML
  2. Esquemas de Pydantic para solicitudes y respuestas
  3. Carga y servicio de modelos de ML
  4. Dockerización de la API del modelo
← Volver a Learn AI with Python