Comment envoyer un modèle déjà entrainé dans Azure ML et l’utiliser via Web Service

Le contexte de cet article est le suivant :

  • Vous voulez utiliser un modèle entrainé (de type classification, régression…) via un web service d’Azure ML
  • Vous avez des données sensibles TOP SECRET et vous ne voulez pas les envoyer dans le cloud Azure

Il existe alors une solution pour vous si vous vous s’y connaissez en R, voici la procédure :

  1. Entrainer votre modèle dans un script R en local à partir de vos jeux de données. Par exemple, voici comment créer un modèle entrainé de classification à partir du dataset iris :
  2. library(mda)
    data(iris)

    fit <- mda(Species~., data=iris)

    Le modèle est alors stocké dans l’objet R appelé “fit”

  3. Enregistrer le modèle dans un fichier “.rda” avec la commande R suivante :

    save(fit, file = "C:/model.rda")

  4. Zipper le fichier model.rda en model.zip et uploader le zip dans un dataset dans Azure ML :
    • snip_20160214121005
  5. Créer une nouvelle expérimentation Azure ML avec la configuration suivante :
    • Premier composant contenant une simple ligne de test avec les bonnes features et formats en entrée du modèle. Pour simplifier les choses, j’ai utilisé un script R qui envoie dans le data frame de sortie la première ligne du dataset IRIS :
    • data.set = iris[1,1:4]

      maml.mapOutputPort("data.set");

      Ce composant servira juste à la validation de l’expérimentation.

    • Le dataset “model.zip” que nous venons de créer
    • Et le plus important, un composant de script R qui fera l’équivalant d’un SCORE, avec en entrée Dataset1 le composant contenant la ligne de features et en entrée Script Bundle (zip) le dataset model.zip. Ce composant va charger le modèle, l’utiliser et envoyer la prédiction dans le dataset de sortie via le code R suivant :
    • dataIN <- maml.mapInputPort(1) # class: data.frame

      load("src/model.rda");
      library(mda)


      predictions <- predict(fit, dataIN)

      data.set <- data.frame(dataIN, predictions)
      maml.mapOutputPort("data.set");
  6. Faire ensuite un Run de l’expérimentation pour s’assurer que tout fonctionne correctement, et ensuite passer en mode web service en mettant l’input et l’output web service en entrée et sortie du script R de SCORE :
    • snip_20160214121617

      Et enfin, déployer et utiliser le Web Service !

      Nous arrivons donc avec ce procédé à utiliser un model en mode web service d’Azure ML sans l’entrainer dans Azure ML.

      Pour plus d’infos, des exemples de scripts R sur la classification du dataset Iris : http://machinelearningmastery.com/non-linear-classification-in-r/ 


FADATA

Fabien Adato est Customer Engineer Data et AI chez Microsoft. Après avoir intégré la société CGI Business Consulting où il rejoint une équipe dédiée à la Business Intelligence, il fait ses premières armes sur la solution Microsoft SQL Server. Pendant plus de 4 ans, il acquiert des compétences techniques et fonctionnelles sur toute la chaîne de valeur de la BI (ETL, Base de Données, Cube Olap et Rapport). Il a pu se spécialiser également sur de nouvelles technologies de la Data et notamment Hadoop, Pig et Hive, ainsi que des technologies self-service BI, le No-SQL comme la base de données MongoDB et le moteur d’indexation ElasticSearch. Il entre chez AZEO en 2014 puis Avanade en 2021 puis Microsoft en 2021 pour y assurer le poste de CE DATA / AI, autour des technologies Microsoft SQL Server, Power BI et Azure Data.

9 thoughts on “Comment envoyer un modèle déjà entrainé dans Azure ML et l’utiliser via Web Service

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.