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:
Interfejs wiersza polecenia platformy
ml
Azure i rozszerzenie interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji, zobacz Instalowanie, konfigurowanie i używanie interfejsu wiersza polecenia (wersja 2).Ważne
W przykładach interfejsu wiersza polecenia w tym artykule założono, że używasz powłoki Bash (lub zgodnej). Na przykład z systemu Linux lub Podsystem Windows dla systemu Linux.
Obszar roboczy usługi Azure Machine Learning. Jeśli go nie masz, wykonaj kroki opisane w temacie Instalowanie, konfigurowanie i używanie interfejsu wiersza polecenia (wersja 2), aby go utworzyć.
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 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, 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 elementupath
. Pliki modelu są automatycznie przekazywane i rejestrowane przy użyciu automatycznie wygenerowanej nazwy.environment
— W tym przykładzie mamy wbudowane definicje, które zawierająpath
element . Użyjemyenvironment.docker.image
tego obrazu. Zależnościconda_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:
- 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.
- 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:latest
platformy 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_DIR
programu , 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:
Używanie pojedynczego modelu lokalnego we wdrożeniu
Aby użyć pojedynczego modelu na maszynie lokalnej we wdrożeniu, określ wartość parametru path
model
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.pkl
init()
) 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:
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:
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:
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
- Użyj opcji Rozwiązywanie problemów z wdrażaniem punktów końcowych online, aby debugować błędy.
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 --query
usł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:
Otwórz plik online/model-1/onlinescoring/score.py.
Zmień ostatni wiersz
init()
funkcji: pologging.info("Init complete")
pliku dodajlogging.info("Updated successfully")
polecenie .Zapisz plik.
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 poleceniaupdate
, 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.
- Możesz użyć ogólnych parametrów aktualizacji, takich jak
Ponieważ zmodyfikowano funkcję, która jest uruchamiana po utworzeniu
init()
lub zaktualizowaniu punktu końcowego, komunikatUpdated 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
Powiązana zawartość
- Sejf wdrażanie punktów końcowych online
- Wdrażanie modeli za pomocą interfejsu REST
- Jak automatycznie skalować zarządzane punkty końcowe online
- Jak monitorować zarządzane punkty końcowe online
- Uzyskiwanie dostępu do zasobów platformy Azure z punktu końcowego online przy użyciu tożsamości zarządzanej
- Rozwiązywanie problemów z wdrażaniem punktów końcowych online
- Włączanie izolacji sieci za pomocą zarządzanych punktów końcowych online
- Wyświetlanie kosztów zarządzanego punktu końcowego online usługi Azure Machine Edukacja
- Zwiększanie limitów przydziału zasobów i zarządzanie nimi przy użyciu usługi Azure Machine Learning
- Używanie punktów końcowych wsadowych do oceniania wsadowego