Udostępnij za pośrednictwem


Automatyczne skalowanie punktów końcowych online w usłudze Azure Machine Learning

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)

W tym artykule dowiesz się, jak zarządzać użyciem zasobów we wdrożeniu, konfigurując skalowanie automatyczne na podstawie metryk i harmonogramów. Proces automatycznego skalowania umożliwia automatyczne uruchamianie odpowiedniej ilości zasobów w celu obsługi obciążenia aplikacji. Punkty końcowe online w usłudze Azure Machine Learning obsługują skalowanie automatyczne dzięki integracji z funkcją automatycznego skalowania w usłudze Azure Monitor.

Automatyczne skalowanie usługi Azure Monitor umożliwia ustawianie reguł, które wyzwalają co najmniej jedną akcję autoskalowania w przypadku spełnienia warunków reguł. Możesz skonfigurować skalowanie oparte na metrykach (na przykład użycie procesora CPU większe niż 70%), skalowanie oparte na harmonogramie (takie jak reguły skalowania w godzinach szczytu pracy) lub kombinację tych dwóch. Aby uzyskać więcej informacji, zobacz Omówienie autoskalowania na platformie Microsoft Azure.

Diagram przedstawiający sposób dodawania i usuwania wystąpień w razie potrzeby przez automatyczne skalowanie.

Obecnie można zarządzać skalowaniem automatycznym przy użyciu interfejsu wiersza polecenia platformy Azure, interfejsów API REST, usługi Azure Resource Manager, zestawu SDK języka Python lub witryny Azure Portal opartej na przeglądarce.

Wymagania wstępne

  • Wdrożony punkt końcowy. Aby uzyskać więcej informacji, zobacz Wdrażanie i ocenianie modelu uczenia maszynowego przy użyciu punktu końcowego online.

  • Aby korzystać z autoskalowania, rola microsoft.insights/autoscalesettings/write musi być przypisana do tożsamości, która zarządza autoskalowaniem. Możesz użyć dowolnych wbudowanych lub niestandardowych ról, które zezwalają na tę akcję. Aby uzyskać ogólne wskazówki dotyczące zarządzania rolami w usłudze Azure Machine Learning, zobacz Zarządzanie użytkownikami i rolami. Aby uzyskać więcej informacji na temat ustawień autoskalowania z usługi Azure Monitor, zobacz Microsoft.Insights autoskalowaniesettings.

  • Aby zarządzać usługą Azure Monitor przy użyciu zestawu SDK języka Python, zainstaluj azure-mgmt-monitor pakiet za pomocą następującego polecenia:

    pip install azure-mgmt-monitor
    

Definiowanie profilu skalowania automatycznego

Aby włączyć automatyczne skalowanie dla punktu końcowego online, należy najpierw zdefiniować profil autoskalowania. Profil określa domyślną, minimalną i maksymalną pojemność zestawu skalowania. W poniższym przykładzie pokazano, jak ustawić liczbę wystąpień maszyn wirtualnych dla domyślnej, minimalnej i maksymalnej pojemności skalowania.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

Jeśli nie ustawiono jeszcze ustawień domyślnych dla interfejsu wiersza polecenia platformy Azure, zapisz ustawienia domyślne. Aby uniknąć wielokrotnego przekazywania wartości dla subskrypcji, obszaru roboczego i grupy zasobów, uruchom następujący kod:

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
  1. Ustaw nazwy punktu końcowego i wdrożenia:

    # set your existing endpoint name
    ENDPOINT_NAME=your-endpoint-name
    DEPLOYMENT_NAME=blue
    
  2. Pobierz identyfikator usługi Azure Resource Manager wdrożenia i punktu końcowego:

    # ARM id of the deployment
    DEPLOYMENT_RESOURCE_ID=$(az ml online-deployment show -e $ENDPOINT_NAME -n $DEPLOYMENT_NAME -o tsv --query "id")
    # ARM id of the deployment. todo: change to --query "id"
    ENDPOINT_RESOURCE_ID=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query "properties.\"azureml.onlineendpointid\"")
    # set a unique name for autoscale settings for this deployment. The below will append a random number to make the name unique.
    AUTOSCALE_SETTINGS_NAME=autoscale-$ENDPOINT_NAME-$DEPLOYMENT_NAME-`echo $RANDOM`
    
  3. Utwórz profil autoskalowania:

    az monitor autoscale create \
      --name $AUTOSCALE_SETTINGS_NAME \
      --resource $DEPLOYMENT_RESOURCE_ID \
      --min-count 2 --max-count 5 --count 2
    

Uwaga

Aby uzyskać więcej informacji, zobacz dokumentację az monitor autoscale .

Tworzenie reguły skalowania w poziomie na podstawie metryk wdrożenia

Powszechną regułą skalowania w poziomie jest zwiększenie liczby wystąpień maszyn wirtualnych, gdy średnie obciążenie procesora CPU jest wysokie. W poniższym przykładzie pokazano, jak przydzielić dwa więcej węzłów (maksymalnie), jeśli średnie obciążenie procesora CPU jest większe niż 70% przez 5 minut:

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

az monitor autoscale rule create \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --condition "CpuUtilizationPercentage > 70 avg 5m" \
  --scale out 2

Reguła jest częścią my-scale-settings profilu, w którym autoscale-name pasuje do name części profilu. Wartość argumentu reguły condition wskazuje wyzwalacz reguły, gdy "Średnie użycie procesora CPU w wystąpieniach maszyn wirtualnych przekracza 70% przez 5 minut". Gdy warunek zostanie spełniony, zostaną przydzielone dwa kolejne wystąpienia maszyn wirtualnych.

Uwaga

Aby uzyskać więcej informacji, zobacz dokumentację składni interfejsu wiersza polecenia platformy Azure az monitor autoscale .

Tworzenie reguły skalowania w poziomie na podstawie metryk wdrożenia

Gdy średnie obciążenie procesora CPU jest lekkie, reguła skalowania w poziomie może zmniejszyć liczbę wystąpień maszyn wirtualnych. W poniższym przykładzie pokazano, jak zwolnić jeden węzeł w dół do co najmniej dwóch, jeśli obciążenie procesora CPU jest mniejsze niż 30% przez 5 minut.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

az monitor autoscale rule create \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --condition "CpuUtilizationPercentage < 25 avg 5m" \
  --scale in 1

Tworzenie reguły skalowania na podstawie metryk punktu końcowego

W poprzednich sekcjach utworzono reguły skalowania w poziomie lub w oparciu o metryki wdrożenia. Możesz również utworzyć regułę, która ma zastosowanie do punktu końcowego wdrożenia. W tej sekcji dowiesz się, jak przydzielić inny węzeł, gdy opóźnienie żądania jest większe niż średnio 70 milisekund przez 5 minut.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

az monitor autoscale rule create \
 --autoscale-name $AUTOSCALE_SETTINGS_NAME \
 --condition "RequestLatency > 70 avg 5m" \
 --scale out 1 \
 --resource $ENDPOINT_RESOURCE_ID

Znajdowanie identyfikatorów obsługiwanych metryk

Jeśli chcesz użyć innych metryk w kodzie do skonfigurowania reguł skalowania automatycznego przy użyciu interfejsu wiersza polecenia platformy Azure lub zestawu SDK, zobacz tabelę w temacie Dostępne metryki.

Tworzenie reguły skalowania na podstawie harmonogramu

Można również tworzyć reguły, które mają zastosowanie tylko w określonych dniach lub w określonych godzinach. W tej sekcji utworzysz regułę, która ustawia liczbę węzłów na 2 w weekendy.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

az monitor autoscale profile create \
  --name weekend-profile \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --min-count 2 --count 2 --max-count 2 \
  --recurrence week sat sun --timezone "Pacific Standard Time"

Włączanie lub wyłączanie automatycznego skalowania

Możesz włączyć lub wyłączyć określony profil skalowania automatycznego.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

az monitor autoscale update \
  --autoscale-name $AUTOSCALE_SETTINGS_NAME \
  --enabled false

Usuwanie zasobów

Jeśli nie zamierzasz używać wdrożeń, usuń zasoby, wykonując następujące kroki.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

# delete the autoscaling profile
az monitor autoscale delete -n "$AUTOSCALE_SETTINGS_NAME"

# delete the endpoint
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait