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 CLI és az
ml
Azure CLI bővítménye. További információ: A parancssori felület (v2) telepítése, beállítása és használata.Fontos
A jelen cikkben szereplő CLI-példák feltételezik, hogy a Bash (vagy kompatibilis) rendszerhéjat használja. Például linuxos rendszerből vagy Linuxos Windows-alrendszer.
Egy Azure Machine Learning-munkaterület. Ha nincs ilyenje, a telepítés, a beállítás és a parancssori felület (v2) lépéseit követve hozzon létre egyet.
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é teszi
Microsoft.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 apath
. 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 apath
. A rendszerképet használjukenvironment.docker.image
. Aconda_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:
- 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.
- 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:1
a .
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 create
a . 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:latest
haszná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:
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 path
model
ü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:
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 True
a 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:3
adja 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:
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:
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_state
tartalmazza:
Á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.
- Hibakereséshez használja az online végpontok üzembe helyezésének hibaelhárítását.
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/action
lehető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ó: --query
Azure 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
:
Nyissa meg a fájlt online/model-1/onlinescoring/score.py.
Módosítsa a függvény utolsó sorát
init()
: Afterlogging.info("Init complete")
, addlogging.info("Updated successfully")
.Mentse a fájlt.
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őt
instance_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
CLIupdate
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énekinstance_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.
- Általános frissítési paramétereket, például a paramétert használhatja a
Mivel módosította a
init()
függvényt, amely a végpont létrehozásakor vagy frissítésekor fut, az üzenetUpdated 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
Kapcsolódó tartalom
- Széf bevezetés online végpontokhoz
- Modellek üzembe helyezése REST használatával
- Felügyelt online végpontok automatikus méretezése
- Felügyelt online végpontok monitorozása
- Azure-erőforrások elérése egy online végpontról felügyelt identitással
- Online végpontok üzembe helyezésének hibaelhárítása
- Hálózatelkülönítés engedélyezése felügyelt online végpontokkal
- Azure Machine-Tanulás felügyelt online végpont költségeinek megtekintése
- Az erőforráskvóták kezelése és növelése az Azure Machine Learninggel
- Kötegelt végpontok használata kötegpontozáshoz