FastAPI: Es un framework web rápido y moderno de Python que utiliza código asíncrono para lograr una alta velocidad de respuesta. Es ideal para crear aplicaciones web API, especialmente para proyectos que requieren una respuesta rápida con conexiones de red lentas o limitadas. La combinación de FastAPI con los algoritmos de Machine Learning permite crear soluciones de IA escalables y fácilmente descargables.
Deployment (Despliegue) de modelos de ML: Es el proceso de tomar un modelo de Machine Learning entrenado y hacerlo disponible en un entorno de producción, para ser utilizado por los clientes o por otras aplicaciones. La integración de FastAPI en este proceso ayuda a crear una API web que expone el modelo de ML y lo hace disponible para su uso en aplicaciones reales.
Durante este curso de Deploy de modelos de ML con FastAPI, veremos cómo:
- Crear y entrenar un modelo de Machine Learning.
- Procesar datos de entrada para obtener predicciones precisas.
- Empaquetar y desplegar el modelo utilizando FastAPI para su uso en una API web.
También veremos cómo implementar las mejores prácticas en el desarrollo y el despliegue de modelos de Machine Learning para garantizar su rendimiento y escalabilidad.
FastAPI es un framework moderno de Python para construir APIs web escalables, rápidas y seguras. Está diseñado para aplicaciones de alto rendimiento y, en particular, para aplicaciones de Machine Learning que requieren alta velocidad y baja latencia, por lo que es una excelente opción para hacer deploy de modelos de ML.
Para hacer deploy de un modelo de ML con FastAPI, primero debemos construir un endpoint que acepte solicitudes de entrada y devuelva predicciones de salida. Para hacer esto, podemos desarrollar una función específica en Python que tome los datos de entrada, los prepare, los alimente en el modelo y devuelva la predicción. Esta función luego puede ser integrada en la API de FastAPI.
Una vez que hayamos construido nuestra función predictiva, debemos crear una estructura básica de la API utilizando FastAPI. Podemos definir los métodos HTTP (por ejemplo, POST) que se utilizarán para enviar solicitudes, así como las rutas para acceder a la API (por ejemplo, '/predict'). Luego, podemos integrar la función predictiva en la API, para que las solicitudes enviadas a la API se pasen automáticamente a la función predictiva en Python y se devuelva la predicción al usuario.
Una vez que la API esté construida, debemos desplegarla en un servidor para que sea accesible a través de la web. Podemos usar servicios de nube como AWS o Google Cloud Platform para alojar nuestra aplicación y hacerla accesible a través de una dirección URL.
En resumen, FastAPI es un excelente framework para construir y desplegar API de Machine Learning debido a su alta velocidad y baja latencia. Para hacer deploy de un modelo de ML, necesitamos construir una función predictiva personalizada y luego integrarla en nuestra API de FastAPI. Después, podemos desplegar nuestra aplicación en un servidor para que sea accesible a través de la web.
Un ejemplo práctico de cómo podrías desarrollar una API con FastAPI y desplegar un modelo de Machine Learning. Suponga que se desea crear una API para predecir el precio de una casa en Boston en función de ciertas características de la misma. Para ello, se cuenta con un modelo entrenado de Machine Learning.
1. En primer lugar, se debe importar FastAPI y crear una instancia de la aplicación:
from fastapi import FastAPI
app = FastAPI()
2. A continuación, se debe definir una ruta para la API:
Por ejemplo, se podría crear una ruta que acepte un conjunto de características de una casa y devuelva una predicción del precio de la misma utilizando el modelo de Machine Learning. En este caso, la ruta podría ser:
@app.post("/predict")
def predict_price(features: dict):
# Hacer la predicción utilizando el modelo de Machine Learning
price = model.predict(features)
# Devolver el resultado de la predicción
return {"price": price}
3. Desplegar la aplicación:
Una vez que se ha definido la ruta de la API, se debe desplegar la aplicación. Para ello, se puede utilizar un servidor web como uvicorn, que es compatible con FastAPI. El comando para desplegar la aplicación sería:
uvicorn main:app --reload
4. Probar la API con un cliente HTTP:
Finalmente, se debería probar la API con un cliente de HTTP, como curl o Postman. Por ejemplo, se podría enviar un conjunto de características de una casa en formato JSON a la ruta /predict y verificar que la API devuelve la predicción del precio de la casa:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"CRIM": 0.00632, "ZN": 18.0, "INDUS": 2.31, "CHAS": 0, "NOX": 0.538, "RM": 6.575, "AGE": 65.2, "DIS": 4.09, "RAD": 1.0, "TAX": 296.0, "PTRATIO": 15.3, "B": 396.9, "LSTAT": 4.98}' \
http://localhost:8000/predict
¡Y eso es todo! Con estos pasos, se ha creado una API que se puede utilizar para hacer predicciones de precios de casas utilizando un modelo de Machine Learning entrenado.
Un ejemplo práctico usando FastAPI y scikit-learn para crear y desplegar un modelo de clasificación de flores de iris en una API. Lo primero que debemos hacer es instalar todas las librerías necesarias. Para este ejemplo, necesitamos las librerías FastAPI, scikit-learn y uvicorn. Puedes instalarlos desde tu terminal con los siguientes comandos:
pip install fastapi
pip install scikit-learn
pip install uvicorn
Después de instalar las librerías, creamos una aplicación FastAPI que contenga una ruta que acepte los valores de los pétalos y sépalos de un iris, los use para predecir su especie y devuelva la predicción en formato JSON.
# Importamos las librerías necesarias
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import numpy as np
# Declaramos la aplicación FastAPI
app = FastAPI()
# Creamos una clase para definir los parámetros que se deben enviar
class IrisData(BaseModel):
sepal_length: float
sepal_width: float
petal_length: float
petal_width: float
# Cargamos nuestro modelo de ML previamente creado con scikit-learn
model = joblib.load('model.joblib')
# Definimos la ruta del API
@app.post('/predict')
async def predict(data: IrisData):
# Convertimos los datos a un arreglo de NumPy
input_data = [data.sepal_length, data.sepal_width, data.petal_length, data.petal_width]
input_data = np.array(input_data).reshape(1, -1)
# Realizamos la predicción con nuestro modelo
prediction = model.predict(input_data)[0]
# Devolvemos la predicción en formato JSON
return {"prediction": prediction}
En este ejemplo, creamos una clase IrisData que define los nombres y tipos de datos que se deben enviar a través del API. Después, cargamos nuestro modelo de Machine Learning usando la librería joblib. Finalmente, definimos la ruta /predict que realiza la predicción y devuelve la respuesta en formato JSON.
Para probar nuestra aplicación, corremos el siguiente comando desde nuestra terminal:
uvicorn main:app --reload
Esto iniciará el servidor en http://localhost:8000/, a través del cual podremos enviar las peticiones al API. Usando herramientas como Postman, podemos enviar una petición POST con los valores de los pétalos y sépalos para realizar la predicción. Por ejemplo, podemos enviar la siguiente petición:
POST http://localhost:8000/predict
{
"sepal_length": 5.1,
"sepal_width": 3.5,
"petal_length": 1.4,
"petal_width": 0.2
}
Esto nos devolverá una respuesta en formato JSON con la predicción realizada por nuestro modelo:
{
"prediction": "setosa"
}
¡Y listo! Ahora hemos creado y desplegado un modelo de Machine Learning en una API usando FastAPI.
-
Introducción a FastApi y Deploy de modelos de Machine Learning.
-
Preparación de datos y entrenamiento de modelos de Machine Learning.
-
Selección de modelos y validación de resultados.
-
Selección de métricas para evaluar modelos.
-
Creación de una API RESTful para la exposición de modelos.
-
Configuración de ambiente de desarrollo y producción.
-
Creación y configuración de base de datos para almacenamiento de datos.
-
Pruebas de integración para validar la API.
-
Gestión de paquetes y dependencias con herramientas como Pipenv.
-
Integración con herramientas de automatización de procesos de CI/CD para despliegue continuo de cambios en producción.