Nasazení a určení skóre modelu strojového učení pomocí online koncového bodu
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)
V tomto článku se naučíte nasadit model do online koncového bodu pro použití při odvozování v reálném čase. Začnete nasazením modelu na místním počítači, abyste mohli ladit případné chyby. Pak model nasadíte a otestujete v Azure. Dozvíte se také, jak zobrazit protokoly nasazení a monitorovat smlouvu o úrovni služeb (SLA). Na konci tohoto článku budete mít škálovatelný koncový bod HTTPS/REST, který můžete použít k odvozování v reálném čase.
Online koncové body jsou koncové body, které se používají k odvozování v reálném čase. Existují dva typy online koncových bodů: spravované online koncové body a online koncové body Kubernetes. Další informace o koncových bodech a rozdílech mezi spravovanými online koncovými body a koncovými body Kubernetes najdete v tématu Co jsou koncové body Učení azure machine?.
Spravované online koncové body s nasazováním modelů ML na klíč. Spravované online koncové body pracují s výkonnými procesory a GPU v Azure škálovatelným a plně spravovaným způsobem. Spravované online koncové body se starají o obsluhu, škálování, zabezpečení a monitorování vašich modelů a osvobodí vás od režijních nákladů na nastavení a správu základní infrastruktury.
Hlavní příklad v tomto dokumentu používá spravované online koncové body pro nasazení. Pokud chcete místo toho používat Kubernetes, podívejte se na poznámky v tomto dokumentu, které jsou vložené do diskuze o spravovaném online koncovém bodu.
Požadavky
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
Než budete postupovat podle kroků v tomto článku, ujistěte se, že máte následující požadavky:
Azure CLI a
ml
rozšíření azure CLI. Další informace najdete v tématu 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.
Pracovní prostor služby Azure Machine Learning. Pokud ho nemáte, vytvořte ho pomocí kroků v části Instalace, nastavení a použití rozhraní příkazového řádku (v2).
Řízení přístupu na základě role v Azure (Azure RBAC) slouží k udělení přístupu k operacím ve službě Azure Machine Learning. Pokud chcete provést kroky v tomto článku, musí mít váš uživatelský účet přiřazenou roli vlastníka nebo přispěvatele pro pracovní prostor Učení Azure nebo vlastní roli, která umožňuje
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
. Pokud k vytváření a správě online koncových bodů/nasazení používáte Studio, budete potřebovat další oprávnění Microsoft.Resources/deployments/write od vlastníka skupiny prostředků. Další informace najdete v tématu Správa přístupu k pracovnímu prostoru Azure Machine Učení.(Volitelné) Pokud chcete nasadit místně, musíte do místního počítače nainstalovat Modul Dockeru . Tuto možnost důrazně doporučujeme , aby se snadněji ladily problémy.
Přidělení kvóty virtuálních počítačů pro nasazení
U spravovaných online koncových bodů si Azure Machine Učení 20 % výpočetních prostředků pro provádění upgradů u některých skladových položek virtuálních počítačů. Pokud v nasazení požadujete určitý počet instancí pro tyto skladové položky virtuálních počítačů, musíte mít k dispozici kvótu, ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU
abyste se vyhnuli chybě. Pokud například požadujete 10 instancí virtuálního počítače Standard_DS3_v2 (který je součástí 4 jader) v nasazení, měli byste mít kvótu pro 48 jader (12 instances * 4 cores
) k dispozici. Tato dodatečná kvóta je vyhrazená pro operace inicializované systémem, jako je upgrade operačního systému, obnovení virtuálního počítače atd., a pokud se taková operace nespustí, nebude se vám nic stát. Pokud chcete zobrazit navýšení kvóty využití a žádosti, přečtěte si téma Zobrazení využití a kvót na webu Azure Portal. Pokud chcete zobrazit náklady na provoz spravovaných online koncových bodů, přečtěte si téma Zobrazení nákladů na spravovaný online koncový bod. Existují určité skladové položky virtuálních počítačů, které jsou vyloučené z rezervace extra kvót. Úplný seznam zobrazíte v seznamu skladových položek spravovaných online koncových bodů.
Azure Machine Učení poskytuje fond sdílených kvót, ze kterého mají všichni uživatelé přístup k kvótě, aby mohli provádět testování po omezenou dobu. Když pomocí studia nasadíte modely Llama-2, Phi, Nemotron, Mistral, Dolly a Deci-DeciLM z katalogu modelů do spravovaného online koncového bodu, Azure Machine Učení vám umožní získat přístup k této sdílené kvótě na krátkou dobu.
Další informace o tom, jak používat sdílenou kvótu pro nasazení online koncových bodů, najdete v tématu Nasazení základních modelů pomocí studia.
Příprava systému
Nastavení proměnných prostředí
Pokud jste ještě nenastavili výchozí hodnoty pro Azure CLI, uložte výchozí nastavení. Pokud se chcete vyhnout předávání hodnot pro vaše předplatné, pracovní prostor a skupinu prostředků několikrát, spusťte tento kód:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Klonování úložiště příkladů
Pokud chcete postupovat podle tohoto článku, nejprve naklonujte úložiště příkladů (azureml-examples). Potom spuštěním následujícího kódu přejděte do adresáře úložiště cli/
:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
Tip
Slouží --depth 1
ke klonování pouze nejnovějšího potvrzení do úložiště, což zkracuje dobu dokončení operace.
Příkazy v tomto kurzu jsou v souborech deploy-local-endpoint.sh
a deploy-managed-online-endpoint.sh
v cli
adresáři a konfigurační soubory YAML jsou v endpoints/online/managed/sample/
podadresáři.
Poznámka:
Konfigurační soubory YAML pro online koncové body Kubernetes jsou v endpoints/online/kubernetes/
podadresáři.
Definování koncového bodu
Pokud chcete definovat koncový bod, musíte zadat:
- Název koncového bodu: Název koncového bodu. Musí být jedinečný v oblasti Azure. Další informace o pravidlech pojmenování najdete v tématu Omezení koncových bodů.
- Režim ověřování: Metoda ověřování pro koncový bod. Vyberte si mezi ověřováním založeným na klíči a ověřováním na základě tokenů azure machine Učení. Platnost klíče nevyprší, ale platnost tokenu vyprší. Další informace o ověřování najdete v tématu Ověřování u online koncového bodu.
- Volitelně můžete do koncového bodu přidat popis a značky.
Nastavení názvu koncového bodu
Pokud chcete nastavit název koncového bodu, spusťte následující příkaz (nahraďte YOUR_ENDPOINT_NAME
jedinečným názvem).
V případě Linuxu spusťte tento příkaz:
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Konfigurace koncového bodu
Následující fragment kódu ukazuje koncové body,online/managed/sample/endpoint.yml soubor:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
Referenční informace pro formát YAML koncového bodu jsou popsány v následující tabulce. Informace o tom, jak tyto atributy zadat, najdete v referenčních informacích k YAML online koncového bodu. Informace o limitech souvisejících se spravovanými koncovými body najdete v omezeních pro online koncové body.
Key | Popis |
---|---|
$schema |
(Volitelné) Schéma YAML. Pokud chcete zobrazit všechny dostupné možnosti v souboru YAML, můžete schéma zobrazit v předchozím fragmentu kódu v prohlížeči. |
name |
Název koncového bodu |
auth_mode |
Používá se key pro ověřování založené na klíčích. Používá se aml_token pro ověřování na základě tokenů azure machine Učení. K získání nejnovějšího tokenu az ml online-endpoint get-credentials použijte příkaz. |
Definování nasazení
Nasazení je sada prostředků vyžadovaných pro hostování modelu, který provádí skutečné odvozování. Pokud chcete nasadit model, musíte mít:
- Soubory modelu (nebo název a verze modelu, který je už zaregistrovaný ve vašem pracovním prostoru). V tomto příkladu máme model scikit-learn, který provádí regresi.
- Bodovací skript, tj. kód, který spouští model na daném vstupním požadavku. Bodovací skript obdrží data odeslaná do nasazené webové služby a předá je do modelu. Skript pak spustí model a vrátí jeho odpověď klientovi. Bodovací skript je specifický pro váš model a musí rozumět datům, která model očekává jako vstup a vrací jako výstup. V tomto příkladu máme soubor score.py .
- Prostředí, ve kterém model běží. Prostředí může být image Dockeru se závislostmi Conda nebo souborem Dockerfile.
- Nastavení určit typ instance a kapacitu škálování.
Následující tabulka popisuje klíčové atributy nasazení:
Atribut | Popis |
---|---|
Name | Název nasazení. |
Název koncového bodu | Název koncového bodu pro vytvoření nasazení v části. |
Model | Model, který se má použít pro nasazení. Tato hodnota může být odkazem na existující model verze v pracovním prostoru nebo specifikace vloženého modelu. |
Cesta kódu | Cesta k adresáři v místním vývojovém prostředí, který obsahuje veškerý zdrojový kód Pythonu pro bodování modelu. Můžete použít vnořené adresáře a balíčky. |
Bodovací skript | Relativní cesta k souboru bodování v adresáři zdrojového kódu. Tento kód Pythonu init() musí mít funkci a run() funkci. Funkce init() bude volána po vytvoření nebo aktualizaci modelu (můžete ji použít k uložení modelu do mezipaměti, například). Funkce run() se volá při každém vyvolání koncového bodu, aby se udělalo skutečné bodování a předpověď. |
Prostředí | Prostředí pro hostování modelu a kódu. Tato hodnota může být odkazem na existující prostředí s verzí v pracovním prostoru nebo specifikaci vloženého prostředí. |
Typ instance | Velikost virtuálního počítače, která se má použít pro nasazení. Seznam podporovaných velikostí najdete v seznamu skladových položek spravovaných online koncových bodů. |
Počet instancí | Početinstancích Založte hodnotu na očekávané úloze. Pro zajištění vysoké dostupnosti doporučujeme nastavit hodnotu alespoň 3 na hodnotu . Pro provádění upgradů si vyhrazujeme dalších 20 %. Další informace najdete v tématu Přidělení kvóty virtuálních počítačů pro nasazení. |
Upozorňující
- Na image modelu a kontejneru (jak je definováno v prostředí) můžete kdykoli znovu odkazovat nasazením, když instance za nasazením procházejí opravami zabezpečení nebo jinými operacemi obnovení. Pokud jste k nasazení použili registrovaný model nebo image kontejneru ve službě Azure Container Registry a odebrali jste model nebo image kontejneru, nasazení, která se na tyto prostředky spoléhají, může při opětovném přípravě selhat. Pokud jste model nebo image kontejneru odebrali, ujistěte se, že jsou závislá nasazení znovu vytvořena nebo aktualizována pomocí alternativního modelu nebo image kontejneru.
- Registr kontejneru, na který prostředí odkazuje, může být privátní pouze v případě, že identita koncového bodu má oprávnění k přístupu k němu prostřednictvím ověřování Microsoft Entra a Azure RBAC. Z stejného důvodu se privátní registry Dockeru jiné než Azure Container Registry nepodporují.
Konfigurace nasazení
Následující fragment kódu ukazuje koncové body,online/managed/sample/blue-deployment.yml soubor se všemi požadovanými vstupy pro konfiguraci nasazení:
$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
Poznámka:
V souboru blue-deployment.yml jsme zadali následující atributy nasazení:
model
- V tomto příkladu určíme vlastnosti modelu vložené pomocí objektupath
. Soubory modelu se automaticky nahrají a zaregistrují s automaticky vygenerovaným názvem.environment
- V tomto příkladu máme vložené definice, které zahrnujípath
. Použijemeenvironment.docker.image
pro image.conda_file
Závislosti se nainstalují nad image.
Během nasazování se místní soubory, jako je zdroj Pythonu pro bodovací model, nahrají z vývojového prostředí.
Další informace o schématu YAML najdete v referenčních informacích k YAML online koncového bodu.
Poznámka:
Použití Kubernetes místo spravovaných koncových bodů jako cílového výpočetního objektu:
- Vytvořte a připojte cluster Kubernetes jako cílový výpočetní objekt k pracovnímu prostoru Azure Machine Učení pomocí studio Azure Machine Learning.
- Použijte YAML koncového bodu k cílení Kubernetes místo YAML spravovaného koncového bodu. Pokud chcete změnit hodnotu
target
na název zaregistrovaného cílového výpočetního objektu, budete muset upravit YAML. Můžete použít tento soubor deployment.yaml s dalšími vlastnostmi použitelnými pro nasazení Kubernetes.
Všechny příkazy, které se používají v tomto článku (s výjimkou volitelného monitorování sla a integrace Azure Log Analytics), je možné použít se spravovanými koncovými body nebo s koncovými body Kubernetes.
Oddělená registrace modelu a prostředí
V tomto příkladu určíme vložený path
text (kam se mají nahrát soubory). Rozhraní příkazového řádku automaticky nahraje soubory a zaregistruje model a prostředí. Osvědčeným postupem pro produkční prostředí je registrace modelu a prostředí a zadání registrovaného názvu a verze samostatně v YAML. Použijte formulář model: azureml:my-model:1
nebo environment: azureml:my-env:1
.
Pro registraci můžete extrahovat definice YAML a environment
do samostatných model
souborů YAML a používat příkazy az ml model create
a az ml environment create
. Další informace o těchtopříkazch az ml model create -h
az ml environment create -h
Další informace o registraci modelu jako prostředku najdete v tématu Registrace modelu jako prostředku v Učení počítače pomocí rozhraní příkazového řádku. Další informace o vytváření prostředí najdete v tématu Správa prostředí Azure Machine Učení pomocí rozhraní příkazového řádku a sady SDK (v2).
Použití různých typů instancí PROCESORu a GPU a imagí
Předchozí definice v souboru blue-deployment.yml používá instanci typu Standard_DS3_v2
pro obecné účely a image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
Dockeru bez GPU . U výpočetních prostředků GPU zvolte skladovou položku typu výpočetního prostředí GPU a image Dockeru GPU.
Podporované typy instancí pro obecné účely a GPU najdete v tématu Spravované online koncové body podporované skladovými jednotkami virtuálních počítačů. Seznam základních imagí azure machine Učení procesoru a GPU najdete v tématu Základní image Učení azure Machine.
Poznámka:
Informace o použití Kubernetes místo spravovaných koncových bodů jako cílového výpočetního objektu najdete v tématu Úvod do cílového výpočetního prostředí Kubernetes.
Identifikace cesty modelu s ohledem na AZUREML_MODEL_DIR
Při nasazování modelu do služby Azure Machine Učení je potřeba zadat umístění modelu, který chcete nasadit jako součást konfigurace nasazení. V Učení Azure Machine se cesta k vašemu AZUREML_MODEL_DIR
modelu sleduje pomocí proměnné prostředí. Když identifikujete cestu modelu s ohledem na AZUREML_MODEL_DIR
, můžete nasadit jeden nebo více modelů, které jsou uložené místně na vašem počítači, nebo nasadit model zaregistrovaný ve vašem pracovním prostoru Azure Machine Učení.
Pro ilustraci odkazujeme na následující místní strukturu složek pro první dva případy, kdy nasadíte jeden model nebo nasadíte více modelů, které jsou uložené místně:
Použití jednoho místního modelu v nasazení
Pokud chcete použít jeden model, který máte na místním počítači v nasazení, zadejte path
hodnotu model
YAML v nasazení. Tady je příklad YAML nasazení s cestou /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 vytvoření nasazení bude proměnná AZUREML_MODEL_DIR
prostředí odkazovat na umístění úložiště v Rámci Azure, kde je váš model uložený. Například /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1
bude obsahovat model sample_m1.pkl
.
V bodovacím skriptu (score.py
) můžete načíst model (v tomto příkladusample_m1.pkl
init()
) ve funkci:
def init():
model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl")
model = joblib.load(model_path)
Použití více místních modelů v nasazení
Přestože Azure CLI, Python SDK a další klientské nástroje umožňují v definici nasazení zadat pouze jeden model na jedno nasazení, můžete v nasazení stále používat více modelů registrací složky modelu, která obsahuje všechny modely jako soubory nebo podadresáře.
V předchozí ukázkové struktuře složek si všimnete, že ve models
složce je více modelů. V nasazení YAML můžete zadat cestu ke models
složce následujícím způsobem:
$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 vytvoření nasazení bude proměnná AZUREML_MODEL_DIR
prostředí odkazovat na umístění úložiště v Azure, kde jsou vaše modely uložené. Například /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1
bude obsahovat modely a strukturu souborů.
V tomto příkladu AZUREML_MODEL_DIR
bude obsah složky vypadat takto:
V bodovacím skriptu (score.py
) můžete načíst modely ve init()
funkci. Následující kód načte 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)
Příklad nasazení více modelů do jednoho nasazení najdete v tématu Nasazení více modelů do jednoho nasazení (příklad rozhraní příkazového řádku) a nasazení více modelů do jednoho nasazení (příklad sady SDK).
Tip
Pokud máte k registraci více než 1500 souborů, zvažte komprimaci souborů nebo podadresářů jako .tar.gz při registraci modelů. Pokud chcete používat modely, můžete z bodovacího skriptu zrušit dekomprimace souborů nebo podadresářů ve init()
funkci. Alternativně, když zaregistrujete modely, nastavte azureml.unpack
vlastnost na True
, automaticky rozbalte soubory nebo podadresáře. V obou případech se v inicializační fázi stane nekomprimace.
Použití modelů zaregistrovaných v pracovním prostoru Azure Machine Učení v nasazení
Pokud chcete použít jeden nebo více modelů, které jsou zaregistrované ve vašem pracovním prostoru Azure Machine Učení, zadejte v nasazení název registrovaných modelů v YAML nasazení. Například následující konfigurace YAML nasazení určuje registrovaný model
název takto 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
V tomto příkladu zvažte, že local-multimodel:3
obsahuje následující artefakty modelu, které lze zobrazit na kartě Modely v studio Azure Machine Learning:
Po vytvoření nasazení bude proměnná AZUREML_MODEL_DIR
prostředí odkazovat na umístění úložiště v Azure, kde jsou vaše modely uložené. Například /var/azureml-app/azureml-models/local-multimodel/3
bude obsahovat modely a strukturu souborů. AZUREML_MODEL_DIR
bude odkazovat na složku obsahující kořen artefaktů modelu.
Na základě tohoto příkladu AZUREML_MODEL_DIR
bude obsah složky vypadat takto:
V bodovacím skriptu (score.py
) můžete načíst modely ve init()
funkci. Například načtěte 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)
Vysvětlení hodnoticího skriptu
Tip
Formát bodovacího skriptu pro online koncové body je stejný formát, který se používá v předchozí verzi rozhraní příkazového řádku a v sadě Python SDK.
Jak jsme uvedli dříve, bodovací skript zadaný v code_configuration.scoring_script
musí mít init()
funkci a run()
funkci.
Tento příklad používá soubor 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()
Funkce init()
se volá při inicializaci nebo spuštění kontejneru. Inicializace se obvykle vyskytuje krátce po vytvoření nebo aktualizaci nasazení. Funkce init
je místo pro zápis logiky pro operace globální inicializace, jako je ukládání modelu do mezipaměti v paměti (jak to děláme v tomto příkladu).
Funkce run()
se volá pro každé vyvolání koncového bodu a provádí skutečné bodování a předpověď. V tomto příkladu extrahujeme data ze vstupu JSON, zavoláme metodu modelu predict()
scikit-learn a vrátíme výsledek.
Místní nasazení a ladění pomocí místních koncových bodů
Důrazně doporučujeme otestovat koncový bod místně ověřením a laděním kódu a konfigurace před nasazením do Azure. Azure CLI a Python SDK podporují místní koncové body a nasazení, zatímco studio Azure Machine Learning a šablona ARM ne.
Pokud chcete nasadit místně, musí být nainstalovaný a spuštěný Modul Dockeru. Modul Dockeru se obvykle spustí při spuštění počítače. Pokud ne, můžete řešit potíže s Docker Enginem.
Tip
Azure Machine Učení odvozování balíčku Python serveru HTTP můžete použít k místnímu ladění hodnoticího skriptu bez Modulu Dockeru. Ladění pomocí serveru odvozování vám pomůže ladit bodovací skript před nasazením do místních koncových bodů, abyste mohli ladit bez ovlivnění konfigurací kontejneru nasazení.
Poznámka:
Místní koncové body mají následující omezení:
- Nepodporují pravidla provozu, ověřování ani nastavení sondy.
- Podporují pouze jedno nasazení na koncový bod.
- Podporují soubory místního modelu a prostředí pouze s místním souborem conda. Pokud chcete testovat zaregistrované modely, nejdřív si je stáhněte pomocí rozhraní příkazového řádku nebo sady SDK a pak v definici nasazení použijte
path
odkaz na nadřazenou složku. Pokud chcete testovat registrovaná prostředí, zkontrolujte kontext prostředí v studio Azure Machine Learning a připravte místní soubor Conda, který se má použít. Příklad v tomto článku ukazuje použití místního modelu a prostředí s místním souborem conda, který podporuje místní nasazení.
Další informace o místním ladění online koncových bodů před nasazením do Azure najdete v tématu Místní ladění online koncových bodů v editoru Visual Studio Code.
Místní nasazení modelu
Nejprve vytvořte koncový bod. Volitelně můžete pro místní koncový bod přeskočit tento krok a přímo vytvořit nasazení (další krok), který pak vytvoří požadovaná metadata. Místní nasazení modelů je užitečné pro účely vývoje a testování.
az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Teď vytvořte nasazení pojmenované blue
pod koncovým bodem.
az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
Příznak --local
nasměruje rozhraní příkazového řádku k nasazení koncového bodu v prostředí Dockeru.
Tip
K místnímu testování a ladění koncových bodů použijte Visual Studio Code. Další informace najdete v tématu ladění online koncových bodů místně v editoru Visual Studio Code.
Ověření úspěšného místního nasazení
Zkontrolujte stav a zjistěte, jestli se model nasadil bez chyby:
az ml online-endpoint show -n $ENDPOINT_NAME --local
Výstup by se měl podobat následujícímu formátu JSON. To provisioning_state
je Succeeded
.
{
"auth_mode": "key",
"location": "local",
"name": "docs-endpoint",
"properties": {},
"provisioning_state": "Succeeded",
"scoring_uri": "http://localhost:49158/score",
"tags": {},
"traffic": {}
}
Následující tabulka obsahuje možné hodnoty pro provisioning_state
:
Stát | Popis |
---|---|
Vytváření | Prostředek se vytváří. |
Aktualizace | Prostředek se aktualizuje. |
Odstranění | Prostředek se odstraňuje. |
Podařilo | Operace vytvoření/aktualizace byla úspěšná. |
Neúspěch | Operace vytvoření, aktualizace nebo odstranění selhala. |
Vyvolání místního koncového bodu pro určení skóre dat pomocí modelu
Pomocí příkazu invoke
Convenience a předáním parametrů dotazu uložených v souboru JSON vyvolejte koncový bod pro určení skóre modelu:
az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Pokud chcete použít klienta REST (například curl), musíte mít identifikátor URI bodování. Pokud chcete získat identifikátor URI bodování, spusťte az ml online-endpoint show --local -n $ENDPOINT_NAME
příkaz . Ve vrácených datech vyhledejte scoring_uri
atribut. Ukázkové příkazy založené na curl jsou k dispozici dále v tomto dokumentu.
Kontrola výstupu z operace vyvolání v protokolech
V příkladu score.py souboru run()
metoda zaznamená výstup do konzoly.
Tento výstup můžete zobrazit pomocí get-logs
příkazu:
az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME
Nasazení online koncového bodu do Azure
Dále nasaďte online koncový bod do Azure.
Nasazení do Azure
Pokud chcete vytvořit koncový bod v cloudu, spusťte následující kód:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Pokud chcete vytvořit nasazení pojmenované blue
pod koncovým bodem, spusťte následující kód:
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
Toto nasazení může trvat až 15 minut v závislosti na tom, jestli se podkladové prostředí nebo image sestavují poprvé. Další nasazení, která používají stejné prostředí, dokončí zpracování rychleji.
Tip
- Pokud nechcete blokovat konzolu rozhraní příkazového řádku, můžete k příkazu přidat příznak
--no-wait
. Tím se ale zastaví interaktivní zobrazení stavu nasazení.
Důležité
Příznak --all-traffic
ve výše uvedeném az ml online-deployment create
příkladu přiděluje 100 % provozu koncového bodu k nově vytvořenému modrému nasazení. I když je to užitečné pro účely vývoje a testování, v produkčním prostředí můžete chtít otevřít provoz do nového nasazení prostřednictvím explicitního příkazu. Například az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"
.
Tip
- K ladění chyb použijte řešení potíží s nasazením online koncových bodů.
Kontrola stavu koncového bodu
Příkaz show
obsahuje informace provisioning_state
o koncovém bodu a nasazení:
az ml online-endpoint show -n $ENDPOINT_NAME
Pomocí příkazu můžete zobrazit seznam všech koncových bodů v pracovním prostoru ve formátu list
tabulky:
az ml online-endpoint list --output table
Kontrola stavu online nasazení
V protokolech zkontrolujte, jestli se model nasadil bez chyby.
Pokud chcete zobrazit výstup protokolu z kontejneru, použijte následující příkaz rozhraní příkazového řádku:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Ve výchozím nastavení se protokoly načítají z kontejneru odvozování serveru. Pokud chcete zobrazit protokoly z kontejneru inicializátoru úložiště, přidejte --container storage-initializer
příznak. Další informace o protokolech nasazení najdete v tématu Získání protokolů kontejneru.
Vyvolání koncového bodu pro určení skóre dat pomocí modelu
K vyvolání koncového bodu a určení skóre některých dat můžete použít invoke
příkaz nebo klienta REST podle vašeho výběru:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Následující příklad ukazuje, jak získat klíč použitý k ověření koncového bodu:
Tip
Můžete určit, které objekty zabezpečení Microsoft Entra mohou získat ověřovací klíč tím, že je přiřadíte k vlastní roli, která umožňuje Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action
a Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action
. Další informace najdete v tématu Správa přístupu k pracovnímu prostoru Azure Machine Učení.
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
V dalším kroku použijte curl k určení skóre dat.
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
Všimněte si, že k získání přihlašovacích údajů pro ověření používáme show
příkazy a get-credentials
příkazy. Všimněte si také, že k filtrování atributů používáme --query
příznak jenom na to, co potřebujeme. Další informace najdete --query
v tématu Dotazování výstupu příkazu Azure CLI.
Pokud chcete zobrazit protokoly vyvolání, spusťte get-logs
to znovu.
Informace o ověřování pomocí tokenu najdete v tématu Ověřování v online koncových bodech.
(Volitelné) Aktualizace nasazení
Pokud chcete aktualizovat kód, model nebo prostředí, aktualizujte soubor YAML a spusťte az ml online-endpoint update
příkaz.
Poznámka:
Pokud aktualizujete počet instancí (pro škálování nasazení) spolu s dalšími nastaveními modelu (jako je kód, model nebo prostředí) v jednom update
příkazu, provede se nejprve operace škálování, pak se použijí další aktualizace. Tyto operace je vhodné provádět samostatně v produkčním prostředí.
Vysvětlení toho, jak update
funguje:
Otevřete soubor online/model-1/onlinescoring/score.py.
Změňte poslední řádek
init()
funkce: Zalogging.info("Init complete")
, přidatlogging.info("Updated successfully")
.Uložte soubor.
Spusťte tento příkaz:
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
Poznámka:
Aktualizace pomocí YAML je deklarativní. To znamená, že změny v YAML se projeví v podkladových prostředcích Azure Resource Manageru (koncových bodech a nasazeních). Deklarativní přístup usnadňuje GitOps: Všechny změny koncových bodů a nasazení (dokonce
instance_count
) procházejí YAML.Tip
- Pomocí příkazu ROZHRANÍ příkazového řádku můžete přepsat atributy v YAML nebo nastavit konkrétní atributy bez jejich předání do souboru YAML.
update
--set
Použití--set
pro jednotlivé atributy je zvláště cenné ve scénářích vývoje a testování. Pokud například chcete vertikálně navýšit kapacituinstance_count
hodnoty pro první nasazení, můžete použít--set instance_count=2
příznak. Protože se ale YAML neaktualizuje, tato technika nepodporuje GitOps. - Zadání souboru YAML není povinné. Pokud například chcete otestovat jiné nastavení souběžnosti pro dané nasazení, můžete zkusit něco podobného
az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4
. Tím se zachová veškerá existující konfigurace, ale aktualizuje se jenom zadané parametry.
- Pomocí příkazu ROZHRANÍ příkazového řádku můžete přepsat atributy v YAML nebo nastavit konkrétní atributy bez jejich předání do souboru YAML.
Protože jste upravili
init()
funkci, která se spustí při vytvoření nebo aktualizaci koncového bodu,Updated successfully
zpráva bude v protokolech. Načtěte protokoly spuštěním příkazu:az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Příkaz update
také funguje s místními nasazeními. Použijte stejný az ml online-deployment update
příkaz s příznakem --local
.
Poznámka:
Předchozí aktualizace nasazení je příkladem kumulativní aktualizace inplace.
- U spravovaného online koncového bodu se nasazení aktualizuje na novou konfiguraci s 20% uzly najednou. To znamená, že pokud má nasazení 10 uzlů, aktualizuje se současně 2 uzly.
- V případě online koncového bodu Kubernetes systém iterativním způsobem vytvoří novou instanci nasazení s novou konfigurací a odstraní starou instanci.
- V případě produkčního využití byste měli zvážit modré-zelené nasazení, které nabízí bezpečnější alternativu k aktualizaci webové služby.
(Volitelné) Konfigurace automatického škálování
Automatické škálování automaticky spustí správné množství prostředků ke zvládnutí zatížení u vaší aplikace. Spravované online koncové body podporují automatické škálování prostřednictvím integrace s funkcí automatického škálování služby Azure Monitor. Informace o konfiguraci automatického škálování najdete v tématu Postup automatického škálování online koncových bodů.
(Volitelné) Monitorování smlouvy SLA pomocí služby Azure Monitor
Pokud chcete zobrazit metriky a nastavit upozornění na základě vaší smlouvy SLA, proveďte kroky popsané v online koncových bodech monitorování.
(Volitelné) Integrace s Log Analytics
Příkaz get-logs
pro rozhraní příkazového řádku nebo metodu get_logs
sady SDK poskytuje pouze posledních několik stovek řádků protokolů z automaticky vybrané instance. Log Analytics ale poskytuje způsob, jak trvale ukládat a analyzovat protokoly. Další informace o používání protokolování najdete v tématu Monitorování online koncových bodů.
Odstranění koncového bodu a nasazení
Pokud nasazení nepoužíváte, měli byste ho odstranit spuštěním následujícího kódu (odstraní koncový bod a všechna podkladová nasazení):
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Související obsah
- Sejf zavedení pro online koncové body
- Nasazení modelů pomocí REST
- Automatické škálování spravovaných online koncových bodů
- Monitorování spravovaných online koncových bodů
- Přístup k prostředkům Azure z online koncového bodu pomocí spravované identity
- Řešení potíží s nasazením online koncových bodů
- Povolení izolace sítě pomocí spravovaných online koncových bodů
- Zobrazení nákladů na spravovaný online koncový bod služby Azure Machine Učení
- Správa a navýšení kvót pro prostředky s využitím služby Azure Machine Learning.
- Použití dávkových koncových bodů pro dávkové vyhodnocování