Azure Machine Learning fournit plusieurs façons d’envoyer des travaux d’apprentissage ML. Dans cet article, vous allez apprendre à envoyer des travaux à l’aide des méthodes suivantes :
Extension Azure CLI pour Machine Learning : l’extension ml, également appelée CLI v2.
Kit de développement logiciel (SDK) Python v2 pour Azure Machine Learning.
API REST : API sur laquelle l’interface CLI et le kit de développement logiciel (SDK) sont basés.
Un espace de travail Azure Machine Learning. Si vous n’en avez pas, vous pouvez utiliser les étapes décrites dans l’article Créer des ressources pour démarrer.
L’utilitaire curl. Le programme curl est disponible dans le Sous-système Windows pour Linux ou dans toute distribution UNIX.
Conseil
Dans PowerShell, curl est un alias pour Invoke-WebRequest et curl -d "key=val" -X POST uri devient Invoke-WebRequest -Body "key=val" -Method POST -Uri uri.
Bien qu’il soit possible d’appeler l’API REST à partir de PowerShell, les exemples de cet article supposent que vous utilisez Bash.
Utilitaire jq pour le traitement JSON. Cet utilitaire permet d’extraire des valeurs des documents JSON retournés à partir d’appels d’API REST.
Cloner le référentiel d’exemples
Les extraits de code de cet article sont basés sur des exemples dans le référentiel GitHub d’exemples Azure Machine Learning. Pour cloner le référentiel dans votre environnement de développement, utilisez la commande suivante :
Utilisez --depth 1 pour cloner uniquement le dernier commit dans le dépôt, ce qui réduit le temps nécessaire à l’exécution de l’opération.
Exemple de travail
Les exemples de cet article utilisent le jeu de données d’iris pour effectuer l’apprentissage d’un modèle MLFlow.
Effectuer l’apprentissage dans le cloud
Lors de l’apprentissage dans le cloud, vous devez vous connecter à votre espace de travail Azure Machine Learning et sélectionner une ressource de calcul qui sera utilisée pour exécuter le travail d’apprentissage.
1. Connexion à l’espace de travail
Conseil
Utilisez les onglets ci-dessous pour sélectionner la méthode que vous souhaitez utiliser pour effectuer l’apprentissage d’un modèle. La sélection d’un onglet bascule automatiquement tous les onglets de cet article vers le même onglet. Vous pouvez sélectionner un autre onglet à tout moment.
Pour vous connecter à l’espace de travail, vous avez besoin de paramètres d’identificateur : un abonnement, un groupe de ressources et un nom d’espace de travail. Vous utiliserez ces informations dans MLClient de l’espace de noms azure.ai.ml pour obtenir un descripteur vers l’espace de travail Azure Machine Learning requis. Pour vous authentifier, vous utilisez l’authentification Azure par défaut. Consultez cet exemple pour plus d’informations sur la configuration des informations d’identification et la connexion à un espace de travail.
#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'
#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
Lors de l’utilisation de l’Azure CLI, vous avez besoin de paramètres d’identificateur : un abonnement, un groupe de ressources et un nom d’espace de travail. Bien que vous puissiez spécifier ces paramètres pour chaque commande, vous pouvez également définir des valeurs par défaut qui seront utilisées pour toutes les commandes. Utilisez les commandes suivantes pour définir les valeurs par défaut. Remplacez <subscription ID>, <Azure Machine Learning workspace name> et <resource group> par les valeurs de votre configuration :
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Les exemples d’API REST de cet article utilisent les espaces réservés $SUBSCRIPTION_ID, $RESOURCE_GROUP, $LOCATION et $WORKSPACE. Remplacez les espaces réservés par vos valeurs comme suit :
$SUBSCRIPTION_ID: ID de votre abonnement Azure.
$RESOURCE_GROUP : groupe de ressources Azure qui contient votre espace de travail.
$LOCATION : région Azure où se trouve votre espace de travail.
$WORKSPACE : nom de votre espace de travail Azure Machine Learning.
$COMPUTE_NAME : nom de votre cluster de calcul Azure Machine Learning.
Les requêtes REST administratives utilisent un jeton d’authentification de principal de service. Vous pouvez récupérer un jeton à l’aide de la commande suivante. Le jeton est stocké dans la variable d’environnement $TOKEN :
Le fournisseur de services utilise l’argument api-version pour garantir la compatibilité. L’argument api-version varie d’un service à l’autre. Définissez la version de l’API en tant que variable pour prendre en charge les futures versions :
API_VERSION="2022-05-01"
Quand vous effectuez l’entraînement à l’aide de l’API REST, les données et les scripts d’entraînement doivent être chargés sur un compte de stockage auquel l’espace de travail peut accéder. Dans l’exemple suivant, les informations de stockage pour votre espace de travail sont récupérées et enregistrées dans des variables, pour un usage ultérieur :
Un cluster de calcul Azure Machine Learning est une ressource de calcul entièrement gérée qui peut être utilisée pour exécuter le travail d’apprentissage. Dans les exemples suivants, un cluster de calcul nommé cpu-compute est créé.
Bien qu’une réponse soit retournée après quelques secondes, cela indique uniquement que la requête de création a été acceptée. La création du cluster peut prendre plusieurs minutes.
Pour exécuter ce script, vous allez utiliser un command qui exécute le script Python main.py situé sous ./sdk/python/jobs/single-step/lightgbm/iris/src/. La commande sera exécutée en la soumettant comme job à Azure Machine Learning.
Remarque
Pour utiliser le calcul serverless, supprimez compute="cpu-cluster" dans ce code.
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url
Dans les exemples ci-dessus, vous avez configuré :
code : chemin où se trouve le code utilisé pour exécuter la commande
command : commande à exécuter
environment : l’environnement nécessaire pour exécuter le script d’apprentissage. Dans cet exemple, nous utilisons un environnement organisé ou prêt à l’emploi fourni par Azure Machine Learning appelé AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Nous utilisons la dernière version de cet environnement à l’aide de la directive @latest. Vous pouvez également utiliser des environnements personnalisés en spécifiant une image docker de base et en spécifiant un fichier yaml conda par dessus celui-ci.
inputs : dictionnaire d’entrées de paires nom-valeur pour la commande. La clé est un nom pour l’entrée dans le contexte du travail et la valeur est la valeur d’entrée. Les entrées sont référencées dans command avec l’expression ${{inputs.<input_name>}}. Pour utiliser des fichiers ou des dossiers en entrées, vous pouvez utiliser la classe Input. Pour plus d’informations, consultez Expressions du kit de développement logiciel (SDK) et de CLI v2.
Lorsque vous envoyez le travail, une URL est retournée à l’état du travail dans Azure Machine Learning Studio. Utilisez l’interface utilisateur Studio pour afficher la progression du travail. Vous pouvez également utiliser returned_job.status pour vérifier l’état actuel du travail.
La commande az ml job create utilisée dans cet exemple nécessite un fichier de définition de travail YAML. Le contenu du fichier utilisé dans cet exemple est le suivant :
Remarque
Pour utiliser le calcul serverless, supprimez compute: azureml:cpu-cluster" dans ce code.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: src
command: >-
python main.py
--iris-csv ${{inputs.iris_csv}}
inputs:
iris_csv:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
environment: azureml:AzureML-lightgbm-3.3@latest
compute: azureml:cpu-cluster
display_name: lightgbm-iris-example
experiment_name: lightgbm-iris-example
description: Train a LightGBM model on the Iris dataset.
Dans ce qui précède, vous avez configuré les éléments suivants :
code : chemin où se trouve le code utilisé pour exécuter la commande
command : commande à exécuter
inputs : dictionnaire d’entrées de paires nom-valeur pour la commande. La clé est un nom pour l’entrée dans le contexte du travail et la valeur est la valeur d’entrée. Les entrées sont référencées dans command avec l’expression ${{inputs.<input_name>}}. Pour plus d’informations, consultez Expressions du kit de développement logiciel (SDK) et de CLI v2.
environment : l’environnement nécessaire pour exécuter le script d’apprentissage. Dans cet exemple, nous utilisons un environnement organisé ou prêt à l’emploi fourni par Azure Machine Learning appelé AzureML-lightgbm-3.3. Nous utilisons la dernière version de cet environnement à l’aide de la directive @latest. Vous pouvez également utiliser des environnements personnalisés en spécifiant une image docker de base et en spécifiant un fichier yaml conda par dessus celui-ci.
Pour envoyer le travail, utilisez la commande suivante. L’ID d’exécution (nom) du travail d’apprentissage est stocké dans la variable $run_id :
run_id=$(az ml job create -f jobs/single-step/lightgbm/iris/job.yml --query name -o tsv)
Vous pouvez utiliser l’ID d’exécution stocké pour renvoyer des informations sur le travail. Le paramètre --web ouvre l’interface utilisateur web d’Azure Machine Learning Studio dans laquelle vous pouvez explorer les détails du travail :
az ml job show -n $run_id --web
Dans le cadre de la soumission du travail, les scripts et données d’apprentissage doivent être chargés dans un emplacement de stockage cloud auquel votre espace de travail Azure Machine Learning peut accéder.
Utilisez la commande Azure CLI suivante pour charger le script d’entraînement. La commande spécifie le répertoire contenant les fichiers nécessaires à l’entraînement et non un fichier individuel. Si vous souhaitez plutôt utiliser REST pour charger les données, consultez la référence Put Blob :
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/lightgbm/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Créez une référence versionnée aux données d’apprentissage. Dans cet exemple, les données se trouvent déjà dans le cloud, à l’emplacement https://azuremlexamples.blob.core.windows.net/datasets/iris.csv. Pour plus d’informations sur le référencement des données, consultez Données dans Azure Machine Learning :
Inscrivez une référence versionnée au script d’apprentissage à utiliser avec un travail. Dans cet exemple, l’emplacement du script est le compte de stockage et le conteneur par défaut utilisés pour le chargement à l’étape 1. L’ID du code d’entraînement versionné est retourné et stocké dans la variable $TRAIN_CODE :
Créez l’environnement que le cluster utilisera pour exécuter le script d’apprentissage. Dans cet exemple, nous utilisons un environnement organisé ou prêt à l’emploi fourni par Azure Machine Learning appelé AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. La commande suivante récupère une liste des versions d’environnement, avec la plus récente en haut de la liste. jq est utilisé pour récupérer l’ID de la dernière version ([0]), qui est ensuite stocké dans la variable $ENVIRONMENT.
Enfin, envoyez le travail. L’exemple suivant montre comment envoyer le travail, référencer l’ID du code d’apprentissage, l’ID d’environnement, l’URL des données d’entrée et l’ID du cluster de calcul. L’emplacement de sortie du travail est stocké dans la variable $JOB_OUTPUT :
Conseil
Le nom du travail doit être unique. Dans cet exemple, uuidgen est utilisé pour générer une valeur unique pour le nom.
Remarque
Pour utiliser le calcul serverless, supprimez la ligne \"computeId\": dans ce code.
La propriété name retournée par le travail d’apprentissage est utilisée dans le cadre du chemin d’accès au modèle.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
run_model = Model(
path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
name="run-model-example",
description="Model created from run.",
type=AssetTypes.MLFLOW_MODEL
)
ml_client.models.create_or_update(run_model)
Conseil
Le nom (stocké dans la variable $run_id) est utilisé dans le cadre du chemin d’accès au modèle.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Conseil
Le nom (stocké dans la variable $run_id) est utilisé dans le cadre du chemin d’accès au modèle.
Pour plus d’informations sur les commandes Azure CLI, les classes du Kit de développement logiciel (SDK) Python ou les API REST utilisées dans cet article, consultez la documentation de référence suivante :