Modell üzembe helyezése online végpontként

A KÖVETKEZŐKRE VONATKOZIK: Python SDK azure-ai-ml v2 (aktuális)

Megtudhatja, hogyan helyezhet üzembe egy modellt egy online végponton az Azure Machine Tanulás Python SDK 2-s verzióját használva.

Ebben az oktatóanyagban egy olyan modellt helyez üzembe és használ, amely előrejelzi annak valószínűségét, hogy egy ügyfél alapértelmezés szerint hitelkártyás fizetést használ.

A lépések a következők:

  • Modell regisztrálása
  • Végpont és első üzembe helyezés létrehozása
  • Próbaüzem üzembe helyezése
  • Tesztadatok manuális küldése az üzembe helyezéshez
  • Az üzembe helyezés részleteinek lekérése
  • Második üzembe helyezés létrehozása
  • A második üzembe helyezés manuális méretezése
  • Az éles forgalom mindkét üzemelő példány közötti lefoglalásának frissítése
  • A második üzembe helyezés részleteinek lekérése
  • Az új üzembe helyezés bevezetése és az első törlése

Ez a videó bemutatja, hogyan kezdheti el az Azure Machine Tanulás Studióban, hogy követni tudja az oktatóanyag lépéseit. A videó bemutatja, hogyan hozhat létre jegyzetfüzetet, hozhat létre számítási példányt, és klónozhatja a jegyzetfüzetet. A lépéseket a következő szakaszokban is ismertetjük.

Előfeltételek

  1. Az Azure Machine Tanulás használatához először munkaterületre lesz szüksége. Ha nem rendelkezik ilyen erőforrással, végezze el a munkaterület létrehozásához szükséges erőforrások létrehozását, és tudjon meg többet a használatáról.

  2. Jelentkezzen be a stúdióba , és válassza ki a munkaterületet, ha még nincs megnyitva.

  3. Jegyzetfüzet megnyitása vagy létrehozása a munkaterületen:

    • Hozzon létre egy új jegyzetfüzetet, ha kódot szeretne másolni/beilleszteni a cellákba.
    • Vagy nyisson meg oktatóanyagokat/get-started-notebooks/deploy-model.ipynb-t a stúdió Minták szakaszából. Ezután válassza a Klónozás lehetőséget a jegyzetfüzet fájlokhoz való hozzáadásához. (Lásd a minták helyét.)
  4. Tekintse meg a virtuálisgép-kvótát, és győződjön meg arról, hogy elegendő kvóta áll rendelkezésre az online üzembe helyezés létrehozásához. Ebben az oktatóanyagban legalább 8 magra STANDARD_DS3_v2 és 12 magra STANDARD_F4s_v2van szüksége. A virtuális gép kvótahasználatának megtekintéséhez és a kvótanövelések kéréséhez tekintse meg az erőforráskvóták kezelését.

A kernel beállítása

  1. A megnyitott jegyzetfüzet fölötti felső sávon hozzon létre egy számítási példányt, ha még nem rendelkezik ilyenrel.

    Screenshot shows how to create a compute instance.

  2. Ha a számítási példány le van állítva, válassza a Számítás indítása lehetőséget, és várja meg, amíg fut.

    Screenshot shows how to start compute if it is stopped.

  3. Győződjön meg arról, hogy a jobb felső sarokban található kernel az Python 3.10 - SDK v2. Ha nem, a legördülő menüben válassza ki ezt a kernelt.

    Screenshot shows how to set the kernel.

  4. Ha megjelenik egy szalagcím, amely azt jelzi, hogy hitelesíteni kell, válassza a Hitelesítés lehetőséget.

Fontos

Az oktatóanyag többi része az oktatóanyag-jegyzetfüzet celláit tartalmazza. Másolja vagy illessze be őket az új jegyzetfüzetbe, vagy váltson most a jegyzetfüzetre, ha klónozta.

Feljegyzés

  • A kiszolgáló nélküli Spark Compute alapértelmezés szerint nem Python 3.10 - SDK v2 lett telepítve. Javasoljuk, hogy a felhasználók hozzon létre egy számítási példányt, és válassza ki az oktatóanyag folytatása előtt.

Leíró létrehozása munkaterületre

Mielőtt belemerül a kódba, szüksége van egy módszerre a munkaterületre való hivatkozáshoz. Hozzon létre ml_client egy leírót a munkaterületen, és használja az ml_client erőforrások és feladatok kezelését.

A következő cellába írja be az előfizetés azonosítóját, az erőforráscsoport nevét és a munkaterület nevét. Az alábbi értékek megkeresése:

  1. A jobb felső Azure Machine Tanulás studio eszköztáron válassza ki a munkaterület nevét.
  2. Másolja a munkaterület, az erőforráscsoport és az előfizetés azonosítójának értékét a kódba.
  3. Ki kell másolnia egy értéket, be kell zárnia a területet, és be kell illesztenie, majd vissza kell térnie a következőhöz.
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# authenticate
credential = DefaultAzureCredential()

# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id="<SUBSCRIPTION_ID>",
    resource_group_name="<RESOURCE_GROUP>",
    workspace_name="<AML_WORKSPACE_NAME>",
)

Feljegyzés

A létrehozás MLClient nem fog csatlakozni a munkaterülethez. Az ügyfél inicializálása lusta, és az első alkalommal várakozik, amikor hívást kell kezdeményeznie (ez a következő kódcellában történik).

Regisztrálja a modellt

Ha már elvégezte a korábbi betanítási oktatóanyagot, a modell betanítását, regisztrált egy MLflow-modellt a betanítási szkript részeként, és továbbléphet a következő szakaszra.

Ha nem végezte el a betanítási oktatóanyagot, regisztrálnia kell a modellt. Ajánlott a modell regisztrálása az üzembe helyezés előtt.

Az alábbi kód megadja a path beágyazott fájlokat (ahonnan fájlokat tölthet fel). Ha klónozta az oktatóanyagok mappát, futtassa a következő kódot is. Ellenkező esetben töltse le a modell fájljait és metaadatait a fájlok üzembe helyezéséhez és kibontásához. Frissítse az elérési utat a nem tömörített fájlok helyéhez a helyi számítógépen.

Az SDK automatikusan feltölti a fájlokat, és regisztrálja a modellt.

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 Machine Tanulás az SDK használatával.

# Import the necessary libraries
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes

# Provide the model details, including the
# path to the model files, if you've stored them locally.
mlflow_model = Model(
    path="./deploy/credit_defaults_model/",
    type=AssetTypes.MLFLOW_MODEL,
    name="credit_defaults_model",
    description="MLflow Model created from local files.",
)

# Register the model
ml_client.models.create_or_update(mlflow_model)

Ellenőrizze, hogy a modell regisztrálva van-e

A regisztrált modell legújabb verziójának azonosításához az Azure Machine Tanulás Studióbanellenőrizheti a Modellek lapot.

Screenshot shows the registered model in studio.

Másik lehetőségként az alábbi kód lekéri a használni kívánt legújabb verziószámot.

registered_model_name = "credit_defaults_model"

# Let's pick the latest version of the model
latest_model_version = max(
    [int(m.version) for m in ml_client.models.list(name=registered_model_name)]
)

print(latest_model_version)

Most, hogy már rendelkezik regisztrált modellel, létrehozhat egy végpontot és egy üzembe helyezést. A következő szakaszban röviden bemutatunk néhány fontos részletet ezekről a témakörökről.

Végpontok és üzemelő példányok

Miután betanított egy gépi tanulási modellt, üzembe kell helyeznie, hogy mások is használhassák a következtetéshez. Ebből a célból az Azure Machine Tanulás lehetővé teszi végpontok létrehozását és üzembe helyezésük hozzáadását.

A végpont ebben a kontextusban egy HTTPS-elérési út, amely felületet biztosít az ügyfeleknek, hogy kéréseket (bemeneti adatokat) küldjenek egy betanított modellnek, és megkapják a modellből származó következtetési (pontozási) eredményeket. A végpontok a következőket biztosítják:

  • Hitelesítés "kulcs vagy jogkivonat" alapú hitelesítéssel
  • TLS(SSL) leállítása
  • Stabil pontozási URI (endpoint-name.region.inference.ml.azure.com)

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

Egyetlen végpont több üzembe helyezést is tartalmazhat. A végpontok és az üzemelő példányok független Azure Resource Manager-erőforrások, amelyek megjelennek az Azure Portalon.

Az Azure Machine Tanulás lehetővé teszi online végpontok implementálását az ügyféladatok valós idejű következtetéséhez, valamint kötegelt végpontokat a nagy mennyiségű adatra való következtetéshez egy adott időszakban.

Ebben az oktatóanyagban végigvezeti a felügyelt online végpont implementálásának lépésein. A felügyelt online végpontok skálázható, teljes körűen felügyelt módon működnek együtt nagy teljesítményű CPU- és GPU-gépeket az Azure-ban, így nem kell a mögöttes üzembehelyezési infrastruktúra beállításával és felügyeletével foglalkoznia.

Online végpont létrehozása

Most, hogy rendelkezik egy regisztrált modellel, ideje létrehoznia az online végpontot. A végpont nevének egyedinek kell lennie a teljes Azure-régióban. Ebben az oktatóanyagban egy univerzálisan egyedi azonosító UUIDhasználatával hoz létre egyedi nevet. A végpontok elnevezési szabályaival kapcsolatos további információkért tekintse meg a végpontkorlátokat.

import uuid

# Create a unique name for the endpoint
online_endpoint_name = "credit-endpoint-" + str(uuid.uuid4())[:8]

Először határozza meg a végpontot az ManagedOnlineEndpoint osztály használatával.

Tipp.

  • auth_mode : Kulcsalapú hitelesítéshez használható key . Azure Machine-Tanulás jogkivonatalapú hitelesítéshez használhatóaml_token. Az A key nem jár le, de aml_token lejár. A hitelesítésről további információt az ügyfelek hitelesítése az online végpontok esetében című témakörben talál.

  • Tetszés szerint leírást és címkéket is hozzáadhat a végponthoz.

from azure.ai.ml.entities import ManagedOnlineEndpoint

# define an online endpoint
endpoint = ManagedOnlineEndpoint(
    name=online_endpoint_name,
    description="this is an online endpoint",
    auth_mode="key",
    tags={
        "training_dataset": "credit_defaults",
    },
)

MLClient A korábban létrehozott parancs használatával hozza létre a végpontot a munkaterületen. Ez a parancs elindítja a végpont létrehozását, és egy megerősítést kérő választ ad vissza, amíg a végpont létrehozása folytatódik.

Feljegyzés

A végpontlétrehozás várhatóan körülbelül 2 percet vesz igénybe.

# create the online endpoint
# expect the endpoint to take approximately 2 minutes.

endpoint = ml_client.online_endpoints.begin_create_or_update(endpoint).result()

A végpont létrehozása után az alábbiak szerint kérdezheti le:

endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)

print(
    f'Endpoint "{endpoint.name}" with provisioning state "{endpoint.provisioning_state}" is retrieved'
)

Az online üzemelő példányok ismertetése

Az üzembe helyezés fő szempontjai a következők:

  • name - Az üzembe helyezés neve.
  • endpoint_name – Az üzembe helyezést tartalmazó végpont neve.
  • model - 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.
  • environment - Az üzembe helyezéshez (vagy a modell futtatásához) használandó 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 vagy Docker-fájlokkal.
  • code_configuration - a forráskód és a pontozási szkript konfigurációja.
    • path– A modell pontozásához a forráskód könyvtárának elérési útja.
    • scoring_script – A forráskód könyvtárában található pontozófájl relatív elérési útja. Ez a szkript egy adott bemeneti kérésen hajtja végre a modellt. Egy pontozási szkriptre példa: A pontozási szkript ismertetése az "ML-modell üzembe helyezése online végponttal" című cikkben.
  • instance_type – 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.
  • instance_count – Az üzembe helyezéshez használandó példányok száma.

Üzembe helyezés MLflow-modell használatával

Az Azure Machine Tanulás támogatja az MLflow használatával létrehozott és naplózott modellek kód nélküli üzembe helyezését. Ez azt jelenti, hogy a modell üzembe helyezése során nem kell pontozószkriptet vagy környezetet megadnia, mivel az MLflow-modellek betanításakor a rendszer automatikusan létrehozza a pontozási szkriptet és a környezetet. Ha azonban egyéni modellt használ, az üzembe helyezés során meg kell adnia a környezetet és a pontozási szkriptet.

Fontos

Ha általában pontozószkriptekkel és egyéni környezetekkel telepít modelleket, és ugyanazt a funkciót szeretné elérni az MLflow-modellek használatával, javasoljuk, hogy olvassa el az MLflow-modellek üzembe helyezésére vonatkozó irányelveket.

A modell üzembe helyezése a végponton

Először hozzon létre egyetlen üzembe helyezést, amely a bejövő forgalom 100%-át kezeli. Válasszon egy tetszőleges színnevet (kék) az üzembe helyezéshez. A végpont üzembe helyezésének létrehozásához használja az osztályt ManagedOnlineDeployment .

Feljegyzés

Nincs szükség környezet vagy pontozási szkript megadására, mivel az üzembe helyezendő modell egy MLflow-modell.

from azure.ai.ml.entities import ManagedOnlineDeployment

# Choose the latest version of the registered model for deployment
model = ml_client.models.get(name=registered_model_name, version=latest_model_version)

# define an online deployment
# if you run into an out of quota error, change the instance_type to a comparable VM that is available.\
# Learn more on https://azure.microsoft.com/en-us/pricing/details/machine-learning/.
blue_deployment = ManagedOnlineDeployment(
    name="blue",
    endpoint_name=online_endpoint_name,
    model=model,
    instance_type="Standard_DS3_v2",
    instance_count=1,
)

MLClient A korábban létrehozottak használatával most hozza létre az üzembe helyezést a munkaterületen. Ez a parancs elindítja az üzembe helyezés létrehozását, és egy megerősítést kérő választ ad vissza, amíg a telepítés létrehozása folytatódik.

# create the online deployment
blue_deployment = ml_client.online_deployments.begin_create_or_update(
    blue_deployment
).result()

# blue deployment takes 100% traffic
# expect the deployment to take approximately 8 to 10 minutes.
endpoint.traffic = {"blue": 100}
ml_client.online_endpoints.begin_create_or_update(endpoint).result()

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

A végpont állapotának ellenőrzéséhez ellenőrizze, hogy a modell hiba nélkül lett-e üzembe helyezve:

# return an object that contains metadata for the endpoint
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)

# print a selection of the endpoint's metadata
print(
    f"Name: {endpoint.name}\nStatus: {endpoint.provisioning_state}\nDescription: {endpoint.description}"
)
# existing traffic details
print(endpoint.traffic)

# Get the scoring URI
print(endpoint.scoring_uri)

A végpont tesztelése mintaadatokkal

Most, hogy a modell üzembe lett helyezve a végponton, következtetést futtathat vele. Először hozzon létre egy mintakérelemfájlt, amely a pontozási szkriptben található futtatási módszerben várt tervet követi.

import os

# Create a directory to store the sample request file.
deploy_dir = "./deploy"
os.makedirs(deploy_dir, exist_ok=True)

Most hozza létre a fájlt az üzembe helyezési könyvtárban. Az alábbi kódcella az IPython magic használatával írja be a fájlt az imént létrehozott könyvtárba.

%%writefile {deploy_dir}/sample-request.json
{
  "input_data": {
    "columns": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],
    "index": [0, 1],
    "data": [
            [20000,2,2,1,24,2,2,-1,-1,-2,-2,3913,3102,689,0,0,0,0,689,0,0,0,0],
            [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 9, 8]
            ]
                }
}

MLClient A korábban létrehozottak használatával lekérhet egy leírót a végponthoz. A végpontot a invoke következő paraméterekkel rendelkező paranccsal hívhatja meg:

  • endpoint_name - A végpont neve
  • request_file - Kérelemadatokkal rendelkező fájl
  • deployment_name – A végponton tesztelni kívánt adott üzembe helyezés neve

Tesztelje a kék üzembe helyezést a mintaadatokkal.

# test the blue deployment with the sample data
ml_client.online_endpoints.invoke(
    endpoint_name=online_endpoint_name,
    deployment_name="blue",
    request_file="./deploy/sample-request.json",
)

Az üzembe helyezés naplóinak lekérése

Ellenőrizze a naplókat, hogy sikerült-e meghívni a végpontot/üzembe helyezést. Ha hibákba ütközik, tekintse meg az online végpontok üzembe helyezésének hibaelhárítását.

logs = ml_client.online_deployments.get_logs(
    name="blue", endpoint_name=online_endpoint_name, lines=50
)
print(logs)

Második üzembe helyezés létrehozása

A modell üzembe helyezése második, úgynevezett greenüzembe helyezésként. A gyakorlatban több üzembe helyezést is létrehozhat, és összehasonlíthatja azok teljesítményét. Ezek az üzemelő példányok használhatják ugyanannak a modellnek egy másik verzióját, egy másik modellt vagy egy hatékonyabb számítási példányt.

Ebben a példában ugyanazt a modellverziót helyezi üzembe egy hatékonyabb számítási példány használatával, amely esetleg javíthatja a teljesítményt.

# pick the model to deploy. Here you use the latest version of the registered model
model = ml_client.models.get(name=registered_model_name, version=latest_model_version)

# define an online deployment using a more powerful instance type
# if you run into an out of quota error, change the instance_type to a comparable VM that is available.\
# Learn more on https://azure.microsoft.com/en-us/pricing/details/machine-learning/.
green_deployment = ManagedOnlineDeployment(
    name="green",
    endpoint_name=online_endpoint_name,
    model=model,
    instance_type="Standard_F4s_v2",
    instance_count=1,
)

# create the online deployment
# expect the deployment to take approximately 8 to 10 minutes
green_deployment = ml_client.online_deployments.begin_create_or_update(
    green_deployment
).result()

Az üzembe helyezés méretezése a nagyobb forgalom kezeléséhez

MLClient A korábban létrehozottak használatával lekérheti az green üzembe helyezéshez szükséges leírót. Ezután skálázhatja a skálázást a instance_countskálázás növelésével vagy csökkentésével.

Az alábbi kódban manuálisan növelheti a virtuálisgép-példányt. Az online végpontok automatikus méretezése azonban lehetséges. 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 skálázását.

# update definition of the deployment
green_deployment.instance_count = 2

# update the deployment
# expect the deployment to take approximately 8 to 10 minutes
ml_client.online_deployments.begin_create_or_update(green_deployment).result()

Forgalomfoglalás frissítése az üzemelő példányokhoz

Az éles forgalom felosztható az üzemelő példányok között. Érdemes lehet először mintaadatokkal tesztelni az green üzembe helyezést, ahogyan az blue üzembe helyezéshez is tette. Miután tesztelte a zöld üzembe helyezést, a forgalom kis százalékát lefoglalhatja.

endpoint.traffic = {"blue": 80, "green": 20}
ml_client.online_endpoints.begin_create_or_update(endpoint).result()

A forgalomlefoglalás tesztelése a végpont többszöri meghívásával:

# You can invoke the endpoint several times
for i in range(30):
    ml_client.online_endpoints.invoke(
        endpoint_name=online_endpoint_name,
        request_file="./deploy/sample-request.json",
    )

Az üzembe helyezés naplóinak megjelenítése annak green ellenőrzéséhez, hogy voltak-e bejövő kérések, és a modell pontszáma sikeresen megtörtént.

logs = ml_client.online_deployments.get_logs(
    name="green", endpoint_name=online_endpoint_name, lines=50
)
print(logs)

Metrikák megtekintése az Azure Monitor használatával

Az online végpontok és üzemelő példányok különböző metrikáit (kérelemszámok, kérelmek késése, hálózati bájtok, CPU/GPU/Lemez/Memória kihasználtsága stb.) a végpont Részletek lapján található hivatkozások követésével tekintheti meg. Ezen hivatkozások bármelyikét követve a végpont vagy az üzembe helyezés pontos metrikáinak lapjára léphet az Azure Portalon.

Screenshot showing links on the endpoint details page to view online endpoint and deployment metrics.

Ha megnyitja az online végpont metrikáit, beállíthatja a lapot, hogy az olyan metrikákat láthassa, mint például az átlagos kérelemkéséssés az alábbi ábrán látható módon.

Screenshot showing online endpoint metrics in the Azure portal.

Az online végpontmetrikák megtekintéséről további információt az online végpontok monitorozása című témakörben talál.

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.

endpoint.traffic = {"blue": 0, "green": 100}
ml_client.begin_create_or_update(endpoint).result()

A régi üzembe helyezés törlése

Távolítsa el a régi (kék) üzembe helyezést:

ml_client.online_deployments.begin_delete(
    name="blue", endpoint_name=online_endpoint_name
).result()

Az erőforrások eltávolítása

Ha az oktatóanyag elvégzése után nem használja a végpontot és az üzembe helyezést, törölje őket.

Feljegyzés

A teljes törlés várhatóan körülbelül 20 percet vesz igénybe.

ml_client.online_endpoints.begin_delete(name=online_endpoint_name).result()

Minden törlése

Ezekkel a lépésekkel törölheti az Azure Machine-Tanulás munkaterületet és az összes számítási erőforrást.

Fontos

A létrehozott erőforrások előfeltételként használhatók más Azure Machine-Tanulás oktatóanyagokhoz és útmutatókhoz.

Ha nem tervezi használni a létrehozott erőforrások egyikét sem, törölje őket, hogy ne járjon költséggel:

  1. Az Azure Portalon válassza az Erőforráscsoportok lehetőséget a bal szélen.

  2. A listából válassza ki a létrehozott erőforráscsoportot.

  3. Válassza az Erőforráscsoport törlése elemet.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. Adja meg az erőforráscsoport nevét. Ezután válassza a Törlés elemet.

Következő lépés