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 koncovými body Kubernetes najdete v tématu Co jsou koncové body Azure Machine Učení?.

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:

  • Ří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/*. 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ří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 založeným na klíči key a ověřováním aml_tokenna 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.
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ň 3na 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ématuYAML 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ů azure machine Učení. K získání nejnovějšího tokenu az ml online-endpoint get-credentials použijte příkaz.

Vytvoření online koncového bodu:

  1. 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ázvem my-endpoint.

  2. 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 -haz 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).

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

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 Učení nebude zrcadlit provoz do stínového nasazení. Azure Machine Učení 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í.

Diagram showing 10% traffic mirrored to one deployment.

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í, bluegreen tak z nasazení.

Diagram showing traffic split between deployments.

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