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.
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>
Ustaw nazwy punktu końcowego i wdrożenia:
# set your existing endpoint name ENDPOINT_NAME=your-endpoint-name DEPLOYMENT_NAME=blue
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`
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
Inne metryki można użyć podczas konfigurowania reguł autoskalowania przy użyciu interfejsu wiersza polecenia platformy Azure lub zestawu SDK.
- Aby uzyskać nazwy metryk punktu końcowego do użycia w kodzie, zobacz wartości w kolumnie Nazwa w interfejsie API REST w tabeli w temacie Obsługiwane metryki dla microsoft.MachineLearningServices/workspaces/onlineEndpoints.
- Aby uzyskać nazwy metryk wdrażania do użycia w kodzie, zobacz wartości w kolumnie Nazwa w interfejsie API REST w tabelach w temacie Obsługiwane metryki microsoft.MachineLearningServices/workspaces/onlineEndpoints/deployments.
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