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 (bieżąca)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). Na końcu tego artykułu masz skalowalny punkt końcowy HTTPS/REST, którego można użyć do wnioskowania w czasie rzeczywistym.

Interfejsy końcowe online to interfejsy końcowe 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 Kubernetes. Aby uzyskać więcej informacji na temat różnic, zobacz Managed online endpoints vs. Kubernetes online endpoints (Zarządzane punkty końcowe online a punkty końcowe online platformy Kubernetes).

Zarządzane punkty końcowe online ułatwiają wdrażanie modeli uczenia maszynowego w prosty i zautomatyzowany sposób. 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 dbają o obsługę, skalowanie, zabezpieczanie i monitorowanie modeli. Ta pomoc zwalnia Cię z nakładu pracy związanego z konfigurowaniem podstawowej infrastruktury i zarządzaniem nią.

Główny przykład w tym artykule używa 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)

  • Kontrola dostępu oparta na rolach (RBAC) platformy Azure służy 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ółtwórcy dla obszaru roboczego usługi Azure Machine Learning, lub rola niestandardowa musi na to zezwalać.Microsoft.MachineLearningServices/workspaces/onlineEndpoints/* Jeśli używasz usługi Azure Machine Learning Studio do tworzenia punktów końcowych lub wdrożeń online i zarządzania nimi, potrzebujesz dodatkowych uprawnień Microsoft.Resources/deployments/write od właściciela grupy zasobów. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do obszarów roboczych usługi Azure Machine Learning.

  • (Opcjonalnie) Aby wdrożyć lokalnie, należy zainstalować silnik Docker na komputerze lokalnym. Zdecydowanie zalecamy tę opcję, co ułatwia debugowanie problemów.

  • 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ń w niektórych wersjach maszyn wirtualnych. Jeśli na przykład zażądasz 10 wystąpień we wdrożeniu, musisz mieć limit przydziału wynoszący 12 dla każdej liczby rdzeni dla wersji maszyny wirtualnej. Niewzięcie pod uwagę dodatkowych zasobów obliczeniowych prowadzi do błędu. Niektóre wersje maszyn wirtualnych są wykluczone z dodatkowej rezerwacji przydziału. Aby uzyskać więcej informacji na temat alokacji, zobacz alokację maszyny wirtualnej 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 Udostępniony przydział 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 wykonać czynności opisane w tym artykule, najpierw sklonuj repozytorium azureml-examples, a następnie przejdź do katalogu azureml-examples/cli repozytorium:

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

Użyj --depth 1, aby sklonować tylko najnowszy commit 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 w katalogu cli. Pliki konfiguracji YAML znajdują się w podkatalogu 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.

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

Odwołanie do formatu YAML dla punktu końcowego znajduje się w poniższej tabeli. Aby dowiedzieć się, jak określić te atrybuty, zobacz referencję YAML punktu końcowego online. Aby uzyskać informacje o limitach związanych z zarządzanymi punktami końcowymi, zobacz Punkty końcowe online usługi Azure Machine Learning i punkty końcowe wsadowe.

Klucz 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.
Użyj aml_token do uwierzytelniania opartego na tokenach w Azure Machine Learning.
Użyj aad_token do uwierzytelniania opartego na tokenach Microsoft Entra (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, który wykonuje regresję scikit-learn i użyjesz skryptu oceniania score.py , aby uruchomić model w określonym żą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:

$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-ubuntu22.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 bezpośrednio przy użyciu parametru path (skąd przesyłać pliki). Interfejs wiersza polecenia automatycznie przekazuje pliki modelu i rejestruje model przy użyciu automatycznie wygenerowanej nazwy.
  • environment: używa wbudowanych definicji, które zawierają lokalizację przekazywania plików. Interfejs wiersza polecenia automatycznie przesyła plik conda.yaml i rejestruje środowisko. Później, aby skompilować środowisko, wdrożenie używa parametru image dla obrazu podstawowego. W tym przykładzie jest to mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest. Zależności conda_file są instalowane na podstawie obrazu podstawowego.
  • code_configuration: Przesyła pliki lokalne, takie jak źródła kodu Python dla modelu oceny, ze środowiska deweloperskiego podczas wdrażania.

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 kierować platformę 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 inne właściwości, które mają zastosowanie do 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

Format skryptu oceniania dla punktów końcowych online jest taki sam, jak w poprzedniej wersji CLI i w Python SDK.

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

W tym przykładzie użyto pliku score.py z sklonowanego lub pobranego wcześniej repozytorium:

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 init() jest wywoływana przy inicjowaniu lub uruchamianiu kontenera. Inicjalizacja zwykle następuje krótko 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. Wykonuje on rzeczywiste ocenianie i przewidywanie. W tym funkcja wyodrębnia dane z danych wejściowych JSON, wywołuje metodę modelu run() scikit-learn, a następnie zwraca wynik przewidywania.

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

Zdecydowanie zalecamy przetestowanie lokalnego uruchomienia punktu końcowego w celu zweryfikowania i debugowania kodu i konfiguracji przed wdrożeniem na platformie Azure. Interfejs wiersza polecenia Azure i zestaw SDK języka Python obsługują lokalne punkty końcowe i wdrożenia, ale studio Azure Machine Learning i szablony ARM tego nie robią.

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.

Możesz użyć pakietu Python serwera HTTP wnioskowania Azure Machine Learning, aby debugować skrypt oceniania lokalnie bez silnika Docker. 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 dla lokalnego punktu końcowego możesz pominąć ten krok. Wdrożenie można utworzyć bezpośrednio (następny krok), który z kolei tworzy wymagane metadane. 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 instruuje CLI do wdrożenia punktu końcowego w środowisku 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. Parametr provisioning_state jest 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
Creating Zasób jest tworzony.
Updating Zasób jest aktualizowany.
Deleting Zasób jest usuwany.
Succeeded Operacja tworzenia lub aktualizacji zakończyła się pomyślnie.
Failed Operacja tworzenia, aktualizowania lub 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ć URI oceniania. Aby uzyskać URI oceniania, uruchom 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 score.py metoda rejestruje wynik na konsoli.

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 używanego 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. Po zarejestrowaniu zasobów możesz ponownie je wykorzystać bez konieczności przekazywania ich za każdym razem, gdy tworzysz nowe wdrożenia. Ta praktyka zwiększa powtarzalność i możliwość śledzenia.

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 model i environment do oddzielnych plików YAML w folderze endpoints/online/managed/sample, a następnie 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 i az ml environment create -h.

  1. Utwórz definicję YAML dla modelu. Nadaj plikowi nazwę model.yml:

    $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 endpoints/online/managed/sample/model.yml
    
  3. Utwórz definicję YAML dla środowiska. Nadaj plikowi nazwę environment.yml:

    $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 endpoints/online/managed/sample/environment.yml
    

Aby uzyskać więcej informacji na temat rejestrowania modelu jako zasobu, zobacz Rejestrowanie modelu przy użyciu interfejsu wiersza polecenia platformy Azure lub zestawu SDK języka Python. Aby uzyskać więcej informacji na temat tworzenia środowiska, zobacz Tworzenie środowiska niestandardowego.

Ważne

Podczas definiowania środowiska niestandardowego dla wdrożenia upewnij się, że azureml-inference-server-http pakiet jest uwzględniony w pliku conda. Ten pakiet jest niezbędny do prawidłowego działania serwera wnioskowania. Jeśli nie wiesz, jak tworzyć własne niestandardowe środowisko, skorzystaj z jednego z naszych kuratorowanych środowisk, takich jak minimal-py-inference (dla modeli niestandardowych, które nie używają mlflow) lub mlflow-py-inference (dla modeli korzystających z mlflow). Te wyselekcjonowane środowiska można znaleźć na karcie Środowiska wystąpienia usługi Azure Machine Learning Studio.

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

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

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

$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życie różnych typów wystąpień CPU i GPU oraz obrazów

Można określić typy instancji CPU lub GPU oraz obrazy w konfiguracji wdrożenia, zarówno dla wdrożenia lokalnego, jak i wdrożenia na platformie Azure.

Definicja wdrożenia w pliku blue-deployment-with-registered-assets.yml używa instancji typu ogólnego przeznaczenia Standard_DS3_v2 i obrazu Docker mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest bez GPU. W przypadku obliczeń GPU wybierz wersję typu obliczeniowego GPU i obraz Docker dla GPU.

Aby uzyskać informacje o obsługiwanych typach instancji ogólnego przeznaczenia i GPU, zobacz Lista jednostek SKU zarządzanych punktów końcowych online. Aby uzyskać listę bazowych obrazów CPU i GPU usługi Azure Machine Learning, zobacz Obrazy bazowe 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 obiektu obliczeniowego platformy 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 podstawowe środowisko lub obraz jest tworzony po raz pierwszy. Kolejne wdrożenia korzystające z tego samego środowiska są przetwarzane szybciej.

    Jeśli nie chcesz blokować konsoli interfejsu wiersza polecenia, możesz dodać flagę --no-wait do polecenia . Jednak ta opcja zatrzymuje interakcyjne wyświetlanie stanu wdrożenia.

    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. Użycie tej flagi jest przydatne w celach programistycznych i testowych, ale w środowisku produkcyjnym możesz chcieć kierować ruch do nowego wdrożenia za pomocą jawnego polecenia. Użyj na przykład nazwy 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 online

  1. Użyj polecenia show, aby wyświetlić informacje w provisioning_state 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.

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:

    Możesz kontrolować, które podmioty zabezpieczeń Microsoft Entra mogą uzyskać klucz uwierzytelniania, przypisując je do roli niestandardowej, która zezwala na Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action 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 poleceń show 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 --query, zobacz Zapytanie o dane wyjściowe polecenia Azure CLI.

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

(Opcjonalnie) Aktualizowanie wdrożenia

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

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 wykonywana jest operacja skalowania. Pozostałe aktualizacje zostaną zastosowane w następnej kolejności. 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 funkcji init(): po logging.info("Init complete") dodaj logging.info("Updated successfully").

  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
    

    Aktualizowanie przy użyciu języka YAML jest deklaratywne. Oznacza to, że zmiany w yaML są odzwierciedlane w podstawowych zasobach usługi 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.

    Możesz użyć ogólnych parametrów aktualizacji, takich jak --set parametr, poleceniem CLI 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 ustawienia współbieżności dla określonego 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. Takie podejście zachowuje całą istniejącą konfigurację, ale aktualizuje tylko określone parametry.

  5. Ponieważ zmodyfikowano funkcję, która jest uruchamiana po utworzeniu init() lub zaktualizowaniu punktu końcowego, komunikat Updated successfully pojawia się w dziennikach. Pobierz dzienniki, uruchamiając poniższe 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 ciągłej bez przestojów.

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

(Opcjonalnie) Konfigurowanie skalowania automatycznego

Automatyczne skalowanie uruchamia właściwą liczbę zasobów w celu obsługi obciążenia aplikacji. Zarządzane punkty końcowe online obsługują skalowanie automatyczne za pośrednictwem integracji z funkcją automatycznego skalowania usługi Azure Monitor. Aby skonfigurować skalowanie automatyczne, zobacz Autoskalowanie punktów końcowych 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

Polecenie get-logs dla interfejsu CLI lub metoda get_logs dla zestawu SDK dostarcza tylko kilkaset ostatnich wierszy logó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 Używanie dzienników.

Usuń punkt końcowy i wdrożenie

Użyj następującego polecenia, aby usunąć punkt końcowy i wszystkie jego podstawowe wdrożenia:

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