Gépi tanulási modell üzembe helyezése és pontozása online végpont használatával (előzetes verzió)

A KÖVETKEZŐKRE VONATKOZIK: Azure CLI ml-bővítmény v1 v2 (előzetes verzió)

Megjegyzés

Ez a cikk a CLI v2 legújabb verzióját használja, amely nyilvános előzetes verzióban érhető el. A legújabb verzió frissítésével és telepítésével kapcsolatos útmutatásért tekintse meg a parancssori felület (v2) telepítésével és beállításával kapcsolatos dokumentumot.

Megtudhatja, hogyan helyezhet üzembe online végpontot (előzetes verziót) a modell üzembe helyezéséhez, hogy ne kelljen létrehoznia és kezelnie a mögöttes infrastruktúrát. Először üzembe kell helyeznie egy modellt a helyi gépen a hibák hibakereséséhez, majd üzembe helyezi és teszteli az Azure-ban.

Azt is megtudhatja, hogyan tekintheti meg a naplókat, és hogyan figyelheti a szolgáltatásiszint-szerződést (SLA). Egy modellel kell kezdenie, és végül egy skálázható HTTPS/REST-végponttal kell végződnie, amelyet online és valós idejű pontozáshoz használhat.

A felügyelt online végpontok segítenek a ML modellek kulcsrakész üzembe helyezésében. A felügyelt online végpontok skálázható, teljes körűen felügyelt módon működnek az Azure-beli hatékony CPU- és GPU-gépeken. A felügyelt online végpontok gondoskodnak a modellek kiszolgálásáról, skálázásáról, biztonságá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 dokumentumban található megjegyzéseket a felügyelt online végponttal kapcsolatos vitafórumba ágyazva. További információ: Mik azok a Azure Machine Learning végpontok (előzetes verzió)?

Fontos

Ez a funkció jelenleg nyilvános előzetes verzióban érhető el. Ez az előzetes verzió szolgáltatásiszint-szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Előfeltételek

Fontos

A dokumentumban szereplő példák feltételezik, hogy a Bash-rendszerhéjat használja. Például Linux rendszerből vagy Linuxos Windows-alrendszer.

A rendszer előkészítése

A cikk követéséhez először klónozza a mintaadattárat (azureml-examples). Ezután futtassa a következő kódot a mintakönyvtárba való ugráshoz:

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

A végpont nevének beállításához válasszon az alábbi parancsok közül az operációs rendszertől függően (cserélje le YOUR_ENDPOINT_NAME egy egyedi névre).

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

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

Megjegyzés

A végpontneveknek egyedinek kell lenniük egy Azure-régióban. Az Azure-régióban westus2 például csak egy végpont lehet a neve my-endpoint.

A végpont és az üzembe helyezés konfigurációinak áttekintése

A következő kódrészlet a végpontokat/online/managed/sample/endpoint.yml fájlt mutatja be:

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

Megjegyzés

A YAML teljes leírásáért lásd az online végpont (előzetes verzió) YAML-referenciáját.

A végpont YAML-formátumának hivatkozását az alábbi táblázat ismerteti. Az attribútumok megadásának módjáról a RENDSZER előkészítése vagy az online végpont YAML-referenciája című YAML-példában olvashat. A felügyelt végpontokkal kapcsolatos korlátozásokról további információt a Azure Machine Learning rendelkező erőforrások kvótáinak kezelése és növelése című témakörben talál.

Kulcs Leírás
$schema (Nem kötelező) A YAML-séma. A YAML-fájl összes elérhető beállításának megtekintéséhez a sémát az előző példában tekintheti meg egy böngészőben.
name A végpont neve. Az Azure-régióban egyedinek kell lennie.
Az elnevezési szabályok felügyelt online végpontkorlátok alatt vannak meghatározva.
auth_mode Kulcsalapú hitelesítéshez használható key . Jogkivonat-alapú aml_token hitelesítés Azure Machine Learning. key nem jár le, de aml_token lejár. (A legutóbbi jogkivonat lekérése a az ml online-endpoint get-credentials paranccsal.)

A példa tartalmazza a modell online végponton való üzembe helyezéséhez szükséges összes fájlt. Modell üzembe helyezéséhez a következőket kell tennie:

  • 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.
  • A modell pontozásához szükséges kód. Ebben az esetben van egy score.py fájlunk.
  • Egy olyan környezet, amelyben a modell fut. Amint láthatja, a környezet lehet Egy Docker-rendszerkép Conda-függőségekkel, vagy egy Docker-fájl.
  • Gépház a példánytípus és a skálázási kapacitás megadásához.

A következő kódrészlet a végpontokat/online/managed/sample/blue-deployment.yml fájlt mutatja be az összes szükséges 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.yml
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1
instance_type: Standard_DS2_v2
instance_count: 1

A táblázat a következő attribútumokat deploymentírja le:

Kulcs Leírás
name Az üzembe helyezés neve.
model Ebben a példában beágyazott modelltulajdonságokat adunk meg: path. A modellfájlok automatikusan feltöltődnek, és automatikusan generált névvel vannak regisztrálva. A kapcsolódó ajánlott eljárásokért tekintse meg a következő szakaszban található tippet.
code_configuration.code.path A modell pontozásához szükséges összes Python-forráskódot tartalmazó könyvtár. Beágyazott könyvtárakat és csomagokat is használhat.
code_configuration.scoring_script A pontozási könyvtárban található code_configuration.code.path Python-fájl. Ennek a Python-kódnak rendelkeznie kell egy init() függvénnyel és egy függvénnyel run() . A függvény init() 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 hívásánál meghívja a tényleges pontozás és előrejelzés érdekében.
environment A modell és a kód üzemeltetéséhez használni kívánt környezet adatait tartalmazza. Ebben a példában beágyazott definíciókkal rendelkezünk, amelyek tartalmazzák apath következőket. A rendszerképet használjuk environment.docker.image . A conda_file függőségek a rendszerkép tetején lesznek telepítve. További információt a következő szakaszban található tippben talál.
instance_type Az üzembehelyezési példányokat üzemeltető virtuálisgép-termékváltozat. További információ: Felügyelt online végpontok által támogatott virtuálisgép-termékváltozatok.
instance_count Az üzemelő példányok száma. Az érték alapja a várt számítási feladat. A magas rendelkezésre állás érdekében javasoljuk, hogy instance_count legalább 3.

A YAML-sémával kapcsolatos további információkért tekintse meg az online végpont YAML-referenciáját.

Megjegyzés

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

  1. A Kubernetes-fürtöt számítási célként hozhatja létre és csatolhatja a Azure Machine Learning-munkaterülethez Azure Machine Learning stúdió használatával.
  2. Használja a YAML végpontot a Kubernetes célként való megcélzásához a felügyelt YAML-végpont helyett. A YAML szerkesztésével a regisztrált számítási cél nevére módosíthatja az értéket target . Ezt a deployment.yaml fájlt használhatja, amely további, a Kubernetes üzemelő példányára 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. É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 nyerheti ki, é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 az ml model create -h és az ml environment create -h.

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

Az előző YAML egy általános célú típust (Standard_F2s_v2) és egy nem GPU-alapú Docker-rendszerképet használ (a YAML-ben lásd az image attribútumot). 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. A Azure Machine Learning CPU- és GPU-alaprendszerképek listáját Azure Machine Learning alaprendszerképek között találja.

Több modell használata

Jelenleg üzembe helyezésenként csak egy modellt adhat meg a YAML-ben. Ha több modellje van, a modell regisztrálása során másolja az összes modellt fájlként vagy alkönyvtárként egy regisztrációhoz használt mappába. A pontozószkriptben használja az AZUREML_MODEL_DIR környezeti változót a modellgyökérmappa útvonalának lekéréséhez. A mögöttes könyvtárstruktúra megmarad.

A pontozási szkript ismertetése

Tipp

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

Ahogy korábban említettük, a code_configuration.scoring_script függvénynek és egy init() függvénynek run() kell lennie. Ez a példa a score.py fájlt használja. A init() függvény a tároló inicializálása vagy elindításakor lesz meghívva. Az inicializálás általában röviddel az üzembe helyezés létrehozása vagy frissítése után történik. Ide írhatja a globális inicializálási műveletek logikáját, például a modell gyorsítótárazását a memóriában (ahogy ebben a példában). A run() függvény a végpont minden hívásához szükséges, és a tényleges pontozást és előrejelzést kell elvégeznie. A példában kinyerjük az adatokat a 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

A hibakeresés időt takaríthat meg, ezért javasoljuk , hogy helyileg tesztelje a végpontot. További információ: Online végpontok helyi hibakeresése Visual Studio Code-ban.

Megjegyzés

Fontos

A helyi végpont üzembe helyezésének célja a kód és a konfiguráció ellenőrzése és hibakeresése az Azure-ban való üzembe helyezés előtt. A helyi telepítésre a következő korlátozások vonatkoznak:

  • A helyi végpontok nem támogatják a forgalmi szabályokat, a hitelesítést és a mintavételi beállításokat.
  • A helyi végpontok végpontonként csak egy üzemelő példányt támogatnak.

A modell helyi üzembe helyezése

Először hozza létre a 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. Ez 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ő arra utasítja a parancssori felületet, hogy helyezze üzembe a végpontot a Docker-környezetben.

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 Visual Studio Code-ban.

A helyi üzembe helyezés sikerességének ellenőrzése

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

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

A kimenetnek az alábbi JSON-hoz hasonlóan kell megjelennie. Vegye figyelembe, hogy a provisioning_stateSucceeded.

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

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

Hívja meg a végpontot a modell pontozásához a kényelmi parancs használatával invoke , és adja meg a JSON-fájlban tárolt lekérdezési paramétereket:

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

Ha REST-ügyfelet (például curl) szeretne használni, rendelkeznie kell a pontozási URI-já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 adatokban keresse meg az scoring_uri attribútumot. A curl-alapú mintaparancsok 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 get-logs a következő paranccsal tekintheti meg újra:

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őbeli 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 ugyanazt a környezetet használó későbbi üzemelő példányok gyorsabban befejezik a feldolgozást.

Fontos

A fenti az ml online-deployment create --all-traffic jelző a forgalom 100%-át lefoglalja a végpontnak az újonnan létrehozott üzembe helyezéshez. Bár ez fejlesztési és tesztelési célokra hasznos, éles környezetben érdemes lehet egy 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

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

A show parancs a végpont és az üzembe helyezés adatait provisioning_status 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

A felhőbeli üzembe helyezés állapotának ellenőrzése

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

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

Alapértelmezés szerint a naplók lekérése a következtetési kiszolgálóról lesz lekért. A storage-initializer naplóinak megtekintéséhez (például modellhez és kódhoz hasonló eszközöket csatlakoztat a tárolóhoz) adja hozzá a --container storage-initializer jelölőt.

A végpont meghívása az 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 kívánt parancsot vagy 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égponton való hitelesítéshez használt kulcsot:

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ő adatok lekéréséhez parancsokat és get-credentials parancsokat használunkshow. Azt is figyelje meg, hogy a jelölővel az --query attribútumokat csak a szükséges értékre szűrjük. További --queryinformáció: Azure CLI-parancskimenet lekérdezése.

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

(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.

Megjegyzés

Ha egyetlen update parancsban frissíti a példányok számát és más modellbeállításokkal (kód, modell vagy környezet) együtt: először a skálázási művelet lesz végrehajtva, majd a többi frissítés lesz alkalmazva. Éles környezetben ajánlott ezeket a műveleteket külön elvégezni.

A működés update megértése:

  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
    

    Megjegyzés

    A YAML használatával végzett 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égpontok és üzemelő példányok). A deklaratív megközelítés megkönnyíti a GitOps használatát: A végpontok és üzemelő példányok (sőt) instance_countminden módosítása a YAML-en megy keresztül. A YAML használata nélkül is végezhet frissítéseket a --set jelzővel.

  5. Mivel módosította a init() függvényt (init() a végpont létrehozásakor vagy frissítésekor fut), az üzenet Updated successfully megjelenik a naplókban. 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 üzemelő példányokkal is működik. Használja ugyanazt az ml online-deployment update a parancsot a --local jelölővel.

Tipp

update A paranccsal az --set Azure CLI paraméterével felülbírálhatja a YAML-ben lévő attribútumokat, vagy adott attribútumokat állíthat be a YAML-fájl átadása nélkül. Az egyes attribútumok használata --set különösen hasznos fejlesztési és tesztelési forgatókönyvekben. Az első üzembe helyezés értékének instance_count vertikális felskálázásához például használhatja a jelölőt --set instance_count=2 . Mivel azonban a YAML nincs frissítve, ez a technika nem könnyíti meg a GitOps működését.

Megjegyzés

A fenti példa a működés közbeni működés közbeni frissítésre mutat példát: vagyis ugyanaz az üzembe helyezés frissül az új konfigurációval, egyszerre 20%-os csomópontokkal. Ha az üzemelő példány 10 csomóponttal rendelkezik, egyszerre 2 csomópont frissül. Éles környezetben érdemes megfontolni a kék-zöld üzembe helyezést, amely biztonságosabb alternatívát kínál.

(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ás terhelésének 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ó révén. Az automatikus skálázás konfigurálásához tekintse meg az online végpontok automatikus skálázá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 alapján történő beállításához hajtsa végre a felügyelt online végpontok figyelése című szakaszban leírt lépéseket.

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

A get-logs parancs csak az utolsó néhány száz naplósort adja meg 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.

Először hozzon létre egy Log Analytics-munkaterületet a Log Analytics-munkaterület létrehozása a Azure Portal.

Ezután a Azure Portal:

  1. Lépjen az erőforráscsoportra.
  2. Válassza ki a végpontot.
  3. Válassza ki az ARM-erőforrás oldalát.
  4. Válassza a Diagnosztikai beállítások lehetőséget.
  5. Válassza a Beállítások hozzáadása lehetőséget.
  6. Válassza ki a konzolnaplók Log Analytics-munkaterületre való küldésének engedélyezését.

A naplók csatlakoztatása akár egy órát is igénybe vehet. Egy óra elteltével küldjön néhány pontozási kérést, majd ellenőrizze a naplókat az alábbi lépésekkel:

  1. Nyissa meg a Log Analytics-munkaterületet.
  2. A bal oldali menüben válassza a Naplók lehetőséget.
  3. Zárja be az automatikusan megnyíló Lekérdezések párbeszédpanelt.
  4. Kattintson duplán az AmlOnlineEndpointConsoleLog elemre.
  5. Válassza a Futtatás lehetőséget.

E-mailek konfigurálása a studióban (előzetes verzió)

Ha e-maileket szeretne kapni, amikor a feladat, az online végpont vagy a kötegelt végpont befejeződött, vagy ha probléma merült fel (sikertelen, megszakítva), kövesse az előző utasításokat.

  1. Az Azure ML Studióban a fogaskerék ikonra kattintva nyissa meg a beállításokat.
  2. Válassza az E-mail-értesítések lapot.
  3. Váltás az e-mail-értesítések engedélyezésére vagy letiltására egy adott eseményhez.

Screenshot of Azure ML Studio's settings on the email notifications tab.

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

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

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

Következő lépések

További információért tekintse át ezeket a cikkeket: