¿Cómo publicar un modelo de Machine Learning utilizando Flask?
Al finalizar el desarrollo de un modelo de Machine Learning, el siguiente paso es hacerlo accesible para otros usuarios. Esto se logra a través de la creación de una API que permita interactuar con el modelo desde la web. En este artículo, aprenderemos cómo desplegar un modelo utilizando Flask, un servidor Python ligero, instalándolo y configurándolo en un entorno local.
¿Qué es Flask y cómo instalarlo?
Flask es un micro framework de Python que permite crear servidores web de manera rápida y sencilla. Para instalar Flask, es fundamental asegurarse de estar dentro del entorno de trabajo adecuado para evitar instalaciones globales. Utiliza el siguiente comando para instalarlo:
pip install Flask
¿Qué estructura debe tener el proyecto?
El proyecto debe tener una estructura organizada para facilitar el desarrollo y despliegue del modelo. Aquí un ejemplo de cómo podría estar configurado:
Entorno: Mantener un entorno virtual aislado para las dependencias del proyecto.
Carpetas:
Entrada: Datos de entrada al modelo.
Modelos: Contiene el mejor modelo encontrado.
Utilidades y ejecución: Scripts principales para la ejecución del proyecto.
Además, se necesita un archivo para la configuración del servidor, denominado server.py, que contendrá toda la lógica para ejecutar la API.
¿Cómo configurar el servidor Flask?
Primero, importa las librerías necesarias en el archivo server.py. Aquí un ejemplo de cómo empezar:
import joblib
import numpy as np
from flask import Flask, jsonify, request
app = Flask(__name__)
Después, carga el modelo utilizando la librería joblib:
model = joblib.load('models/best_model.pkl')
¿Cómo definir rutas y métodos en Flask?
Para que el servidor pueda responder a las solicitudes, define una ruta con el método que desees utilizar. Para un ejemplo sencillo con el método GET, la configuración sería:
@app.route('/predict', methods=['GET'])defpredict(): sample_data = np.array([[/* datos de prueba sin Country, Rank y Score */]]) prediction = model.predict(sample_data)return jsonify({'prediction': prediction.tolist()})
¿Cómo ejecutar el servidor y probar las predicciones?
Ejecuta el servidor especificando el puerto que prefieras. Es recomendable utilizar puertos altos:
if __name__ =='__main__': app.run(port=8080)
Luego de ejecutar el servidor, dirígete a tu navegador web e ingresa la URL local con el puerto especificado y la ruta definida (/predict) para obtener un archivo JSON con las predicciones.
¿Qué hacer con las predicciones obtenidas?
Las predicciones obtenidas en formato JSON pueden ser tratadas en diversas aplicaciones, ya sean basadas en JavaScript (front-end web) o Android (aplicaciones móviles). Así, puedes convertir tu modelo de inteligencia artificial en una solución aplicable a diferentes plataformas.
Con estos pasos, se consigue una arquitectura modular y extensible para llevar modelos de Machine Learning a producción. Continúa explorando el vasto mundo del desarrollo de APIs y cómo integrar modelos de inteligencia artificial en soluciones completas. ¡El éxito está a solo un paso de distancia!
si hay uno y esta casi al final de la ruta de ciencia de datos, pero este esta algo desactualizado
muy buena la clase
Nos ayuda a llegar al siguiente nivel 🤖🚀🔥
Es una joya este curso. Llevo 30% de Machine Learning Engineer y debo decir que este es el primer curso que me hizo decir: "Esto esta valiendo la pena"
Sí, brutal.
Pues a darle con el curso de Flask!
Flask y toda la cosa, sin duda el mejor curso que he tomado aquí en platzi, gracias profesor.
Esto fue como la cereza del pastel. Todo tomo sentido con esta clase.
Así es, este curso ha sido de los mejores que he tomado aquí.
Excelente clase! Muy profesional todo lo que nos enseñó el profe Ariel.
Es un crack 🥇💯
Que brutal, con solo esta clase entendí un millón de cosas con respecto a llevar a producción, sin duda muy valiosa
me encantó ver, que no perdí mi tiempo estudiando django y flask y fastapi, pero lo que más quiero es dedicarme a este mundo.
¡Necesito estudiar eso para poder entender mejor cómo es que se relaciona todo!
no me arranca el localhost , supongo que sera cosa de mi ordenador ya que al principio si que lo hizo ,muy buena clase por cierto
tendría que ver tu código, pero podría ser que envés de parar la ejecución del servidor (ctrl+c) solo lo suspendiste (ctrl+z) lo que no te deja libre el puerto despues de que lo haves por primera vez
Clase magistral de ML
flask
Crea servidores web basicos
import joblib
import numpy as np
from flask import Flask
from flask import jsonify
model = joblib.load('archivo.plk')
app.run(port=8080)
#POSTMAN PARA PRUEBAS
#SI QUEREMOS ENVIAR DATOS -> POST
@app.route('/predict',methods=['GET'])
def predict():
X_term = np.array([1,2,3,4...])
prediction = model.predict(X_test.reshape(1,-1)
return jsonify({'prediccion':list(prediction)})
localhost:8080/predict
Alternativas más fáciles a Flask:
StreamLit
Gradio
Yo llevo un tiempo usando el micro framework flask y me he dado cuenta que es muy versátil y muy fácil de usar, además que se lo puede usar como backend para apps web más complejas si se trabaja con módulos como blueprint para estructurar el proyecto tipo mvc, pero recalco que es una herramienta poderosa para interactuar con modelos de aprendizaje automático, por decirlo así.
¿Cuándo se carga el archivo con el modelo previamente entrenado no se necesita usar las funciones de evaluación para predecir el resultado?
La clase se centró en la creación de una API con Flask para desplegar modelos de Machine Learning. Se discutió la importancia de tener un servidor local y se mostró cómo instalar Flask. Se configuró el servidor, se definieron rutas y se explicó cómo hacer predicciones con el modelo previamente entrenado. Además, se destacó la modularidad y extensibilidad de la solución, permitiendo que aplicaciones web o móviles puedan interactuar con el modelo para obtener resultados. Esto es clave para llevar proyectos de Machine Learning a producción.
Hola buenas noches, al ejecutar server.py no me sale nada, ni la direccion de servidor y tampoco me sale que tenga algun error alguien me puede ayudar? usu ubuntu 22.04