Sdílet prostřednictvím


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

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)

Zjistěte, jak pomocí vlastního kontejneru nasadit model do online koncového bodu ve službě Azure Machine Learning.

Vlastní nasazení kontejnerů můžou používat jiné webové servery než výchozí server Python Flask používaný službou Azure Machine Learning. Uživatelé těchto nasazení můžou stále využívat integrované monitorování, škálování, upozorňování a ověřování služby Azure Machine Learning.

Následující tabulka uvádí různé příklady nasazení, které používají vlastní kontejnery, jako jsou TensorFlow Serving, TorchServe, Triton Inference Server, balíček Plumber R a minimální image odvozování služby Azure Machine Learning.

Příklad Skript (CLI) Popis
minimal/multimodel deploy-custom-container-minimal-multimodel Nasazení více modelů do jednoho nasazení rozšířením minimální image odvozování služby Azure Machine Learning
minimal/single-model deploy-custom-container-minimal-single-model Nasaďte jeden model rozšířením minimální image odvozování služby Azure Machine Learning.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit Nasaďte dva modely MLFlow s různými požadavky Pythonu na dvě samostatná nasazení za jedním koncovým bodem pomocí minimální image odvozování ve službě Azure Machine Learning.
r/multimodel-plumber deploy-custom-container-r-multimodel-plumber Nasazení tří regresních modelů do jednoho koncového bodu pomocí balíčku Plumber R
tfserving /half-plus-two deploy-custom-container-tfserving-half-plus-two Nasaďte model Half Plus Two pomocí vlastního kontejneru TensorFlow obsluhující vlastní kontejner pomocí standardního procesu registrace modelu.
tfserving /half-plus-two-integrated deploy-custom-container-tfserving-half-plus-two-integrated Nasaďte model Half Plus Two pomocí tensorFlow obsluhující vlastní kontejner s modelem integrovaným do image.
torchserve / hustá síť deploy-custom-container-torchserve-densenet Nasaďte jeden model pomocí vlastního kontejneru TorchServe.
triton/single-model deploy-custom-container-triton-single-model Nasazení modelu Triton pomocí vlastního kontejneru

Tento článek se zaměřuje na obsluhu modelu TensorFlow s obsluhou TensorFlow (TF).

Upozorňující

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

Požadavky

Než budete postupovat podle kroků v tomto článku, ujistěte se, že máte následující požadavky:

  • Pracovní prostor služby Azure Machine Learning. Pokud ho nemáte, vytvořte ho pomocí kroků v rychlém startu : Vytvoření článku o prostředcích pracovního prostoru.

  • Azure CLI a ml rozšíření nebo sada Azure Machine Learning Python SDK v2:

  • Vy nebo instanční objekt, který používáte, musíte mít přístup přispěvatele ke skupině prostředků Azure, která obsahuje váš pracovní prostor. Takovou skupinu prostředků máte, pokud jste pracovní prostor nakonfigurovali pomocí článku rychlý start.

  • Pokud chcete nasadit místně, musíte mít modul Docker spuštěný místně. Tento krok se důrazně doporučuje. Pomáhá ladit problémy.

Stažení zdrojového kódu

Pokud chcete postupovat podle tohoto kurzu, naklonujte zdrojový kód z GitHubu.

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

Inicializace proměnných prostředí

Definování proměnných prostředí:

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ý rozdělí vstup dvěma a přidá 2 do výsledku:

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

Místní spuštění image služby TF Pro otestování, že funguje

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

Zkontrolujte, že na obrázek můžete odesílat žádosti o živé a bodovací hodnocení.

Nejprve zkontrolujte, jestli je kontejner aktivní, což znamená, že proces uvnitř kontejneru stále běží. Měla by se zobrazit odpověď 200 (OK).

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

Pak zkontrolujte, ž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

Teď, když jste testovali místně, zastavte image:

docker stop tfserving-test

Nasazení online koncového bodu do Azure

Dále nasaďte online koncový bod do Azure.

Vytvoření souboru YAML pro koncový bod a nasazení

Cloudové nasazení můžete nakonfigurovat pomocí YAML. Podívejte se na ukázkový YAML pro tento příklad:

tfserving-endpoint.yml

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

tfserving-deployment.yml

$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 tomto parametru YAML/Python je potřeba poznamenat několik důležitých konceptů:

Základní image

Základní image je určena jako parametr v prostředí a docker.io/tensorflow/serving:latest používá se v tomto příkladu. Při kontrole kontejneru zjistíte, že tento server používá ENTRYPOINT ke spuštění skriptu vstupního bodu, který přebírá proměnné prostředí, jako je a MODEL_NAME, a zveřejňuje porty, jako MODEL_BASE_PATH 8501je . Tyto podrobnosti jsou všechny konkrétní informace pro tento vybraný server. Pomocí tohoto porozumění serveru můžete určit, jak definovat nasazení. Pokud například nastavíte proměnné prostředí pro MODEL_BASE_PATH definici nasazení a MODEL_NAME v definici nasazení, server (v tomto případě služba TF Serve) převezme hodnoty, které server inicializuje. Podobně pokud nastavíte port pro trasy, které mají být 8501 v definici nasazení, požadavek uživatele na tyto trasy bude správně směrován na server služby TF Obsluha.

Všimněte si, že tento konkrétní příklad je založený na případu obsluhy TF, ale můžete použít všechny kontejnery, které zůstanou v obraze a reagují na žádosti přicházející do živého prostředí, připravenosti a tras vyhodnocování. Můžete se podívat na další příklady a podívat se, jak se vytvoří soubor dockerfile (například místo CMD ENTRYPOINT) k vytvoření kontejnerů.

Konfigurace odvození

Konfigurace odvozování je parametr v prostředí a určuje port a cestu pro 3 typy trasy: živá, připravenost a bodovací trasa. Konfigurace odvození se vyžaduje, pokud chcete spustit vlastní kontejner se spravovaným online koncovým bodem.

Trasa připravenosti vs. trasa aktivity

Server rozhraní API, který zvolíte, může poskytnout způsob, jak zkontrolovat stav serveru. Existují dva typy trasy, které můžete zadat: živě a připravenost. Trasa liveness slouží ke kontrole, jestli je server spuštěný. Trasa připravenosti se používá ke kontrole, jestli je server připravený k práci. V kontextu odvozování strojového učení může server odpovědět 200 OK na žádost o odezvu před načtením modelu a server může odpovědět na požadavek připravenosti 200 OK až po načtení modelu do paměti.

Další informace o sondách aktivity a připravenosti obecně najdete v dokumentaci k Kubernetes.

Trasy aktivity a připravenosti budou určeny serverem rozhraní API podle vašeho výběru, protože byste zjistili při místním testování kontejneru v předchozím kroku. Všimněte si, že ukázkové nasazení v tomto článku používá stejnou cestu pro živou i připravenost, protože služba TF Obsluha definuje pouze trasu aktivity. Informace o definování tras najdete v dalších příkladech pro různé vzory.

Bodovací trasa

Server rozhraní API, který zvolíte, by mohl poskytnout způsob, jak získat datovou část, na které chcete pracovat. V kontextu odvozování strojového učení obdrží server vstupní data přes konkrétní trasu. Určete tuto trasu pro server rozhraní API při testování kontejneru místně v předchozím kroku a určete ji při definování nasazení, které se má vytvořit. Všimněte si, že úspěšné vytvoření nasazení aktualizuje také parametr scoring_uri koncového bodu, pomocí kterého můžete ověřit az ml online-endpoint show -n <name> --query scoring_uri.

Vyhledání připojeného modelu

Když model nasadíte jako online koncový bod, Azure Machine Learning připojí váš model ke koncovému bodu. Připojení modelu umožňuje nasadit nové verze modelu, aniž byste museli vytvářet novou image Dockeru. Ve výchozím nastavení by se model zaregistrovaný s názvem foo a verzí 1 nacházel v následující cestě uvnitř nasazeného kontejneru: /var/azureml-app/azureml-models/foo/1

Pokud máte například adresářovou strukturu /azureml-examples/cli/endpoints/online/custom-container na místním počítači, kde má model název half_plus_two:

Diagram znázorňující stromové zobrazení místní adresářové struktury

A tfserving-deployment.yml obsahuje:

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

Váš model se pak bude ve vašem nasazení nacházet v umístění /var/azureml-app/azureml-models/tfserving-deployment/1 :

Diagram znázorňující stromové zobrazení struktury adresáře nasazení

Volitelně můžete nakonfigurovat model_mount_path. Umožňuje změnit cestu, ve které je model připojený.

Důležité

Musí model_mount_path to být platná absolutní cesta v Linuxu (operační systém image kontejneru).

V tfserving-deployment.yml můžete model_mount_path mít například parametr:

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

Pak se váš model ve vašem nasazení nachází v umístění /var/tfserving-model-mount/tfserving-deployment/1 . Všimněte si, že už není v rámci azureml-app/azureml-models, ale pod zadanou cestou připojení:

Diagram znázorňující stromové zobrazení struktury adresáře nasazení při použití mount_model_path

Vytvoření koncového bodu a nasazení

Teď, když rozumíte tomu, jak byl YAML vytvořen, vytvořte koncový bod.

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

Vytvoření nasazení může trvat několik minut.

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

Vyvolání koncového bodu

Po dokončení nasazení se podívejte, jestli můžete provést žá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

Teď, když jste úspěšně získali skóre pomocí koncového bodu, můžete ho odstranit:

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