Quantcast
Channel: MSDN Blogs
Viewing all articles
Browse latest Browse all 5308
↧

Créer et interroger votre service web avec Azure ML

$
0
0

 

Azure Machine Learning Studio permet depuis ses dĂ©buts de dĂ©ployer un service web pour pouvoir interroger votre modĂšle prĂ©alablement entrainĂ©. Vous pouvez bien Ă©videment faire de mĂȘme avec le service de gestion des modĂšles d'Azure Machine Learning (Azure ML).

C'est ce que nous vous proposons d'aborder dans ce billet qui s'inscrit dans la continuité de la série de billets que nous avons initiée depuis cet automne sur les nouveaux services d'Azure ML.

J'en profite pour remercier Paul Jenny actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.

Le service de gestion des modĂšles

En complĂ©ment du service d'expĂ©rimentation d'Azure ML, ce nouveau service vous permet de gĂ©rer, comme son nom le suggĂšre, diffĂ©rentes versions de vos modĂšles, de les dĂ©ployer dans diffĂ©rents environnements que ce soit sous forme de conteneurs Docker ou de service web HTTP pour ĂȘtre facilement rĂ©utilisable via un simple appel de type REST. Comme mentionnĂ© ci-avant, nous nous intĂ©ressons ici au second cas de figure.

Dans la pratique, 4 étapes sont nécessaires pour pouvoir créer tel un service web :

  • Enregistrement du modĂšle auprĂšs du service de gestion des modĂšles ;
  • CrĂ©ation d'un manifeste spĂ©cifiant les dĂ©pendances associĂ©es Ă  un modĂšle ;
  • CrĂ©ation de l'image docker basĂ© sur un manifeste ;
  • DĂ©ploiement du conteneur docker sous forme de service web en temps rĂ©el.

Quelques prérequis

Pour pouvoir déployer vos modÚles, vous devez avoir, au préalable, préparer un environnement de déploiement. Si vous ne l'avez pas encore fait, nous vous invitons à lire la partie « Préparation de l'environnement de déploiement » dans le billet Mise en place d'un environnement de cette série.

Vous devez avoir aussi, bien évidemment, sauvegardé votre modÚle entrainé sous forme d'objet Python sérialisé dans un fichier.

Le fichier de score du service

La premiĂšre Ă©tape consiste Ă  crĂ©er le fichier de score qui permettra Ă  votre service web de donner un score aux donnĂ©es reçues en entrĂ©e. Celui-ci doit ĂȘtre composĂ© d'au moins deux fonctions indispensables :

  • init() : cette fonction est appelĂ©e au dĂ©marrage du service web pour pouvoir, par exemple, rĂ©cupĂ©rer le modĂšle entrainĂ© ou encore activer la fonctionnalitĂ© de collecte des donnĂ©es d'entrĂ©e et de sortie du service pour archivage des entrĂ©es / sorties.

     

def init():

from sklearn.externals import joblib

global model, inputs_dc, prediction_dc

# Chargement d'un modÚle entrainé sur scikit-learn (plus rapide que pickle)

model = joblib.load('model.pkl')

 

# Activation de la collecte de données en entrée

inputs_dc = ModelDataCollector('model.pkl',identifier="inputs")

# Activation de la collecte de données en sortie

prediction_dc = ModelDataCollector('model.pkl', identifier="prediction")

 

  • run() : cette fonction est utilisĂ©e Ă  chaque rĂ©ception d'une requĂȘte HTTP en entrĂ©e. La validation du format de la requĂȘte est effectuĂ©e en amont de celle-ci si vous avez gĂ©nĂ©rĂ© le schĂ©ma (Cf. section suivante). Celle-ci doit retourner la rĂ©ponse du service web, c'est-Ă -dire la prĂ©diction :

def run(input_df):

global clf2, inputs_dc, prediction_dc

try:

# Prédiction du modÚle

prediction = model.predict(input_df)

# Collecte des données d'entrée

inputs_dc.collect(input_df)

# Collecte de la prédiction

prediction_dc.collect(prediction)

return prediction

except Exception as e:

return (str(e))

La création du schéma du service web (optionnel)

Il est possible de demander au service de valider automatiquement les entrées et les sorties de votre service web pour vous assurer du bon fonctionnement de celui-ci. Pour cela, il faut spécifier les formats attendus dans un fichier JSON.

Il est préférable de le générer directement depuis votre fichier score dans la fonction main(), par exemple, pour pouvoir conserver un format à jour.

Tout d'abord, il est nécessaire d'importer 3 bibliothÚques d'Azure ML dans un fichier Python :

from azureml.api.schema.dataTypes import DataTypes

from azureml.api.schema.sampleDefinition import SampleDefinition

from azureml.api.realtime.services import generate_schema

Ensuite, vous devez spécifier le type de données attendu avec un exemple de données d'entrée :

  • Pour un tableau Numpy :

    inputs = {"input_array": SampleDefinition(DataTypes.NUMPY, yourinputarray)}

  • Pour un tableau Spark :

    inputs = {"input_array": SampleDefinition(DataTypes.SPARK, yourinputarray)}

  • Pour un tableau Pandas :

    inputs = {"input_array": SampleDefinition(DataTypes.PANDAS, yourinputarray)}

Et enfin, il convient de générer le schéma associé :

generate_schema(run_func=run, inputs=inputs, filepath='service_schema.json')

Remarque : le paramÚtre run_func correspond à la fonction run() d'un fichier de score d'un service web. C'est pourquoi il est préférable d'ajouter ces lignes directement dans celui-ci.

L'enregistrement de son modĂšle

Une fois le fichier de score créé, vous pouvez enregistrer votre modÚle auprÚs du service de gestion des modÚles. Cela permet de le sauvegarder dans le cloud pour une utilisation future et de le déployer dans différentes cibles (notamment en tant que service web).

Pour effectuer cette opération, vous devez utiliser le CLI intégré dans Visual Studio Code (si l'extension Visual Studio Tools for AI est installée) ou depuis Azure ML Workbench.

La commande est suivante :

az ml model register

–model [chemin vers le modùle .pkl - requis]

–name [nom du modùle - requis]

–description [description du modùle - optionnel]

–tag [libellĂ© associĂ© Ă  ce modĂšle – optionnel]

Dans le résultat de la commande, vous obtiendrez l'identifiant du modÚle. Celui-ci vous permettra de le réutiliser dans la suite de cet article.

Une fois cette commande effectuée, vous pouvez apercevoir une nouvelle version de votre modÚle via l'utilisation d'Azure CLI avec la commande az ml model list ou du portail de gestion Azure :


La création du manifeste du/des modÚle(s)

Le manifeste représente le lien entre un ou plusieurs modÚles, les dépendances associées, le fichier de score ainsi que le schéma des données en entrée et en sortie du service web.

Celui-ci est ensuite utilisé pour construire l'image Docker associée.

Il se crée, lui aussi, à l'aide d'une commande via l'utilisation d'Azure CLI comme suit :

az ml manifest create

--manifest-name -n [nom du manifeste – requis]

-f [chemin vers le fichier de score - requis]

-r

--model-id -i [identifiant du modùle – requis]

--conda-file -c [chemin vers un fichier YML contenant les dépendances Conda - optionnel]

--dependency -d [Fichiers et répertoires requis par le service - optionnel]

--manifest-description [description du manifeste – optionnel]

--schema-file -s [chemin vers le schĂ©ma du service web – optionnel]

Plusieurs modĂšles et plusieurs dĂ©pendances peuvent ĂȘtre spĂ©cifiĂ©s dans un mĂȘme manifeste en multipliant les arguments -i et -d respectivement. Dans le rĂ©sultat de la commande, vous obtiendrez l'identifiant du manifeste qui est utile pour la suite de ce billet.

Tout comme les modÚles enregistrés dans le service de gestion des modÚles, vous pouvez apercevoir votre manifeste dans le portail Azure ou en utilisant Azure CLI avec la commande az ml manifest list :

La création de l'image Docker du manifeste

Une fois le manifeste créé, pour pouvoir déployer le modÚle dans différents environnements, il est nécessaire pour cela de créer l'image Docker associée.

Remarque : Cette opĂ©ration peut aussi ĂȘtre effectuĂ©e depuis le portail Azure dans votre ressource de gestion des modĂšles en cliquant sur le manifeste qui sera utilisĂ© pour crĂ©er une image puis Create Image :

La commande à utiliser pour créer une image Docker est la suivante :

az ml image create

--image-name -n [image name - requis]

--manifest-id [identifiant du manifeste - requis]

--image-description [description de l'image – optionnel]

Le rĂ©sultat de la commande contient l'identifiant de l'image qui peut ĂȘtre utilisĂ© ensuite pour pouvoir crĂ©er un service web.
De plus, tout comme les modÚles et les manifestes enregistrés, vous pouvez apercevoir la création de l'image dans le portail Azure ou avec la commande az ml image list :


Le déploiement sous forme de service web

Une fois l'image créée, il ne reste plus qu'à la déployer sous forme de conteneur dans Azure.

Remarque : Cette opĂ©ration peut aussi ĂȘtre effectuĂ©e depuis le portail Azure dans votre ressource de gestion des modĂšles en cliquant sur le manifeste ou l'image qui sera utilisĂ©(e) pour crĂ©er le service web puis Create Service :

Pour créer un service avec une image Docker déjà enregistrée auprÚs du service de gestion des modÚles comme dans notre cas de figure, la commande Azure CLI à utiliser est la suivante :

az ml service create realtime

-n [nom du service web – requis]

–image-id [identifiant de l'image à utiliser – requis]

–autoscale-enabled [mise Ă  l'Ă©chelle automatique selon les besoins, dĂ©sactivĂ© par dĂ©faut. True | False – optionnel]

–autoscale-max-replicas [si mise Ă  l'Ă©chelle automatique activĂ©e, nombre max de rĂ©pliques – optionnel]

–autoscale-min-replicas [si mise Ă  l'Ă©chelle automatique activĂ©e, nombre min de rĂ©pliques – optionnel]

--autoscale-refresh-period-seconds [si mise à l'échelle automatique activée, intervalle de temps pour évaluer si mise à l'échelle nécessaire - optionnel]

–collect-model-data [collecte des donnĂ©es en entrĂ©e et en sortie, dĂ©sactivĂ© par dĂ©faut. True | False – optionnel]

–cpu [nombre de cƓurs CPU rĂ©servĂ©s par rĂ©plique (fraction autorisĂ©e) – optionnel]

–enable-app-insights -l [mĂ©triques sur les requĂȘtes, dĂ©sactivĂ© par dĂ©faut ; true | false – optionnel]

–memory [mĂ©moire rĂ©servĂ©e par rĂ©plique en M ou G (1M ou 10G) – optionnel]

–z [nombre de rĂ©pliques pour un service Kubernetes - optionnel]

Remarque : Nous vous recommandons d'activer les mĂ©triques sur les requĂȘtes ainsi que la collecte et l'archivage des donnĂ©es en entrĂ©e et en sortie pour pouvoir monitorer votre service web et ainsi rĂ©agir en cas d'erreurs.

Le service web est automatiquement déployé dans votre environnement de déploiement configuré dans votre Azure CLI.

Encore une fois, vous pouvez accéder à votre service web dans le portail Azure ou via Azure CLI avec la commande az ml service list realtime :

La consommation du service web

Pour pouvoir consommer un service web, il faut au préalable récupérer les informations à propos de celui-ci comme l'URL avec la commande :

az ml service usage realtime -i [identifiant du service web]

Pour tester le service web, la commande à utiliser est la suivante :

az ml service run realtime -i [identifiant du service web] -d "vos données en entrée en format JSON"

Si vous souhaitez consommer le service web via un appel HTTP depuis un programme, vous devez au préalable récupérer les clés d'authentification du service :

az ml service keys realtime -i [identifiant du service web]

La clĂ© d'authentification est Ă  insĂ©rer dans l'en-tĂȘte d'authentification sous la forme "Authorization : Bearer [clĂ© d'authentification du service]".

Vous devez aussi paramĂ©trer l'en-tĂȘte Content-Type en application/json.

Si vous avez aviez soumis un schéma du service web lors de sa création, vous pouvez récupérer le document Swagger associé situé à :

http://<ip>/api/v1/service/<service name>/swagger.json

Vous pouvez retrouver des exemples de scripts en C# et Python dans la documentation officielle (en anglais).

La surveillance du service web

La surveillance de l'utilisation du service

Si vous avez activĂ© les mĂ©triques sur les requĂȘtes via l'argument –enable-app-insights lors de la crĂ©ation du service web, vous pouvez surveiller son utilisation directement depuis le portail Azure en accĂ©dant Ă  votre service web via votre service de gestion des modĂšles avec le service Azure Application Insights.

Vous pouvez récupérer l'URL d'Azure Application Insights directement depuis Azure CLI avec la commande :

az ml service usage realtime -i [identifiant du service web]

La récupération des données d'entrée et de sortie du service

Si vous avez activĂ© la collecte et l'archivage des donnĂ©es d'entrĂ©e et de sortie de votre service web via l'argument –collect-model-data lors de sa crĂ©ation, vous pouvez rĂ©cupĂ©rer alors ces donnĂ©es pour les Ă©tudier en cas de problĂšmes.

Pour cela, vous pouvez les récupérer depuis le portail Azure puis aller dans la catégorie Comptes de stockage. Si celle-ci n'est pas présente, vous pouvez la retrouver en utilisant la recherche dans Tous les services.

Pour déterminer le compte de stockage associé à votre environnement de déploiement, vous devez entrer la commande az ml env show -v et lire le paramÚtre storage_account.

Une fois dans le compte de stockage, accédez à la section Parcourir les objets blob puis accédez au conteneur modeldata. L'ensemble des données archivées sont dans un fichier CSV sous l'URL suivante :

/modeldata/<subscription_id>/<resource_group_name>/<model_management_account_name>/<webservice_name>/<model_id>-<model_name>-<model_version>/<identifier>/<year>/<month>/<day>/data.csv

Les donnĂ©es provenant d'Azure Blob peuvent ĂȘtre consommĂ©es de diffĂ©rentes façons :

  • Azure Machine Learning Workbench ;
  • Microsoft Excel ;
  • Microsoft Power BI (crĂ©ation de graphiques) ;
  • Et d'autres


Remarque : Les donnĂ©es peuvent mettre jusqu'Ă  10 minutes aprĂšs la requĂȘte pour ĂȘtre propagĂ©es dans votre compte de stockage.

En guise de conclusion

A travers ce billet, vous avez pu découvrir - si tel n'était pas encore le cas - le service de gestion des modÚles d'Azure ML qui permet, entre autres, la création d'un service web basé sur un modÚle entrainé en quelques étapes seulement.

NĂ©anmoins, vous pouvez aussi dĂ©ployer votre modĂšle dans des pĂ©riphĂ©riques en bordure avec Azure IoT Edge. Ce point sera traitĂ© dans un autre billet de cette mĂȘme sĂ©rie prochainement.

Enfin, si vous avez le moindre problÚme lors du déploiement de vos modÚles, vous pouvez vous référer au Guide de résolution des problÚmes liés au déploiement ici.

↧

Viewing all articles
Browse latest Browse all 5308

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>