Gépi tanulási modell üzembe helyezése és pontszáma online végpont használatával

ÉRVÉNYES:Azure CLI ml-bővítmény v2 (aktuális)Python SDK azure-ai-ml v2 (aktuális)

Ebben a cikkben megtanulhatja, hogyan helyezheti üzembe a modellt egy online végponton valós idejű következtetés céljából. Először üzembe kell helyeznie egy modellt a helyi gépen a hibák hibakereséséhez. Ezután üzembe helyezi és teszteli a modellt az Azure-ban. Emellett megtanulhatja az üzembehelyezési naplók megtekintését és a szolgáltatásiszint-szerződés (SLA) monitorozását is. A cikk végére egy méretezhető HTTPS/REST-végponttal rendelkezik, amelyet valós idejű következtetéshez használhat.

Az online végpontok valós idejű következtetéshez használt végpontok. Kétféle online végpontot különböztetünk meg: felügyelt online végpontokat és Kubernetes online végpontokat. További információ a végpontokról és a felügyelt online végpontok és a Kubernetes online végpontok közötti különbségekről: Mik azok az Azure Machine Tanulás végpontok?.

A felügyelt online végpontok segítségével azonnal üzembe helyezheti a használatra kész ML-modelleket. A felügyelt online végpontok skálázható, teljes mértékben felügyelt módon működnek együtt a nagy teljesítményű processzorral és GPU-val rendelkező Azure-beli gépekkel. A felügyelt online végpontok gondoskodnak a modellek kiszolgálásáról, skálázásáról, védelméről és monitorozásáról, így nem kell foglalkoznia a mögöttes infrastruktúra beállításával és kezelésével.

A dokumentum fő példája felügyelt online végpontokat használ az üzembe helyezéshez. Ha inkább a Kubernetes-t szeretné használni, tekintse meg a dokumentum azon jegyzeteit, amelyek beágyazottak a felügyelt online végponttal kapcsolatos vitafórumba.

Előfeltételek

ÉRVÉNYES:Azure CLI ml-bővítmény 2-es verzió (aktuális)

A cikkben ismertetett lépések végrehajtása előtt győződjön meg arról, hogy rendelkezik a következő előfeltételekkel:

  • Az Azure-beli szerepköralapú hozzáférés-vezérlések (Azure RBAC) az Azure gépi tanulás műveleteihez való hozzáférést biztosítják. A cikkben ismertetett lépések végrehajtásához a felhasználói fiókjához hozzá kell rendelni az Azure Machine Tanulás munkaterület tulajdonosi vagy közreműködői szerepkörét, vagy egy egyéni szerepkört, amely lehetővé tesziMicrosoft.MachineLearningServices/workspaces/onlineEndpoints/*. Ha online végpontok/üzemelő példányok létrehozásához/kezeléséhez a Studiót használja, az erőforráscsoport tulajdonosától további "Microsoft.Resources/deployments/write" engedélyre lesz szüksége. További információ: Azure Machine-Tanulás-munkaterülethez való hozzáférés kezelése.

  • (Nem kötelező) A helyi telepítéshez telepítenie kell a Docker Engine-t a helyi számítógépre. Erősen ajánljuk ezt a lehetőséget, így egyszerűbb hibakeresést végezni.

Virtuálisgép-kvóta kiosztása üzembe helyezéshez

Felügyelt online végpontok esetén az Azure Machine Tanulás a számítási erőforrások 20%-át lefoglalja bizonyos virtuálisgép-termékváltozatok frissítéséhez. Ha adott számú példányt kér a virtuálisgép-termékváltozatokhoz egy üzembe helyezés során, a hiba elkerülése érdekében rendelkeznie kell egy rendelkezésre álló kvótával ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU . Ha például egy Standard_DS3_v2 virtuális gép 10 példányát kéri le (amely 4 maggal rendelkezik), akkor 48 magra (12 instances * 4 cores) vonatkozó kvótával kell rendelkeznie. Ez a többletkvóta a rendszer által nem támogatott műveletekre, például operációs rendszer frissítésére, virtuális gép helyreállítására stb. van fenntartva, és csak akkor merül fel költség, ha az ilyen művelet fut. A használat megtekintéséhez és a kvótanövelések kéréséhez tekintse meg a használatot és a kvótákat az Azure Portalon. A felügyelt online végpontok futtatásának költségeinek megtekintéséhez tekintse meg a felügyelt online végpont költségének megtekintését. Vannak bizonyos virtuálisgép-termékváltozatok, amelyek mentesülnek a többletkvóta-foglalás alól. A teljes lista megtekintéséhez tekintse meg a felügyelt online végpontok termékváltozatainak listáját.

Az Azure Machine Tanulás egy megosztott kvótakészletet biztosít, amelyből minden felhasználó hozzáférhet a kvótához, hogy korlátozott ideig tesztelhessen. Ha a studióval telepíti a Llama-2, a Phi, a Nemotron, a Mistral, a Dolly és a Deci-DeciLM modelleket a modellkatalógusból egy felügyelt online végpontra, az Azure Machine Tanulás lehetővé teszi, hogy rövid ideig elérhesse ezt a megosztott kvótát.

A megosztott kvótának az online végpontok üzembe helyezéséhez való használatával kapcsolatos további információkért lásd : Alapmodellek üzembe helyezése a studióval.

A rendszer előkészítése

Környezeti változók beállítása

Ha még nem állította be az Azure CLI alapértelmezett beállításait, mentse az alapértelmezett beállításokat. Az előfizetés, a munkaterület és az erőforráscsoport értékeinek többszöri átadásának elkerülése érdekében futtassa ezt a kódot:

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

A példák adattárának klónozása

A cikk követéséhez először klónozza a példák adattárát (azureml-examples). Ezután futtassa a következő kódot az adattár könyvtárához cli/ való ugráshoz:

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli

Tipp.

Csak a legújabb véglegesítés klónozására használható --depth 1 az adattárban, ami csökkenti a művelet befejezéséhez szükséges időt.

Az oktatóanyag parancsai a fájlokban deploy-local-endpoint.sh és deploy-managed-online-endpoint.sh a cli könyvtárban találhatók, a YAML konfigurációs fájljai pedig az endpoints/online/managed/sample/ alkönyvtárban találhatók.

Feljegyzés

Az online Kubernetes-végpontok YAML-konfigurációs fájljai az endpoints/online/kubernetes/ alkönyvtárban találhatók.

A végpont definiálása

Végpont definiálásához meg kell adnia a következőket:

  • Végpont neve: A végpont neve. Egyedinek kell lennie az Azure-régióban. Az elnevezési szabályokkal kapcsolatos további információkért tekintse meg a végpontkorlátokat.
  • Hitelesítési mód: A végpont hitelesítési módszere. Válasszon a kulcsalapú hitelesítés és az Azure Machine Tanulás tokenalapú hitelesítés közül. A kulcsok nem járnak le, de a jogkivonatok lejárnak. A hitelesítéssel kapcsolatos további információkért lásd : Hitelesítés online végponton.
  • Tetszés szerint leírást és címkéket is hozzáadhat a végponthoz.

Végpontnév beállítása

A végpont nevének beállításához futtassa a következő parancsot (cserélje le YOUR_ENDPOINT_NAME egy egyedi névre).

Linux esetén futtassa a következő parancsot:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

A végpont konfigurálása

Az alábbi kódrészlet a végpontokat/online/felügyelt/minta/endpoint.yml fájlt jeleníti meg:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key

A végpont YAML-formátumára vonatkozó hivatkozást az alábbi táblázat ismerteti. Az attribútumok megadásának módjáról az online végpont YAML-hivatkozásában olvashat. A felügyelt végpontokkal kapcsolatos korlátokról az online végpontokra vonatkozó korlátokat ismertető cikkben olvashat.

Kulcs Leírás
$schema (Nem kötelező) A YAML-séma. A YAML-fájlban elérhető összes lehetőség megtekintéséhez a sémát az előző kódrészletben tekintheti meg egy böngészőben.
name A végpont neve.
auth_mode Kulcsalapú hitelesítéshez használható key . Azure Machine-Tanulás jogkivonatalapú hitelesítéshez használhatóaml_token. A legújabb jogkivonat lekéréséhez használja a az ml online-endpoint get-credentials parancsot.

Az üzembe helyezés definiálása

Az üzembe helyezés a tényleges következtetést okozó modell üzemeltetéséhez szükséges erőforrások készlete. Modell üzembe helyezéséhez a következővel kell rendelkeznie:

  • Modellfájlok (vagy a munkaterületen már regisztrált modell neve és verziója). A példában van egy scikit-learn modellünk, amely regressziót végez.
  • Egy pontozó szkript, vagyis egy kód, amely egy adott bemeneti kérésen hajtja végre a modellt. A pontozó szkript fogadja az üzembe helyezett webszolgáltatásnak küldött adatokat, és átadja azokat a modellnek. A szkript ezután végrehajtja a modellt, és visszaadja válaszát az ügyfélnek. A pontozási szkript a modellre jellemző, és ismernie kell azokat az adatokat, amelyeket a modell bemenetként vár el, és kimenetként ad vissza. Ebben a példában egy score.py fájl található.
  • Olyan környezet, amelyben a modell fut. A környezet lehet Egy Docker-rendszerkép Conda-függőségekkel vagy Docker-fájlokkal.
  • Gépház a példánytípus és a skálázási kapacitás megadásához.

Az alábbi táblázat az üzembe helyezés fő attribútumait ismerteti:

Attribútum Ismertetés
Név Az üzembe helyezés neve.
Végpont neve Az üzembe helyezés létrehozásához szükséges végpont neve.
Modell Az üzembe helyezéshez használni kívánt modell. Ez az érték lehet a munkaterület egy meglévő verziójú modelljére való hivatkozás, vagy egy beágyazott modell specifikációja.
Kód elérési útja A helyi fejlesztési környezet könyvtárának elérési útja, amely tartalmazza a modell pontozásához szükséges Összes Python-forráskódot. Beágyazott könyvtárakat és csomagokat is használhat.
Pontozási szkript A forráskód könyvtárában található pontozófájl relatív elérési útja. Ennek a Python-kódnak egy függvénysel init() és egy függvénnyel kell rendelkeznie run() . A init() függvény a modell létrehozása vagy frissítése után lesz meghívva (használhatja például a modell gyorsítótárazására a memóriában). A run() függvényt a rendszer a végpont minden meghívásánál meghívja, hogy elvégezhesse a tényleges pontozást és előrejelzést.
Környezet A modellt és a kódot üzemeltető környezet. Ez az érték hivatkozhat a munkaterület meglévő verziójú környezetére, vagy egy beágyazott környezeti specifikációra.
Példány típusa Az üzembe helyezéshez használandó virtuálisgép-méret. A támogatott méretek listáját a Felügyelt online végpontok termékváltozata című témakörben találja.
Példányok száma Az üzembe helyezéshez használandó példányok száma. Alapozza az értéket a várt számítási feladatra. A magas rendelkezésre állás érdekében javasoljuk, hogy állítsa be az értéket legalább 3. A frissítések végrehajtásához további 20%-ot foglalunk le. További információkért tekintse meg a virtuális gépek központi telepítésre vonatkozó kvótafoglalását.

Figyelmeztetés

  • A modellre és a tárolórendszerképre (a környezetben definiált módon) bármikor hivatkozhat az üzembe helyezés, amikor az üzembe helyezés mögötti példányok biztonsági javításokon és/vagy más helyreállítási műveleteken mennek keresztül. Ha az Azure Container Registryben regisztrált modellt vagy tárolórendszerképet használt üzembe helyezéshez, és eltávolította a modellt vagy a tárolórendszerképet, az ezen eszközökre támaszkodó üzembe helyezések sikertelenek lehetnek az újraimálás során. Ha eltávolította a modellt vagy a tárolórendszerképet, győződjön meg arról, hogy a függő üzemelő példányok újra lettek létrehozva vagy frissítve alternatív modellel vagy tárolórendszerképpel.
  • A környezet által hivatkozott tárolóregisztrációs adatbázis csak akkor lehet privát, ha a végponti identitás rendelkezik hozzáféréssel a Microsoft Entra-hitelesítéssel és az Azure RBAC-vel. Ugyanezen okból az Azure Container Registryen kívüli privát Docker-regisztrációs adatbázisok nem támogatottak.

Üzembe helyezés konfigurálása

Az alábbi kódrészlet a végpontokat/online/felügyelt/minta/blue-deployment.yml fájlt jeleníti meg, az üzembe helyezés konfigurálásához szükséges összes bemenettel:

$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

Feljegyzés

A blue-deployment.yml fájlban a következő üzembehelyezési attribútumokat értünk el:

  • model - Ebben a példában a modelltulajdonságokat a beágyazott módon adhatja meg a path. A rendszer automatikusan feltölti és regisztrálja a modellfájlokat egy automatikusan létrehozott névvel.
  • environment - Ebben a példában beágyazott definíciók találhatók, amelyek tartalmazzák a path. A rendszerképet használjuk environment.docker.image . A conda_file függőségek a rendszerkép tetején lesznek telepítve.

Az üzembe helyezés során a rendszer feltölti a helyi fájlokat, például a pontozási modell Python-forrását a fejlesztési környezetből.

A YAML-sémával kapcsolatos további információkért tekintse meg a YAML online végpontjának hivatkozását.

Feljegyzés

Kubernetes használata felügyelt végpontok helyett számítási célként:

  1. Hozza létre és csatolja a Kubernetes-fürtöt számítási célként az Azure Machine Tanulás-munkaterülethez az Azure Machine Tanulás Studio használatával.
  2. A YAML végpont használatával a kuberneteket célozza meg a felügyelt YAML-végpont helyett. A YAML-et a regisztrált számítási cél nevére kell módosítania target . Ezt a deployment.yaml parancsot használhatja, amely további, a Kubernetes üzembe helyezésére vonatkozó tulajdonságokkal rendelkezik.

A cikkben használt összes parancs (kivéve az opcionális SLA-monitorozást és az Azure Log Analytics-integrációt) használható felügyelt végpontokkal vagy Kubernetes-végpontokkal.

Modell és környezet külön regisztrálása

Ebben a példában a path beágyazott fájlokat adhatja meg (ahonnan fájlokat tölthet fel). A parancssori felület automatikusan feltölti a fájlokat, és regisztrálja a modellt és a környezetet. Az éles környezetben ajánlott eljárásként regisztrálnia kell a modellt és a környezetet, és külön kell megadnia a regisztrált nevet és verziót a YAML-ben. Használja az űrlapot model: azureml:my-model:1 vagy environment: azureml:my-env:1a .

A regisztrációhoz kinyerheti a YAML-definíciókat model és environment külön YAML-fájlokba, és használhatja a parancsokat az ml model create és az ml environment createa . Ha többet szeretne megtudni ezekről a parancsokról, futtassa és az ml environment create -h.az ml model create -h

A modell eszközként való regisztrálásával kapcsolatos további információkért lásd: A modell regisztrálása eszközként a Gépi Tanulás a parancssori felület használatával. További információ a környezetek létrehozásáról: Azure Machine Tanulás környezetek kezelése a CLI &SDK-val (v2).

Különböző PROCESSZOR- és GPU-példánytípusok és -rendszerképek használata

A blue-deployment.yml fájl előző definíciója egy általános célú típuspéldányt Standard_DS3_v2 és egy nem GPU-alapú Docker-lemezképet mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latesthasznál. GPU-számításhoz válasszon gpu-számítási típusú termékváltozatot és GPU Docker-rendszerképet.

A támogatott általános célú és GPU-példánytípusokért lásd : Felügyelt online végpontok által támogatott virtuálisgép-termékváltozatok. Az Azure Machine Tanulás CPU- és GPU-alaprendszerképeinek listáját az Azure Machine Tanulás alaprendszerképei között találja.

Feljegyzés

Ha a Kubernetes-t a felügyelt végpontok helyett számítási célként szeretné használni, olvassa el a Kubernetes számítási cél bemutatása című témakört.

Modell elérési útjának azonosítása a AZUREML_MODEL_DIR

Amikor üzembe helyezi a modellt az Azure Machine Tanulás, meg kell adnia az üzembe helyezni kívánt modell helyét az üzembe helyezési konfiguráció részeként. Az Azure Machine Tanulás a modell elérési útját a AZUREML_MODEL_DIR környezeti változó követi nyomon. A modell elérési útjának azonosításával AZUREML_MODEL_DIRüzembe helyezhet egy vagy több, a számítógépen helyben tárolt modellt, vagy üzembe helyezhet egy, az Azure Machine Tanulás-munkaterületen regisztrált modellt.

Illusztrációként a következő helyi mappastruktúrára hivatkozunk az első két esetben, amikor egyetlen modellt helyez üzembe, vagy több helyileg tárolt modellt helyez üzembe:

Képernyőkép egy több modellt tartalmazó mappastruktúráról.

Egyetlen helyi modell használata az üzembe helyezésben

Ha egyetlen olyan modellt szeretne használni, amelyet a helyi gépen használ egy üzembe helyezés során, adja meg az pathmodel üzembe helyezési YAML-ben szereplő modellt. Íme egy példa az üzembe helyezési YAML-ra az elérési úttal /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 

Az üzembe helyezés létrehozása után a környezeti változó AZUREML_MODEL_DIR arra a tárolóhelyre mutat az Azure-ban, ahol a modell tárolása történik. Például /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 tartalmazni fogja a modellt sample_m1.pkl.

A pontozószkripten (score.py) belül betöltheti a modellt (ebben a példában sample_m1.pkl) a init() függvénybe:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl") 
    model = joblib.load(model_path) 

Több helyi modell használata az üzembe helyezésben

Bár az Azure CLI, a Python SDK és más ügyféleszközök lehetővé teszik, hogy üzembe helyezésenként csak egy modellt adjon meg az üzembe helyezés definíciójában, az üzembe helyezésben több modellt is használhat egy olyan modellmappa regisztrálásával, amely az összes modellt fájlként vagy alkönyvtárként tartalmazza.

Az előző példamappák struktúrájában láthatja, hogy a mappában models több modell is található. Az üzembehelyezési YAML-ben az alábbiak szerint adhatja meg a models mappa elérési útját:

$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 

Az üzembe helyezés létrehozása után a környezeti változó AZUREML_MODEL_DIR arra a tárolási helyre mutat az Azure-ban, ahol a modelleket tárolják. Például /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 tartalmazni fogja a modelleket és a fájlstruktúrát.

Ebben a példában a mappa tartalma a AZUREML_MODEL_DIR következőképpen fog kinézni:

Képernyőkép a több modell tárolási helyének mappaszerkezetéről.

A pontozási szkripten (score.py) belül betöltheti a modelleket a init() függvénybe. A következő kód betölti a sample_m1.pkl modellt:

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) 

Ha több modellt szeretne üzembe helyezni egy üzemelő példányon, olvassa el a Több modell üzembe helyezése egy üzembe helyezésre (CLI-példa) és több modell üzembe helyezése egy üzembe helyezésre (SDK-példa) című témakört.

Tipp.

Ha több mint 1500 fájlt szeretne regisztrálni, fontolja meg a fájlok vagy alkönyvtárak .tar.gz tömörítését a modellek regisztrálásakor. A modellek használatához megszüntetheti a függvényben lévő fájlokat vagy alkönyvtárakat a init() pontozószkriptből. Másik lehetőségként a modellek regisztrálásakor állítsa a azureml.unpack tulajdonságot Truea fájlok vagy alkönyvtárak automatikus kibontásához. Mindkét esetben az inicializálási szakaszban egyszer megtörténik a kihangsúlyzás.

Azure Machine Tanulás-munkaterületen regisztrált modellek használata üzembe helyezés során

Az Azure Machine Tanulás-munkaterületen regisztrált egy vagy több modell használatához az üzembe helyezés során adja meg a regisztrált modell(ek) nevét az üzembe helyezési YAML-ben. A következő üzembehelyezési YAML-konfiguráció például a regisztrált model nevet azureml:local-multimodel:3adja meg:

$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 

Ebben a példában vegye figyelembe local-multimodel:3 a következő modellösszetevőket, amelyeket az Azure Machine Tanulás studio Modellek lapján tekinthet meg:

Képernyőkép a mappastruktúráról, amelyen a regisztrált modell modellösszetevői láthatók.

Az üzembe helyezés létrehozása után a környezeti változó AZUREML_MODEL_DIR arra a tárolási helyre mutat az Azure-ban, ahol a modelleket tárolják. Például /var/azureml-app/azureml-models/local-multimodel/3 tartalmazni fogja a modelleket és a fájlstruktúrát. AZUREML_MODEL_DIR a modellösszetevők gyökerét tartalmazó mappára mutat. A példa alapján a mappa tartalma a AZUREML_MODEL_DIR következőképpen fog kinézni:

Képernyőkép a több modellt ábrázoló mappastruktúráról.

A pontozási szkripten (score.py) belül betöltheti a modelleket a init() függvénybe. Töltse be például a diabetes.sav modellt:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav") 
    model = joblib.load(model_path) 

A pontozási szkript ismertetése

Tipp.

Az online végpontok pontozási szkriptjének formátuma megegyezik a PARANCSSOR előző verziójában és a Python SDK-ban használt formátummal.

Ahogy korábban említettük, a megadott code_configuration.scoring_script pontozószkriptnek egy függvénysel és egy init() függvénnyel kell rendelkeznie run() .

Ez a példa a score.py fájlt használja: 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()

A init() függvény meghívása a tároló inicializálása vagy elindításakor történik. Az inicializálás általában röviddel az üzembe helyezés létrehozása vagy frissítése után történik. A init függvény a globális inicializálási műveletek logikájának írási helye, például a modell gyorsítótárazása a memóriában (ahogy ebben a példában is).

A run() függvény a végpont minden meghívásához meghívható, és elvégzi a tényleges pontozást és előrejelzést. Ebben a példában adatokat nyerünk ki egy JSON-bemenetből, meghívjuk a scikit-learn modell metódusát predict() , majd visszaadjuk az eredményt.

Helyi végpontok használatával történő helyi üzembe helyezés és hibakeresés

Javasoljuk, hogy az Azure-ban való üzembe helyezés előtt ellenőrizze és hibakereséssel tesztelje helyileg a végpontot. Az Azure CLI és a Python SDK támogatja a helyi végpontokat és üzembe helyezéseket, míg az Azure Machine Tanulás studio- és ARM-sablon nem.

A helyi üzembe helyezéshez a Docker Engine-t telepíteni és futtatni kell. A Docker Engine általában a számítógép indításakor indul el. Ha nem, a Docker Engine hibaelhárítását is elvégezheti.

Tipp.

Az Azure Machine Tanulás következtetési HTTP-kiszolgáló Python-csomagjával helyileg, Docker Engine nélkül is hibakeresést végezhet a pontozószkriptben. A következtetési kiszolgálóval végzett hibakeresés segít a pontozószkript hibakeresésében, mielőtt üzembe helyeznénk a helyi végpontokon, hogy az üzembehelyezési tároló konfigurációi ne befolyásolhassák a hibakeresést.

Feljegyzés

A helyi végpontok a következő korlátozásokkal rendelkeznek:

  • Nem támogatják a forgalmi szabályokat, a hitelesítést és a mintavételi beállításokat.
  • Végpontonként csak egy üzembe helyezést támogatnak.
  • Csak helyi Conda-fájlokkal támogatják a helyi modellfájlokat és környezetet. Ha tesztelni szeretné a regisztrált modelleket, először töltse le őket a parancssori felület vagy az SDK használatával, majd használja path az üzembehelyezési definícióban a szülőmappára való hivatkozáshoz. Ha tesztelni szeretné a regisztrált környezeteket, ellenőrizze a környezet környezetét az Azure Machine Tanulás Studióban, és készítse elő a helyi Conda-fájl használatát. Ebben a cikkben például a helyi modell és környezet helyi Conda-fájllal való használatát mutatja be, amely támogatja a helyi üzembe helyezést.

További információ az online végpontok helyi hibakereséséről az Azure-ban való üzembe helyezés előtt: Online végpontok helyi hibakeresése a Visual Studio Code-ban.

A modell helyi üzembe helyezése

Először hozzon létre egy végpontot. Helyi végpont esetén kihagyhatja ezt a lépést, és közvetlenül létrehozhatja az üzembe helyezést (következő lépés), amely viszont létrehozza a szükséges metaadatokat. A modellek helyi üzembe helyezése fejlesztési és tesztelési célokra hasznos.

az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

Most hozzon létre egy üzembe helyezést blue a végpont alatt.

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

A --local jelző a parancssori felületre irányítja a végpont Docker-környezetben való üzembe helyezését.

Tipp.

A végpontok helyi teszteléséhez és hibakereséséhez használja a Visual Studio Code-ot. További információ: online végpontok helyi hibakeresése a Visual Studio Code-ban.

Ellenőrizze, hogy a helyi üzembe helyezés sikeres volt-e

Ellenőrizze az állapotot, hogy a modell hiba nélkül lett-e üzembe helyezve:

az ml online-endpoint show -n $ENDPOINT_NAME --local

A kimenetnek a következő JSON-hoz hasonlóan kell megjelennie. Az provisioning_state is Succeeded.

{
  "auth_mode": "key",
  "location": "local",
  "name": "docs-endpoint",
  "properties": {},
  "provisioning_state": "Succeeded",
  "scoring_uri": "http://localhost:49158/score",
  "tags": {},
  "traffic": {}
}

Az alábbi táblázat a következő lehetséges értékeket provisioning_statetartalmazza:

Állapot Leírás
Létrehozása Az erőforrás létrehozása folyamatban van.
Frissítése Az erőforrás frissítése folyamatban van.
Törlés Az erőforrás törlése folyamatban van.
Sikerült A létrehozási/frissítési művelet sikeres volt.
Sikertelen A létrehozási/frissítési/törlési művelet nem sikerült.

A helyi végpont meghívása adatok pontozásához a modell használatával

A végpont meghívása a modell pontozásához a kényelmi paranccsal invoke és a JSON-fájlban tárolt lekérdezési paraméterek átadásával:

az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

Ha REST-ügyfelet szeretne használni (például curl), akkor rendelkeznie kell a pontozási URI-val. A pontozási URI lekéréséhez futtassa a következőt az ml online-endpoint show --local -n $ENDPOINT_NAME: . A visszaadott adatok között keresse meg az scoring_uri attribútumot. A minta curl-alapú parancsok a dokumentum későbbi részében érhetők el.

Tekintse át a naplókat a meghívási művelet kimenetének megtekintéséhez

A példában score.py fájlban a run() metódus naplózza a kimenetet a konzolon.

Ezt a kimenetet a get-logs következő paranccsal tekintheti meg:

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

Az online végpont üzembe helyezése az Azure-ban

Ezután helyezze üzembe az online végpontot az Azure-ban.

Üzembe helyezés az Azure-ban

A végpont felhőben való létrehozásához futtassa a következő kódot:

az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

A végpont alatt elnevezett blue üzembe helyezés létrehozásához futtassa a következő kódot:

az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic

Ez az üzembe helyezés akár 15 percet is igénybe vehet attól függően, hogy az alapul szolgáló környezet vagy rendszerkép első létrehozása folyamatban van-e. Az azonos környezetet használó későbbi üzembe helyezések gyorsabban befejezik a feldolgozást.

Tipp.

  • Ha nem szeretné letiltani a CLI-konzolt, hozzáadhatja a jelölőt --no-wait a parancshoz. Ez azonban leállítja az üzembe helyezési állapot interaktív megjelenítését.

Fontos

A --all-traffic fenti az ml online-deployment create jelölő a végpont forgalmának 100%-át lefoglalja az újonnan létrehozott kék üzembe helyezéshez. Bár ez fejlesztési és tesztelési célokra hasznos, éles környezetben érdemes lehet explicit paranccsal megnyitni az új üzembe helyezés felé irányuló forgalmat. Például: az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".

Tipp.

A végpont állapotának ellenőrzése

A show parancs a provisioning_state végpont és az üzembe helyezés adatait tartalmazza:

az ml online-endpoint show -n $ENDPOINT_NAME

A munkaterület összes végpontja táblázatos formátumban listázható a list következő paranccsal:

az ml online-endpoint list --output table

Az online üzembe helyezés állapotának ellenőrzése

Ellenőrizze a naplókat, hogy a modell hiba nélkül lett-e üzembe helyezve.

A tároló naplókimenetének megtekintéséhez használja a következő PARANCSSOR-parancsot:

az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME

Alapértelmezés szerint a rendszer lekérte a naplókat a következtetési kiszolgáló tárolójából. A tároló inicializáló tárolójának naplóinak megtekintéséhez adja hozzá a jelzőt --container storage-initializer . Az üzembehelyezési naplókkal kapcsolatos további információkért lásd : Tárolónaplók lekérése.

A végpont meghívása adatok pontozásához a modell használatával

A végpont meghívásához és néhány adat pontozásához használhatja a invoke parancsot vagy a választott REST-ügyfelet:

az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

Az alábbi példa bemutatja, hogyan szerezheti be a végpont hitelesítéséhez használt kulcsot:

Tipp.

Szabályozhatja, hogy mely Microsoft Entra biztonsági tagok szerezhetik be a hitelesítési kulcsot, ha hozzárendeli őket egy egyéni szerepkörhöz, amely lehetővé teszi és Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/actionlehetővé tesziMicrosoft.MachineLearningServices/workspaces/onlineEndpoints/token/action. További információ: Azure Machine-Tanulás-munkaterülethez való hozzáférés kezelése.

ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)

Ezután használja a curl-t az adatok pontozásához.

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

Figyelje meg, hogy a hitelesítési hitelesítő adatokat és get-credentials parancsokat használjukshow. Azt is megfigyelheti, hogy a --query jelzővel az attribútumokat csak arra szűrjük, amire szükségünk van. További információ: --queryAzure CLI-parancskimenet lekérdezése.

A meghívási naplók megtekintéséhez futtassa get-logs újra.

A jogkivonatok hitelesítésével kapcsolatos információkért lásd : Hitelesítés online végpontokon.

(Nem kötelező) Az üzembe helyezés frissítése

Ha frissíteni szeretné a kódot, a modellt vagy a környezetet, frissítse a YAML-fájlt, majd futtassa a az ml online-endpoint update parancsot.

Feljegyzés

Ha egyetlen update parancsban frissíti a példányok számát (az üzembe helyezés skálázásához) más modellbeállításokkal (például kód, modell vagy környezet) együtt, először a skálázási műveletet hajtja végre, majd a többi frissítés lesz alkalmazva. Célszerű ezeket a műveleteket éles környezetben külön végrehajtani.

A működés ismertetése update :

  1. Nyissa meg a fájlt online/model-1/onlinescoring/score.py.

  2. Módosítsa a függvény utolsó sorát init() : After logging.info("Init complete"), add logging.info("Updated successfully").

  3. Mentse a fájlt.

  4. Futtassa ezt a parancsot:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
    

    Feljegyzés

    A YAML használatával történő frissítés deklaratív. Ez azt jelzi, hogy a YAML változásai megjelennek a mögöttes Azure Resource Manager-erőforrásokban (végpontokban és üzemelő példányokban). A deklaratív megközelítés megkönnyíti a GitOps használatát: A végpontok és az üzemelő példányok (sőtinstance_count) minden módosítása a YAML-ben megy keresztül.

    Tipp.

    • Általános frissítési paramétereket, például a paramétert használhatja a --set CLI update paranccsal a YAML-attribútumok felülbírálására, vagy adott attribútumok beállítására anélkül, hogy átadta volna őket a YAML-fájlban. Az önálló attribútumok használata --set különösen hasznos fejlesztési és tesztelési forgatókönyvekben. Például az első üzembe helyezés értékének instance_count felskálázásához használhatja a jelölőt --set instance_count=2 . Mivel azonban a YAML nem frissül, ez a technika nem segíti elő a GitOpst.
    • A YAML-fájl megadása NEM kötelező. Ha például különböző egyidejűségi beállításokat szeretne tesztelni egy adott üzembe helyezéshez, próbálkozzon valami hasonlóval az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4. Ez megtartja az összes meglévő konfigurációt, de csak a megadott paramétereket frissíti.
  5. Mivel módosította a init() függvényt, amely a végpont létrehozásakor vagy frissítésekor fut, az üzenet Updated successfully a naplókban lesz. A naplók lekérése a következő futtatásával:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

A update parancs helyi központi telepítésekkel is működik. Használja ugyanazt az ml online-deployment update a parancsot a --local jelölővel.

Feljegyzés

Az üzemelő példány előző frissítése példa egy helyszíni, működés közbeni frissítésre.

  • Felügyelt online végpont esetén az üzembe helyezés az új konfigurációra frissül, egyszerre 20%-os csomópontokkal. Vagyis ha az üzembe helyezés 10 csomópontból áll, egyszerre 2 csomópont frissül.
  • Kubernetes online végpont esetén a rendszer iteratív módon létrehoz egy új üzembehelyezési példányt az új konfigurációval, és törli a régit.
  • Éles használat esetén érdemes megfontolni a kék-zöld üzembe helyezést, amely biztonságosabb alternatívát kínál egy webszolgáltatás frissítéséhez.

(Nem kötelező) Automatikus skálázás konfigurálása

Az automatikus skálázás automatikusan a megfelelő mennyiségű erőforrást futtatja az alkalmazásra háruló terhelés kezeléséhez. A felügyelt online végpontok támogatják az automatikus skálázást az Azure Monitor automatikus skálázási funkciójával való integrációval. Az automatikus skálázás konfigurálásához tekintse meg az online végpontok automatikus méretezését ismertető cikket.

(Nem kötelező) SLA monitorozása az Azure Monitor használatával

A metrikák megtekintéséhez és a riasztások SLA-n alapuló beállításához hajtsa végre az online végpontok monitorozásával kapcsolatos lépéseket.

(Nem kötelező) Integrálás a Log Analyticsszel

A get-logs parancssori felület parancsa vagy az get_logs SDK metódusa csak az utolsó néhány száz sornyi naplót biztosítja egy automatikusan kiválasztott példányból. A Log Analytics azonban lehetővé teszi a naplók tartós tárolását és elemzését. A naplózás használatáról további információt az online végpontok figyelése című témakörben talál.

A végpont és az üzembe helyezés törlése

Ha nem használja az üzembe helyezést, törölje a következő kód futtatásával (törli a végpontot és az összes mögöttes üzembe helyezést):

az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait