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 Učení.

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

Následující tabulka uvádí různé příklady nasazení, které používají vlastní kontejnery, jako je TensorFlow Serving, TorchServe, Triton Inference Server, balíček Plumber R a image Azure Machine Učení Inference Minimal.

Příklad Skript (CLI) Popis
minimal/multimodel deploy-custom-container-minimal-multimodel Nasazením více modelů do jednoho nasazení rozšířením image Minimální odvozování Učení počítače Azure.
minimal/single-model deploy-custom-container-minimal-single-model Nasaďte jeden model rozšířením image Minimální odvozování počítače Azure Učení.
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í počítače Azure Učení minimální image odvozování.
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.
torchserve/huggingface-textgen deploy-custom-container-torchserve-huggingface-textgen Nasaďte modely Hugging Face do online koncového bodu a postupujte podle příkladu Hugging Face Transformers 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 Azure Machine Učení 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 si všimnout několika důležitých konceptů:

Trasa připravenosti vs. trasa aktivity

Server HTTP definuje cesty pro živou ipř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. Při odvozování strojového učení může server odpovědět 200 OK na žádost o liveness před načtením modelu. Server může na požadavek připravenosti odpovědět 200 OK až po načtení modelu do paměti.

Další informace o testech aktivity a připravenosti najdete v dokumentaci k Kubernetes.

Všimněte si, že toto nasazení používá stejnou cestu pro živou i připravenost, protože služba TF Obsluha definuje pouze trasu aktivity.

Vyhledání připojeného modelu

Když model nasadíte jako online koncový bod, Azure Machine Učení 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