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)

W tym artykule dowiesz się, jak wdrożyć model w punkcie końcowym online do użycia w wnioskowaniu w czasie rzeczywistym. Zaczniesz od wdrożenia modelu na komputerze lokalnym w celu debugowania błędów. Następnie wdrożysz i przetestujesz model na platformie Azure. Dowiesz się również, jak wyświetlać dzienniki wdrażania i 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 Edukacja?.

Zarządzane punkty końcowe online ułatwiają wdrażanie modeli uczenia maszynowego w sposób „gotowe 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 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 Edukacja lub rolę niestandardową zezwalającą na Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*funkcję . 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 Edukacja.

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

Alokacja przydziału maszyny wirtualnej na potrzeby wdrożenia

W przypadku zarządzanych punktów końcowych online usługa Azure Machine Edukacja rezerwuje 20% zasobów obliczeniowych na potrzeby przeprowadzania uaktualnień na niektórych jednostkach SKU maszyn wirtualnych. Jeśli żądasz określonej liczby wystąpień dla tych jednostek SKU maszyny wirtualnej we wdrożeniu, musisz mieć limit przydziału ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU dostępny, aby uniknąć wystąpienia błędu. Jeśli na przykład zażądasz 10 wystąpień maszyny wirtualnej Standard_DS3_v2 (która jest dostarczana z 4 rdzeniami) we wdrożeniu, musisz mieć limit przydziału dla 48 rdzeni (12 instances * 4 cores) dostępnych. Ten dodatkowy limit przydziału jest zarezerwowany dla operacji inicjowanych przez system, takich jak uaktualnienie systemu operacyjnego, odzyskiwanie maszyny wirtualnej itp., i nie spowoduje to ponoszenia kosztów, chyba że takie operacje zostaną uruchomione. Aby wyświetlić wzrost użycia i limitu przydziału żądań, zobacz Wyświetlanie użycia i limitów przydziału w witrynie Azure Portal. Aby wyświetlić koszt uruchamiania zarządzanych punktów końcowych online, zobacz Wyświetlanie kosztów zarządzanego punktu końcowego online. Istnieją pewne jednostki SKU maszyn wirtualnych, które są zwolnione z dodatkowego limitu przydziału rezerwacji. Aby wyświetlić pełną listę, zobacz Lista jednostek SKU zarządzanych punktów końcowych online.

Usługa Azure Machine Edukacja udostępnia udostępnioną pulę przydziałów, z której wszyscy użytkownicy mogą uzyskiwać dostęp do limitu przydziału w celu przeprowadzania testów przez ograniczony czas. 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 Edukacja umożliwia dostęp do tego udostępnionego limitu przydziału przez krótki czas.

Aby uzyskać więcej informacji na temat korzystania z udostępnionego limitu przydziału na potrzeby wdrażania punktów końcowych online, zobacz How to deploy foundation models using the studio (Jak wdrażać modele podstawowe przy użyciu programu Studio).

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 cliendpoints/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, należy określić:

  • Nazwa punktu końcowego: nazwa punktu końcowego. Musi być unikatowa w regionie świadczenia usługi Azure. Aby uzyskać więcej informacji na temat reguł nazewnictwa, zobacz Limity punktów końcowych.
  • Tryb uwierzytelniania: metoda uwierzytelniania dla punktu końcowego. Wybór między uwierzytelnianiem opartym na kluczach a uwierzytelnianiem opartym na tokenach w usłudze Azure Machine Edukacja. Klucz nie wygasa, ale token wygasa. Aby uzyskać więcej informacji na temat uwierzytelniania, zobacz Uwierzytelnianie w punkcie końcowym online.
  • Opcjonalnie możesz dodać opis i tagi do punktu końcowego.

Ustawianie nazwy punktu końcowego

Aby ustawić nazwę punktu końcowego, uruchom następujące polecenie (zastąp YOUR_ENDPOINT_NAME ciąg unikatową nazwą).

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 w usłudze Azure Machine Edukacja. Aby uzyskać najnowszy token, użyj az ml online-endpoint get-credentials polecenia .

Definiowanie wdrożenia

Wdrożenie to zestaw zasobów wymaganych do hostowania modelu, który wykonuje rzeczywiste wnioskowanie. Aby wdrożyć model, musisz mieć następujące elementy:

  • Pliki modelu (lub nazwa i wersja modelu, który jest już zarejestrowany w obszarze roboczym). W tym przykładzie mamy model scikit-learn, który wykonuje regresję.
  • Skrypt oceniania, czyli kod, który wykonuje model na danym żądaniu wejściowym. Skrypt oceniania odbiera dane przesłane do wdrożonej usługi internetowej i przekazuje je do modelu. Następnie skrypt wykonuje model i zwraca jego odpowiedź na klienta. Skrypt oceniania jest specyficzny dla modelu i musi zrozumieć dane oczekiwane przez model jako dane wejściowe i zwracane jako dane wyjściowe. W tym przykładzie mamy plik score.py .
  • Środowisko, w którym działa model. Środowisko może być obrazem platformy Docker z zależnościami conda lub plikiem Dockerfile.
  • Ustawienia określić typ wystąpienia i pojemność skalowania.

W poniższej tabeli opisano kluczowe atrybuty wdrożenia:

Atrybut Opis
Nazwa/nazwisko Nazwa wdrożenia.
Nazwa punktu końcowego Nazwa punktu końcowego do utworzenia wdrożenia w obszarze.
Model Model do użycia na potrzeby wdrożenia. Ta wartość może być odwołaniem do istniejącego modelu w wersji w obszarze roboczym lub specyfikacji wbudowanego modelu.
Ścieżka kodu Ścieżka do katalogu w lokalnym środowisku projektowym zawierającym cały kod źródłowy języka Python do oceniania modelu. Można użyć katalogów i pakietów zagnieżdżonych.
Skrypt oceniania Ścieżka względna do pliku oceniania w katalogu kodu źródłowego. Ten kod w języku Python musi mieć init() funkcję i run() funkcję. Funkcja init() zostanie wywołana po utworzeniu lub zaktualizowaniu modelu (można jej użyć do buforowania modelu w pamięci, na przykład). Funkcja run() jest wywoływana przy każdym wywołaniu punktu końcowego w celu wykonania rzeczywistego oceniania i przewidywania.
Środowisko Środowisko do hostowania modelu i kodu. Ta wartość może być odwołaniem do istniejącego środowiska w wersji w obszarze roboczym lub specyfikacji środowiska wbudowanego.
Typ wystąpienia Rozmiar maszyny wirtualnej do użycia na potrzeby wdrożenia. Aby uzyskać listę obsługiwanych rozmiarów, zobacz Lista jednostek SKU zarządzanych punktów końcowych online.
Liczba wystąpień Liczba wystąpień do użycia na potrzeby wdrożenia. W oparciu o oczekiwaną wartość obciążenia. W przypadku wysokiej dostępności zalecamy ustawienie wartości na wartość co najmniej 3. Firma Microsoft zastrzega sobie dodatkowe 20% na potrzeby przeprowadzania uaktualnień. Aby uzyskać więcej informacji, zobacz Alokacja przydziału maszyn wirtualnych dla wdrożeń.

Ostrzeżenie

  • Obraz modelu i kontenera (zgodnie z definicją w środowisku) można odwoływać się ponownie w dowolnym momencie przez wdrożenie, gdy wystąpienia za wdrożeniem przechodzą przez poprawki zabezpieczeń i/lub inne operacje odzyskiwania. W przypadku użycia zarejestrowanego modelu lub obrazu kontenera w usłudze Azure Container Registry do wdrożenia i usunięcia modelu lub obrazu kontenera wdrożenia oparte na tych zasobach mogą zakończyć się niepowodzeniem po ponownym utworzeniu obrazu. Jeśli model lub obraz kontenera został usunięty, upewnij się, że wdrożenia zależne zostaną ponownie utworzone lub zaktualizowane przy użyciu alternatywnego modelu lub obrazu kontenera.
  • Rejestr kontenerów, do którego odwołuje się środowisko, może być prywatny tylko wtedy, gdy tożsamość punktu końcowego ma uprawnienia dostępu do niego za pośrednictwem uwierzytelniania microsoft Entra i kontroli dostępu opartej na rolach platformy Azure. Z tego samego powodu prywatne rejestry platformy Docker inne niż usługa Azure Container Registry nie są obsługiwane.

Konfigurowanie wdrożenia

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-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

Uwaga

W pliku blue-deployment.yml określono następujące atrybuty wdrożenia:

  • model — W tym przykładzie określamy właściwości modelu w tekście przy użyciu elementu path. Pliki modelu są automatycznie przekazywane i rejestrowane przy użyciu automatycznie wygenerowanej nazwy.
  • environment — W tym przykładzie mamy wbudowane definicje, które zawierają pathelement . Użyjemy environment.docker.image tego obrazu. Zależności conda_file zostaną zainstalowane na górze obrazu.

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ć rozwiązania Kubernetes zamiast zarządzanych punktów końcowych jako celu obliczeniowego:

  1. Utwórz i dołącz klaster Kubernetes jako docelowy obiekt obliczeniowy do obszaru roboczego usługi Azure Machine Edukacja przy użyciu usługi Azure Machine Edukacja 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ść target na nazwę zarejestrowanego obiektu docelowego 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 (z wyjątkiem opcjonalnego monitorowania umowy SLA i integracji usługi Azure Log Analytics) mogą być używane z zarządzanymi punktami końcowymi lub punktami końcowymi platformy Kubernetes.

Rejestrowanie modelu i środowiska oddzielnie

W tym przykładzie path określamy wbudowany element (gdzie mają być przekazywane pliki). Interfejs wiersza polecenia automatycznie przekazuje pliki i rejestruje model i środowisko. Najlepszym rozwiązaniem dla środowiska produkcyjnego jest zarejestrowanie modelu i środowiska oraz określenie zarejestrowanej nazwy i wersji oddzielnie w języku YAML. 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.

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

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

Poprzednia definicja w pliku blue-deployment.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 Edukacja, zobacz Azure Machine Edukacja obrazy podstawowe.

Uwaga

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

Identyfikowanie ścieżki modelu w odniesieniu do AZUREML_MODEL_DIR

Podczas wdrażania modelu w usłudze Azure Machine Edukacja należy określić lokalizację modelu, który chcesz wdrożyć w ramach konfiguracji wdrożenia. W usłudze Azure Machine Edukacja ścieżka do modelu jest śledzona za pomocą zmiennej środowiskowejAZUREML_MODEL_DIR. Identyfikując ścieżkę modelu w odniesieniu do AZUREML_MODEL_DIRprogramu , można wdrożyć jeden lub więcej modeli przechowywanych lokalnie na maszynie lub wdrożyć model zarejestrowany w obszarze roboczym usługi Azure Machine Edukacja.

Na ilustracji odwołujemy się do następującej lokalnej struktury folderów dla pierwszych dwóch przypadków, w których wdrażasz pojedynczy model lub wdrażasz wiele modeli przechowywanych lokalnie:

Zrzut ekranu przedstawiający strukturę folderów zawierającą wiele modeli.

Używanie pojedynczego modelu lokalnego we wdrożeniu

Aby użyć pojedynczego modelu na maszynie lokalnej we wdrożeniu, określ wartość parametru pathmodel w pliku YAML wdrożenia. Oto przykład kodu YAML wdrożenia ze ścieżką /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl:

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

Po utworzeniu wdrożenia zmienna środowiskowa AZUREML_MODEL_DIR wskaże lokalizację magazynu na platformie Azure, w której jest przechowywany model. Na przykład /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 będzie zawierać model sample_m1.pkl.

W skryfcie oceniania (score.py) możesz załadować model (w tym przykładzie sample_m1.pklinit() ) w funkcji :

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl") 
    model = joblib.load(model_path) 

Używanie wielu modeli lokalnych we wdrożeniu

Mimo że interfejs wiersza polecenia platformy Azure, zestaw SDK języka Python i inne narzędzia klienckie umożliwiają określenie tylko jednego modelu na wdrożenie w definicji wdrożenia, nadal można używać wielu modeli we wdrożeniu, rejestrując folder modelu zawierający wszystkie modele jako pliki lub podkatalogi.

W poprzedniej przykładowej strukturze folderów zauważysz, że w folderze models znajduje się wiele modeli. We wdrożeniu YAML można określić ścieżkę do models folderu w następujący sposób:

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

Po utworzeniu wdrożenia zmienna środowiskowa AZUREML_MODEL_DIR wskaże lokalizację magazynu na platformie Azure, w której są przechowywane modele. Na przykład /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 będzie zawierać modele i strukturę plików.

W tym przykładzie AZUREML_MODEL_DIR zawartość folderu będzie wyglądać następująco:

Zrzut ekranu przedstawiający strukturę folderów lokalizacji przechowywania dla wielu modeli.

Za pomocą skryptu oceniania (score.py) można załadować modele w init() funkcji . Poniższy kod ładuje sample_m1.pkl model:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "models","model_1","v1", "sample_m1.pkl ") 
    model = joblib.load(model_path) 

Aby zapoznać się z przykładem wdrażania wielu modeli w jednym wdrożeniu, zobacz Wdrażanie wielu modeli w jednym wdrożeniu (przykład interfejsu wiersza polecenia) i Wdrażanie wielu modeli w jednym wdrożeniu (przykład zestawu SDK).

Napiwek

Jeśli masz więcej niż 1500 plików do zarejestrowania, rozważ skompresowanie plików lub podkatalogów jako .tar.gz podczas rejestrowania modeli. Aby korzystać z modeli, możesz usunąć z funkcji pliki lub podkatalogi z init() skryptu oceniania. Alternatywnie podczas rejestrowania modeli ustaw azureml.unpack właściwość na True, aby automatycznie usunąć z plików lub podkatalogów. W obu przypadkach nieskompresja odbywa się raz na etapie inicjowania.

Używanie modeli zarejestrowanych w obszarze roboczym usługi Azure Machine Edukacja we wdrożeniu

Aby użyć co najmniej jednego modelu zarejestrowanego w obszarze roboczym usługi Azure Machine Edukacja, we wdrożeniu określ nazwę zarejestrowanych modeli we wdrożeniu YAML. Na przykład następująca konfiguracja wdrożenia YAML określa zarejestrowaną model nazwę jako azureml:local-multimodel:3:

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

W tym przykładzie należy wziąć pod uwagę, że local-multimodel:3 zawiera następujące artefakty modelu, które można wyświetlić na karcie Modele w usłudze Azure Machine Edukacja Studio:

Zrzut ekranu przedstawiający strukturę folderów przedstawiającą artefakty modelu zarejestrowanego modelu.

Po utworzeniu wdrożenia zmienna środowiskowa AZUREML_MODEL_DIR wskaże lokalizację magazynu na platformie Azure, w której są przechowywane modele. Na przykład /var/azureml-app/azureml-models/local-multimodel/3 będzie zawierać modele i strukturę plików. AZUREML_MODEL_DIR wskaże folder zawierający katalog główny artefaktów modelu. Na podstawie tego przykładu AZUREML_MODEL_DIR zawartość folderu będzie wyglądać następująco:

Zrzut ekranu przedstawiający strukturę folderów z wieloma modelami.

Za pomocą skryptu oceniania (score.py) można załadować modele w init() funkcji . Na przykład załaduj diabetes.sav model:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav") 
    model = joblib.load(model_path) 

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.

Jak wspomniano wcześniej, skrypt oceniania określony w code_configuration.scoring_script pliku 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 pisania logiki dla globalnych operacji inicjowania, takich jak buforowanie modelu w pamięci (jak w tym przykładzie).

Funkcja run() jest wywoływana dla każdego wywołania punktu końcowego i wykonuje rzeczywiste ocenianie i przewidywanie. W tym przykładzie wyodrębnimy dane z danych wejściowych JSON, wywołamy metodę modelu predict() scikit-learn, a następnie zwrócimy wynik.

Wdrażanie i debugowanie lokalnie przy użyciu lokalnych punktów końcowych

Zdecydowanie zalecamy przetestowanie punktu końcowego lokalnie przez weryfikowanie i debugowanie 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, a usługa Azure Machine Edukacja Studio i szablon usługi ARM nie.

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ć usługi Azure Machine Edukacja wnioskowania o pakiecie PYTHON serwera HTTP. 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.

Uwaga

Lokalne punkty końcowe mają następujące ograniczenia:

  • Nie obsługują reguł ruchu, uwierzytelniania ani ustawień sondy.
  • Obsługują tylko jedno wdrożenie na punkt końcowy.
  • Obsługują lokalne pliki modelu i środowisko tylko z lokalnym plikiem conda. Jeśli chcesz przetestować zarejestrowane modele, najpierw pobierz je przy użyciu interfejsu wiersza polecenia lub zestawu SDK, a następnie użyj path w definicji wdrożenia, aby odwołać się do folderu nadrzędnego. Jeśli chcesz przetestować zarejestrowane środowiska, sprawdź kontekst środowiska w usłudze Azure Machine Edukacja Studio i przygotuj lokalny plik conda do użycia. Przykład w tym artykule przedstawia użycie lokalnego modelu i środowiska z lokalnym plikiem conda, który obsługuje wdrożenie lokalne.

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 lokalnie w programie Visual Studio Code.

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.

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

Sprawdź stan, 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:

Stan opis
Tworzenie Zasób jest tworzony.
Aktualizacji Zasób jest aktualizowany.
Usuwanie Zasób jest usuwany.
Powodzenie Operacja tworzenia/aktualizacji zakończyła się pomyślnie.
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 wygodnego polecenia invoke 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 . Przykładowe polecenia oparte na narzędziu curl są dostępne w dalszej części tego dokumentu.

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.

Wdróż na platformie Azure

Aby utworzyć punkt końcowy w chmurze, uruchom następujący kod:

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

Aby utworzyć wdrożenie o nazwie blue w punkcie końcowym, uruchom następujący kod:

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

To wdrożenie 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 zakończą przetwarzanie szybciej.

Napiwek

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

Ważne

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

Napiwek

Sprawdzanie stanu punktu końcowego

Polecenie show zawiera informacje provisioning_state dotyczące punktu końcowego i wdrożenia:

az ml online-endpoint show -n $ENDPOINT_NAME

Wszystkie punkty końcowe w obszarze roboczym można wyświetlić 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

Możesz użyć invoke polecenia lub wybranego 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

W poniższym przykładzie pokazano, jak uzyskać 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, zobacz Zarządzanie dostępem do obszaru roboczego usługi Azure Machine Edukacja.

ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)

Następnie 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żywamy show poleceń i get-credentials , aby uzyskać poświadczenia uwierzytelniania. Zwróć również uwagę, że używamy --query flagi do filtrowania atrybutów tylko do tego, czego potrzebujemy. Aby dowiedzieć się więcej na temat --queryusługi , zobacz Wykonywanie zapytań względem danych wyjściowych polecenia interfejsu wiersza polecenia platformy Azure.

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

Aby uzyskać informacje na temat uwierzytelniania przy użyciu tokenu, zobacz Uwierzytelnianie w punktach końcowych online.

(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.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

Poprzednia aktualizacja wdrożenia to przykład 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, zostaną zaktualizowane 2 węzły naraz.
  • W przypadku punktu końcowego online platformy Kubernetes system iteracyjnie utworzy nowe wystąpienie wdrożenia z nową konfiguracją i usunie 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

Jeśli nie będziesz używać wdrożenia, usuń go, uruchamiając następujący kod (usuwa punkt końcowy i wszystkie podstawowe wdrożenia):

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