FastAPI vs Frasco | ¿Es FastAPI el reemplazo correcto para matraces?

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Una vez que haya terminado con la construcción de modelos y el ajuste adecuado de hiperparámetros, el siguiente paso en los proyectos de ciencia de datos es mostrar los resultados finales al público en general. Es fundamental hacerlo así porque no todo el mundo está interesado en ver el código y está más interesado en el resultado final. También ayuda a los aspirantes a ciencia de datos a construir un proyecto de principio a fin lo que les da una ventaja sobre los demás y les da un gusto por otras tecnologías.

La implementación de modelos de aprendizaje automático puede tomar diferentes rutas según la plataforma en la que desee entregar el modelo. los interfaz web es la forma más común de publicar un modelo, pero no se limita a aplicaciones de Android e IOS o un dispositivo IOT como Raspberry Pi. Si investiga esto en detalle, entonces un marco que encabeza la consulta de búsqueda es el marco de matraz que es una aplicación minimalista para configurar rápidamente servidores web pero tiene algunos asuntos que ahora se resuelven en una llamada de marco recientemente lanzada FastAPI que está ganando mucha popularidad en estos días.

En este artículo, veremos cómo el marco FastAPI tiene una ventaja sobre Flask con un código de ejemplo para comprender las cosas de una mejor manera. Antes de eso, si estás interesado en implementación de la aplicación android entonces puedes leer mi articulo Implementación de AA en la aplicación de Android.

Es un marco basado en Python que le permite conectar sitios web con menos cantidad de código. Puedes crear un sitio web a pequeña escala con esto ya que permite la personalización en cada paso. Al ser un paquete minimalista, solo se incluyen los componentes principales y todas las demás extensiones requieren una configuración explícita. Muchos desarrolladores utilizan Flask para alojar sus API. API (Application Program Interface) es una interfaz que permite la comunicación entre múltiples intermediarios, lo que significa que uno puede acceder a cualquier tipo de datos utilizando cualquier tecnología. Por ejemplo, puede acceder a una API usando Javascript que podría construirse usando Python. Un programa simple en un matraz se ve así:

from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/<name>", methods=['GET'])
def home(name):
    return jsonify({"message": f"Hello! {name}"})
if __name__ == "__main__":
    app.run(debug=True)

Al presionar la URL localhost / AnyNameHere, se mostrará un resultado JSON similar a esto: (Yo uso la extensión de Chrome llamada visor JSON. Es posible que se le solicite texto sin formato en lugar de esta salida formateada)

img_1-8741078

Problemas con el matraz

El problema con este enfoque es que hay sin validación de datos, lo que significa que podemos pasar cualquier tipo de datos, ya sean cadenas, tuplas, números o cualquier carácter. Esto puede romper el programa a menudo y puede imaginarse que si un modelo ML obtiene tipos de datos incorrectos, el programa se bloqueará. Puede crear un verificador de datos antes de pasar los valores más, pero lo haría sumar trabajo adicional.

Las páginas de error en Flask como páginas HTML simples que pueden generar errores de decodificador cuando se llama a la API en otras aplicaciones. Hay otros problemas con Flask, como la naturaleza lenta, no asyncy soporte de sockets web que pueden acelerar los procesos y, finalmente, ningún sistema automatizado de generación de documentos. Debe diseñar manualmente la interfaz de usuario para el uso y ejemplos de la API. Todos estos problemas se resuelven en el nuevo marco.

FastAPI

Es un marco moderno que le permite crear API sin problemas y sin mucho esfuerzo. Tiene la capacidad de separar el código del servidor de la lógica empresarial aumentando la mantenibilidad del código. Como el nombre en sí es rápido, es mucho más rápido en comparación con el matraz porque está construido sobre ASGI (Interfaz de puerta de enlace de servidor asíncrono) en lugar de WSGI (Interfaz de puerta de enlace de servidor web). Tiene un sistema de validación de datos que puede detectar cualquier tipo de datos no válido en el tiempo de ejecución y devuelve el motivo de las entradas incorrectas al usuario solo en formato JSON, lo que libera a los desarrolladores de administrar esta excepción de forma explícita.

Eso genera la documentación sobre la marcha cuando está desarrollando la API, que es lo más solicitado por todos los desarrolladores. La documentación es una excelente manera para que otros desarrolladores colaboren en un proyecto, ya que les presenta todo lo que se puede hacer con las instrucciones necesarias. También genera una buena GUI que soluciona todo lo que faltaba en el matraz.

Hace todas estas cosas con las especificaciones OpenAI y Swagger para implementar estas especificaciones. Como desarrollador, solo se está enfocando en la parte de construcción lógica y el resto de las cosas son administradas por FastAPI. Veamos el mismo ejemplo que se creó usando Flask ahora implementado en FastAPI:

import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home(name: str):
    return {"message": f"Hello! {name}"}
if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000, debug=True)

Al presionar la URL localhost /? Name = AnyNameHere, se le pedirá un resultado como:

img_2-7383572

Puede ver que el código es muy similar a flask, pero aquí estamos usando el servidor uvicorn, que es una implementación ASGI. Además, aquí estamos sin enrutar ningún punto final y crearlos directamente utilizando decoradores, lo que tiene más sentido. La función aquí simplemente lleva los argumentos requeridos más allá que elimina la necesidad del objeto de solicitud ser llamado.

img_3-9515011

Hay otro generador de documentación que se incluye con FastAPI, es decir, ReDoc que también generó una hermosa documentación con todos los puntos finales enumerados. Se puede acceder presionando el punto final / redoc:

25693temp-4256177

Para configurar la validación de datos, simplemente podemos crear la clase de tipo de datos heredada de la modelo base de Pydantic. Es una biblioteca que ofrece validación de datos mediante anotaciones de tipo Python. Podemos agregar la descripción de las entidades y proporcionar el ejemplo personalizado para que se muestre en los documentos.

Ejemplo de ML FastAPI

Me gustaría compartir un ejemplo en el que se implementó un modelo de clasificador ML DecisionTree utilizando FastAPI. El enunciado del problema para esto es un clasificador de género musical donde en base a los aspectos técnicos de la música como el tempo, la valencia, la música es rock o hip-hop. Hice una clase de música para validar los datos que se pasarán al modelo que se ve así:

from pydantic import BaseModel
class Music(BaseModel):
    acousticness: float 
    danceability: float 
    energy: float 
    instrumentalness: float 
    liveness: float 
    speechiness: float 
    tempo: float 
    valence: float

img_4-1385000

Si desea ver el código completo, diríjase a este Repositorio de GitHub.

Conclusión: ¿Cuál elegir?

Después de toda esta discusión, la pregunta sigue sin respuesta, ¿quién gana? Basado en todos los factores, lo haría sugiero adoptar FastAPI sobre Flask. Es muy fácil de configurar, migrar un antiguo proyecto de matraz a este no llevará mucho tiempo, async, web sockets y función de generación automática de documentos es la cereza en la parte superior.

Uno puede elegir el marco de matraz para configurar toda la interfaz web (Front-end y back-end) pero en lo que respecta al ML donde el objetivo principal es verificar si el modelo está funcionando en el entorno de producción o no, crear una API tiene más sentido porque el resto de las cosas pueden ser administradas por otros equipos de desarrolladores y para explicarles claramente el uso del programa que desarrolló, FastAPI auto docs es una buena solución.

Conectarse con el autor

Puedes conectarte conmigo en Linkedin discutir cualquier cosa relacionada con el desarrollo de Python y la ciencia de datos, GitHub para ver mis proyectos o tu puedes leer mis artículos en medio.

Kaustubh – Medio

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.