Partager via


Créer des travaux et des données d’entrée pour les points de terminaison de lot

Les points de terminaison de lot vous permettent d’effectuer de longues opérations de traitement par lots sur de grandes quantités de données. Les données peuvent être situées à différents endroits, par exemple dans des régions dispersées. Certains types de points de terminaison de lot peuvent également recevoir des paramètres de littéraux en tant qu’entrées.

Cet article explique comment spécifier des entrées de paramètres pour les points de terminaison de lot et créer des travaux de déploiement. Le processus prend en charge l’utilisation de différents types de données. Pour obtenir des exemples, consultez Présentation des entrées et sorties.

Prérequis

Pour appeler un point de terminaison de lot et créer des travaux avec succès, veillez à disposer des prérequis suivants :

  • Un point de terminaison par lots et un déploiement. Si vous ne disposez pas de ces ressources, consultez Déployer des modèles pour le scoring dans des points de terminaison de lot pour créer un déploiement.

  • Des autorisations pour exécuter un déploiement de point de terminaison par lots. Les rôles Scientifique des données, Contributeur et Propriétaire AzureML peuvent être utilisés pour exécuter un déploiement. Pour les définitions de rôles personnalisés, consultez Autorisation sur les points de terminaison de lot pour passer en revue les autorisations spécifiques nécessaires.

  • Un jeton Microsoft Entra ID valide représentant un principal de sécurité pour appeler le point de terminaison. Ce principal peut être un principal d’utilisateur ou un principal de service. Après que vous avez appelé un point de terminaison, Azure Machine Learning crée un travail de déploiement par lots sous l’identité associée au jeton. Vous pouvez utiliser vos propres informations d’identification pour l’appel, comme décrit dans les procédures suivantes.

    Utilisez Azure CLI pour vous connecter avec l’authentification interactive ou par code d’appareil :

    az login
    

    Pour en savoir plus sur la façon de démarrer des travaux de déploiement par lots en utilisant différents types d’informations d’identification, consultez Comment exécuter des travaux à l’aide de différents types d’informations d’identification.

  • Le cluster de calcul où le point de terminaison est déployé a accès pour lire les données d’entrée.

    Conseil

    Si vous utilisez un magasin de données sans informations d’identification ou un compte Stockage Azure externe comme entrée de données, veillez à configurer des clusters de calcul pour l’accès aux données. L’identité managée du cluster de calcul est utilisée pour le montage du compte de stockage. L’identité du travail (demandeur) est encore utilisée afin de lire les données sous-jacentes, ce qui vous permet d’obtenir un contrôle d’accès granulaire.

Principes de base pour créer des travaux

Pour créer un travail à partir d’un point de terminaison de lot, vous appelez le point de terminaison. L’appel peut être effectué avec Azure CLI, le kit SDK Azure Machine Learning pour Python, ou un appel d’API REST. Les exemples suivants montrent les principes de base d’un appel de point de terminaison de lot qui reçoit un seul dossier de données d’entrée à traiter. Pour obtenir des exemples avec différentes entrées et sorties, consultez Présentation des entrées et sorties.

Utilisez l’opération invoke sous des points de terminaison de lot :

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Appeler un déploiement spécifique

Les points de terminaison par lots peuvent héberger plusieurs déploiements sous le même point de terminaison. Le point de terminaison par défaut est utilisé, sauf si l’utilisateur le spécifie autrement. Vous pouvez changer le déploiement à utiliser avec les procédures suivantes.

Utilisez l’argument --deployment-name ou -d pour spécifier le nom du déploiement :

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --deployment-name $DEPLOYMENT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Configurer les propriétés du travail

Vous pouvez configurer certaines propriétés du travail créé au moment de l’appel.

Remarque

À l’heure actuelle, la capacité à configurer les propriétés du travail n’est disponible que dans les points de terminaison de lot avec les déploiements de composants Pipeline.

Configurer le nom de l’expérience

Appliquez les procédures suivantes pour configurer le nom de l’expérience.

Utilisez l’argument --experiment-name pour spécifier le nom de l’expérience :

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --experiment-name "my-batch-job-experiment" \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Présentation des entrées et des sorties

Les points de terminaison par lots fournissent une API durable que les consommateurs peuvent utiliser pour créer des programmes de traitement par lots. La même interface peut être utilisée pour spécifier les entrées et les sorties attendues par votre déploiement. Utilisez des entrées pour transmettre les informations dont votre point de terminaison a besoin pour effectuer le travail.

Diagramme montrant la façon dont les entrées et sorties sont utilisées dans des points de terminaison par lots.

Les points de terminaison par lots prennent en charge deux types d’entrées :

  • Entrées de données : pointeurs vers un emplacement de stockage spécifique ou une ressource Azure Machine Learning.
  • Entrées littérales : valeurs littérales, comme des nombres ou des chaînes, que vous souhaitez transmettre au travail.

Le nombre et le type d’entrées et de sorties dépendent du type de déploiement par lots. Les modèles de déploiement nécessitent toujours une entrée de données et produisent une sortie de données. Les entrées littérales ne sont pas prises en charge. Toutefois, les déploiements de composants de pipeline fournissent une construction plus générale pour générer des points de terminaison et vous permettent de spécifier n’importe quel nombre d’entrées (données et littérales) et de sorties.

Le tableau suivant récapitule les entrées et sorties pour les déploiements par lots :

Type de déploiement Nombre d’entrées Types d’entrée pris en charge Nombre de sorties Types de sortie pris en charge
Déploiement de modèle 1 Entrées de données 1 Sorties de données
Déploiement de composant de pipeline [0..N] Entrées de données et entrées de littéral [0..N] Sorties de données

Conseil

Les entrées et sorties sont toujours nommées. Les noms servent de clés pour identifier les données et transmettre la valeur réelle lors de l’appel. Étant donné que les modèles de déploiement nécessitent toujours une entrée et une sortie, le nom est ignoré lors de l’appel. Vous pouvez attribuer le nom qui correspond le mieux à votre cas d’usage, par exemple « estimation_ventes ».

Explorer les entrées de données

Les entrées de données désignent les entrées qui pointent vers un emplacement où les données sont placées. Les points de terminaison de lot consommant généralement de grandes quantités de données, vous ne pouvez pas transmettre les données d’entrée dans le cadre de la demande d’appel. Au lieu de cela, vous devez spécifiez l’emplacement où le point de terminaison par lots doit se rendre pour rechercher les données. Les données d’entrée sont montées et diffusées en continu sur le calcul cible pour améliorer les performances.

Les points de terminaison par lots prennent en charge la lecture de fichiers situés dans les emplacements de stockage suivants :

  • Ressources de données Azure Machine Learning, y compris dossier (uri_folder) et fichier (uri_file).
  • Magasins de données Azure Machine Learning, y compris Stockage Blob Azure, Azure Data Lake Storage Gen1 et Azure Data Lake Storage Gen2.
  • Comptes Stockage Azure, y compris Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2 et Stockage Blob Azure.
  • Fichiers/dossiers de données locales (CLI Azure Machine Learning ou kit de développement logiciel (SDK) Azure Machine Learning pour Python). Toutefois, cette opération entraîne le chargement des données locales dans la banque de données Azure Machine Learning par défaut de l’espace de travail sur lequel vous travaillez.

Important

Note relative à la suppression de fonctionnalités : les jeux de données de type FileDataset (V1) sont déconseillés et seront mis hors service à l’avenir. Les points de terminaison de lot existants qui s’appuient sur cette fonctionnalité continueront de fonctionner. Les points de terminaison de lot créés avec GA CLIv2 (version 2.4.0 et ultérieures) ou l’API REST GA (version 2022-05-01 et ultérieures) ne prendront pas en charge le jeu de données V1.

Explorer les entrées littérales

Les entrées de littéral font référence aux entrées qui peuvent être représentées et résolues au moment de l’appel, telles que les chaînes, les nombres et les valeurs booléennes. Vous utilisez généralement des entrées de littéral pour transmettre des paramètres à votre point de terminaison dans le cadre d’un déploiement de composants de pipeline. Les points de terminaison par lots prennent en charge les types de littéral suivants :

  • string
  • boolean
  • float
  • integer

Les entrées littérales ne sont prises en charge que dans les déploiements de composants de pipeline. Consultez Créer des tâches avec des entrées littérales pour savoir comment les spécifier.

Explorer les sorties de données

Les sorties de données font référence à l’emplacement où les résultats d’un programme de traitement par lots doivent être placés. Chaque sortie a un nom identifiable, et Azure Machine Learning attribue automatiquement un chemin d’accès unique à chaque sortie nommée. Vous pouvez spécifier un autre chemin d’accès, selon les besoins.

Important

Les points de terminaison Batch prennent uniquement en charge l’écriture de sorties dans les magasins de données du Stockage Blob Azure. Si vous devez écrire dans un compte de stockage avec des espaces de noms hiérarchiques activés (également appelé Azure Datalake Gen2 ou ADLS Gen2), vous pouvez inscrire le service de stockage en tant que magasin de données Stockage Blob Azure, car les services sont entièrement compatibles. De cette façon, vous pouvez écrire des sorties de points de terminaison de lot vers ADLS Gen2.

Créer des tâches avec des entrées de données

Les exemples suivants montrent comment créer des tâches et utiliser des entrées de données à partir de ressources de données, magasins de données et comptes de Stockage Azure.

Utiliser des données d’entrée à partir d’une ressource de données

Les ressources de données Azure Machine Learning (anciennement appelées jeux de données) sont prises en charge comme entrées pour les travaux. Effectuez ces étapes pour exécuter un travail de point de terminaison de lot à l’aide de données stockées dans une ressource de données inscrite dans Azure Machine Learning.

Avertissement

Les ressources de données de type Table (MLTable) ne sont actuellement pas prises en charge.

  1. Tout d’abord, créez la ressource de données. Cette ressource de données se compose d’un dossier contenant plusieurs fichiers CSV que vous traitez en parallèle à l’aide de points de terminaison de lot. Vous pouvez ignorer cette étape si vos données sont déjà inscrites en tant que ressource de données.

    Créez une définition de ressource de données dans YAML :

    heart-dataset-unlabeled.yml

    $schema: https://azuremlschemas.azureedge.net/latest/data.schema.json
    name: heart-dataset-unlabeled
    description: An unlabeled dataset for heart classification.
    type: uri_folder
    path: heart-classifier-mlflow/data
    

    Ensuite, créez la ressource de données :

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. Créez l’entrée ou la requête :

    DATASET_ID=$(az ml data show -n heart-dataset-unlabeled --label latest | jq -r .id)
    
  3. Exécutez le point de terminaison :

    Utilisez l’argument --set pour spécifier l’entrée :

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$DATASET_ID
    

    Pour un point de terminaison qui sert un déploiement de modèle, vous pouvez utiliser l’argument --input pour spécifier l’entrée de données, car un déploiement de modèle nécessite toujours une seule entrée de données.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $DATASET_ID
    

    L’argument --set a tendance à produire de longues commandes lorsque plusieurs entrées sont spécifiées. Dans ce cas, placez vos entrées dans un fichier YAML et utilisez l’argument --file pour spécifier les entrées dont vous avez besoin pour l’appel de votre point de terminaison.

    inputs.yml

    inputs:
      heart_dataset: azureml:/<datasset_name>@latest
    

    Exécutez la commande suivante :

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

Utiliser des données d’entrée à partir de magasins de données

Vous pouvez directement référencer des données à partir de magasins de données inscrits auprès d’Azure Machine Learning avec des travaux de déploiements par lots. Dans cet exemple, vous allez d’abord devoir charger des données dans le magasin de données par défaut dans l’espace de travail Azure Machine Learning, puis exécuter un déploiement par lots dessus. Procédez comme suit pour exécuter un travail de point de terminaison par lots à l’aide de données stockées dans une banque de données.

  1. Accédez à la banque de données par défaut dans l’espace de travail Azure Machine Learning. Si vos données se trouvent dans une autre banque, vous pouvez l’utiliser à la place. Il n’est pas obligatoire d’utiliser le magasin de données par défaut.

    DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
    

    L’ID des magasins de données ressemble à /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>.

    Conseil

    Le magasin de données blob par défaut dans un espace de travail se nomme workspaceblobstore. Vous pouvez ignorer cette étape si vous connaissez déjà l’ID de ressource du magasin de données par défaut dans votre espace de travail.

  2. Chargez des exemples de données dans le magasin de données.

    Cet exemple part du principe que vous avez déjà chargé les exemples de données inclus dans le référentiel dans le dossier sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/data dans le dossier heart-disease-uci-unlabeled du compte Stockage Blob. Veillez à effectuer cette étape avant de poursuivre.

  3. Créez l’entrée ou la requête :

    Placez le chemin d’accès du fichier dans la variable INPUT_PATH :

    DATA_PATH="heart-disease-uci-unlabeled"
    INPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    Notez comment la variable paths du chemin d’accès est ajoutée à l’ID de ressource du magasin de données. Ce format indique que la valeur qui suit est un chemin d’accès.

    Conseil

    Vous pouvez également utiliser le format azureml://datastores/<data-store>/paths/<data-path> pour spécifier l’entrée.

  4. Exécutez le point de terminaison :

    Utilisez l’argument --set pour spécifier l’entrée :

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_PATH
    

    Pour un point de terminaison qui sert un déploiement de modèle, vous pouvez utiliser l’argument --input pour spécifier l’entrée de données, car un déploiement de modèle nécessite toujours une seule entrée de données.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_PATH --input-type uri_folder
    

    L’argument --set a tendance à produire de longues commandes lorsque plusieurs entrées sont spécifiées. Dans ce cas, placez vos entrées dans un fichier YAML et utilisez l’argument --file pour spécifier les entrées dont vous avez besoin pour l’appel de votre point de terminaison.

    inputs.yml

    inputs:
      heart_dataset:
        type: uri_folder
        path: azureml://datastores/<data-store>/paths/<data-path>
    

    Exécutez la commande suivante :

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

    Si vos données sont un fichier, utilisez plutôt le type uri_file pour l’entrée.

Utiliser des données d’entrée à partir de comptes Stockage Azure

Les points de terminaison par lots Azure Machine Learning peuvent lire des données à partir d’emplacements cloud dans les comptes de stockage Azure publics et privés. Effectuez les étapes suivantes pour exécuter un travail de point de terminaison de lot avec des données stockées dans un compte de stockage.

Pour en savoir plus sur la configuration supplémentaire requise pour lire des données à partir de comptes de stockage, consultez Configurer des clusters de calcul pour l’accès aux données.

  1. Créez l’entrée ou la requête :

    Définissez la variable INPUT_DATA :

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
    

    Si vos données sont un fichier, définissez la variable au format suivant :

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
    
  2. Exécutez le point de terminaison :

    Utilisez l’argument --set pour spécifier l’entrée :

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_DATA
    

    Pour un point de terminaison qui sert un déploiement de modèle, vous pouvez utiliser l’argument --input pour spécifier l’entrée de données, car un déploiement de modèle nécessite toujours une seule entrée de données.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_DATA --input-type uri_folder
    

    L’argument --set a tendance à produire de longues commandes lorsque plusieurs entrées sont spécifiées. Dans ce cas, placez vos entrées dans un fichier YAML et utilisez l’argument --file pour spécifier les entrées dont vous avez besoin pour l’appel de votre point de terminaison.

    inputs.yml

    inputs:
      heart_dataset:
        type: uri_folder
        path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
    

    Exécutez la commande suivante :

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

    Si vos données sont un fichier, utilisez plutôt le type uri_file pour l’entrée.

Créer des tâches avec des entrées littérales

Les déploiements de composants de pipeline prennent en charge les entrées littérales. L’exemple suivant montre comment spécifier une entrée nommée score_mode, de type string, avec la valeur append :

Placez vos entrées dans un fichier YAML et utilisez --file pour spécifier les entrées dont vous avez besoin pour l’appel de votre point de terminaison.

inputs.yml

inputs:
  score_mode:
    type: string
    default: append

Exécutez la commande suivante :

az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml

Vous pouvez également utiliser l’argument --set pour spécifier la valeur. Cette approche a toutefois tendance à produire de longues commandes quand plusieurs entrées sont spécifiées :

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
    --set inputs.score_mode.type="string" inputs.score_mode.default="append"

Créer des tâches avec des sorties de données

L’exemple suivant montre comment modifier l’emplacement où une sortie nommée score est placée. À des fins d’exhaustivité, ces exemples configurent également une entrée nommée heart_dataset.

  1. Enregistrez la sortie à l’aide du magasin de données par défaut dans l’espace de travail Azure Machine Learning. Vous pouvez utiliser n’importe quel autre magasin de données dans votre espace de travail, tant qu’il s’agit d’un compte Stockage Blob.

    DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
    

    L’ID des magasins de données ressemble à /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>.

  2. Créez une sortie de données :

    Définissez la variable OUTPUT_PATH :

    DATA_PATH="batch-jobs/my-unique-path"
    OUTPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    À des fins d’exhaustivité, créez également une entrée de données :

    INPUT_PATH="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
    

    Remarque

    Notez comment la variable paths du chemin d’accès est ajoutée à l’ID de ressource du magasin de données. Ce format indique que la valeur qui suit est un chemin d’accès.

  3. Exécutez le déploiement :

    Utilisez l’argument --set pour spécifier l’entrée :

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.path=$INPUT_PATH \
        --set outputs.score.path=$OUTPUT_PATH