Automatyczne skalowanie uruchamia odpowiednią ilość zasobów na potrzeby obsługi obciążenia aplikacji. Punkty końcowe online obsługują skalowanie automatyczne dzięki integracji z funkcją automatycznego skalowania usługi Azure Monitor.
Skalowanie automatyczne usługi Azure Monitor obsługuje bogaty zestaw reguł. Można skonfigurować skalowanie oparte na metrykach (na przykład użycie >procesora CPU 70%), skalowanie oparte na harmonogramie (na przykład reguły skalowania w godzinach pracy szczytu) lub kombinację. Aby uzyskać więcej informacji, zobacz Omówienie autoskalowania na platformie Microsoft Azure.
Obecnie możesz zarządzać skalowaniem automatycznym przy użyciu interfejsu wiersza polecenia platformy Azure, rest, usługi ARM lub Azure Portal opartej na przeglądarce. W miarę upływu czasu inne zestawy SDK usługi Azure Machine Learning, takie jak zestaw SDK języka Python, będą dodawać obsługę.
Aby używać 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.
Definiowanie profilu skalowania automatycznego
Aby włączyć autoskalowania dla punktu końcowego, należy najpierw zdefiniować profil autoskalowania. Ten profil obejmuje definiowanie domyślnej, minimalnej i maksymalnej pojemności zestawu skalowania. W poniższym przykładzie ustawiono domyślną i minimalną pojemność jako dwa wystąpienia maszyn wirtualnych oraz maksymalną pojemność na pięć:
Poniższy fragment kodu ustawia nazwy punktu końcowego i wdrożenia:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
Następnie 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`
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.mgmt.monitor import MonitorManagementClient
from azure.mgmt.monitor.models import AutoscaleProfile, ScaleRule, MetricTrigger, ScaleAction, Recurrence, RecurrentSchedule
import random
import datetime
Zdefiniuj zmienne dla obszaru roboczego, punktu końcowego i wdrożenia:
# 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 = f"autoscale-{endpoint_name}-{deployment_name}-{random.randint(0,1000)}"
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"profiles" : [
AutoscaleProfile(
name="my-scale-settings",
capacity={
"minimum" : 2,
"maximum" : 5,
"default" : 2
},
rules = []
)
]
}
)
W Azure Machine Learning studio wybierz swój obszar roboczy, a następnie wybierz pozycję Punkty końcowe po lewej stronie. Po wybraniu punktów końcowych wybierz ten, który chcesz skonfigurować.
Na karcie Szczegóły punktu końcowego wybierz pozycję Konfiguruj skalowanie automatyczne.
W obszarze Wybierz sposób skalowania zasobów wybierz pozycję Niestandardowe autoskalowania , aby rozpocząć konfigurację. W przypadku domyślnego warunku skalowania użyj następujących wartości:
Ustaw opcję Tryb skalowania na Skalowanie na podstawie metryki.
Ustaw wartość Minimalnana 2.
Ustaw wartość Maksimum na 5.
Ustaw wartość Domyślna na 2.
Tworzenie reguły skalowania w poziomie przy użyciu metryk
Typowa reguła skalowania w poziomie to taka, która zwiększa liczbę wystąpień maszyn wirtualnych, gdy średnie obciążenie procesora CPU jest wysokie. Poniższy przykład przydzieli dwa kolejne węzły (maksymalnie), jeśli procesor cpu średnio obciążenie większe niż 70% przez pięć minut:
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 (autoscale-name odpowiada name profilowi). Wartość argumentu condition mówi, że reguła powinna być wyzwalana, gdy "średnie użycie procesora CPU wśród wystąpień maszyn wirtualnych przekracza 70% przez pięć minut". Po spełnieniu tego warunku zostaną przydzielone dwa kolejne wystąpienia maszyn wirtualnych.
Uwaga
Aby uzyskać więcej informacji na temat składni interfejsu wiersza polecenia, zobacz az monitor autoscale.
Ta reguła odnosi się do średniej CPUUtilizationpercentage z ostatnich 5 minut z argumentów metric_namei time_windowtime_aggregation. Jeśli wartość metryki jest większa niż threshold 70, zostaną przydzielone dwa kolejne wystąpienia maszyn wirtualnych.
Zaktualizuj profil, aby uwzględnić tę regułę my-scale-settings :
W sekcji Reguły wybierz pozycję Dodaj regułę. Zostanie wyświetlona strona Reguła skalowania . Użyj następujących informacji, aby wypełnić pola na tej stronie:
W polu Nazwa metryki ustaw wartość Procent użycia procesora CPU.
Ustaw wartość Operator na większą niż i ustaw próg metryki na wartość 70.
Ustaw czas trwania (minuty) na 5. Pozostaw statystykę ziarna czasu jako średnią.
Ustaw wartość Operacjana Zwiększenie liczby wystąpień według i ustaw wartość 2.
Na koniec wybierz przycisk Dodaj , aby utworzyć regułę.
Tworzenie reguły do skalowania przy użyciu metryk
Gdy obciążenie jest lekkie, skalowanie w regule może zmniejszyć liczbę wystąpień maszyn wirtualnych. Poniższy przykład spowoduje zwolnienie pojedynczego węzła w dół do minimum 2, jeśli obciążenie procesora CPU jest mniejsze niż 30% przez 5 minut:
W sekcji Reguły wybierz pozycję Dodaj regułę. Zostanie wyświetlona strona Reguła skalowania . Użyj następujących informacji, aby wypełnić pola na tej stronie:
W polu Nazwa metryki ustaw wartość Procent użycia procesora CPU.
Ustaw wartość Operator na Wartość Mniejsza niż i próg metryki na wartość 30.
Ustaw czas trwania (minuty) na 5.
Ustaw opcję Operacja, aby zmniejszyć liczbę według i ustawić wartość Liczba wystąpień na 1.
Na koniec wybierz przycisk Dodaj , aby utworzyć regułę.
Jeśli masz zarówno skalowanie w poziomie, jak i skalowanie w regułach, reguły będą wyglądać podobnie do poniższego zrzutu ekranu. Określono, że jeśli średnie obciążenie procesora CPU przekracza 70% przez 5 minut, należy przydzielić 2 więcej węzłów do limitu 5. Jeśli obciążenie procesora CPU jest mniejsze niż 30% przez 5 minut, należy zwolnić jeden węzeł, do minimum 2.
Tworzenie reguły skalowania na podstawie metryk punktu końcowego
Poprzednie reguły zastosowane do wdrożenia. Teraz dodaj regułę, która ma zastosowanie do punktu końcowego. W tym przykładzie jeśli opóźnienie żądania jest większe niż średnio 70 milisekund przez 5 minut, przydziel inny węzeł.
W dolnej części strony wybierz pozycję + Dodaj warunek skalowania.
Wybierz pozycję Skaluj na podstawie metryki, a następnie wybierz pozycję Dodaj regułę. Zostanie wyświetlona strona Reguła skalowania . Użyj następujących informacji, aby wypełnić pola na tej stronie:
Ustaw wartość Źródło metryki na Inny zasób.
Ustaw wartość Typ zasobu na punkty końcowe online usługi Machine Learning.
Ustaw wartość Zasób na punkt końcowy.
W polu Nazwa metryki ustaw wartość Opóźnienie żądania.
Ustaw wartość Operator na Wartość Większa niż i ustaw próg metryki na wartość 70.
Ustaw czas trwania (minuty) na 5.
Ustaw operacjęna zwiększenie liczbywystąpień według i ustaw wartość 1
Tworzenie reguł skalowania na podstawie harmonogramu
Możesz również tworzyć reguły, które mają zastosowanie tylko w określonych dniach lub w określonych godzinach. W tym przykładzie liczba węzłów jest ustawiona na 2 w weekend.
# 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