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:Pokud chcete nainstalovat Azure CLI a rozšíření, přečtěte si téma Instalace, nastavení a použití rozhraní příkazového řádku (v2).
Důležité
Příklady rozhraní příkazového řádku v tomto článku předpokládají, že používáte prostředí Bash (nebo kompatibilní). Například ze systému Linux nebo Subsystém Windows pro Linux.
K instalaci sady Python SDK v2 použijte následující příkaz:
pip install azure-ai-ml azure-identity
Pokud chcete aktualizovat existující instalaci sady SDK na nejnovější verzi, použijte následující příkaz:
pip install --upgrade azure-ai-ml azure-identity
Další informace najdete v tématu Instalace sady Python SDK v2 pro Azure Machine Learning.
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
8501
je . 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:
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 :
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í:
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