Créer un cluster de calcul Azure Machine Learning avec CLI v1

S’APPLIQUE À :extension Azure CLI ml v1Kit de développement logiciel (SDK) Python azureml v1

Découvrez comment créer et gérer un cluster de calcul dans votre espace de travail Azure Machine Learning.

Vous pouvez utiliser un cluster de calcul Azure Machine Learning pour distribuer un processus d’entraînement ou d’inférence en lots sur un cluster de nœuds de calcul de processeur ou de GPU dans le cloud. Pour plus d’informations sur les tailles de machine virtuelle qui incluent des GPU, consultez Tailles de machine virtuelle à GPU optimisé.

Dans cet article, découvrez comment :

  • Créer un cluster de calcul
  • Réduire le coût de votre cluster de calcul
  • Configurer une identité managée pour le cluster

Prérequis

Qu’est-ce qu’un cluster de calcul ?

Le cluster de calcul Azure Machine Learning est une infrastructure de capacité de calcul managée qui vous permet de créer facilement une capacité de calcul à un ou plusieurs nœuds. Le cluster de calcul est une ressource qui peut être partagée avec d’autres utilisateurs dans votre espace de travail. La cible de calcul monte en puissance automatiquement quand un travail est soumis, et peut être placée dans un réseau virtuel Azure. Le cluster de calcul ne prend en charge aucun déploiement d’adresse IP publique ou dans un réseau virtuel. La cible de calcul s’exécute dans un environnement conteneurisé et empaquète les dépendances de votre modèle dans un conteneur Docker.

Les clusters de calcul peuvent exécuter des travaux de manière sécurisée dans un environnement de réseau virtuel, sans qu’il soit nécessaire pour les entreprises d’ouvrir des ports SSH. Le travail s’exécute dans un environnement conteneurisé et empaquette les dépendances de votre modèle dans un conteneur Docker.

Limites

  • Les clusters de calcul peuvent être créés dans une région ou réseau virtuel différent de celui de votre espace de travail. Toutefois, cette fonctionnalité est disponible uniquement à l’aide du SDK v2, de l’interface CLI v2 ou du studio. Pour plus d’informations, consultez la version v2 des environnements d’entraînement sécurisés.

  • Nous prenons actuellement en charge uniquement la création (et non la mise à jour) de clusters via des modèles ARM. Pour mettre à jour le calcul, nous vous recommandons d’utiliser le Kit de développement logiciel (SDK), Azure CLI ou UX pour le moment.

  • Capacité de calcul Azure Machine Learning comporte des limites par défaut, par exemple le nombre de cœurs qui peuvent être alloués. Pour plus d’informations, consultez Gérer et demander des quotas pour les ressources Azure.

  • Azure vous permet de placer des verrous sur les ressources, afin qu’elles ne puissent pas être supprimées ou restent en lecture seule. N’appliquez pas de verrous aux ressources du groupe de ressources qui contient votre espace de travail. L’application d’un verrou au groupe de ressources contenant votre espace de travail empêchera les opérations de mise à l’échelle pour les clusters de calcul Azure Machine Learning. Pour plus d’informations, consultez Verrouiller les ressources pour empêcher les modifications inattendues.

Conseil

Les clusters peuvent généralement effectuer un scale-up jusqu’à 100 nœuds tant que vous disposez d’un quota suffisant pour le nombre de cœurs requis. Par défaut, les clusters sont configurés de manière à permettre la communication entre les nœuds du cluster, pour prendre en charge les travaux MPI par exemple. Toutefois, vous pouvez mettre à l’échelle vos clusters sur des milliers de nœuds simplement en soumettant un ticket de support et en demandant à ajouter votre abonnement, un espace de travail ou un cluster spécifique à une liste verte pour désactiver la communication entre nœuds.

Créer

Durée estimée : 5 minutes environ.

Une Capacité de calcul Azure Machine Learning peut être réutilisée pour plusieurs exécutions. Le calcul peut être partagé avec d’autres utilisateurs dans l’espace de travail et est conservé entre les exécutions, ce qui permet d’augmenter ou de diminuer automatiquement le nombre de nœuds en fonction du nombre d’exécutions soumises et du paramètre max_nodes défini sur votre cluster. Le paramètre min_nodes contrôle le nombre minimal de nœuds disponibles.

Le quota de cœurs dédiés par région par famille de machine virtuelle et le quota régional total, qui s’appliquent à la création d’un cluster de calcul, sont unifiés et partagés avec le quota d’instances de calcul d’entraînement Azure Machine Learning.

Important

Pour éviter des frais en l'absence de travail en cours d’exécution, définissez les nœuds minimaux sur 0. Ce paramètre permet à Azure Machine Learning de libérer les nœuds lorsqu’ils ne sont pas utilisés. Toute valeur supérieure à 0 conserve ce nombre de nœuds en cours d’exécution, même s’ils ne sont pas utilisés.

La capacité de calcul diminue en puissance, et passe automatiquement à zéro nœud quand elle n’est pas utilisée. Des machines virtuelles dédiées sont créées pour exécuter vos travaux en fonction des besoins.

Pour créer une ressource de capacité de calcul Azure Machine Learning persistante dans Python, spécifiez les propriétés vm_size et max_nodes. Azure Machine Learning utilise ensuite des valeurs calculées par défaut pour les autres propriétés.

  • vm_size : famille de machines virtuelles des nœuds créés par Capacité de calcul Azure Machine Learning.
  • max_nodes : nombre maximal de nœuds pour la mise à l’échelle automatique lors de l’exécution d’un travail sur une capacité de calcul Azure Machine Learning.

S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your CPU cluster
cpu_cluster_name = "cpucluster"

# Verify that cluster does not exist already
try:
    cpu_cluster = ComputeTarget(workspace=ws, name=cpu_cluster_name)
    print('Found existing cluster, use it.')
except ComputeTargetException:
    # To use a different region for the compute, add a location='<region>' parameter
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                           max_nodes=4)
    cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)

cpu_cluster.wait_for_completion(show_output=True)

Vous pouvez aussi configurer plusieurs propriétés avancées lors de la création d’une capacité de calcul Azure Machine Learning. Ces propriétés vous permettent de créer un cluster persistant de taille fixe, ou au sein d’un réseau virtuel Azure existant dans votre abonnement. Pour plus de détails, voir la classe AmlCompute.

Avertissement

Lorsque vous définissez le paramètre location, s’il s’agit d’une région différente de celle de votre espace de travail ou de vos magasins de données, vous pouvez constater des coûts accrus de latence du réseau et de transfert de données. La latence et les coûts peuvent survenir lors de la création du cluster et lors de l’exécution de travaux sur celui-ci.

Réduire le coût de votre cluster de calcul

Vous pouvez également choisir d’utiliser des machines virtuelles de faible priorité pour exécuter une partie ou la totalité de vos charges de travail. Ces machines virtuelles n’ont pas de disponibilité garantie et peuvent être anticipées en cours d’utilisation. Vous devrez redémarrer une tâche anticipée.

S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                            vm_priority='lowpriority',
                                                            max_nodes=4)

Configurer une identité managée

Les clusters de calcul Azure Machine Learning prennent également en charge les identités managées pour authentifier l'accès aux ressources Azure sans inclure d'informations d'identification dans votre code. Il existe deux types d’identités administrées :

  • Une identité managée attribuée par le système est activée directement sur le cluster de calcul Azure Machine Learning et l’instance de calcul. Le cycle de vie d’une identité affectée par le système est directement lié au cluster de calcul ou à l’instance. Si le cluster de calcul ou l’instance est supprimé, Azure nettoie automatiquement les informations d’identification et l’identité dans Microsoft Entra ID.
  • Une identité managée attribuée par l'utilisateur est une ressource Azure autonome fournie via le service Azure Managed Identity. Vous pouvez attribuer une identité managée attribuée par l'utilisateur à plusieurs ressources et la conserver aussi longtemps que vous le souhaitez. Cette identité managée doit être créée au préalable, puis transmise en tant que identity_id en guise de paramètre obligatoire.

S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

  • Configurez l’identité managée dans votre configuration de provisionnement :

    • Identité managée affectée par le système créée dans un espace de travail nommé ws

      # configure cluster with a system-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="SystemAssigned",
                                                              )
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
    • Identité managée affectée par l’utilisateur créée dans un espace de travail nommé ws

      # configure cluster with a user-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="UserAssigned",
                                                              identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
  • Ajoutez une identité managée à un cluster de calcul existant nommé cpu_cluster

    • Identité managée affectée par le système :

      # add a system-assigned managed identity
      cpu_cluster.add_identity(identity_type="SystemAssigned")
      
    • Identité managée affectée par l’utilisateur :

      # add a user-assigned managed identity
      cpu_cluster.add_identity(identity_type="UserAssigned", 
                                  identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      

Notes

Les clusters de calcul Azure Machine Learning prennent en charge soit une seule identité attribuée par le système, soit plusieurs identités attribuées par l’utilisateur.

Utilisation de l’identité managée

L’identité managée par défaut est l’identité managée qui est attribuée par le système ou la première identité managée qui est attribuée par l’utilisateur.

Pendant une exécution, il y a deux applications d’une identité :

  1. Le système utilise une identité pour configurer les montages de stockage, le registre de conteneurs et les magasins de données associés à l’utilisateur.

    • Dans ce cas, le système utilise l’identité managée par défaut.
  2. L’utilisateur applique une identité pour accéder à des ressources à partir du code pour une exécution envoyée

    • Dans ce cas, fournissez la valeur client_id correspondant à l’identité managée à utiliser pour récupérer des informations d’identification.
    • Vous pouvez également récupérer l’ID client de l’identité attribuée par l’utilisateur au moyen de la variable d’environnement DEFAULT_IDENTITY_CLIENT_ID.

    Par exemple, si vous voulez récupérer un jeton pour un magasin de données avec l’identité managée par défaut :

    client_id = os.environ.get('DEFAULT_IDENTITY_CLIENT_ID')
    credential = ManagedIdentityCredential(client_id=client_id)
    token = credential.get_token('https://storage.azure.com/')
    

Résolution des problèmes

Il peut arriver que des utilisateurs ayant créé leur espace de travail Azure Machine Learning sur le portail Azure avant la disponibilité générale ne puissent pas créer de capacité AmlCompute dans cet espace de travail. Vous pouvez créer une demande de support auprès du service ou créer un espace de travail sur le Portail ou avec le Kit de développement logiciel (SDK) pour vous débloquer sans délai.

Bloqué au niveau du redimensionnement

Si votre cluster de calcul Azure Machine Learning semble bloqué au niveau du redimensionnement (0 -> 0) pour l’état du nœud, cela peut être dû à des verrous de ressources Azure.

Azure vous permet de placer des verrous sur les ressources, afin qu’elles ne puissent pas être supprimées ou restent en lecture seule. Le verrouillage d’une ressource peut entraîner des résultats inattendus. Certaines opérations qui, en apparence, ne modifient pas la ressource nécessitent en réalité des actions qui sont bloquées par ce verrou.

Avec Azure Machine Learning, l’application d’un verrou de suppression au groupe de ressources pour votre espace de travail empêchera les opérations de mise à l’échelle pour les clusters de calcul Azure ML. Pour contourner ce problème, nous vous recommandons de supprimer le verrou du groupe de ressources et de l’appliquer à chaque élément du groupe.

Important

N’appliquez pas le verrou aux ressources suivantes :

Nom de la ressource Type de ressource
<GUID>-azurebatch-cloudservicenetworksecurityggroup Un groupe de sécurité réseau
<GUID>-azurebatch-cloudservicepublicip Adresse IP publique
<GUID>-azurebatch-cloudserviceloadbalancer Équilibrage de charge

Ces ressources sont utilisées pour communiquer avec le cluster de calcul et effectuer des opérations telles que la mise à l’échelle. La suppression du verrou sur ces ressources doit permettre la mise à l’échelle automatique de vos clusters de calcul.

Pour plus d’informations sur le verrouillage des ressources, consultez Verrouiller les ressources pour empêcher les modifications inattendues.

Étapes suivantes

Utilisez votre cluster de calcul pour :