Compétence Machine Learning personnalisée

Effectué

L’utilisation d’une compétence personnalisée Machine Learning fonctionne de la même façon que l’ajout d’une autre compétence personnalisée à un index de recherche.

Ici, vous verrez en quoi utiliser la compétence personnalisée AmlSkill est différent et étudierez les considérations relatives à son utilisation efficace.

Schéma de compétence Azure Machine Learning personnalisé

Lorsque vous enrichissez un index de recherche avec une compétence personnalisée Azure Machine Learning (AML), l’enrichissement se produit au niveau du document. L’ensemble de compétences utilisé par votre indexeur de documents doit inclure un AmlSkill. Le schéma de cette compétence est :

{
      "@odata.type": "#Microsoft.Skills.Custom.AmlSkill",
      "name": "AML name",
      "description": "AML description",
      "context": "/document",
      "uri": "https://[Your AML endpoint]",
      "key": "Your AML endpoint key",
      "resourceId": null,
      "region": null,
      "timeout": "PT30S",
      "degreeOfParallelism": 1,
      "inputs": [
        {
          "name": "field name in the AML model",
          "source": "field from the document in the index"
        },
        {
          "name": "field name in the AML model",
          "source": "field from the document in the index"
        },

      ],
      "outputs": [
        {
          "name": "result field from the AML model",
          "targetName": "result field in the document"
        }
      ]
    }

Important

L’URI doit utiliser un point de terminaison HTTPS. Il peut s’agir d’une adresse URL personnalisée gérée fournie par Microsoft ou de vos propres nom de domaine et certificat.

Notez que la compétence personnalisée n’inclut pas de paramètres pour batchSize, car le modèle AML va traiter un seul document à la fois. Les paramètres restants qui contrôlent les performances de la compétence sont timeout et degreeOfParallelism. Le schéma ci-dessus a défini 30 secondes comme valeur de délai d’expiration. Le degré de parallélisme doit commencer à un. Selon votre infrastructure, vous pouvez augmenter ce nombre.

La meilleure façon de gérer l’efficacité d’une compétence AML consiste à mettre à l’échelle le cluster d’inférence Kubernetes de manière appropriée pour gérer votre charge de travail.

L’index du document a besoin d’un champ pour stocker les résultats du modèle AML. Vous allez ensuite ajouter un mappage de champs de sortie pour stocker les résultats de l’ensemble de compétences personnalisé sur le champ du document dans l’index.

Le code JSON pour effectuer ce mappage de champs de sortie est le suivant :

"outputFieldMappings": [
    {
      "sourceFieldName": "/result field in the document",
      "targetFieldName": "result field from the AML model"
    }
  ]

Vous créez votre modèle Azure Machine Learning à l’aide d’outils de développement tels que le kit de développement logiciel (SDK) Python, les API REST ou l’interface de ligne de commande Azure. Une autre option consiste à tirer parti d’Azure AI Machine Learning studio, une interface utilisateur graphique avec laquelle vous pouvez créer, effectuer l’apprentissage et déployer des modèles sans écrire de code.

Diagramme montrant les étapes pour enrichir un index de recherche avec un modèle Azure AI Machine Learning Studio.

Avec un modèle créé, vous changez la façon dont le code de scoring appelle le modèle pour permettre son utilisation par votre compétence de recherche personnalisée.

Les dernières étapes consistent à créer un cluster Kubernetes pour héberger un point de terminaison de votre modèle.

Créer un espace de travail AML

Lorsque vous créez l’espace de travail AML, Azure crée en parallèle des comptes de stockage, un magasin de clés et des ressources Application Insights. Le volet Vue d’ensemble de l’espace de travail AML un lien à utiliser pour lancer Azure AI Machine Learning Studio.

Créer et entraîner un modèle dans Azure Machine Learning studio

Avec Azure AI Machine Learning Studio, vous pouvez utiliser un concepteur comportant une fonctionnalité de glisser-déposer pour créer des pipelines qui créent et effectuent l’apprentissage des modèles. Il existe un moyen encore plus simple de créer des modèles : les modèles prédéfinis.

Capture d’écran de tous les composants prédéfinis dans Azure AI Machine Learning Studio.

Si vous choisissez de créer vos propres modèles, vous devez les inscrire dans Azure AI Machine Learning Studio avant de pouvoir les déployer sur un service web.

Changer le mode de fonctionnement d’un modèle pour permettre l’appel du modèle par la compétence personnalisée AML

Les modèles que vous entraînez utiliseront généralement de nombreux exemples de données. Les jeux de données comporteront eux-mêmes beaucoup de lignes. Ils seront divisés et utilisés pour entraîner et tester le modèle. Le code qui traite ces données et les passe au modèle doit être modifié pour traiter des lignes individuelles.

La réponse JSON reçue du modèle doit aussi contenir uniquement la prédiction de sortie.

Par exemple, si vos données sont un tableau d’objets JSON :

[ 
    {
        "attribute-1": null,
        "attribute-2": null
    },
    {
        "attribute-1": null,
        "attribute-2": null
    },
    {
        "attribute-1": null,
        "attribute-2": null
    }
]

Le code de scoring Python doit traiter les données ligne par ligne :

data = json.loads(data)
for row in data:
    for key, val in row.items():
        input_entry[key].append(decode_nan(val))

Pour remplacer le jeu de données d’entrée par un seul enregistrement :

{
    "attribute-1": null,
    "attribute-2": null
}

Le code Python doit être remplacé par :

data = json.loads(data)
for key, val in data.items():
    input_entry[key].append(decode_nan(val))

En réponse du code de scoring, le code par défaut retourne l’ensemble du document JSON :

return json.dumps({"result": result.data_frame.values.tolist()})

La compétence personnalisée doit être en mesure de mapper une seule réponse à partir du modèle. Par conséquent, le code doit retourner JSON qui est uniquement le dernier attribut.

output = result.data_frame.values.tolist()
# return the last column of the the first row of the dataframe
return {
    "predicted_outcome": output[0][-1]
}

Créer un point de terminaison à utiliser pour votre modèle

Le modèle est déployé sur un point de terminaison. Azure AI Machine Learning Studio prend en charge le déploiement d’un modèle sur un point de terminaison en temps réel, un point de terminaison de lot ou un service web. Pour le moment, la compétence AmlSkillpersonnalisée dans Recherche Azure AI prend uniquement en charge les points de terminaison de service web.

L’autre restriction est que le point de terminaison doit être un cluster Azure Kubernetes Service (AKS). Les instances de conteneur ne sont pas prises en charge.

Si vous savez comment créer et gérer des clusters AKS, vous pouvez créer manuellement les clusters dans le portail Azure et les référencer lorsque vous créez votre point de terminaison. Toutefois, il est plus facile de laisser Azure AI Machine Learning Studio créer et gérer le cluster pour vous.

Si vous accédez à la section de calcul du studio, vous pouvez créer des clusters d’inférence. AML studio vous guidera ensuite dans le choix de la taille du cluster. De plus, il active HTTPS et crée un nom de domaine pour vous. Elle se présente au format suivant : location.cloudapp.azure.com:443

Connecter la compétence personnalisée AML au point de terminaison

Une fois que vous avez tout configuré comme expliqué ci-dessus, vous devez mettre à jour votre service Recherche Azure AI. Les étapes à suivre sont similaires aux exemples présentés dans ce module : nous n’allons donc pas ici détailler les spécificités, mais simplement lister les étapes à suivre.

  1. Tout d’abord, pour enrichir votre index de recherche, vous ajoutez un nouveau champ à l’index afin d’inclure la sortie du modèle.
  2. Ensuite, vous mettez à jour votre ensemble de compétences d’index et vous ajoutez la compétence personnalisée #Microsoft.Skills.Custom.AmlSkill.
  3. Après cela, vous modifiez votre indexeur pour mapper la sortie de la compétence personnalisée au champ que vous avez créé dans l’index.
  4. Dernière étape, vous réexécutez l’indexeur pour enrichir votre index avec le modèle AML.