Tworzenie klastra obliczeniowego usługi Azure Machine Learning przy użyciu interfejsu wiersza polecenia w wersji 1

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 1Zestaw SDK języka Python w wersji 1

Dowiedz się, jak utworzyć klaster obliczeniowy i zarządzać nim w obszarze roboczym usługi Azure Machine Learning.

Za pomocą klastra obliczeniowego usługi Azure Machine Learning można dystrybuować proces trenowania lub wnioskowania wsadowego w klastrze węzłów obliczeniowych procesora CPU lub procesora GPU w chmurze. Aby uzyskać więcej informacji na temat rozmiarów maszyn wirtualnych, które obejmują procesory GPU, zobacz Rozmiary maszyn wirtualnych zoptymalizowane pod kątem procesora GPU.

Z tego artykułu dowiesz się, jak wykonywać następujące działania:

  • Tworzenie klastra obliczeniowego
  • Obniżenie kosztów klastra obliczeniowego
  • Konfigurowanie tożsamości zarządzanej dla klastra

Wymagania wstępne

Co to jest klaster obliczeniowy?

Klaster obliczeniowy usługi Azure Machine Learning to zarządzana infrastruktura obliczeniowa, która umożliwia łatwe tworzenie obliczeń z jednym lub wieloma węzłami. Klaster obliczeniowy to zasób, który może być udostępniany innym użytkownikom w obszarze roboczym. Obliczenia są skalowane w górę automatycznie po przesłaniu zadania i można je umieścić w usłudze Azure Virtual Network. Klaster obliczeniowy nie obsługuje również wdrożenia publicznego adresu IP w sieci wirtualnej. Środowisko obliczeniowe jest wykonywane w środowisku konteneryzowanym i pakuje zależności modelu w kontenerze platformy Docker.

Klastry obliczeniowe mogą bezpiecznie uruchamiać zadania w środowisku sieci wirtualnej bez konieczności otwierania portów SSH przez przedsiębiorstwa. Zadanie jest wykonywane w środowisku konteneryzowanym i pakuje zależności modelu w kontenerze platformy Docker.

Ograniczenia

  • Niektóre scenariusze wymienione w tym dokumencie są oznaczone jako wersja zapoznawcza. Funkcje w wersji zapoznawczej są udostępniane bez umowy dotyczącej poziomu usług i nie są zalecane w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

  • Klastry obliczeniowe można tworzyć w innym regionie niż obszar roboczy. Ta funkcja jest dostępna w wersji zapoznawczej i jest dostępna tylko dla klastrów obliczeniowych, a nie wystąpień obliczeniowych. Ta wersja zapoznawcza jest niedostępna, jeśli używasz prywatnego obszaru roboczego z włączonym punktem końcowym.

    Ostrzeżenie

    W przypadku korzystania z klastra obliczeniowego w innym regionie niż obszar roboczy lub magazyny danych mogą wystąpić zwiększone opóźnienia sieci i koszty transferu danych. Opóźnienie i koszty mogą wystąpić podczas tworzenia klastra i uruchamiania w nim zadań.

  • Obecnie obsługujemy tylko tworzenie (i nie aktualizowanie) klastrów za pomocą szablonów usługi ARM. W przypadku aktualizowania zasobów obliczeniowych zalecamy na razie używanie zestawu SDK, interfejsu wiersza polecenia platformy Azure lub środowiska użytkownika.

  • Usługa Azure Machine Learning Compute ma domyślne limity, takie jak liczba rdzeni, które można przydzielić. Aby uzyskać więcej informacji, zobacz Manage and request quotas for Azure resources (Zarządzanie limitami przydziału zasobów platformy Azure i ich żądania).

  • Platforma Azure umożliwia umieszczanie blokad na zasobach , dzięki czemu nie można ich usunąć lub są tylko do odczytu. Nie należy stosować blokad zasobów do grupy zasobów zawierającej obszar roboczy. Zastosowanie blokady do grupy zasobów zawierającej obszar roboczy uniemożliwi operacje skalowania dla klastrów obliczeniowych usługi Azure Machine Learning. Aby uzyskać więcej informacji na temat blokowania zasobów, zobacz Blokowanie zasobów, aby zapobiec nieoczekiwanym zmianom.

Porada

Klastry mogą zwykle skalować do 100 węzłów, o ile masz wystarczający limit przydziału dla wymaganej liczby rdzeni. Domyślnie klastry są konfigurowane z włączoną komunikacją między węzłami między węzłami klastra w celu obsługi zadań MPI na przykład. Można jednak skalować klastry do 1000 węzłów, po prostu wywołując bilet pomocy technicznej i żądając zezwolenia na listę subskrypcji lub obszaru roboczego albo określony klaster na potrzeby wyłączania komunikacji między węzłami.

Utwórz

Szacowany czas: około 5 minut.

Środowisko obliczeniowe usługi Azure Machine Learning można używać ponownie w ramach przebiegów. Zasoby obliczeniowe mogą być współużytkowane przez innych użytkowników w obszarze roboczym i są zachowywane między przebiegami, automatycznie skalując węzły w górę lub w dół na podstawie liczby przesłanych przebiegów, a max_nodes ustawione w klastrze. Ustawienie min_nodes steruje minimalnymi dostępnymi węzłami.

Dedykowane rdzenie na region na limit przydziału rodziny maszyn wirtualnych i całkowity przydział regionalny, który ma zastosowanie do tworzenia klastra obliczeniowego, jest ujednolicony i współużytkowany z limitem przydziału wystąpienia obliczeniowego trenowania usługi Azure Machine Learning.

Ważne

Aby uniknąć naliczania opłat, gdy żadne zadania nie są uruchomione, ustaw minimalną wartość węzłów na 0. To ustawienie umożliwia usłudze Azure Machine Learning anulowanie przydzielania węzłów, gdy nie są używane. Każda wartość większa niż 0 zachowa liczbę uruchomionych węzłów, nawet jeśli nie są używane.

Obliczenia są skalowane automatycznie w dół do zera węzłów, gdy nie są używane. Dedykowane maszyny wirtualne są tworzone w celu uruchamiania zadań zgodnie z potrzebami.

Aby utworzyć trwały zasób obliczeniowy usługi Azure Machine Learning w języku Python, określ właściwości vm_size i max_nodes . Następnie usługa Azure Machine Learning używa inteligentnych wartości domyślnych dla innych właściwości.

  • vm_size: rodzina maszyn wirtualnych węzłów utworzonych przez usługę Azure Machine Learning Compute.
  • max_nodes: maksymalna liczba węzłów do automatycznego skalowania do momentu uruchomienia zadania w usłudze Azure Machine Learning Compute.

DOTYCZY:Zestaw SDK języka Python w wersji 1

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)

Podczas tworzenia usługi Azure Machine Learning Compute można również skonfigurować kilka zaawansowanych właściwości. Właściwości umożliwiają utworzenie trwałego klastra o stałym rozmiarze lub w ramach istniejącej usługi Azure Virtual Network w ramach subskrypcji. Aby uzyskać szczegółowe informacje, zobacz klasę AmlCompute .

Ostrzeżenie

Podczas ustawiania parametru location , jeśli jest to inny region niż obszar roboczy lub magazyny danych, mogą pojawić się zwiększone opóźnienia sieci i koszty transferu danych. Opóźnienie i koszty mogą wystąpić podczas tworzenia klastra i uruchamiania w nim zadań.

Obniżenie kosztów klastra obliczeniowego

Możesz również użyć maszyn wirtualnych o niskim priorytcie do uruchamiania niektórych lub wszystkich obciążeń. Te maszyny wirtualne nie mają gwarantowanej dostępności i mogą zostać wywłaszczone podczas używania. Konieczne będzie ponowne uruchomienie wywłaszczonego zadania.

DOTYCZY:Zestaw SDK języka Python w wersji 1

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

Konfigurowanie tożsamości zarządzanej

Klastry obliczeniowe usługi Azure Machine Learning obsługują również tożsamości zarządzane w celu uwierzytelniania dostępu do zasobów platformy Azure bez dołączania poświadczeń w kodzie. Istnieją dwa typy tożsamości zarządzanych:

  • Tożsamość zarządzana przypisana przez system jest włączona bezpośrednio w klastrze obliczeniowym usługi Azure Machine Learning i wystąpieniu obliczeniowym. Cykl życia tożsamości przypisanej przez system jest bezpośrednio powiązany z klastrem obliczeniowym lub wystąpieniem. Jeśli klaster obliczeniowy lub wystąpienie zostanie usunięte, platforma Azure automatycznie wyczyści poświadczenia i tożsamość w Azure AD.
  • Tożsamość zarządzana przypisana przez użytkownika to autonomiczny zasób platformy Azure udostępniany za pośrednictwem usługi Azure Managed Identity Service. Tożsamość zarządzaną przypisaną przez użytkownika można przypisać do wielu zasobów i trwa tak długo, jak chcesz. Ta tożsamość zarządzana musi zostać utworzona wcześniej, a następnie przekazana jako identity_id jako wymagany parametr.

DOTYCZY:Zestaw SDK języka Python w wersji 1

  • Skonfiguruj tożsamość zarządzaną w konfiguracji aprowizacji:

    • Tożsamość zarządzana przypisana przez system utworzona w obszarze roboczym o nazwie 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)
      
    • Tożsamość zarządzana przypisana przez użytkownika utworzona w obszarze roboczym o nazwie 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)
      
  • Dodawanie tożsamości zarządzanej do istniejącego klastra obliczeniowego o nazwie cpu_cluster

    • Tożsamość zarządzana przypisana przez system:

      # add a system-assigned managed identity
      cpu_cluster.add_identity(identity_type="SystemAssigned")
      
    • Tożsamość zarządzana przypisana przez użytkownika:

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

Uwaga

Klastry obliczeniowe usługi Azure Machine Learning obsługują tylko jedną tożsamość przypisaną przez system lub wiele tożsamości przypisanych przez użytkownika, a nie jednocześnie.

Użycie tożsamości zarządzanej

Domyślna tożsamość zarządzana to tożsamość zarządzana przypisana przez system lub pierwsza tożsamość zarządzana przypisana przez użytkownika.

Podczas uruchamiania istnieją dwie aplikacje tożsamości:

  1. System używa tożsamości do konfigurowania instalacji magazynu użytkownika, rejestru kontenerów i magazynów danych.

    • W takim przypadku system będzie używać domyślnej tożsamości zarządzanej.
  2. Użytkownik stosuje tożsamość w celu uzyskania dostępu do zasobów z poziomu kodu dla przesłanego przebiegu

    • W takim przypadku podaj client_id odpowiadającą tożsamości zarządzanej, której chcesz użyć do pobrania poświadczeń.
    • Alternatywnie pobierz identyfikator klienta tożsamości przypisanej przez użytkownika za pośrednictwem zmiennej środowiskowej DEFAULT_IDENTITY_CLIENT_ID.

    Aby na przykład pobrać token dla magazynu danych z tożsamością zarządzaną domyślną:

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

Rozwiązywanie problemów

Istnieje prawdopodobieństwo, że niektórzy użytkownicy, którzy utworzyli swój obszar roboczy usługi Azure Machine Learning z poziomu Azure Portal przed wydaniem ogólnie dostępnej wersji, mogą nie być w stanie utworzyć aplikacji AmlCompute w tym obszarze roboczym. Możesz zgłosić wniosek o pomoc techniczną dla usługi lub utworzyć nowy obszar roboczy za pośrednictwem portalu lub zestawu SDK, aby natychmiast odblokować się.

Zablokowane przy zmianie rozmiaru

Jeśli klaster obliczeniowy usługi Azure Machine Learning zostanie zablokowany przy zmianie rozmiaru (od 0 do> 0) dla stanu węzła, może to być spowodowane przez blokady zasobów platformy Azure.

Platforma Azure umożliwia umieszczanie blokad w zasobach , dzięki czemu nie można ich usunąć ani tylko do odczytu. Zablokowanie zasobu może prowadzić do nieoczekiwanych wyników. Niektóre operacje, które nie wydają się modyfikować zasobu, rzeczywiście wymagają akcji, które są blokowane przez blokadę.

Dzięki usłudze Azure Machine Learning zastosowanie blokady usuwania do grupy zasobów dla obszaru roboczego uniemożliwi operacje skalowania dla klastrów obliczeniowych usługi Azure ML. Aby obejść ten problem, zalecamy usunięcie blokady z grupy zasobów i zastosowanie jej do poszczególnych elementów w grupie.

Ważne

Nie należy stosować blokady do następujących zasobów:

Nazwa zasobu Typ zasobu
<GUID>-azurebatch-cloudservicenetworksecurityggroup Sieciowa grupa zabezpieczeń
<GUID>-azurebatch-cloudservicepublicip Publiczny adres IP
<GUID>-azurebatch-cloudserviceloadbalancer Moduł równoważenia obciążenia

Te zasoby są używane do komunikowania się i wykonywania operacji, takich jak skalowanie w klastrze obliczeniowym. Usunięcie blokady zasobów z tych zasobów powinno zezwalać na skalowanie automatyczne dla klastrów obliczeniowych.

Aby uzyskać więcej informacji na temat blokowania zasobów, zobacz Blokowanie zasobów, aby zapobiec nieoczekiwanym zmianom.

Następne kroki

Użyj klastra obliczeniowego, aby: