Udostępnij za pośrednictwem


Wdrażanie i ocenianie modelu uczenia maszynowego przy użyciu punktu końcowego online

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

Z tego artykułu dowiesz się, jak wdrożyć model w punkcie końcowym online do użycia w wnioskowaniu w czasie rzeczywistym. Zacznij od wdrożenia modelu na komputerze lokalnym w celu debugowania błędów. Następnie wdrożysz i przetestujesz model na platformie Azure, wyświetlisz dzienniki wdrażania i będziesz monitorować umowę dotyczącą poziomu usług (SLA). Po zakończeniu tego artykułu będziesz mieć skalowalny punkt końcowy HTTPS/REST, którego można użyć do wnioskowania w czasie rzeczywistym.

Punkty końcowe online to punkty końcowe, które są używane do wnioskowania w czasie rzeczywistym. Istnieją dwa typy punktów końcowych online: zarządzane punkty końcowe online i punkty końcowe online platformy Kubernetes. Aby uzyskać więcej informacji na temat punktów końcowych i różnic między zarządzanymi punktami końcowymi online i punktami końcowymi online platformy Kubernetes, zobacz Co to są punkty końcowe usługi Azure Machine Learning?

Zarządzane punkty końcowe online ułatwiają wdrażanie modeli uczenia maszynowego jako „gotowych do użytku”. Zarządzane punkty końcowe online współpracują z maszynami o zaawansowanych procesorach CPU i GPU na platformie Azure w sposób skalowalny i w pełni zarządzany. Zarządzane punkty końcowe online oferują obsługę, skalowanie, zabezpieczanie i monitorowanie modeli, uwalniając Cię od konieczności konfigurowania infrastruktury bazowej i zarządzania nią.

Głównym przykładem tego dokumentu jest użycie zarządzanych punktów końcowych online do wdrożenia. Aby zamiast tego użyć platformy Kubernetes, zapoznaj się z uwagami w tym dokumencie, które są wbudowane w dyskusję na temat zarządzanego punktu końcowego online.

Wymagania wstępne

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

Przed wykonaniem kroków opisanych w tym artykule upewnij się, że masz następujące wymagania wstępne:

  • Kontrola dostępu na podstawie ról platformy Azure (Azure RBAC): jest używana do udzielania dostępu do operacji w usłudze Azure Machine Learning. Aby wykonać kroki opisane w tym artykule, konto użytkownika musi mieć przypisaną rolę właściciela lub współautora dla obszaru roboczego usługi Azure Machine Learning lub rolę niestandardową zezwalającą na Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*korzystanie z usługi . Jeśli używasz programu Studio do tworzenia/zarządzania punktami końcowymi/wdrożeniami online, musisz mieć dodatkowe uprawnienie "Microsoft.Resources/deployments/write" od właściciela grupy zasobów. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do obszaru roboczego usługi Azure Machine Learning.

  • (Opcjonalnie) Aby wdrożyć lokalnie, należy zainstalować aparat platformy Docker na komputerze lokalnym. Zdecydowanie zalecamy tę opcję, więc łatwiej jest debugować problemy.

  • Upewnij się, że masz wystarczający przydział maszyny wirtualnej przydzielony do wdrożenia. Usługa Azure Machine Learning rezerwuje 20% zasobów obliczeniowych na potrzeby przeprowadzania uaktualnień na niektórych jednostkach SKU maszyn wirtualnych. Jeśli na przykład zażądasz 10 wystąpień we wdrożeniu, musisz mieć limit przydziału 12 dla każdej liczby rdzeni dla jednostki SKU maszyny wirtualnej. Nie można uwzględnić dodatkowych zasobów obliczeniowych w wyniku błędu. Istnieje kilka jednostek SKU maszyn wirtualnych, które są wykluczone z dodatkowej rezerwacji przydziału. Aby uzyskać więcej informacji na temat alokacji przydziału, zobacz Alokacja przydziału maszyn wirtualnych dla wdrożenia.

  • Alternatywnie możesz użyć limitu przydziału z udostępnionej puli przydziałów usługi Azure Machine Learning przez ograniczony czas. Usługa Azure Machine Learning udostępnia udostępnioną pulę przydziałów, z której użytkownicy w różnych regionach mogą uzyskiwać dostęp do limitu przydziału w celu przeprowadzania testów przez ograniczony czas, w zależności od dostępności. Gdy używasz programu Studio do wdrażania modeli Llama-2, Phi, Nemotron, Mistral, Dolly i Deci-DeciLM z katalogu modeli do zarządzanego punktu końcowego online, usługa Azure Machine Learning umożliwia dostęp do udostępnionej puli przydziałów przez krótki czas, aby można było przeprowadzić testowanie. Aby uzyskać więcej informacji na temat udostępnionej puli przydziałów, zobacz Przydział udostępniony usługi Azure Machine Learning.

Przygotowywanie systemu

Ustawianie zmiennych środowiskowych

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>

Klonowanie repozytorium przykładów

Aby skorzystać z tego artykułu, najpierw sklonuj repozytorium przykładów (azureml-examples). Następnie uruchom następujący kod, aby przejść do katalogu repozytorium cli/ :

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli

Napiwek

Użyj --depth 1 polecenia , aby sklonować tylko najnowsze zatwierdzenie do repozytorium, co skraca czas na ukończenie operacji.

Polecenia w tym samouczku znajdują się w plikach deploy-local-endpoint.sh i deploy-managed-online-endpoint.sh katalogu, a pliki konfiguracji YAML znajdują się w podkatalogu cli endpoints/online/managed/sample/ .

Uwaga

Pliki konfiguracji YAML dla punktów końcowych online platformy Kubernetes znajdują się w podkatalogu endpoints/online/kubernetes/ .

Definiowanie punktu końcowego

Aby zdefiniować punkt końcowy online, określ nazwę punktu końcowego i tryb uwierzytelniania. Aby uzyskać więcej informacji na temat zarządzanych punktów końcowych online, zobacz Punkty końcowe online.

Ustawianie nazwy punktu końcowego

Aby ustawić nazwę punktu końcowego, uruchom następujące polecenie. Zastąp YOUR_ENDPOINT_NAME ciąg nazwą unikatową w regionie świadczenia usługi Azure. Aby uzyskać więcej informacji na temat reguł nazewnictwa, zobacz Limity punktów końcowych.

W przypadku systemu Linux uruchom następujące polecenie:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

Konfigurowanie punktu końcowego

Poniższy fragment kodu przedstawia plik endpoints/online/managed/sample/endpoint.yml :

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key

Dokumentacja formatu YAML punktu końcowego została opisana w poniższej tabeli. Aby dowiedzieć się, jak określić te atrybuty, zobacz dokumentację YAML punktu końcowego online. Aby uzyskać informacje o limitach związanych z zarządzanymi punktami końcowymi, zobacz limity dla punktów końcowych online.

Key opis
$schema (Opcjonalnie) Schemat YAML. Aby wyświetlić wszystkie dostępne opcje w pliku YAML, możesz wyświetlić schemat w poprzednim fragmencie kodu w przeglądarce.
name Nazwa punktu końcowego.
auth_mode Służy key do uwierzytelniania opartego na kluczach.
Służy aml_token do uwierzytelniania opartego na tokenach usługi Azure Machine Learning.
Służy aad_token do uwierzytelniania opartego na tokenach firmy Microsoft (wersja zapoznawcza).
Aby uzyskać więcej informacji na temat uwierzytelniania, zobacz Uwierzytelnianie klientów dla punktów końcowych online.

Definiowanie wdrożenia

Wdrożenie to zestaw zasobów wymaganych do hostowania modelu, który wykonuje rzeczywiste wnioskowanie. W tym przykładzie wdrożysz model scikit-learn, który wykonuje regresję i używa skryptu oceniania score.py do wykonania modelu na danym żądaniu wejściowym.

Aby dowiedzieć się więcej o kluczowych atrybutach wdrożenia, zobacz Wdrożenia online.

Konfigurowanie wdrożenia

Konfiguracja wdrożenia używa lokalizacji modelu, który chcesz wdrożyć.

Poniższy fragment kodu przedstawia pliki endpoints/online/managed/sample/blue-deployment.yml z wszystkimi wymaganymi danymi wejściowymi w celu skonfigurowania wdrożenia:

blue-deployment.yml

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
  path: ../../model-1/model/
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: 
  conda_file: ../../model-1/environment/conda.yaml
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

Plik blue-deployment.yml określa następujące atrybuty wdrożenia:

  • model - określa właściwości modelu w tekście przy użyciu path (gdzie przekazywać pliki z). Interfejs wiersza polecenia automatycznie przekazuje pliki modelu i rejestruje model przy użyciu automatycznie wygenerowanej nazwy.
  • environment — przy użyciu wbudowanych definicji, które obejmują miejsce przekazywania plików, interfejs wiersza polecenia automatycznie przekazuje conda.yaml plik i rejestruje środowisko. Później w celu skompilowania środowiska wdrożenie używa image elementu (w tym przykładzie jest to mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest) dla obrazu podstawowego, a conda_file zależności są instalowane na podstawie obrazu podstawowego.
  • code_configuration — podczas wdrażania pliki lokalne, takie jak źródło języka Python dla modelu oceniania, są przekazywane ze środowiska deweloperskiego.

Aby uzyskać więcej informacji na temat schematu YAML, zobacz dokumentację YAML punktu końcowego online.

Uwaga

Aby użyć punktów końcowych platformy Kubernetes zamiast zarządzanych punktów końcowych online jako celu obliczeniowego:

  1. Utwórz i dołącz klaster Kubernetes jako docelowy obiekt obliczeniowy do obszaru roboczego usługi Azure Machine Learning przy użyciu usługi Azure Machine Learning Studio.
  2. Użyj kodu YAML punktu końcowego, aby zastosować rozwiązanie Kubernetes zamiast zarządzanego punktu końcowego YAML. Musisz edytować plik YAML, aby zmienić wartość compute na nazwę zarejestrowanego docelowego obiektu obliczeniowego. Możesz użyć tego pliku deployment.yaml , który ma dodatkowe właściwości dotyczące wdrożenia platformy Kubernetes.

Wszystkie polecenia używane w tym artykule dla zarządzanych punktów końcowych online dotyczą również punktów końcowych platformy Kubernetes, z wyjątkiem następujących możliwości, które nie mają zastosowania do punktów końcowych platformy Kubernetes:

Omówienie skryptu oceniania

Napiwek

Format skryptu oceniania dla punktów końcowych online jest taki sam, jak w poprzedniej wersji interfejsu wiersza polecenia i w zestawie SDK języka Python.

Skrypt oceniania określony w pliku code_configuration.scoring_script musi mieć init() funkcję i run() funkcję.

W tym przykładzie użyto pliku score.py: score.py

import os
import logging
import json
import numpy
import joblib


def init():
    """
    This function is called when the container is initialized/started, typically after create/update of the deployment.
    You can write the logic here to perform init operations like caching the model in memory
    """
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # Please provide your model's folder name if there is one
    model_path = os.path.join(
        os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
    )
    # deserialize the model file back into a sklearn model
    model = joblib.load(model_path)
    logging.info("Init complete")


def run(raw_data):
    """
    This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
    In the example we extract the data from the json input and call the scikit-learn model's predict()
    method and return the result back
    """
    logging.info("model 1: request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

Funkcja jest wywoływana init() po zainicjowaniu lub uruchomieniu kontenera. Inicjowanie zwykle występuje wkrótce po utworzeniu lub zaktualizowaniu wdrożenia. Funkcja init jest miejscem do zapisu logiki dla globalnych operacji inicjowania, takich jak buforowanie modelu w pamięci (jak pokazano w tym pliku score.py ).

Funkcja run() jest wywoływana za każdym razem, gdy punkt końcowy jest wywoływany, i wykonuje rzeczywiste ocenianie i przewidywanie. W tym pliku run() score.py funkcja wyodrębnia dane z danych wejściowych JSON, wywołuje metodę modelu predict() scikit-learn, a następnie zwraca wynik przewidywania.

Wdrażanie i debugowanie lokalnie przy użyciu lokalnego punktu końcowego

Zdecydowanie zalecamy przetestowanie punktu końcowego lokalnie w celu zweryfikowania i debugowania kodu i konfiguracji przed wdrożeniem na platformie Azure. Interfejs wiersza polecenia platformy Azure i zestaw SDK języka Python obsługują lokalne punkty końcowe i wdrożenia, podczas gdy usługa Azure Machine Learning Studio i szablon usługi ARM nie są obsługiwane.

Aby można było wdrażać lokalnie, aparat platformy Docker musi być zainstalowany i uruchomiony. Aparat platformy Docker zwykle uruchamia się po uruchomieniu komputera. Jeśli tak nie jest, możesz rozwiązać problemy z aparatem platformy Docker.

Napiwek

Aby debugować skrypt oceniania lokalnie bez aparatu platformy Docker, możesz użyć pakietu HTTP serwera HTTP wnioskowania usługi Azure Machine Learning. Debugowanie za pomocą serwera wnioskowania ułatwia debugowanie skryptu oceniania przed wdrożeniem w lokalnych punktach końcowych, dzięki czemu można debugować bez wpływu na konfiguracje kontenera wdrożenia.

Aby uzyskać więcej informacji na temat lokalnego debugowania punktów końcowych online przed wdrożeniem na platformie Azure, zobacz Debugowanie punktów końcowych online.

Lokalne wdrażanie modelu

Najpierw utwórz punkt końcowy. Opcjonalnie w przypadku lokalnego punktu końcowego możesz pominąć ten krok i bezpośrednio utworzyć wdrożenie (następny krok), co z kolei spowoduje utworzenie wymaganych metadanych. Lokalne wdrażanie modeli jest przydatne do celów programistycznych i testowych.

az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

Teraz utwórz wdrożenie o nazwie blue w punkcie końcowym.

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

Flaga --local kieruje interfejs wiersza polecenia do wdrożenia punktu końcowego w środowisku platformy Docker.

Napiwek

Użyj programu Visual Studio Code, aby przeprowadzić testowanie i debugowanie punktów końcowych lokalnie. Aby uzyskać więcej informacji, zobacz debugowanie punktów końcowych online lokalnie w programie Visual Studio Code.

Sprawdź, czy wdrożenie lokalne zakończyło się pomyślnie

Sprawdź stan wdrożenia, aby sprawdzić, czy model został wdrożony bez błędu:

az ml online-endpoint show -n $ENDPOINT_NAME --local

Dane wyjściowe powinny wyglądać podobnie do poniższego kodu JSON. Wartość provisioning_state to Succeeded.

{
  "auth_mode": "key",
  "location": "local",
  "name": "docs-endpoint",
  "properties": {},
  "provisioning_state": "Succeeded",
  "scoring_uri": "http://localhost:49158/score",
  "tags": {},
  "traffic": {}
}

Poniższa tabela zawiera możliwe wartości dla elementu provisioning_state:

Wartość Opis
Tworzenie Zasób jest tworzony.
Aktualizacji Zasób jest aktualizowany.
Usuwanie Zasób jest usuwany.
Powodzenie Operacja tworzenia/aktualizacji powiodła się.
Nie działa Operacja tworzenia/aktualizowania/usuwania nie powiodła się.

Wywoływanie lokalnego punktu końcowego w celu oceny danych przy użyciu modelu

Wywołaj punkt końcowy, aby ocenić model przy użyciu invoke polecenia i przekazać parametry zapytania przechowywane w pliku JSON:

az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

Jeśli chcesz użyć klienta REST (na przykład curl), musisz mieć identyfikator URI oceniania. Aby uzyskać identyfikator URI oceniania, uruchom polecenie az ml online-endpoint show --local -n $ENDPOINT_NAME. W zwracanych danych znajdź scoring_uri atrybut .

Przejrzyj dzienniki pod kątem danych wyjściowych operacji invoke

W przykładowym pliku run() score.py metoda rejestruje dane wyjściowe w konsoli programu .

Te dane wyjściowe można wyświetlić za pomocą get-logs polecenia :

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

Wdrażanie punktu końcowego online na platformie Azure

Następnie wdróż punkt końcowy online na platformie Azure. Najlepszym rozwiązaniem w środowisku produkcyjnym jest zarejestrowanie modelu i środowiska, które będzie używane we wdrożeniu.

Rejestrowanie modelu i środowiska

Zalecamy zarejestrowanie modelu i środowiska przed wdrożeniem na platformie Azure, aby można było określić ich zarejestrowane nazwy i wersje podczas wdrażania. Zarejestrowanie zasobów umożliwia ich ponowne użycie bez konieczności ich przekazywania za każdym razem, gdy tworzysz wdrożenia, co zwiększa powtarzalność i możliwość śledzenia.

Uwaga

W przeciwieństwie do wdrożenia na platformie Azure wdrożenie lokalne nie obsługuje używania zarejestrowanych modeli i środowisk. Zamiast tego wdrożenie lokalne używa plików modelu lokalnego i używa środowisk tylko z plikami lokalnymi. W przypadku wdrożenia na platformie Azure można użyć zasobów lokalnych lub zarejestrowanych (modeli i środowisk). W tej sekcji artykułu wdrożenie na platformie Azure używa zarejestrowanych zasobów, ale zamiast tego masz możliwość korzystania z zasobów lokalnych. Aby zapoznać się z przykładem konfiguracji wdrożenia, która przekazuje pliki lokalne do użycia na potrzeby wdrożenia lokalnego, zobacz Konfigurowanie wdrożenia.

Aby zarejestrować model i środowisko, użyj formularza model: azureml:my-model:1 lub environment: azureml:my-env:1. W celu rejestracji można wyodrębnić definicje YAML plików model YAML i environment do oddzielnych plików YAML oraz użyć poleceń az ml model create i az ml environment create. Aby dowiedzieć się więcej o tych poleceniach, uruchom az ml model create -h polecenie i az ml environment create -h.

  1. Utwórz definicję YAML dla modelu:

    $schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
    name: my-model
    path: ../../model-1/model/
    
  2. Zarejestruj model:

    az ml model create -n my-model -v 1 -f ./model.yaml
    
  3. Utwórz definicję YAML dla środowiska:

    $schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
    name: my-env
    image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
    conda_file: ../../model-1/environment/conda.yaml
    
  4. Zarejestruj środowisko:

    az ml environment create -n my-env -v 1 -f ./environment.yaml
    

Aby uzyskać więcej informacji na temat rejestrowania modelu jako zasobu, zobacz Rejestrowanie modelu jako zasobu w usłudze Machine Learning przy użyciu interfejsu wiersza polecenia. Aby uzyskać więcej informacji na temat tworzenia środowiska, zobacz Zarządzanie środowiskami usługi Azure Machine Learning przy użyciu interfejsu wiersza polecenia i zestawu SDK (wersja 2).

Konfigurowanie wdrożenia korzystającego z zarejestrowanych zasobów

Konfiguracja wdrożenia używa zarejestrowanego modelu, który chcesz wdrożyć i zarejestrowanego środowiska.

Użyj zarejestrowanych zasobów (modelu i środowiska) w definicji wdrożenia. Poniższy fragment kodu przedstawia endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml plik z wszystkimi wymaganymi danymi wejściowymi do skonfigurowania wdrożenia:

blue-deployment-with-registered-assets.yml

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model: azureml:my-model:1
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: azureml:my-env:1
instance_type: Standard_DS3_v2
instance_count: 1

Używanie różnych typów i obrazów wystąpień procesora CPU i procesora GPU

Można określić typy i obrazy wystąpienia procesora CPU lub procesora GPU w definicji wdrożenia zarówno dla lokalnego wdrożenia, jak i wdrożenia na platformie Azure.

Definicja wdrożenia w pliku blue-deployment-with-registered-assets.yml używa wystąpienia typu Standard_DS3_v2 ogólnego przeznaczenia i obrazu mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestplatformy Docker spoza procesora GPU. W przypadku obliczeń procesora GPU wybierz jednostkę SKU typu obliczeniowego procesora GPU i obraz platformy Docker procesora GPU.

Aby uzyskać informacje o obsługiwanych typach wystąpień ogólnego przeznaczenia i procesora GPU, zobacz Zarządzane punkty końcowe online obsługiwane jednostki SKU maszyn wirtualnych. Aby uzyskać listę obrazów podstawowych procesora CPU i procesora GPU usługi Azure Machine Learning, zobacz Obrazy podstawowe usługi Azure Machine Learning.

Uwaga

Aby użyć platformy Kubernetes, zamiast zarządzanych punktów końcowych, jako celu obliczeniowego, zobacz Wprowadzenie do docelowego środowiska obliczeniowego Kubernetes.

Następnie wdróż punkt końcowy online na platformie Azure.

Wdróż na platformie Azure

  1. Utwórz punkt końcowy w chmurze platformy Azure.

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  2. Utwórz wdrożenie o nazwie blue w punkcie końcowym.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
    

    Tworzenie wdrożenia może potrwać do 15 minut, w zależności od tego, czy bazowe środowisko lub obraz jest kompilowany po raz pierwszy. Kolejne wdrożenia korzystające z tego samego środowiska są przetwarzane szybciej.

    Napiwek

    • Jeśli nie chcesz blokować konsoli interfejsu wiersza polecenia, możesz dodać flagę --no-wait do polecenia . Jednak ta opcja spowoduje zatrzymanie interaktywnego wyświetlania stanu wdrożenia.

    Ważne

    Flaga --all-traffic w kodzie az ml online-deployment create użytym do utworzenia wdrożenia przydziela 100% ruchu punktu końcowego do nowo utworzonego niebieskiego wdrożenia. Chociaż jest to przydatne w celach programistycznych i testowych, w środowisku produkcyjnym możesz chcieć kierować ruch do nowego wdrożenia za pomocą jawnego polecenia. Na przykład az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".

Aby debugować błędy we wdrożeniu, zobacz Rozwiązywanie problemów z wdrożeniami punktów końcowych online.

Sprawdzanie stanu punktu końcowego

  1. show Użyj polecenia , aby wyświetlić informacje w provisioning_state obszarze dla punktu końcowego i wdrożenia:

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  2. Wyświetl listę wszystkich punktów końcowych w obszarze roboczym w formacie tabeli przy użyciu list polecenia :

    az ml online-endpoint list --output table
    

Sprawdzanie stanu wdrożenia online

Sprawdź dzienniki, aby sprawdzić, czy model został wdrożony bez błędu.

  1. Aby wyświetlić dane wyjściowe dziennika z kontenera, użyj następującego polecenia interfejsu wiersza polecenia:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

    Domyślnie dzienniki są pobierane z kontenera serwera wnioskowania. Aby wyświetlić dzienniki z kontenera inicjatora magazynu, dodaj flagę --container storage-initializer . Aby uzyskać więcej informacji na temat dzienników wdrażania, zobacz Pobieranie dzienników kontenera.

Wywoływanie punktu końcowego w celu oceny danych przy użyciu modelu

  1. invoke Użyj wybranego polecenia lub klienta REST, aby wywołać punkt końcowy i ocenić niektóre dane:

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  2. Pobierz klucz używany do uwierzytelniania w punkcie końcowym:

    Napiwek

    Możesz kontrolować, które podmioty zabezpieczeń firmy Microsoft mogą uzyskać klucz uwierzytelniania, przypisując je do roli niestandardowej, która zezwala na Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action usługę i Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action. Aby uzyskać więcej informacji na temat zarządzania autoryzacją w obszarach roboczych, zobacz Zarządzanie dostępem do obszaru roboczego usługi Azure Machine Learning.

    ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
    
  3. Użyj narzędzia curl, aby ocenić dane.

    SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
    
    curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json
    

    Zwróć uwagę, że używasz show poleceń i get-credentials , aby uzyskać poświadczenia uwierzytelniania. Zwróć również uwagę, że używasz flagi --query do filtrowania tylko wymaganych atrybutów. Aby dowiedzieć się więcej na temat flagi, zobacz Zapytanie o dane wyjściowe polecenia interfejsu --query wiersza polecenia platformy Azure.

  4. Aby wyświetlić dzienniki wywołania, uruchom get-logs ponownie polecenie .

(Opcjonalnie) Aktualizowanie wdrożenia

Jeśli chcesz zaktualizować kod, model lub środowisko, zaktualizuj plik YAML, a następnie uruchom az ml online-endpoint update polecenie .

Uwaga

Jeśli zaktualizujesz liczbę wystąpień (w celu skalowania wdrożenia) wraz z innymi ustawieniami modelu (takimi jak kod, model lub środowisko) w jednym update poleceniu, najpierw zostanie wykonana operacja skalowania, a następnie zostaną zastosowane inne aktualizacje. Dobrym rozwiązaniem jest oddzielne wykonywanie tych operacji w środowisku produkcyjnym.

Aby zrozumieć, jak update działa:

  1. Otwórz plik online/model-1/onlinescoring/score.py.

  2. Zmień ostatni wiersz init() funkcji: po logging.info("Init complete")pliku dodaj logging.info("Updated successfully")polecenie .

  3. Zapisz plik.

  4. Uruchom następujące polecenie:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
    

    Uwaga

    Aktualizowanie przy użyciu języka YAML jest deklaratywne. Oznacza to, że zmiany w yaML są odzwierciedlane w podstawowych zasobach usługi Azure Resource Manager (punktach końcowych i wdrożeniach). Podejście deklaratywne ułatwia metodykę GitOps: wszystkie zmiany w punktach końcowych i wdrożeniach (nawet instance_count) przechodzą przez kod YAML.

    Napiwek

    • Możesz użyć ogólnych parametrów aktualizacji, takich jak --set parametr, za pomocą polecenia interfejsu wiersza polecenia update , aby zastąpić atrybuty w yaML lub ustawić określone atrybuty bez przekazywania ich w pliku YAML. Używanie --set dla pojedynczych atrybutów jest szczególnie przydatne w scenariuszach programowania i testowania. Na przykład, aby skalować wartość w górę instance_count dla pierwszego wdrożenia, możesz użyć flagi --set instance_count=2 . Jednak ze względu na to, że kod YAML nie jest aktualizowany, ta technika nie ułatwia metodyki GitOps.
    • Określanie pliku YAML nie jest obowiązkowe. Jeśli na przykład chcesz przetestować różne ustawienie współbieżności dla danego wdrożenia, możesz wypróbować coś takiego jak az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4. Zachowa to całą istniejącą konfigurację, ale zaktualizuje tylko określone parametry.
  5. Ponieważ zmodyfikowano funkcję, która jest uruchamiana po utworzeniu init() lub zaktualizowaniu punktu końcowego, komunikat Updated successfully będzie wyświetlany w dziennikach. Pobierz dzienniki, uruchamiając polecenie:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

Polecenie update działa również z wdrożeniami lokalnymi. Użyj tego samego az ml online-deployment update polecenia z flagą --local .

Uwaga

Aktualizacja wdrożenia w tej sekcji jest przykładem aktualizacji stopniowej w miejscu.

  • W przypadku zarządzanego punktu końcowego online wdrożenie jest aktualizowane do nowej konfiguracji z 20% węzłami naraz. Oznacza to, że jeśli wdrożenie ma 10 węzłów, aktualizowane są 2 węzły naraz.
  • W przypadku punktu końcowego online platformy Kubernetes system iteracyjnie tworzy nowe wystąpienie wdrożenia z nową konfiguracją i usuwa stary.
  • W przypadku użycia produkcyjnego należy rozważyć wdrożenie niebiesko-zielone, które oferuje bezpieczniejszą alternatywę dla aktualizowania usługi internetowej.

(Opcjonalnie) Konfigurowanie skalowania automatycznego

Automatyczne skalowanie uruchamia odpowiednią ilość zasobów na potrzeby obsługi obciążenia aplikacji. Zarządzane punkty końcowe online obsługują skalowanie automatyczne dzięki integracji z funkcją automatycznego skalowania usługi Azure Monitor. Aby skonfigurować skalowanie automatyczne, zobacz Jak automatycznie skalować punkty końcowe online.

(Opcjonalnie) Monitorowanie umowy SLA przy użyciu usługi Azure Monitor

Aby wyświetlić metryki i ustawić alerty na podstawie umowy SLA, wykonaj kroki opisane w temacie Monitorowanie punktów końcowych online.

(Opcjonalnie) Integracja z usługą Log Analytics

get-logs Polecenie dla interfejsu get_logs wiersza polecenia lub metody zestawu SDK zawiera tylko kilkaset ostatnich wierszy dzienników z automatycznie wybranego wystąpienia. Jednak usługa Log Analytics umożliwia trwałe przechowywanie i analizowanie dzienników. Aby uzyskać więcej informacji na temat korzystania z rejestrowania, zobacz Monitorowanie punktów końcowych online.

Usuwanie punktu końcowego i wdrożenia

Usuń punkt końcowy i wszystkie jego podstawowe wdrożenia:

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