Sdílet prostřednictvím


Použití vlastního kontejneru k nasazení modelu do online koncového bodu

APPLIES TO:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Ve službě Azure Machine Learning můžete pomocí vlastního kontejneru nasadit model do online koncového bodu. Vlastní nasazení kontejnerů můžou používat jiné webové servery než výchozí server Python Flask, který azure Machine Learning používá.

Při použití vlastního nasazení můžete:

  • Používejte různé nástroje a technologie, jako jsou TensorFlow Serving (TF Serving), TorchServe, Triton Inference Server, balíček Plumber R a minimální image odvozování služby Azure Machine Learning.
  • Stále využijte integrované monitorování, škálování, upozorňování a ověřování, které nabízí Azure Machine Learning.

Tento článek vám ukazuje, jak použít TF Serving image k obsluze TensorFlow modelu.

Prerequisites

  • Skupina prostředků Azure, která obsahuje váš pracovní prostor a ke které máte vy nebo váš principál služby přístup přispěvatele. Pokud ke konfiguraci pracovního prostoru použijete kroky v části Vytvoření pracovního prostoru , splníte tento požadavek.

  • Docker Engine, installed and running locally. This prerequisite is highly recommended. Potřebujete ho ke spuštění modelu lokálně a je užitečný pro ladění.

Deployment examples

The following table lists deployment examples that use custom containers and take advantage of various tools and technologies.

Example Skript Azure CLI Description
minimal/multimodel deploy-custom-container-minimal-multimodel Nasadí více modelů do jednoho nasazení tím, že rozšíří minimální obraz pro inference služby Azure Machine Learning.
minimal/single-model deploy-custom-container-minimal-single-model Nasadí jeden model rozšířením minimální inference image služby Azure Machine Learning.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit Nasazuje dva modely MLFlow se specifickými požadavky pro Python do dvou samostatných nasazení za jediným koncovým bodem. Používá minimální obraz pro inference z Azure Machine Learning.
r/multimodel-plumber deploy-custom-container-r-multimodel-plumber Nasadí tři regresní modely do jednoho koncového bodu. Používá balíček Plumber R.
tfserving/half-plus-two deploy-custom-container-tfserving-half-plus-two Nasazuje model Half Plus Two pomocí vlastního kontejneru TF Serving. Používá standardní proces registrace modelu.
tfserving/half-plus-two-integrated deploy-custom-container-tfserving-half-plus-two-integrated Nasadí model Half Plus Two pomocí vlastního kontejneru TF Serving s modelem integrovaným do image.
torchserve/densenet deploy-custom-container-torchserve-densenet Nasadí jeden model pomocí vlastního kontejneru TorchServe.
triton/single-model deploy-custom-container-triton-single-model Nasadí model Triton pomocí vlastního kontejneru.

V tomto článku se dozvíte, jak použít příklad tfserving/half-plus-two.

Warning

Týmy podpory Microsoftu nemusí pomoct s řešením problémů způsobených vlastní imagí. Pokud narazíte na problémy, můžete být požádáni o použití výchozí image nebo jedné z imagí, které Microsoft poskytuje, abyste zjistili, jestli je problém specifický pro váš obrázek.

Stažení zdrojového kódu

The steps in this article use code samples from the azureml-examples repository. Ke klonování úložiště použijte následující příkazy:

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

Inicializace proměnných prostředí

Pokud chcete použít model TensorFlow, potřebujete několik proměnných prostředí. Spuštěním následujících příkazů definujte tyto proměnné:

BASE_PATH=endpoints/online/custom-container/tfserving/half-plus-two
AML_MODEL_NAME=tfserving-mounted
MODEL_NAME=half_plus_two
MODEL_BASE_PATH=/var/azureml-app/azureml-models/$AML_MODEL_NAME/1

Stažení modelu TensorFlow

Stáhněte a rozbalte model, který vydělí vstupní hodnotu dvěma a přidá do výsledku dva:

wget https://aka.ms/half_plus_two-model -O $BASE_PATH/half_plus_two.tar.gz
tar -xvf $BASE_PATH/half_plus_two.tar.gz -C $BASE_PATH

Otestovat TF Serving image lokálně

Pomocí Dockeru spusťte image místně pro účely testování:

docker run --rm -d -v $PWD/$BASE_PATH:$MODEL_BASE_PATH -p 8501:8501 \
 -e MODEL_BASE_PATH=$MODEL_BASE_PATH -e MODEL_NAME=$MODEL_NAME \
 --name="tfserving-test" docker.io/tensorflow/serving:latest
sleep 10

Odeslat žádosti o živost a hodnocení na obrázek

Odešlete žádost o kontrolu živosti, abyste ověřili, že proces uvnitř kontejneru skutečně běží. Měli byste získat stavový kód odpovědi 200 OK.

curl -v http://localhost:8501/v1/models/$MODEL_NAME

Odešlete žádost o bodování, abyste zkontrolovali, že můžete získat předpovědi o neoznačeném datech:

curl --header "Content-Type: application/json" \
  --request POST \
  --data @$BASE_PATH/sample_request.json \
  http://localhost:8501/v1/models/$MODEL_NAME:predict

Zastavení obrázku

Až dokončíte místní testování, zastavte obraz.

docker stop tfserving-test

Nasazení online koncového bodu do Azure

Pokud chcete nasadit online koncový bod do Azure, proveďte kroky v následujících částech.

Vytvoření souborů YAML pro koncový bod a nasazení

Cloudové nasazení můžete nakonfigurovat pomocí YAML. Pokud chcete například nakonfigurovat koncový bod, můžete vytvořit soubor YAML s názvem tfserving-endpoint.yml, který obsahuje následující řádky:

$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token

Pokud chcete nakonfigurovat nasazení, můžete vytvořit soubor YAML s názvem tfserving-deployment.yml, který obsahuje následující řádky:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: <model-version>
  path: ./half_plus_two
environment_variables:
  MODEL_BASE_PATH: /var/azureml-app/azureml-models/tfserving-mounted/<model-version>
  MODEL_NAME: half_plus_two
environment:
  #name: tfserving
  #version: 1
  image: docker.io/tensorflow/serving:latest
  inference_config:
    liveness_route:
      port: 8501
      path: /v1/models/half_plus_two
    readiness_route:
      port: 8501
      path: /v1/models/half_plus_two
    scoring_route:
      port: 8501
      path: /v1/models/half_plus_two:predict
instance_type: Standard_DS3_v2
instance_count: 1

V následujících částech najdete důležité koncepty týkající se YAML a parametrů Pythonu.

Base image

V části environment v YAML nebo v konstruktoru Environment v Pythonu zadáte základní obraz jako parametr. Používá se docker.io/tensorflow/serving:latest jako hodnota image.

Při kontrole kontejneru uvidíte, že tento server používá ENTRYPOINT příkazy ke spuštění skriptu vstupního bodu. Tento skript přebírá proměnné prostředí, jako například MODEL_BASE_PATH a MODEL_NAME, a otevírá porty, jako 8501. Všechny tyto podrobnosti se týkají tohoto serveru a pomocí těchto informací můžete určit, jak definovat nasazení. Pokud například v definici nasazení nastavíte proměnné prostředí MODEL_BASE_PATH a MODEL_NAME, TF Serving použije tyto hodnoty k inicializaci serveru. Podobně, pokud nastavíte port pro každou trasu na 8501 v definici nasazení, požadavky uživatelů na tyto trasy jsou správně směrovány na server TF Serving.

Tento příklad je založený na TF Serving. Můžete ale použít libovolný kontejner, který zůstává aktivní a reaguje na požadavky směrované na kontrolní body pro životnost, připravenost a hodnocení. Pokud chcete zjistit, jak vytvořit soubor Dockerfile pro vytvoření kontejneru, můžete se podívat na další příklady. Některé servery používají CMD pokyny místo ENTRYPOINT pokynů.

Parametr inference_config

environment je parametr a nachází se buď v sekci Environment, nebo ve třídě inference_config. Určuje port a cestu pro tři typy tras: trasy dostupnosti, trasy připravenosti a hodnotící trasy. Parametr inference_config se vyžaduje, pokud chcete spustit vlastní kontejner se spravovaným online koncovým bodem.

Trasy připravenosti vs. trasy životaschopnosti

Některé servery rozhraní API poskytují způsob, jak zkontrolovat stav serveru. Existují dva typy tras, které můžete určit pro kontrolu stavu:

  • Liveness routes: To check whether a server is running, you use a liveness route.
  • Readiness routes: To check whether a server is ready to do work, you use a readiness route.

V kontextu odvozování strojového učení může server odpovědět stavovým kódem 200 OK na žádost o kontrolu stavu, ještě před načtením modelu. Server může reagovat stavovým kódem 200 OK na požadavek připravenosti až po načtení modelu do paměti.

Další informace o sondách aktivity a připravenosti najdete v tématu Konfigurace sond aktivity, připravenosti a spuštění.

Server rozhraní API, který zvolíte, určuje trasy aktivity a připravenosti. Tento server identifikujete v předchozím kroku při místním testování kontejneru. V tomto článku používá ukázkové nasazení stejnou cestu pro trasu životnosti a připravenosti, protože TF Serving definuje pouze trasu životnosti. Další způsoby definování tras najdete v dalších příkladech.

Scoring routes

Server rozhraní API, který používáte, poskytuje způsob, jak získat datovou část, na které můžete pracovat. V kontextu odvozování strojového učení server přijímá vstupní data přes konkrétní trasu. Tuto trasu pro server rozhraní API identifikujte při místním testování kontejneru v předchozím kroku. Zadejte tuto trasu jako trasu pro bodování při definování nasazení, které chcete vytvořit.

Úspěšným vytvořením nasazení se také aktualizuje parametr scoring_uri koncového bodu. Tuto skutečnost můžete ověřit spuštěním následujícího příkazu: az ml online-endpoint show -n <endpoint-name> --query scoring_uri.

Vyhledání připojeného modelu

When you deploy a model as an online endpoint, Azure Machine Learning mounts your model to your endpoint. Po připojení modelu můžete nasadit nové verze modelu, aniž byste museli vytvořit novou image Dockeru. By default, a model registered with the name my-model and version 1 is located on the following path inside your deployed container: /var/azureml-app/azureml-models/my-model/1.

Představte si například následující nastavení:

  • Struktura adresářů na vašem místním počítači v /azureml-examples/cli/endpoints/online/custom-container
  • Název modelu half_plus_two

Snímek obrazovky, který znázorňuje stromové zobrazení místní adresářové struktury. Cesta /azureml-examples/cli/endpoints/online/custom-container je viditelná.

Předpokládejme, že váš soubor tfserving-deployment.yml obsahuje následující řádky v jeho model části. V této části hodnota odkazuje na název, name který používáte k registraci modelu ve službě Azure Machine Learning.

model:
    name: tfserving-mounted
    version: 1
    path: ./half_plus_two

V tomto případě při vytváření nasazení se váš model nachází pod následující složkou: /var/azureml-app/azureml-models/tfserving-mounted/1.

Snímek obrazovky znázorňující stromové zobrazení struktury adresáře nasazení Zobrazí se cesta var/azureml-app/azureml-models/tfserving-mounted/1.

Volitelně můžete nakonfigurovat svoji model_mount_path hodnotu. Úpravou tohoto nastavení můžete změnit cestu, ve které je model připojený.

Important

Hodnota model_mount_path musí být platná absolutní cesta v Linuxu (v hostovaném operačním systému image kontejneru).

Important

model_mount_path je použitelný pouze ve scénáři BYOC (Přineste si vlastní kontejner). Ve scénáři BYOC musí prostředí, které používá online nasazení, mít inference_config nakonfigurovaný parametr. K určení inference_config parametru při vytváření prostředí můžete použít Azure ML CLI nebo Python SDK. Uživatelské rozhraní sady Studio aktuálně nepodporuje zadání tohoto parametru.

Když změníte hodnotu model_mount_path, musíte také aktualizovat proměnnou prostředí MODEL_BASE_PATH. Nastavte MODEL_BASE_PATH stejnou hodnotu, jako model_mount_path pokud se chcete vyhnout neúspěšnému nasazení kvůli chybě týkající se nenalezené základní cesty.

Do souboru tfserving-deployment.yml můžete například přidat model_mount_path parametr. Můžete také aktualizovat MODEL_BASE_PATH hodnotu v daném souboru:

name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: 1
  path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
environment_variables:
  MODEL_BASE_PATH: /var/tfserving-model-mount
...

V rámci nasazení je váš model umístěn v /var/tfserving-model-mount/tfserving-mounted/1. Už není v rámci azureml-app/azureml-models, ale pod připojovací cestou, kterou zadáte.

Snímek obrazovky znázorňující stromové zobrazení struktury adresáře nasazení Cesta /var/tfserving-model-mount/tfserving-mounted/1 je viditelná.

Vytvoření koncového bodu a nasazení

Po vytvoření souboru YAML vytvořte koncový bod pomocí následujícího příkazu:

az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-endpoint.yml

K vytvoření nasazení použijte následující příkaz. Tento krok může běžet několik minut.

az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-deployment.yml --all-traffic

Vyvolání koncového bodu

Po dokončení nasazení proveďte žádost o bodování do nasazeného koncového bodu.

RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)

Odstranění koncového bodu

Pokud už koncový bod nepotřebujete, odstraňte ho spuštěním následujícího příkazu:

az ml online-endpoint delete --name tfserving-endpoint