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:

  • Ří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í, 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. 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.

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ň 3na 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í.

Poznámka:

  • 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í objektu path. 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žijeme environment.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:

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

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:latestDockeru 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ě:

A screenshot showing a folder structure containing multiple models.

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.pklinit()) 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:

A screenshot of the folder structure of the storage location for multiple models.

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:

A screenshot of the folder structure showing the model artifacts of the registered model.

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:

A screenshot of the folder structure showing multiple models.

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_NAMEpří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

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

  1. Otevřete soubor online/model-1/onlinescoring/score.py.

  2. Změňte poslední řádek init() funkce: Za logging.info("Init complete"), přidat logging.info("Updated successfully").

  3. Uložte soubor.

  4. 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 kapacitu instance_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.
  5. 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