Az új üzembe helyezések biztonságos bevezetése valós idejű következtetés céljából

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

Ebből a cikkből megtudhatja, hogyan helyezhet üzembe egy gépi tanulási modell új verzióját éles környezetben anélkül, hogy az fennakadást okoz. Egy kék-zöld üzembehelyezési stratégiát (más néven biztonságos bevezetési stratégiát) fog használni a webszolgáltatás új verziójának éles környezetben való bevezetéséhez. Ez a stratégia lehetővé teszi, hogy a webszolgáltatás új verzióját a felhasználók vagy kérések egy kis részhalmazára gördíthesse, mielőtt teljesen üzembe tenné.

Ez a cikk feltételezi, hogy online végpontokat, vagyis online (valós idejű) következtetéshez használt végpontokat használ. Kétféle online végpontot különböztetünk meg: felügyelt online végpontokat és Kubernetes online végpontokat. A végpontokról és a felügyelt online végpontok és az online Kubernetes-végpontok közötti különbségekről további információt az Azure Machine Tanulás végpontjai című témakörben talál.

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

Ebben a cikkben a következőt fogja elsajátítani:

  • Online végpont definiálása "kék" nevű üzembe helyezéssel a modell 1. verziójának kiszolgálásához
  • A kék üzembe helyezés skálázása, hogy több kérést kezeljen
  • Telepítse a modell 2. verzióját (az úgynevezett "zöld" üzemelő példányt) a végpontra, de az üzembe helyezést élő forgalom nélkül küldje el
  • A zöld üzembe helyezés tesztelése elszigetelten
  • Az élő forgalom százalékos arányának tükrözése a zöld környezetbe annak ellenőrzéséhez
  • Az élő forgalom kis százalékának elküldése a zöld üzembe helyezésre
  • Az összes élő forgalom elküldése a zöld üzembe helyezésre
  • A most még nem használt 1- ös verziós kék üzembe helyezés törlése

Előfeltételek

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 Machine 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/*. 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.

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 nyissa meg az adattár könyvtárát cli/ :

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. Ez csökkenti a művelet befejezésének idejét.

Az oktatóanyagban szereplő parancsok a deploy-safe-rollout-online-endpoints.sh könyvtár fájljában cli 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 és az üzembe helyezés meghatározása

Az online végpontok online (valós idejű) következtetéshez használatosak. Az online végpontok olyan központi telepítéseket tartalmaznak, amelyek készen állnak arra, hogy adatokat fogadjanak az ügyfelektől, és valós időben küldjenek vissza válaszokat.

Végpont definiálása

Az alábbi táblázat felsorolja a végpontok definiálásakor megadható kulcsattribútumokat.

Attribútum Ismertetés
Név Szükséges. 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ódszer A végpont hitelesítési módszere. Válasszon a kulcsalapú hitelesítés key és az Azure Machine Tanulás tokenalapú hitelesítés aml_tokenkö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.
Leírás A végpont leírása.
Címkék A végpont címkéinek szótára.
Adatforgalom A forgalom központi telepítések közötti átirányításának szabályai. A forgalmat kulcs-érték párok szótáraként jelöli, ahol a kulcs az üzembe helyezés nevét, az érték pedig az üzembe helyezés felé történő forgalom százalékos arányát jelöli. A forgalmat csak akkor állíthatja be, ha a végponton lévő központi telepítéseket létrehozták. Az online végpont forgalmát az üzembe helyezések létrehozása után is frissítheti. A tükrözött forgalom használatáról további információt az élő forgalom kis százalékának lefoglalása az új üzembe helyezéshez című témakörben talál.
Tükrözött forgalom Az üzemelő példányra tükrözendő élő forgalom százalékos aránya. A tükrözött forgalom használatával kapcsolatos további információkért lásd : Az üzembe helyezés tesztelése tükrözött forgalommal.

A végpont létrehozásakor megadható attribútumok teljes listájának megtekintéséhez tekintse meg a PARANCSSOR (v2) online végpont YAML-sémáját vagy az SDK (v2) ManagedOnlineEndpoint osztályt.

Ü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. Az alábbi táblázat az üzembe helyezés definiálásakor megadható főbb attribútumokat ismerteti.

Attribútum Ismertetés
Név Szükséges. Az üzembe helyezés neve.
Végpont neve Szükséges. 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. A példában van egy scikit-learn modellünk, amely regressziót végez.
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 Python-kód, amely egy adott bemeneti kérésen hajtja végre a modellt. Ez az érték lehet a forráskód könyvtárában található pontozófájl relatív elérési útja.
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ó. 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 Szükséges. 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. A környezet lehet Egy Docker-rendszerkép Conda-függőségekkel, Egy Dockerfile vagy egy regisztrált környezet.
Példány típusa Szükséges. 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 Szükséges. 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 az online végpontok korlátait.

Az üzembe helyezés létrehozásakor megadható attribútumok teljes listájának megtekintéséhez tekintse meg a CLI (v2) felügyelt online üzembe helyezési YAML-sémáját vagy az SDK (v2) ManagedOnlineDeployment osztályát.

Online végpont létrehozása

Először állítsa be a végpont nevét, majd konfigurálja. Ebben a cikkben a végpontok/online/felügyelt/minta/endpoint.yml fájl használatával konfigurálja a végpontot. Az alábbi kódrészlet a fájl tartalmát 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 online végpontokhoz kapcsolódó 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.

Online végpont létrehozása:

  1. A végpont nevének beállítása:

    Unix esetén futtassa ezt a parancsot (cserélje le YOUR_ENDPOINT_NAME egyedi névre):

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    

    Fontos

    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 névvel my-endpoint.

  2. Hozza létre a végpontot a felhőben:

    Futtassa a következő kódot a végpont konfigurálásához a endpoint.yml fájl használatával:

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

A "kék" üzembe helyezés létrehozása

Ebben a cikkben a végpontok/online/felügyelt/minta/blue-deployment.yml fájl használatával konfigurálja az üzembe helyezés legfontosabb szempontjait. Az alábbi kódrészlet a fájl tartalmát jeleníti meg:

$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

A végponthoz elnevezett blue központi telepítés létrehozásához futtassa a következő parancsot a blue-deployment.yml fájl konfigurálásához

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

Fontos

A --all-traffic jelölő a az ml online-deployment create végpont forgalmának 100%-át lefoglalja az újonnan létrehozott kék üzembe helyezéshez.

A fájlban blue-deployment.yaml meg kell adnia a path beágyazott fájlt (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).

Meglévő üzembe helyezés megerősítése

A meglévő üzembe helyezés megerősítésének egyik módja, ha meghívja a végpontot, hogy egy adott bemeneti kéréshez pontszámot adjon a modellnek. Amikor a parancssori felületen vagy a Python SDK-on keresztül hívja meg a végpontot, megadhatja a bejövő forgalmat fogadó üzembe helyezés nevét.

Feljegyzés

A parancssori felülettel vagy a Python SDK-val ellentétben az Azure Machine Tanulás Studio megköveteli, hogy egy üzembe helyezést adjon meg egy végpont meghívásakor.

Végpont meghívása üzembehelyezési névvel

Ha a végpontot a forgalmat fogadó központi telepítés nevével hívja meg, az Azure Machine Tanulás a végpont forgalmát közvetlenül a megadott üzembe helyezéshez irányítja, és visszaadja a kimenetét. Használhatja a --deployment-name CLI v2deployment_name vagy az SDK v2 beállítását az üzembe helyezés megadásához.

Végpont meghívása üzembe helyezés megadása nélkül

Ha a végpontot a forgalmat fogadó üzembe helyezés megadása nélkül hívja meg, az Azure Machine Tanulás a végpont bejövő forgalmát a végponton lévő üzembe helyezés(ek) felé irányítja a forgalomvezérlési beállítások alapján.

A forgalomszabályozási beállítások a bejövő forgalom meghatározott százalékos arányát rendelik hozzá a végpont minden egyes üzemelő példányához. Ha például a forgalmi szabályok azt határozzák meg, hogy a végpont egy adott üzemelő példánya az idő 40%-ában fogadja a bejövő forgalmat, az Azure Machine Tanulás a végpont forgalmának 40%-át átirányítja az adott üzembe helyezésre.

A meglévő végpont és üzembe helyezés állapotát a következő futtatásával tekintheti meg:

az ml online-endpoint show --name $ENDPOINT_NAME 

az ml online-deployment show --name blue --endpoint $ENDPOINT_NAME 

Látnia kell a végpontot, amelyet $ENDPOINT_NAME egy úgynevezett üzembe helyezés határoz bluemeg.

A végpont tesztelése mintaadatokkal

A végpont a parancs használatával invoke hívható meg. Egy json-fájllal küldünk egy mintakérést.

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

Meglévő üzembe helyezés skálázása a nagyobb forgalom kezeléséhez

Az üzembe helyezésben leírt üzembe helyezésben és egy gépi tanulási modell online végponttal való pontozásában a instance_count telepítési yaml-fájl értékét 1 kell beállítania. A következő paranccsal skálázhatja fel a skálázást update :

az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2

Feljegyzés

Figyelje meg, hogy a fenti parancsban az üzembehelyezési konfiguráció felülbírálásához használjuk --set . Másik lehetőségként frissítheti a yaml-fájlt, és bemenetként továbbíthatja azt a update parancsnak a --file bemenet használatával.

Új modell üzembe helyezése, de még nem küldhető forgalom

Hozzon létre egy új, a következő nevű üzembe helyezést green:

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

Mivel nem osztottunk ki explicit módon forgalmat green, nincs hozzá hozzárendelt forgalom. Ezt a parancs használatával ellenőrizheti:

az ml online-endpoint show -n $ENDPOINT_NAME --query traffic

Az új üzembe helyezés tesztelése

Bár green a forgalom 0%-a van lefoglalva, közvetlenül a név megadásával --deployment hívhatja meg:

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

Ha REST-ügyfél használatával szeretné közvetlenül meghívni az üzembe helyezést anélkül, hogy áthaladna a forgalmi szabályokon, állítsa be a következő HTTP-fejlécet: azureml-model-deployment: <deployment-name>. Az alábbi kódrészlet curl közvetlenül meghívja az üzembe helyezést. A kódrészletnek Unix/WSL-környezetekben kell működnie:

# get the scoring uri
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
# use curl to invoke the endpoint
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --header "azureml-model-deployment: green" --data @endpoints/online/model-2/sample-request.json

Az üzemelő példány tesztelése tükrözött forgalommal

Az üzembe helyezés tesztelése green után tükrözheti (vagy másolhatja) az élő forgalom egy százalékát. A forgalomtükrözés (más néven árnyékolás) nem módosítja az ügyfeleknek visszaadott eredményeket – a kérések továbbra is 100%-ban áramlanak az blue üzembe helyezésre. A rendszer a forgalom tükrözött százalékát másolja és küldi el az green üzembe helyezéshez, hogy metrikákat és naplózásokat gyűjtsön anélkül, hogy az hatással lenne az ügyfelekre. A tükrözés akkor hasznos, ha az ügyfelek befolyásolása nélkül szeretne ellenőrizni egy új üzembe helyezést. A tükrözéssel például ellenőrizheti, hogy a késés elfogadható korlátokon belül van-e, vagy ellenőrizheti, hogy nincsenek-e HTTP-hibák. Az új üzembe helyezés forgalomtükrözéssel/árnyékolással történő tesztelését árnyéktesztelésnek is nevezik. A tükrözött forgalmat fogadó üzemelő példányt (ebben az esetben az green üzembe helyezést) árnyéktelepítésnek is nevezhetjük.

A tükrözés a következő korlátozásokkal rendelkezik:

  • A tükrözés a PARANCSSOR (v2) (2.4.0-s vagy újabb verzió) és a Python SDK (v2) (1.0.0-s vagy újabb verzió) esetében támogatott. Ha a parancssori felület/SDK egy régebbi verzióját használja egy végpont frissítéséhez, a tükrözött forgalom beállítása elveszik.
  • A tükrözés jelenleg nem támogatott a Kubernetes online végpontjai esetében.
  • A forgalom csak egy végponton belüli üzembe helyezésre tükrözhető.
  • A tükrözhető forgalom maximális aránya 50%. Ez a korlát csökkenti a végpont sávszélesség-kvótájára gyakorolt hatást (alapértelmezett 5 MBPS) – a végpont sávszélessége szabályozva lesz, ha túllépi a lefoglalt kvótát. A sávszélesség-szabályozás monitorozásáról további információt a felügyelt online végpontok monitorozása című témakörben talál.

Figyelje meg a következő viselkedéseket is:

  • Az üzembe helyezés konfigurálható úgy, hogy csak élő vagy tükrözött forgalmat fogadjon, nem mindkettőt.
  • Végpont meghívásakor megadhatja bármelyik központi telepítés nevét – akár árnyéktelepítést is –, hogy visszaadja az előrejelzést.
  • Amikor meghív egy, a bejövő forgalmat fogadó üzembe helyezés nevével rendelkező végpontot, az Azure Machine Tanulás nem fogja tükrözni a forgalmat az árnyéktelepítésre. Az Azure Machine Tanulás tükrözi az árnyéktelepítésre érkező forgalmat a végpontnak küldött forgalomból, ha nem ad meg üzembe helyezést.

Most állítsuk be a zöld üzembe helyezést úgy, hogy a tükrözött forgalom 10%-át kapja meg. Az ügyfelek továbbra is csak a kék üzembe helyezéstől kapnak előrejelzéseket.

Diagram showing 10% traffic mirrored to one deployment.

Az alábbi parancs az üzembe helyezés felé green menő forgalom 10%-át tükrözi:

az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=10"

A tükrözött forgalmat úgy tesztelheti, hogy többször invoktálja a végpontot anélkül, hogy üzembe helyezést kellene megadnia a bejövő forgalom fogadásához:

for i in {1..20} ; do
    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
done

Az üzembe helyezés naplóinak megtekintésével ellenőrizheti, hogy a forgalom adott százaléka az üzembe helyezésre green lett-e küldve:

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

A tesztelés után nullára állíthatja a tükrözési forgalmat a tükrözés letiltásához:

az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=0"

Az élő forgalom kis százalékának lefoglalása az új üzembe helyezéshez

Miután tesztelte az üzembe helyezést green , foglaljon le egy kis hányadot a forgalomból:

az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=90 green=10"

Tipp.

A teljes forgalom százalékos értékének 0%-ra (a forgalom letiltásához) vagy 100%-ra (a forgalom engedélyezéséhez) kell lennie.

Most az green üzemelő példány az összes élő forgalom 10%-át kapja meg. Az ügyfelek előrejelzést kapnak mind az üzemelő példányoktól, mind az bluegreen üzemelő példányoktól.

Diagram showing traffic split between deployments.

Az összes forgalom elküldése az új üzembe helyezésre

Miután teljes mértékben elégedett az green üzembe helyezéssel, váltson rá az összes forgalomra.

az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=0 green=100"

A régi üzembe helyezés eltávolítása

Az alábbi lépésekkel törölhet egy egyéni üzembe helyezést egy felügyelt online végpontról. Az egyéni üzembe helyezés törlése hatással van a felügyelt online végpont többi központi telepítésére:

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

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

Ha nem használja a végpontot és az üzembe helyezést, törölje őket. A végpont törlésével az összes mögöttes üzembe helyezést is törli.

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