Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
PLATÍ PRO:
Rozšíření Azure CLI ml v2 (aktuální)
Python SDK azure-ai-ml v2 (aktuální)
V tomto článku se dozvíte, jak nasadit novou verzi modelu strojového učení v produkčním prostředí, aniž by to způsobilo přerušení. K zavedení nové verze webové služby do produkčního prostředí použijte strategii nasazení s modrou zelenou barvou, která se také označuje jako strategie bezpečného zavedení. Při použití této strategie zavádíte novou verzi webové služby pro malou podmnožinu uživatelů nebo požadavků, než ji úplně zpřístupníte.
Tento článek předpokládá, že používáte online koncové body nebo koncové body, které se používají k online predikci (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 typy koncových bodů najdete v tématu Spravované online koncové body versus Online koncové body Kubernetes.
Tento článek používá spravované online koncové body pro nasazení. Obsahuje ale také poznámky, které vysvětlují, jak používat koncové body Kubernetes místo spravovaných online koncových bodů.
V tomto článku se naučíte:
- Definujte online koncový bod s nasazením s názvem
bluepro obsluhu první verze modelu. -
blueŠkálujte nasazení tak, aby mohlo zpracovávat více požadavků. - Nasaďte druhou verzi modelu, která se nazývá
greennasazení, do koncového bodu, ale odešlete nasazení bez živého provozu. - Otestujte
greennasazení izolovaně. - Zrcadlete procento živého provozu do nasazení
greenpro jeho ověření. - Pošlete malé procento živého provozu na
greennasazení. - Odešle veškerý živý provoz do
greennasazení. - Odstraňte nepoužívané
bluenasazení.
Požadavky
Rozhraní příkazového řádku Azure a rozšíření
mlpro Azure CLI, nainstalované a nakonfigurované. Další informace najdete v tématu Instalace a nastavení rozhraní příkazového řádku (v2).Prostředí Bash nebo kompatibilní prostředí, například prostředí v systému Linux nebo subsystému Windows pro Linux. Příklady Azure CLI v tomto článku předpokládají, že používáte tento typ shellu.
Pracovní prostor služby Azure Machine Learning. Pokyny k vytvoření pracovního prostoru najdete v tématu Nastavení.
Uživatelský účet, který má alespoň jednu z následujících rolí řízení přístupu na základě role v Azure (Azure RBAC):
- Role vlastníka pro pracovní prostor Azure Machine Learning
- Role Přispěvatel pro pracovní prostor Azure Machine Learning
- Vlastní role s
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*oprávněními
Další informace najdete v tématu Správa přístupu k pracovním prostorům Azure Machine Learning.
Volitelně můžete docker Engine nainstalovat a spustit místně. Tento požadavek se důrazně doporučuje. Potřebujete ho ke spuštění modelu lokálně a je užitečný pro ladění.
Příprava systému
Nastavení proměnných prostředí
Můžete nakonfigurovat výchozí hodnoty pro použití s Azure CLI. 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 následující kód:
az account set --subscription <subscription-ID>
az configure --defaults workspace=<Azure-Machine-Learning-workspace-name> group=<resource-group-name>
Klonování úložiště příkladů
Pokud chcete postupovat podle tohoto článku, nejprve naklonujte úložiště příkladů (azureml-examples). Pak 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
Návod
Použijte --depth 1 pro klonování pouze nejnovějšího commitu do repozitáře, což zkracuje dobu potřebnou k dokončení operace.
Příkazy v tomto kurzu jsou v deploy-safe-rollout-online-endpoints.sh souboru v adresáři cli . 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 a nasazení
Používejte online koncové body pro odvozování online (v reálném čase). Online koncové body obsahují nasazení, která jsou připravená přijímat data od klientů a odesílat odpovědi zpět v reálném čase.
Definování koncového bodu
Následující tabulka uvádí klíčové atributy, které se mají určit při definování koncového bodu.
| Atribut | Povinné nebo volitelné | Popis |
|---|---|---|
| Název | Povinné | Název koncového bodu Musí být jedinečný ve své oblasti Azure. Další informace o pravidlech pojmenování najdete v tématu Online koncové body služby Azure Machine Learning a dávkové koncové body. |
| Režim ověřování | Volitelný | Metoda ověřování pro koncový bod. Vyberte si mezi ověřováním na základě klíčů, keyověřováním na základě aml_tokentokenů služby Azure Machine Learning a ověřováním založeným na tokenech Microsoft Entra. aad_token Platnost klíče nevyprší, ale platnost tokenu vyprší. Další informace o ověřování najdete v tématu Ověřování klientů pro online koncové body. |
| Popis | Volitelný | Popis koncového bodu. |
| Značky | Volitelný | Slovník značek pro koncový bod. |
| Síťový provoz | Volitelný | Pravidla směrování provozu napříč nasazeními Představte provoz jako slovník párů klíč-hodnota, kde klíč představuje název nasazení a hodnota představuje procentuální podíl provozu do tohoto nasazení. Provoz můžete nastavit až po vytvoření nasazení v rámci koncového bodu. Po vytvoření nasazení můžete také aktualizovat směrování provozu pro online koncový bod. Další informace o tom, jak používat zrcadlený provoz, najdete v části Přidělení malého procenta živého provozu k nové implementaci. |
| Zrcadlení provozu | Volitelný | Procento živého provozu, které se má kopírovat do nasazení. Další informace o tom, jak používat zrcadlený provoz, najdete v tématu Otestování nasazení se zrcadleným provozem. |
Pokud chcete zobrazit úplný seznam atributů, které můžete zadat při vytváření koncového bodu, podívejte se na schéma YAML online koncového bodu CLI (v2). Informace o verzi 2 sady Azure Machine Learning SDK pro Python najdete v tématu ManagedOnlineEndpoint – třída.
Definování nasazení
Nasazení je sada prostředků, které uplatňují model a provádějí skutečné inferenční úlohy. Následující tabulka popisuje klíčové atributy, které se mají určit při definování nasazení.
| Atribut | Povinné nebo volitelné | Popis |
|---|---|---|
| Název | Povinné | Název nasazení. |
| Název koncového bodu | Povinné | Název koncového bodu, pod kterým se vytváří nasazení. |
| Vzor | Volitelný | Model, který se má použít pro nasazení. Tato hodnota může být odkazem na existující verzovaný model v pracovním prostoru nebo specifikace modelu vloženého přímo. V příkladech scikit-learn tohoto článku model regrese. |
| Cesta kódu | Volitelný | Cesta ke složce 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 | Volitelný | Kód Pythonu, který spouští model na daném vstupním požadavku. Tato hodnota může být relativní cesta ke skórovacímu souboru ve složce zdrojového kódu. 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. Příklady tohoto článku používají soubor score.py. Tento kód Pythonu musí mít funkci init a funkci run. Funkce init se volá po vytvoření nebo aktualizaci modelu. Můžete ho použít například k ukládání modelu do mezipaměti v paměti. Funkce run se volá při každém vyvolání koncového bodu pro provedení skutečného hodnocení a predikce. |
| Prostředí | Povinné | Prostředí pro hostování modelu a kódu. Tato hodnota může být odkazem na existující verzí řízené prostředí v pracovním prostoru nebo specifikaci prostředí přímo ve zdrojovém kódu. Prostředí může být image Dockeru se závislostmi Conda, souborem Dockerfile nebo registrovaným prostředím. |
| Typ instance | Povinné | 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í | Povinné | Počet instancí pro použití při nasazení. Hodnotu stanovte na základě očekávaného pracovního zatížení. Pro zajištění vysoké dostupnosti použijte aspoň tři instance. Azure Machine Learning si pro provádění upgradů vyhrazuje 20 procent navíc. Další informace najdete v tématu Online koncové body služby Azure Machine Learning a dávkové koncové body. |
Úplný seznam atributů, které můžete zadat při vytváření nasazení, najdete v schématu YAML spravovaného online nasazením CLI (v2). Informace o verzi 2 sady Python SDK najdete v tématu ManagedOnlineDeployment – třída.
Vytvoření online koncového bodu
Nejprve nastavte název koncového bodu. Pak nakonfigurujte koncový bod. V tomto článku použijete endpoints/online/managed/sample/endpoint.yml soubor ke konfiguraci koncového bodu. Tento soubor obsahuje následující řádky:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
Následující tabulka popisuje klíče, které používá formát YAML koncového bodu. Informace o tom, jak tyto atributy zadat, najdete ve schématu YAML online koncového bodu CLI (v2). Informace o omezeních souvisejících se spravovanými online koncovými body najdete v tématu Online koncové body služby Azure Machine Learning a dávkové koncové body.
| Klíč | 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 bloku kódu v prohlížeči. |
name |
Název koncového bodu |
auth_mode |
Režim ověřování. 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ů služby Azure Machine Learning. Používá se aad_token pro ověřování založené na tokenech Microsoft Entra. K získání nejnovějšího tokenu az ml online-endpoint get-credentials použijte příkaz. |
Vytvoření online koncového bodu:
Nastavte název koncového bodu spuštěním následujícího příkazu systému Unix. Nahraďte
YOUR_ENDPOINT_NAMEjedinečným názvem.export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"Důležité
Názvy koncových bodů musí být jedinečné v rámci oblasti Azure. Například v oblasti Azure
westus2může existovat pouze jeden koncový bod s názvemmy-endpoint.Vytvořte koncový bod v cloudu spuštěním následujícího kódu. Tento kód používá
endpoint.ymlsoubor ke konfiguraci koncového bodu:az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Vytvořte modré nasazení
Soubor endpoints/online/managed/sample/blue-deployment.yml můžete použít ke konfiguraci klíčových aspektů nasazení s názvem blue. Tento soubor obsahuje následující řádky:
$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-ubuntu22.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
K vytvoření blue nasazení pro koncový bod použijte blue-deployment.yml soubor a spusťte následující příkaz:
az ml online-deployment create --name blue --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
Důležité
Příznak --all-traffic v az ml online-deployment create příkazu přidělí 100 % datového provozu koncového bodu novému blue nasazení.
V souboru blue-deployment.yaml řádek path určuje, odkud se mají nahrávat soubory. Rozhraní příkazového řádku služby Azure Machine Learning tyto informace používá k nahrání souborů a registraci modelu 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 kódu YAML. Použijte formát model: azureml:<model-name>:<model-version> modelu, například model: azureml:my-model:1. Pro prostředí použijte například formát environment: azureml:<environment-name>:<environment-version>environment: azureml:my-env:1.
Pro registraci můžete extrahovat definice YAML a model do samostatných environment souborů YAML a používat příkazy az ml model create a az ml environment create. Další informace o těchto příkazech najdete spuštěním az ml model create -h a az ml environment create -h.
Další informace o registraci modelu jako prostředku najdete v tématu Registrace modelu pomocí Azure CLI nebo sady Python SDK. Další informace o vytvoření prostředí najdete v tématu Vytvoření vlastního prostředí.
Potvrzení stávajícího nasazení
Jedním ze způsobů, jak ověřit vaše stávající nasazení, je, že můžete vyvolat svůj koncový bod, aby mohl hodnotit váš model pro danou vstupní žádost. Když vyvoláte koncový bod přes Azure CLI nebo sadu Python SDK, můžete určit název nasazení pro příjem příchozího provozu.
Poznámka:
Na rozdíl od Azure CLI nebo sady Python SDK vyžaduje Azure Machine Learning Studio, abyste při vyvolání koncového bodu zadali nasazení.
Vyvolat koncový bod s názvem nasazení
Při aktivaci koncového bodu můžete zadat název nasazení, které má přijímat provoz. V tomto případě Azure Machine Learning směruje provoz koncového bodu přímo do zadaného nasazení a vrátí jeho výstup. K určení nasazení můžete použít možnost --deployment-name pro Azure Machine Learning CLI v2 nebo možnost deployment_name pro balíček Python SDK v2.
Vyvolání koncového bodu bez zadání nasazení
Pokud vyvoláte koncový bod, aniž byste určili nasazení, ke kterému chcete směrovat provoz, Azure Machine Learning nasměruje příchozí provoz koncového bodu do nasazení na základě nastavení pro řízení provozu.
Nastavení řízení provozu přidělují zadané procento příchozího provozu každému nasazení v koncovém bodu. Pokud například pravidla provozu určují, že konkrétní nasazení v koncovém bodu by mělo přijímat příchozí provoz 40% času, Azure Machine Learning směruje 40% provozu koncového bodu do tohoto nasazení.
Pokud chcete zobrazit stav stávajícího koncového bodu a nasazení, spusťte následující příkazy:
az ml online-endpoint show --name $ENDPOINT_NAME
az ml online-deployment show --name blue --endpoint $ENDPOINT_NAME
Výstup obsahuje informace o $ENDPOINT_NAME koncovém bodu a blue nasazení.
Testování koncového bodu pomocí ukázkových dat
Koncový bod můžete vyvolat pomocí invoke příkazu. Následující příkaz používá k odeslání ukázkového požadavku sample-request.json soubor JSON:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Rozšiřte stávající nasazení, abyste zvládli větší provoz
V nasazení popsaném v části Nasazení a určení skóre modelu strojového učení pomocí online koncového bodu nastavíte hodnotu instance_count na 1 v souboru YAML nasazení. Škálování pomocí příkazu update:
az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2
Poznámka:
V předchozím příkazu možnost --set přepíše konfiguraci nasazení. Případně můžete pomocí update této možnosti aktualizovat soubor YAML a předat ho jako vstup do --file příkazu.
Nasazení nového modelu, ale neodesílejte ho provozu
Vytvořte nové nasazení s názvem green:
az ml online-deployment create --name green --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/green-deployment.yml
Vzhledem k tomu, že explicitně nepřidělujete žádný provoz nasazení green, není mu přidělen žádný provoz. Tento fakt můžete ověřit pomocí následujícího příkazu:
az ml online-endpoint show -n $ENDPOINT_NAME --query traffic
Otestování nového nasazení
I když má green nasazení s 0 procenty provozu, můžete ho vyvolat pomocí možnosti --deployment.
az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name green --request-file endpoints/online/model-2/sample-request.json
Pokud chcete použít klienta REST k vyvolání nasazení přímo bez procházení pravidel provozu, nastavte následující hlavičku HTTP: azureml-model-deployment: <deployment-name>. Následující kód používá klienta pro adresu URL (cURL) k přímému vyvolání nasazení. Kód můžete spustit v prostředí UNIX nebo Subsystém Windows pro Linux (WSL). Pokyny k načtení $ENDPOINT_KEY hodnoty najdete v tématu Získání klíče nebo tokenu roviny dat.
# get the scoring uri
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
# use curl to invoke the endpoint
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --header "azureml-model-deployment: green" --data @endpoints/online/model-2/sample-request.json
Testování nasazení s využitím zrcadleného provozu
Po otestování green nasazení můžete zrcadlit procento živého provozu na váš koncový bod tím, že toto procento provozu zkopírujete a odešlete ho do nasazení green. Zrcadlení provozu, kterému se také říká stínování, nemění výsledky, které jsou poskytovány klientům. Všechny požadavky stále proudí do blue nasazení. Zrcadlené procento provozu se zkopíruje a odešle také do nasazení green, abyste mohli shromažďovat metriky a záznamy, aniž by to mělo dopad na vaše klienty.
Zrcadlení je užitečné, když chcete ověřit nové nasazení bez dopadu na klienty. Pomocí zrcadlení můžete například zkontrolovat, jestli je latence v přijatelných mezích nebo jestli nedošlo k žádným chybám HTTP. Použití zrcadlení provozu nebo stínování k otestování nového nasazení se označuje také jako stínové testování. Nasazení, které přijímá zrcadlený provoz, v tomto případě green se nasazení může také volat stínové nasazení.
Zrcadlení má následující omezení:
- Zrcadlení se podporuje pro verze 2.4.0 a novější rozhraní příkazového řádku Azure Machine Learning a verze 1.0.0 a novější sady Python SDK. Pokud k aktualizaci koncového bodu použijete starší verzi azure Machine Learning CLI nebo sady Python SDK, ztratíte nastavení zrcadlového provozu.
- V současné době není zrcadlení podporováno pro online koncové body Kubernetes.
- Provoz můžete zrcadlit pouze do jednoho nasazení v rámci koncového bodu.
- Procento provozu, které můžete zrcadlit, je maximálně 50 procent. Tento limit omezuje vliv na kvótu šířky pásma koncového bodu, která má výchozí hodnotu 5 MB/s. Pokud překročíte přidělenou kvótu, omezí se šířka pásma vašeho koncového bodu. Informace o monitorování omezování šířky pásma najdete v tématu Omezování šířky pásma.
Všimněte si také následujícího chování:
- Nasazení můžete nakonfigurovat tak, aby přijímalo pouze živý provoz nebo zrcadlený provoz, nikoli obojí.
- Při vyvolání koncového bodu můžete zadat název libovolného z jeho nasazení ( dokonce i stínového nasazení) a vrátit tak predikci.
- Když vyvoláte koncový bod a zadáte název nasazení pro příjem příchozího provozu, Azure Machine Learning neresměruje provoz do stínového nasazení. Azure Machine Learning zrcadlí provoz do stínového nasazení z provozu odeslaného do koncového bodu, když nezadáte nasazení.
Pokud nastavíte green nasazení tak, aby přijímalo 10 procent zrcadlených přenosů, klienti stále přijímají předpovědi pouze z blue nasazení.
Pomocí následujícího příkazu zrcadlíte 10 procent provozu a odešlete ho green do nasazení:
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=10"
Pokud chcete otestovat zrcadlený provoz, opakovaně vyvolejte koncový bod bez specifikace nasazení. Koncový bod směruje příchozí provoz:
for i in {1..20} ; do
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
done
Ověřením protokolů z nasazení můžete potvrdit, že dané procento provozu je směrováno na nasazení green.
az ml online-deployment get-logs --name green --endpoint $ENDPOINT_NAME
Po otestování nastavte zrcadlový provoz na nulu a zakažte zrcadlení:
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=0"
Přidělte malé procento provozu v reálném čase pro novou implementaci.
Poté, co otestujete své green nasazení, přidělte mu malé procento provozu.
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=90 green=10"
Návod
Celkové procento provozu musí být buď 0 %, pro zakázání provozu, nebo 100 %, pro povolení provozu.
Vaše green nasazení teď přijímá 10 procent veškeré živé návštěvnosti. Klienti přijímají předpovědi z obou nasazení, blue a green.
Pošlete veškerý provoz na nové nasazení
Až budete plně spokojeni s nasazením green, přepněte na něj veškerý síťový provoz.
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=0 green=100"
Odebrání starého nasazení
Pomocí následujícího postupu odstraňte jednotlivá nasazení ze spravovaného online koncového bodu. Odstranění jednotlivých nasazení nemá vliv na ostatní nasazení ve spravovaném online koncovém bodu:
az ml online-deployment delete --name blue --endpoint $ENDPOINT_NAME --yes --no-wait
Odstranění koncového bodu a nasazení
Pokud nebudete používat koncový bod a nasazení, odstraňte je. Když odstraníte koncový bod, odstraníte také všechna jeho základní nasazení.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait