Erstellen eines Computeclusters für Azure Machine Learning mit CLI v1

GILT FÜR:Azure CLI ML-Erweiterungv1Python SDK azureml v1

Erfahren Sie, wie Sie einen Computecluster in Ihrem Azure Machine Learning-Arbeitsbereich erstellen und verwalten.

Sie können Azure Machine Learning-Computecluster verwenden, um einen Trainings- oder Batchrückschlussprozess in einem Cluster von CPU- oder GPU-Computeknoten in der Cloud zu verteilen. Weitere Informationen zu den VM-Größen mit GPUs finden Sie unter Für GPU optimierte VM-Größen.

In diesem Artikel werden folgende Vorgehensweisen behandelt:

  • Erstellen eines Computeclusters
  • Senken Ihrer Computeclusterkosten
  • Einrichten einer verwalteten Identität für den Cluster

Voraussetzungen

Was ist ein Computecluster?

Ein Azure Machine Learning-Computecluster ist eine verwaltete Computeinfrastruktur, die Ihnen das einfache Erstellen von Computezielen mit einem oder mehreren Knoten ermöglicht. Der Computecluster ist eine Ressource, die für andere Benutzer in Ihrem Arbeitsbereich freigegeben werden kann. Es wird automatisch zentral hochskaliert, wenn ein Auftrag übermittelt wird, und kann in einem virtuellen Azure-Netzwerk platziert werden kann. Computecluster unterstützen auch keine Bereitstellung öffentlicher IP-Adressen im virtuellen Netzwerk. Das Computeziel wird in einer Containerumgebung ausgeführt und packt die Abhängigkeiten Ihres Modells in einem Docker-Container.

Computecluster können Aufträge sicher in einer virtuellen Netzwerkumgebung ausführen, ohne dass Unternehmen hierfür SSH-Ports öffnen müssen. Der Auftrag wird in einer Containerumgebung ausgeführt und packt die Abhängigkeiten Ihres Modells in einen Docker-Container.

Einschränkungen

  • Computecluster können in einer anderen Region und einem anderen VNet als der/dem Ihres Arbeitsbereichs erstellt werden. Diese Funktionalität ist jedoch nur mit SDK v2, CLI v2 oder Studio verfügbar. Weitere Informationen finden Sie in der v2-Version von sicheren Trainingsumgebungen.

  • Zurzeit wird nur die Erstellung (und nicht die Aktualisierung) von Clustern mittels ARM-Vorlagen unterstützt. Zum Aktualisieren von Compute empfiehlt sich derzeit das SDK, die Azure CLI oder Benutzeroberfläche.

  • Bei Azure Machine Learning Compute gelten Standardgrenzwerte, beispielsweise für die Anzahl von Kernen, die zugeordnet werden können. Weitere Informationen finden Sie unter Verwalten und Anfordern von Kontingenten für Azure-Ressourcen.

  • Azure ermöglicht Ihnen das Einrichten von Sperren für Ressourcen, damit diese nicht gelöscht werden können oder schreibgeschützt sind. Wenden Sie keine Ressourcensperren auf die Ressourcengruppe an, die Ihren Arbeitsbereich enthält. Wenn Sie eine Sperre auf die Ressourcengruppe anwenden, die Ihren Arbeitsbereich enthält, werden Skalierungsvorgänge für Azure Machine Learning-Computecluster verhindert. Weitere Informationen zum Sperren von Ressourcen finden Sie unter Sperren von Ressourcen, um unerwartete Änderungen zu verhindern.

Tipp

Cluster können in der Regel auf bis zu 100 Knoten skaliert werden, solange Ihr Kontingent für die Anzahl der erforderlichen Kerne ausreicht. Standardmäßig werden Cluster mit aktivierter Kommunikation zwischen den Knoten des Clusters eingerichtet, um beispielsweise MPI-Aufträge zu unterstützen. Sie können Ihre Cluster jedoch auf 1.000 Knoten skalieren, indem Sie einfach ein Supportticket einreichen und die Aufnahme Ihrer Anwendung, des Arbeitsbereichs oder eines bestimmten Clusters in die Zulassungsliste anfordern, um die Kommunikation zwischen den Knoten zu deaktivieren.

Erstellen

Geschätzter Zeitaufwand: Ca. fünf Minuten.

Azure Machine Learning Compute kann in mehreren Ausführungen wiederverwendet werden. Compute kann für andere Benutzer im Arbeitsbereich freigegeben werden und wird zwischen den Ausführungen beibehalten. Dabei werden Knoten basierend auf der Anzahl der übermittelten Ausführungen und der Einstellung „max_nodes“ für Ihren Cluster automatisch hoch- oder herunterskaliert. Die Einstellung „min_nodes“ steuert die Mindestanzahl verfügbarer Knoten.

Das Kontingent dedizierter Kerne pro Region pro VM-Familie und gesamte regionale Kontingent, das für die Erstellung von Computeclustern gilt, ist einheitlich und wird mit dem Kontingent für Azure Machine Learning-Trainingcompute-Instanzen gemeinsam genutzt.

Wichtig

Zum Vermeiden von Gebühren, wenn keine Aufträge ausgeführt werden, legen Sie die minimale Anzahl von Knoten auf 0 fest. Durch diese Einstellung kann Azure Machine Learning die Zuordnung der Knoten aufheben, wenn diese nicht verwendet werden. Bei jedem Wert größer 0 wird die entsprechende Anzahl von Knoten weiter ausgeführt, auch wenn sie nicht verwendet werden.

Die Computeressource skaliert automatisch auf Null herunter, wenn sie nicht benötigt wird. Dedizierte VMs werden erstellt, um Ihre Aufträge bei Bedarf auszuführen.

Um eine persistente Azure Machine Learning Compute-Ressource in Python zu erstellen, geben Sie die Eigenschaften vm_size und max_nodes an. Azure Machine Learning verwendet dann für die restlichen Eigenschaften intelligente Standardwerte.

  • vm_size: Die VM-Familie der von Azure Machine Learning Compute erstellten Knoten.
  • max_nodes: Die maximale Anzahl von Knoten, auf die das Computeziel bei der Ausführung eines Auftrags in Azure Machine Learning Compute automatisch hochskaliert wird.

GILT FÜR:Python SDK 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)

Sie können beim Erstellen von Azure Machine Learning Compute auch mehrere erweiterte Eigenschaften konfigurieren. Mithilfe der Eigenschaften können Sie einen persistenten Cluster mit einer festen Größe oder in einem vorhandenen virtuellen Azure-Netzwerk in Ihrem Abonnement erstellen. Weitere Informationen finden Sie in der AmlCompute-Klasse.

Warnung

Wenn Sie den Parameter location auf eine andere Region als die Ihres Arbeitsbereichs oder Ihrer Datenspeicher festlegen, können erhöhte Netzwerklatenz und Datenübertragungskosten die Folge sein. Latenz und Kosten können beim Erstellen des Clusters und beim Anwenden von Aufträgen auf den Cluster anfallen.

Senken Ihrer Computeclusterkosten

Sie können sich auch dafür entscheiden, virtuelle Computer mit niedriger Priorität zu verwenden, um einige oder alle Ihre Workloads auszuführen. Diese virtuellen Computer haben keine garantierte Verfügbarkeit und können während der Verwendung vorzeitig entfernt werden. Sie müssen einen vorzeitig entfernten Auftrag neu starten.

GILT FÜR:Python SDK azureml v1

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

Einrichten einer verwalteten Identität

Azure Machine Learning-Computecluster unterstützen auch verwaltete Identitäten, um den Zugriff auf Azure-Ressourcen zu authentifizieren, ohne dass Ihr Code Anmeldeinformationen enthalten muss. Es gibt zwei Arten von verwalteten Identitäten:

  • Eine systemseitig zugewiesene verwaltete Identität wird direkt im Computecluster und in der Compute-Instanz von Azure Machine Learning aktiviert. Der Lebenszyklus einer systemseitig zugewiesenen Identität ist direkt an den Computecluster oder die Compute-Instanz gebunden. Wenn der Computecluster oder die Compute-Instanz gelöscht wird, bereinigt Azure automatisch die Anmeldeinformationen und die Identität in Microsoft Entra ID.
  • Eine benutzerseitig zugewiesene verwaltete Identität ist eine eigenständige Azure-Ressource, die über den Dienst für verwaltete Azure-Identitäten bereitgestellt wird. Sie können eine benutzerseitig zugewiesene Identität mehreren Ressourcen zuweisen, und sie wird für die gewünschte Dauer beibehalten. Diese verwaltete Identität muss zuvor erstellt werden und dann als „identity_id“ als erforderlicher Parameter übergeben werden.

GILT FÜR:Python SDK azureml v1

  • Konfigurieren der verwalteten Identität in der Bereitstellungskonfiguration:

    • Systemseitig zugewiesene verwaltete Identität, die in einem Arbeitsbereich mit dem Namen ws erstellt wurde

      # 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)
      
    • Benutzerseitig zugewiesene verwaltete Identität, die in einem Arbeitsbereich mit dem Namen ws erstellt wurde

      # 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)
      
  • Hinzufügen einer verwalteten Identität zu einem vorhandenen Computecluster namens cpu_cluster

    • Systemseitig zugewiesene verwaltete Identität:

      # add a system-assigned managed identity
      cpu_cluster.add_identity(identity_type="SystemAssigned")
      
    • Benutzerseitig zugewiesene verwaltete Identität:

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

Hinweis

Azure Machine Learning-Computecluster unterstützen nur eine systemseitig zugewiesene Identität oder mehrere benutzerseitig zugewiesene Identitäten, nicht beides gleichzeitig.

Nutzung von verwalteten Identitäten

Bei der standardmäßigen verwalteten Identität handelt es sich um die systemseitig zugewiesene verwaltete Identität oder die erste benutzerseitig zugewiesene verwaltete Identität.

Während einer Ausführung gibt es zwei Anwendungen einer Identität:

  1. Das System verwendet eine Identität zum Einrichten der Speichereinbindungen, der Containerregistrierung und der Datenspeicher des Benutzers.

    • In diesem Fall verwendet das System die standardmäßig verwaltete Identität.
  2. Der Benutzer wendet eine Identität für den Zugriff auf Ressourcen aus dem Code für eine übermittelte Ausführung an.

    • Geben Sie in diesem Fall den Wert für client_id entsprechend der verwalteten Identität an, die Sie zum Abrufen von Anmeldeinformationen verwenden möchten.
    • Alternativ können Sie die Client-ID der benutzerseitig zugewiesenen Identität über die Umgebungsvariable DEFAULT_IDENTITY_CLIENT_ID abrufen.

    So rufen Sie beispielsweise ein Token für einen Datenspeicher mit der standardmäßig verwalteten Identität ab:

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

Problembehandlung

Es kann vorkommen, dass Benutzer, die vor dem allgemein verfügbaren Release ihren Azure Machine Learning-Arbeitsbereich über das Azure-Portal erstellt haben, AmlCompute nicht in diesem Arbeitsbereich erstellen können. In einem solchen Fall können Sie entweder eine Supportanfrage für den Dienst erstellen oder über das Portal oder das SDK einen neuen Arbeitsbereich erstellen und die Blockierung dadurch umgehend aufheben.

Bei der Größenänderung hängen geblieben

Wenn Ihr Azure Machine Learning-Computecluster bei der Größenänderung bei (0 -> 0) für den Knotenstatus stehenzubleiben scheint, wird dies möglicherweise von Azure-Ressourcensperren verursacht.

Azure ermöglicht Ihnen das Einrichten von Sperren für Ressourcen, damit diese nicht gelöscht werden können oder schreibgeschützt sind. Das Sperren einer Ressource kann zu unerwarteten Ergebnissen führen. Bei einigen Vorgängen, die die Ressource nicht zu ändern scheinen, sind tatsächlich Aktionen erforderlich, die von der Sperre blockiert werden.

Wenn Sie mit Azure Machine Learning eine Löschsperre auf die Ressourcengruppe für Ihren Arbeitsbereich anwenden, werden Skalierungsvorgänge für Azure ML-Computecluster unterbunden. Um dieses Problem zu umgehen, empfehlen wir, die Sperre aus der Ressourcengruppe zu entfernen und sie stattdessen auf einzelne Elemente in der Gruppe anzuwenden.

Wichtig

Wenden Sie die Sperre nicht auf die folgenden Ressourcen an:

Ressourcenname Ressourcentyp
<GUID>-azurebatch-cloudservicenetworksecurityggroup Netzwerksicherheitsgruppe
<GUID>-azurebatch-cloudservicepublicip Öffentliche IP-Adresse
<GUID>-azurebatch-cloudserviceloadbalancer Load Balancer

Diese Ressourcen werden verwendet, um mit dem Computecluster zu kommunizieren und Vorgänge wie das Skalieren auf dem Computecluster durchzuführen. Wenn Sie die Ressourcensperre von diesen Ressourcen entfernen, sollte die automatische Skalierung für Ihre Computecluster gestatten.

Weitere Informationen zum Sperren von Ressourcen finden Sie unter Sperren von Ressourcen, um unerwartete Änderungen zu verhindern.

Nächste Schritte

Verwenden Sie Ihren Computecluster für Folgendes: