Entraîner des modèles avec l’interface CLI Azure Machine Learning, le SDK et l’API REST

S'APPLIQUE À :Azure CLI ml extension v2 (actuelle)Python SDK azure-ai-ml v2 (actuelle)

Azure Machine Learning fournit plusieurs façons d’envoyer des travaux de formation ML. Dans cet article, vous allez apprendre à envoyer des travaux à l’aide des méthodes suivantes :

  • Azure CLI extension pour le Machine Learning : l’extension ml, également appelée CLI v2.
  • Python SDK v2 pour Azure Machine Learning.
  • API REST : API sur laquelle l’interface CLI et le SDK sont basés.

Conditions préalables

Pour utiliser le SDK, installez le Azure Machine Learning SDK v2 pour Python.

Cloner le référentiel d’exemples

Les extraits de code de cet article sont basés sur des exemples du dépôt GitHub Azure Machine Learning examples. Pour cloner le référentiel dans votre environnement de développement, utilisez la commande suivante :

git clone --depth 1 https://github.com/Azure/azureml-examples

Conseil

Utilisez --depth 1 pour cloner uniquement le dernier commit dans le référentiel, ce qui réduit le temps de l'opération.

Exemple de travail

Les exemples de cet article utilisent le jeu de données de fleur d’iris pour entraîner un modèle MLFlow.

Entraîner des modèles en cloud

Lorsque vous effectuez l’apprentissage dans le cloud, vous devez vous connecter à votre espace de travail Azure Machine Learning et sélectionner une ressource de calcul pour exécuter le travail d’entraînement.

1. Se connecter à l’espace de travail

Conseil

Utilisez les onglets suivants pour sélectionner la méthode que vous souhaitez utiliser pour entraîner 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. Utilisez ces détails dans le MLClient à partir de l’espace de noms azure.ai.ml pour obtenir une référence à l’espace de travail Azure Machine Learning requis. Pour vous authentifier, utilisez l’authentification default Azure. Pour plus d’informations sur la configuration des informations d’identification et la connexion à un espace de travail, consultez cette example.

#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)

2. Créer une ressource de calcul pour l’entraînement

Note

Pour essayer le calcul serverless, ignorez cette étape et passez à 3. Soumettez la tâche d'entraînement.

Un cluster de calcul Azure Machine Learning est une ressource de calcul entièrement managée que vous pouvez utiliser pour exécuter le travail d’entraînement. Dans les exemples suivants, vous créez un cluster de calcul nommé cpu-cluster.

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

3. Soumettre le travail d'entraînement

Pour exécuter ce script, utilisez un command qui exécute le script main.py Python situé sous ./sdk/python/jobs/single-step/lightgbm/iris/src/. Vous envoyez la commande en tant que job à Azure Machine Learning.

Note

Pour utiliser le calcul serverless, supprimez compute="cpu-cluster" dans ce code.

from azure.ai.ml import command, Input

# define the command
command_job = command(
    code="./src",
    command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
    environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
    inputs={
        "iris_csv": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
        ),
        "learning_rate": 0.9,
        "boosting": "gbdt",
    },
    compute="cpu-cluster",
)
# 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 précédents, vous avez configuré :

  • code - chemin d’accès où se trouve le code pour exécuter la commande.
  • command - commande qui doit s’exécuter.
  • environment - l’environnement nécessaire pour exécuter le script d’entraînement. Dans cet exemple, utilisez un environnement organisé ou prêt à l’emploi fourni par Azure Machine Learning appelé AzureML-lightgbm-3.3@latest. Vous pouvez également utiliser des environnements personnalisés en spécifiant une image Docker de base et en spécifiant un yaml conda au-dessus de celui-ci.
  • inputs - dictionnaire d’entrées utilisant des 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. Référencez les entrées dans l’expression command à l’aide de l’expression ${{inputs.<input_name>}} . Pour utiliser des fichiers ou des dossiers comme entrées, utilisez la Input classe. Pour plus d’informations, consultez les expressions SDK et CLI v2.

Pour plus d’informations, consultez la documentation de référence.

Lorsque vous soumettez la tâche, le service retourne une URL vers l’état de la tâche 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.

Important

Les travaux de formation et de commande Azure Machine Learning ne prennent pas en charge le Registre de conteneurs Azure (ACR) qui utilise des libellés de noms de domaine personnalisés. Les travaux qui font référence à un tel registre peuvent échouer au démarrage en raison d’erreurs de tirage d’image ou de résolution d’environnement. Pour éviter ce problème :

  • Utilisez le format de serveur de connexion par défaut (<registry-name>.azurecr.io) pour votre ACR.
  • Lorsque vous créez le Registre, définissez l’étendue de l’étiquette de nom de domainesur Non sécurisé.

Inscrire le modèle entraîné

Les exemples suivants montrent comment inscrire un modèle dans votre espace de travail Azure Machine Learning.

Conseil

Le travail d’entraînement renvoie une propriété name. Utilisez ce nom 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)

Étapes suivantes

Maintenant que vous avez un modèle entraîné, découvrez comment le déployer à l’aide d’un point de terminaison en ligne.

Pour plus d’exemples, consultez le référentiel Azure Machine Learning GitHub.

Pour plus d’informations sur les commandes Azure CLI, les classes de sdk Python ou les API REST utilisées dans cet article, consultez la documentation de référence suivante :