Bezpečné zavedení nových nasazení pro odvozování v reálném čase
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žijete strategii nasazení s modrou zelenou barvou (označovanou také jako strategie bezpečného zavedení). Tato strategie vám umožní zavést novou verzi webové služby pro malou podmnožinu uživatelů nebo požadavků, než ji úplně zavedete.
Tento článek předpokládá, že používáte online koncové body, tj. koncové body, které se používají pro odvozování online (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 online koncovými body Kubernetes najdete v tématu Co jsou koncové body služby Azure Machine Learning?
Hlavní příklad v tomto článku používá spravované online koncové body pro nasazení. Pokud chcete místo toho používat koncové body Kubernetes, podívejte se na poznámky v tomto dokumentu, které jsou vložené do diskuze o spravovaném online koncovém bodu.
V tomto článku se naučíte:
- Definování online koncového bodu s nasazením s názvem "modrá" pro obsluhu verze 1 modelu
- Škálování modrého nasazení tak, aby mohlo zpracovávat více požadavků
- Nasazení verze 2 modelu (označované jako "zelené" nasazení) do koncového bodu, ale odešle nasazení bez živého provozu.
- Testování zeleného nasazení v izolaci
- Zrcadlení procenta živého provozu do zeleného nasazení a jeho ověření
- Odeslání malého procenta živého provozu do zeleného nasazení
- Odesílání veškerého živého provozu do zeleného nasazení
- Odstranění aktuálně nepoužívaného modrého nasazení v1
Požadavky
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 Služby Azure Machine Learning nebo vlastní roli, která povoluje
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
. Další informace najdete v tématu Správa přístupu k pracovnímu prostoru Azure Machine Learning.(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ří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). 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
Tip
Slouží --depth 1
ke klonování pouze nejnovějšího potvrzení do úložiště. Tím se zkracuje doba dokončení operace.
Příkazy v tomto kurzu jsou v souboru deploy-safe-rollout-online-endpoints.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 a nasazení
Online koncové body se používají pro online odvozování (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 | Popis |
---|---|
Name | Požadováno. 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 key založeným na klíči a ověřováním aml_token na základě tokenů služby Azure Machine Learning. 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. |
Popis | Popis koncového bodu |
Značky | Slovník značek pro koncový bod |
Provoz | Pravidla směrování provozu napříč nasazeními Představuje provoz jako slovník párů klíč-hodnota, kde klíč představuje název nasazení a hodnota představuje procento provozu do tohoto nasazení. Provoz můžete nastavit pouze v případech, kdy byla vytvořena nasazení v rámci koncového bodu. Po vytvoření nasazení můžete také aktualizovat provoz pro online koncový bod. Další informace o tom, jak používat zrcadlený provoz, najdete v tématu Přidělení malého procenta živého provozu k novému nasazení. |
Zrcadlový provoz | Procento živého provozu, které se má zrcadlit do nasazení Další informace o tom, jak používat zrcadlený provoz, najdete v tématu Otestování nasazení se zrcadleným provozem. |
Úplný seznam atributů, které můžete zadat při vytváření koncového bodu, najdete v tématu CLI (v2) online koncového bodu YAML schématu nebo sady SDK (v2) ManagedOnlineEndpoint – třída.
Definování nasazení
Nasazení je sada prostředků vyžadovaných pro hostování modelu, který provádí skutečné odvozování. Následující tabulka popisuje klíčové atributy, které se mají určit při definování nasazení.
Atribut | Popis |
---|---|
Name | Požadováno. Název nasazení |
Název koncového bodu | Povinný: 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. V tomto příkladu máme model scikit-learn, který provádí regresi. |
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 | Kód Pythonu, který spouští model na daném vstupním požadavku. Tato hodnota může být relativní cesta k souboru bodování v adresáři 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. V tomto příkladu máme soubor score.py . 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í | Povinný: 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í. 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č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 omezeních pro online koncové body. |
Úplný seznam atributů, které můžete určit při vytváření nasazení, najdete v tématu o schématu YAML nebo sadě SDK (v2) ManagedOnlineDeployment spravovaném rozhraním příkazového řádku (v2).
Vytvoření online koncového bodu
Nejprve nastavte název koncového bodu a pak ho nakonfigurujte. V tomto článku použijete ke konfiguraci koncového bodu koncové body, online,managed/sample/endpoint.yml soubor. Následující fragment kódu ukazuje obsah souboru:
$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 omezeních souvisejících se spravovanými online 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ů služby Azure Machine Learning. 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:
Pro Unix spusťte tento příkaz (nahraďte
YOUR_ENDPOINT_NAME
jedineč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
westus2
můž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 použijte
endpoint.yml
soubor ke konfiguraci koncového bodu:az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Vytvoření modrého nasazení
V tomto článku použijete koncové body, online, managed/sample/blue-deployment.yml soubor ke konfiguraci klíčových aspektů nasazení. Následující fragment kódu ukazuje obsah souboru:
$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
Pokud chcete vytvořit nasazení pojmenované blue
pro váš koncový bod, spusťte následující příkaz, který použije blue-deployment.yml
soubor ke konfiguraci.
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řidělení 100 % provozu koncového bodu k nově vytvořenému modrému nasazení.
blue-deployment.yaml
V souboru 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 ve službě Machine Learning pomocí rozhraní příkazového řádku. Další informace o vytváření prostředí najdete v tématu Správa prostředí Azure Machine Learning pomocí rozhraní příkazového řádku a sady SDK (v2).
Potvrzení stávajícího nasazení
Jedním ze způsobů, jak potvrdit, že stávající nasazení je vyvolat koncový bod, aby mohl vyhodnotit model pro danou vstupní žádost. Při vyvolání koncového bodu pomocí rozhraní příkazového řádku nebo sady Python SDK můžete určit název nasazení, které bude přijímat příchozí provoz.
Poznámka:
Na rozdíl od rozhraní příkazového řádku nebo sady Python SDK studio Azure Machine Learning vyžaduje, abyste při vyvolání koncového bodu zadali nasazení.
Vyvolání koncového bodu s názvem nasazení
Pokud vyvoláte koncový bod s názvem nasazení, které bude přijímat provoz, 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 --deployment-name
možnost rozhraní příkazového řádku v2 nebo deployment_name
možnost sady SDK v2 .
Vyvolání koncového bodu bez zadání nasazení
Pokud vyvoláte koncový bod bez zadání nasazení, které bude přijímat provoz, Azure Machine Learning bude směrovat příchozí provoz koncového bodu do nasazení v koncovém bodu na základě nastavení ří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í ve vašem koncovém bodu bude přijímat příchozí provoz 40 % času, Azure Machine Learning bude směrovat 40 % provozu koncového bodu do tohoto nasazení.
Stav stávajícího koncového bodu a nasazení můžete zobrazit spuštěním následujícího příkazu:
az ml online-endpoint show --name $ENDPOINT_NAME
az ml online-deployment show --name blue --endpoint $ENDPOINT_NAME
Měl by se zobrazit koncový bod identifikovaný $ENDPOINT_NAME
a volané blue
nasazení .
Testování koncového bodu s ukázkovými daty
Koncový bod lze vyvolat pomocí invoke
příkazu. Pomocí souboru JSON pošleme ukázkový požadavek.
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Škálování stávajícího nasazení za účelem zpracování většího provozu
V nasazení popsaném v části Nasazení a určení skóre modelu strojového učení pomocí online koncového bodu nastavíte instance_count
hodnotu 1
v souboru yaml nasazení. Horizontální navýšení kapacity můžete provést pomocí update
příkazu:
az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2
Poznámka:
Všimněte si, že ve výše uvedeném příkazu používáme --set
k přepsání konfigurace nasazení. Případně můžete soubor yaml aktualizovat a předat ho jako vstup příkazu update
pomocí --file
vstupu.
Nasaďte nový model, ale zatím ho neodesílají žádný provoz.
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 jsme explicitně nepřidělili žádný provoz green
, má k němu přidělený žádný provoz. Pomocí příkazu můžete ověřit následující:
az ml online-endpoint show -n $ENDPOINT_NAME --query traffic
Otestování nového nasazení
I když green
je přiděleno 0 % provozu, můžete ho --deployment
vyvolat přímo zadáním názvu:
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í fragment kódu používá curl
k přímému vyvolání nasazení. Fragment kódu by měl fungovat v prostředích Unix/WSL:
# 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 (nebo zkopírovat) procento živého provozu do něj. Zrcadlení provozu (označované také jako stínování) nemění výsledky vrácené klientům – požadavky stále do nasazení proudí 100 %.blue
Zrcadlené procento provozu se zkopíruje a odešle do green
nasazení, abyste mohli shromažďovat metriky a protokolování bez dopadu na 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. Testování nového nasazení pomocí zrcadlení provozu nebo stínování se označuje také jako stínové testování. Nasazení, které přijímá zrcadlený provoz (v tomto případě green
nasazení), se také může volat stínové nasazení.
Zrcadlení má následující omezení:
- Zrcadlení se podporuje pro rozhraní příkazového řádku (verze 2.4.0 nebo novější) a sadu Python SDK (v2) (verze 1.0.0 nebo vyšší). Pokud k aktualizaci koncového bodu použijete starší verzi rozhraní příkazového řádku nebo sady SDK, ztratíte nastavení zrcadlového provozu.
- Zrcadlení se v současné době nepodporuje pro online koncové body Kubernetes.
- Provoz můžete zrcadlit jenom do jednoho nasazení v koncovém bodu.
- Maximální procento provozu, které můžete zrcadlit, je 50 %. Tento limit je snížit vliv na kvótu šířky pásma koncového bodu (výchozí 5 MBPS) – šířka pásma koncového bodu se omezí, pokud překročíte přidělenou kvótu. Informace o omezování šířky pásma monitorování najdete v tématu Monitorování spravovaných online koncových bodů.
Všimněte si také následujících chování:
- Nasazení je možné 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 jeho nasazení ( dokonce i stínového nasazení) a vrátit tak predikci.
- Když vyvoláte koncový bod s názvem nasazení, které bude přijímat příchozí provoz, Azure Machine Learning nebude zrcadlit 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í.
Teď nastavíme zelené nasazení tak, aby přijímalo 10 % zrcadlených přenosů. Klienti budou dál dostávat předpovědi pouze z modrého nasazení.
Následující příkaz zrcadlí 10 % provozu do green
nasazení:
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=10"
Zrcadlový provoz můžete otestovat tak, že několikrát vyvoláte koncový bod, aniž byste zadali nasazení pro příjem příchozího provozu:
for i in {1..20} ; do
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
done
Konkrétní procento provozu se do green
nasazení odeslalo tak, že se zobrazí protokoly z nasazení:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Po testování můžete nastavit zrcadlový provoz na nulu a zakázat zrcadlení:
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=0"
Přidělení malého procenta živého provozu k novému nasazení
Po otestování green
nasazení přidělte malé procento provozu:
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=90 green=10"
Tip
Celkové procento provozu se musí sčítat na 0 % (zakázat provoz) nebo 100 % (pro povolení provozu).
green
Vaše nasazení teď přijímá 10 % veškerého živého provozu. Klienti budou přijímat předpovědi jak z nasazení, blue
green
tak z nasazení.
Odeslání veškerého provozu do nového nasazení
Jakmile budete plně spokojeni s nasazením green
, přepněte do něj veškerý 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í má 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í, měli byste je odstranit. Odstraněním koncového bodu odstraníte také všechna jeho základní nasazení.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Související obsah
- Prozkoumání ukázek online koncových bodů
- Nasazení modelů pomocí REST
- Použití izolace sítě se spravovanými online koncovými body
- Přístup k prostředkům Azure pomocí online koncového bodu a spravované identity
- Monitorování spravovaných online koncových bodů
- Správa a navýšení kvót pro prostředky s využitím služby Azure Machine Learning.
- Zobrazení nákladů na online koncový bod spravovaný službou Azure Machine Learning
- Seznam skladových položek spravovaných online koncových bodů
- Řešení potíží s nasazením a vyhodnocováním online koncových bodů
- Referenční informace k YAML online koncového bodu