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 Kit de développement logiciel (SDK) :

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
cd 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.

Les commandes restantes de cet article supposent que vous exécutez les commandes depuis le répertoire azureml-examples.

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.

Effectuer l’apprentissage dans le 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.

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 informations dans le MLClient à partir de l'espace de noms azure.ai.ml pour obtenir un handle vers 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)

Vérifiez la connexion en imprimant le nom de l’espace de travail :

print(ml_client.workspace_name)

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

Note

Pour essayer l’informatique sans serveur, passez cette étape et passez à Soumettre 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()

Vérifiez que le cluster de calcul existe :

cpu_cluster = ml_client.compute.get("cpu-cluster")
print(f"Compute '{cpu_cluster.name}' provisioning state: {cpu_cluster.provisioning_state}")

Soumettre la tâche d’apprentissage

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",
)

Envoyez le travail dans la même session Python :

# 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.2-ubuntu18.04-py37-cpu@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.

print(f"Studio URL: {returned_job.studio_url}")

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é.

Surveiller le travail d’entraînement

Attendez que le travail d’entraînement se termine avant d’inscrire le modèle. Le statut de la tâche passe par StartingPreparingRunningCompleted.

Utilisez ml_client.jobs.stream() pour suivre la sortie de la tâche en temps réel :

ml_client.jobs.stream(returned_job.name)

Vous pouvez également vérifier l’état du travail par programmation :

returned_job = ml_client.jobs.get(returned_job.name)
print(f"Job status: {returned_job.status}")

Inscrire le modèle entraîné

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

Conseil

La tâche d'apprentissage 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)

Vérifiez que le modèle a été inscrit :

registered_model = ml_client.models.get("run-model-example", version="1")
print(f"Model '{registered_model.name}' version {registered_model.version} registered successfully.")

Nettoyer les ressources

Si vous ne prévoyez pas d’utiliser le cluster de calcul pour plus de travaux d’entraînement, supprimez-le pour arrêter les frais. Le cluster continue d’être facturé tant qu’il existe, même lorsqu’aucun nœud n’est en cours d’exécution.

ml_client.compute.begin_delete("cpu-cluster").wait()

Résoudre les erreurs courantes

Error Cause Résolution
ImportError: No module named 'azure.identity' Package manquant azure-identity Exécutez pip install azure-identity
DefaultAzureCredential failed Non connecté à Azure Exécutez az login d’abord, ou définissez des variables d’environnement pour l’authentification du principal de service
ComputeNotFound Incompatibilité de nom de cluster ou suppression du cluster Vérifier le nom du cluster et vérifier l’état d’approvisionnement
EnvironmentNotFound Environnement organisé déconseillé ou indisponible Répertorier les environnements disponibles avec ml_client.environments.list() et utiliser une version actuelle
QuotaExceeded Quota de vCPU insuffisant pour la taille de machine virtuelle Demander une augmentation de quota ou utiliser une taille de machine virtuelle plus petite

Pour connaître les problèmes spécifiques à l’environnement, consultez Résoudre les problèmes liés aux builds d’images d’environnement.

É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 :