Bezpečné nasazování nových implementací pro inferenci 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ž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 blue pro 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á green nasazení, do koncového bodu, ale odešlete nasazení bez živého provozu.
  • Otestujte green nasazení izolovaně.
  • Zrcadlete procento živého provozu do nasazení green pro jeho ověření.
  • Pošlete malé procento živého provozu na green nasazení.
  • Odešle veškerý živý provoz do green nasazení.
  • Odstraňte nepoužívané blue nasazení.

Požadavky

  • 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:

  1. Nastavte název koncového bodu spuštěním následujícího příkazu systému Unix. 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. Tento kód používá endpoint.yml soubor 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í.

Diagram znázorňující tok provozu přes koncový bod. Veškerý provoz směřuje do modrého nasazení a 10 procent se zrcadlí do zeleného 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.

Diagram znázorňující tok provozu přes koncový bod Modré nasazení přijímá 90 procent provozu a zelené nasazení 10 procent.

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