Déployer des modèles d'apprentissage automatique sur Heroku

Publié: 2021-01-05

L'apprentissage automatique est un processus continu qui implique l'extraction de données, le nettoyage, la sélection de fonctionnalités importantes, la création de modèles, la validation et le déploiement pour tester le modèle sur des données invisibles.

Bien que la phase initiale d'ingénierie des données et de création de modèles soit un processus assez fastidieux et nécessite beaucoup de temps à consacrer aux données, le déploiement du modèle peut sembler simple, mais il s'agit d'un processus critique qui dépend du cas d'utilisation que vous souhaitez cibler. Vous pouvez proposer le modèle aux utilisateurs mobiles, aux sites Web, aux appareils intelligents ou à tout autre appareil IoT.

On peut choisir d'intégrer le modèle dans l'application principale, de l'inclure dans SDLC ou dans le cloud. Il existe différentes stratégies pour déployer et exécuter le modèle sur la plate-forme cloud, ce qui semble être une meilleure option dans la plupart des cas en raison de la disponibilité d'outils tels que Google Cloud Platform, Azure, Amazon Web Services et Heroku.

Bien que vous puissiez choisir d'exposer le modèle de manière Pub/Sub, l'API (Application Program Interface) ou le wrapper REST est plus couramment utilisé pour déployer le modèle en production. Au fur et à mesure que la complexité du modèle augmente, différentes équipes sont affectées à la gestion de telles situations communément appelées ingénieurs en apprentissage automatique. Après cette longue introduction, voyons comment déployer un modèle d'apprentissage automatique en tant qu'API sur la plate-forme Heroku.

Table des matières

Qu'est-ce qu'Heroku ?

Heroku est une plate-forme en tant qu'outil de service qui permet aux développeurs d'héberger leur code sans serveur. Cela signifie que l'on peut développer des scripts pour servir l'un ou l'autre à des fins spécifiques. La plateforme Heroku est elle-même hébergée sur AWS (Amazon Web Services), qui est une infrastructure en tant qu'outil de service.

Le Heroku est une plate-forme gratuite mais limitée à 500 heures de disponibilité. Les applications sont hébergées sous forme de dyno qui, après 30 minutes d'inactivité, passe en mode veille. Cela garantit que votre application ne consomme pas tout le temps libre pendant l'inactivité. La plate-forme prend en charge Ruby, Java, PHP, Python, Node, Go, Scala. La plupart des débutants en science des données se réfèrent à cette plate-forme pour avoir une expérience de l'exécution et du déploiement d'un modèle dans le cloud.

Préparation du modèle

Maintenant que vous connaissez cette plate-forme, préparons le modèle pour la même chose. Lorsqu'un modèle d'apprentissage automatique est formé, les paramètres correspondants sont stockés dans la mémoire elle-même. Ce modèle doit être exporté dans un fichier séparé afin que nous puissions directement charger ce modèle, transmettre des données invisibles et obtenir les sorties.

Différents formats de modèle sont généralement pratiqués, tels que Pickle, job-lib qui convertit le modèle d'objet Python en flux binaire, ONNX, PMML ou MOJO qui est un format d'exportation H20.ai et propose également le modèle à intégrer dans les applications Java. Pour plus de simplicité, considérons que nous voulons exporter le modèle via pickle alors vous pouvez le faire en :

importer des cornichons

Pkl_Filename = "modèle.pkl"

avec open(Pkl_Filename, 'wb') comme fichier :

pickle.dump(nom_modèle, fichier)

Le modèle est maintenant stocké dans un fichier séparé et prêt à être utilisé en intégré dans une API.

La logique du serveur

Pour fournir l'accès à ce modèle pour les prédictions, nous avons besoin d'un code serveur capable de rediriger et de gérer toutes les requêtes côté client. Python prend en charge les frameworks de développement Web et un célèbre est Flask.

C'est un framework minimaliste qui permet de mettre en place un serveur avec quelques lignes de code. Comme il s'agit d'un package minimal, de nombreuses fonctionnalités telles que l'authentification et la nature RESTful ne sont pas explicitement prises en charge. Ceux-ci peuvent être intégrés avec des extensions.

Une autre option consiste à opter pour le nouveau framework FastAPI. Il est beaucoup plus rapide, évolutif, bien documenté et livré avec de nombreux packages intégrés. Pour l'instant, continuons avec le flacon pour mettre en place un itinéraire de prédiction simple.

à partir de l'importation de la fiole

importer des cornichons

app = flacon (__nom__)

avec open(Filename, 'rb') comme fichier :

modèle = pickle.load(fichier)

@app.route('/predict', methodes = ['GET', 'POST'])

def pred() :

# implémenter la logique pour obtenir les paramètres via une requête ou une charge utile

prédiction = model.predict([paramètres obtenus])

renvoie {'résultat' : prédiction}

Ceci est un code approximatif pour montrer comment procéder avec la logique du serveur. Il existe différentes stratégies que vous pouvez opter pour une meilleure mise en œuvre.

Découvrez : Guide de déploiement de modèles ML à l'aide de Streamlit

Configuration des fichiers de déploiement

Heroku nécessite une liste de toutes les dépendances requises par notre application. C'est ce qu'on appelle le fichier d'exigences. Il s'agit d'un fichier texte répertoriant toutes les bibliothèques externes utilisées par l'application. Dans cet exemple, le contenu du fichier contiendrait :

ballon

sklearn

numérique </p>

pandas

gunicorne

La dernière bibliothèque, gunicorn, nous permet de configurer l'implémentation du serveur WSGI qui forme l'interface pour le client et le serveur gérant le trafic HTTP. Heroku demande également un autre fichier appelé Procfile qui est utilisé pour spécifier le point d'entrée de l'application. Considérez que le fichier logique du serveur est enregistré sous le nom main.py, alors la commande à mettre dans ce fichier est :

web : gunicorn principal : application

"web" est le type de dyno que nous déployons, "gunicorn" agit en tant que médiateur pour transmettre la demande au code de serveur "main" et rechercher "app" dans "main". L'application gère tous les itinéraires ici.

Déploiement final

Toutes les préparations sont terminées, et il est maintenant temps d'exécuter l'application dans le cloud. Créez un compte si vous n'êtes pas sur Heroku, cliquez sur créer une application, choisissez n'importe quelle région. Après cela, connectez votre compte GitHub et choisissez le dépôt qui contient ces fichiers : code serveur, model.pkl, requirements.txt et Procfile.

Après cela, appuyez simplement sur déployer la branche ! Si cela réussit, visitez le lien généré et votre application devrait être en ligne. Vous pouvez maintenant faire des demandes à appname.herokuapp.com/predict route et il devrait donner les prédictions. En savoir plus sur les modèles d'apprentissage automatique.

Conclusion

Il s'agissait d'une introduction à ce qu'est Heroku, pourquoi il est nécessaire et comment déployer un modèle à l'aide de Flask. Il existe de nombreuses plates-formes d'hébergement qui offrent des fonctionnalités plus avancées telles que les pipelines de données, le streaming, mais Heroku étant la plate-forme gratuite, c'est toujours un bon choix pour les débutants qui veulent juste avoir un avant-goût du déploiement.

Si vous souhaitez en savoir plus sur l'apprentissage automatique, consultez le diplôme PG en apprentissage automatique et IA de IIIT-B & upGrad, conçu pour les professionnels en activité et offrant plus de 450 heures de formation rigoureuse, plus de 30 études de cas et missions, IIIT- Statut B Alumni, plus de 5 projets de synthèse pratiques et aide à l'emploi avec les meilleures entreprises.

Quels sont les inconvénients de l'utilisation de la plateforme Heroku ?

Heroku n'est pas idéal pour les grandes entreprises car la documentation de la plate-forme n'est pas exhaustive. Un autre problème est le système de fichiers en lecture seule, qui rend les téléchargements de fichiers volumineux tels que des films ou des photographies haute résolution difficiles à gérer. Heroku est un fournisseur de plate-forme en tant que service avec une quantité limitée de personnalisation. Heroku accepte uniquement les paiements en USD et non dans d'autres devises, telles que l'EUR. Pour les propriétaires d'entreprise qui préfèrent payer dans leur propre devise, cela pourrait être un inconvénient mineur. De plus, au sein de CRE (Common Runtime Environment), Heroku ne fournit pas d'adresses IP statiques.

En quoi Heroku est-il différent d'AWS ?

La procédure de déploiement dans AWS n'est pas simple et, par conséquent, elle n'est pas particulièrement conviviale en termes de complexité. Heroku fournit un environnement prêt à l'emploi et simple à utiliser. Heroku est plus coûteux qu'AWS car il nécessite moins d'intervention humaine. AWS peut gérer des besoins de calcul élevés ou très élevés, tandis que Heroku peut gérer des demandes de calcul modestes. Heroku, contrairement à AWS, ne nécessite pas de maintenance régulière de l'infrastructure. AWS et Heroku sont tous deux rapides comme l'éclair en matière de déploiement.

Combien de temps puis-je utiliser Heroku sans frais ?

Les comptes Heroku disposent d'un pool d'heures de dyno gratuites qui peuvent être utilisées sur des applications gratuites. Cela remplace la limite de 18 heures des programmes gratuits, leur permettant de fonctionner 24 heures sur 24 si nécessaire. Les nouveaux comptes bénéficient de 550 heures de dyno gratuites, avec 450 heures supplémentaires si vous validez votre identité avec une carte de crédit. Heroku fournit un plan gratuit pour vous aider à apprendre la technologie et à démarrer. De nombreux modules complémentaires Heroku offrent un plan gratuit, tout comme les boutons Heroku et les Buildpacks.