Python >> Tutoriel Python >  >> Python

Déploiement d'un modèle d'apprentissage automatique dans FastAPI

Si vous aspirez à travailler dans le domaine de l'apprentissage automatique, vous devrez peut-être déployer votre modèle d'apprentissage automatique en production. Dans cet article de blog, vous apprendrez à déployer un modèle de régression linéaire simple dans FastAPI. FastAPI est un framework Web moderne pour déployer votre application en Python.

Mise en route

Commençons par installer les bibliothèques nécessaires pour créer notre application.

Nous allons créer un environnement virtuel à des fins de développement. L'utilisation d'un environnement virtuel nous donne la possibilité de séparer les dépendances pour différents projets Python.

Allez dans un répertoire où vous souhaitez créer ce projet et dans un terminal séparé, exécutez la commande suivante

python3 -m venv fastapi-env

Une fois que vous avez configuré l'environnement, nous pouvons activer l'environnement en exécutant la commande suivante

source fastapi-env/bin/activate

Votre environnement est maintenant activé et nous pouvons commencer par installer les dépendances nécessaires à notre projet.

Commençons par créer un requirements.txt fichier qui inclura toutes les bibliothèques que nous utiliserions dans notre projet.

Nous aurions besoin de la librairie FastAPI et du sklearn bibliothèque pour exécuter notre modèle de régression.

Ouvrez un nouveau fichier, nommez-le requirements.txt et insérez les lignes suivantes :

# requirements.txt
fastapi
uvicorn
sklearn

Vous pouvez maintenant installer les librairies en exécutant la commande suivante

pip3 install -r requirements.txt

Construire un modèle de régression linéaire

Nous utiliserons un modèle de régression linéaire formé pour prédire la mesure quantitative de la prédiction de la maladie. Vous pouvez utiliser le lien suivant pour former un modèle de régression linéaire. Une fois que vous avez formé le modèle, vous pouvez enregistrer le modèle en utilisant le joblib bibliothèque

from joblib import dump, load
dump(regr , 'model.joblib')

Nous enregistrons le modèle dans le répertoire courant et lui donnons un nom - dans notre cas, nous avons donné un nom au modèle, model.joblib .

Au service de votre modèle

Nous commençons maintenant par comprendre le fonctionnement de FastAPI et comment nous pouvons implémenter une API simple pour répondre à une demande d'apprentissage automatique.

On commence par importer les librairies

from fastapi import FastAPI
from joblib import load
import numpy as np

Nous chargeons ensuite notre modèle et déclarons une instance de la classe FastAPI. Nous stockons cela dans une variable appelée app .

app = FastAPI()
model = load('model.joblib')

Nous implémentons ensuite une fonction pour notre index route. Chaque fois qu'un utilisateur ou un client essaie d'accéder à la route d'index, la fonction root() est appelé et un “Hello World” le message est renvoyé.

@app.get("/")
async def root():
   return {"message": "Hello World"}

Vous pouvez exécuter votre application en utilisant le uvicorn bibliothèque qui est un serveur asynchrone qui lance votre application.

if __name__ == '__main__':
   uvicorn.run(app, host='127.0.0.1', port=8000)

Une fois que votre application est en cours d'exécution, nous pouvons passer à localhost:8000 et voir le message “Hello World” affiché

Nous allons maintenant implémenter la fonction de prédiction et puisque nous devons envoyer un json fichier avec nos données, nous le définirons comme une demande de publication en utilisant le @app.post fonction de décorateur.

@app.post("/predict")
def predict(data_diabetes:float):
   data = np.array([[data_diabetes]])
   prediction = model.predict(data)
   return {
       'prediction': prediction[0],
   }

Comme vous pouvez le voir dans l'extrait de code ci-dessus, les données sont d'abord transformées en un tableau NumPy puisque notre modèle attend un tableau de forme 1 × 1. Nous pouvons utiliser cette valeur vectorielle transformée pour appeler la fonction de prédiction du modèle, qui renverra la prédiction ou la métrique quantitative de la progression du diabète.

Voyons tout le code en action

from fastapi import FastAPI
from joblib import load
import numpy as np
app = FastAPI()

model = load('model.joblib')



@app.get("/")
async def root():
   return {"message": "Hello World"}


@app.post("/predict")
def predict(data_diabetes:float):
   data = np.array([[data_diabetes]])
   prediction = model.predict(data)
   return {
       'prediction': prediction[0],
   }


if __name__ == '__main__':
   uvicorn.run(app, host='127.0.0.1', port=8000)

Appeler votre point de terminaison

Vous pouvez appeler ce point de terminaison à l'aide d'une bibliothèque cliente en Python ou à l'aide d'une simple commande curl pour tester la fonctionnalité de notre application.

curl -X POST "http://localhost:8000/predict?data_diabetes=0.07786339" -H  "accept: application/json" -d ""

Vous obtenez la réponse suivante

{"prediction":225.97324232953468}

Le modèle a généré une valeur de 225,97324 et celle-ci a été renvoyée en réponse à notre client.

Conclusion

Dans cet article de blog, vous avez appris à déployer un modèle d'apprentissage automatique simple dans FastAPI. FastAPI est un framework Web puissant pour déployer et créer des applications Python évolutives.