Megosztás a következőn keresztül:


MLflow-modellek fokozatos bevezetése online végpontokra

Ebből a cikkből megtudhatja, hogyan frissítheti és helyezheti üzembe az MLflow-modelleket az online végpontokon szolgáltatáskimaradás nélkül. A kék-zöld üzembe helyezést, más néven biztonságos bevezetési stratégiát használva új webszolgáltatás-verziót vezet be éles környezetben. 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é.

A példa ismertetése

Az online végpontok a végpontok és az üzembe helyezés fogalmával rendelkeznek. A végpont azt az API-t jelöli, amelyet az ügyfelek a modell használatára használnak, míg az üzembe helyezés az API konkrét implementációját jelzi. Ezzel a különbségtételsel a felhasználók leválaszthatják az API-t a megvalósításról, és anélkül módosíthatják az alapul szolgáló implementációt, hogy az hatással van a fogyasztóra. Ez a példa ezeket a fogalmakat fogja használni a végpontokon üzembe helyezett modell frissítéséhez szolgáltatáskimaradás bevezetése nélkül.

Az üzembe helyezhető modell az UCI szívbetegségek adatkészletén alapul. Az adatbázis 76 attribútumot tartalmaz, de 14 részhalmazt használunk. A modell megpróbálja megjósolni a szívbetegség jelenlétét egy betegben. Az egész szám értéke 0 (nincs jelenlét) és 1 (jelenlét). A betanítás egy XGBBoost osztályozóval történt, és az összes szükséges előfeldolgozás folyamatként scikit-learn lett csomagolva, így ez a modell egy teljes körű folyamat, amely a nyers adatoktól az előrejelzésekig tart.

A cikkben szereplő információk az azureml-examples adattárban található kódmintákon alapulnak . Ha helyileg szeretné futtatni a parancsokat fájlok másolása/beillesztése nélkül, klónozza az adattárat, majd módosítsa a könyvtárakat a következőre sdk/using-mlflow/deploy: .

Követés a Jupyter Notebooksban

Ezt a mintát a következő jegyzetfüzetekben követheti nyomon. A klónozott adattárban nyissa meg a jegyzetfüzetet: mlflow_sdk_online_endpoints_progresive.ipynb.

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:

  • Azure-előfizetés. Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot. Próbálja ki az Azure Machine Tanulás ingyenes vagy fizetős verzióját.
  • 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 jelen 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 a Microsoft.Machine Tanulás Services/workspaces/onlineEndpoints/* használatát. További információ: Azure Machine-Tanulás-munkaterülethez való hozzáférés kezelése.

Emellett a következőkre lesz szüksége:

  • Telepítse az Azure CLI-t és az ml-bővítményt az Azure CLI-re. További információ: A parancssori felület (v2) telepítése, beállítása és használata.

Csatlakozás a munkaterülethez

Először is csatlakozzunk az Azure Machine Tanulás munkaterülethez, ahol dolgozni fogunk.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

A modell regisztrálása a beállításjegyzékben

Győződjön meg arról, hogy a modell regisztrálva van az Azure Machine Tanulás beállításjegyzékében. A nem regisztrált modellek üzembe helyezése nem támogatott az Azure Machine Tanulás. Új modellt az MLflow SDK használatával regisztrálhat:

MODEL_NAME='heart-classifier'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"

Online végpont létrehozása

Az online végpontok az online (valós idejű) következtetéshez használt végpontok. Az online végpontok olyan üzemelő példányokat tartalmaznak, amelyek készen állnak adatok fogadására az ügyfelektől, és valós időben tudnak válaszolni.

Ezt a funkciót úgy fogjuk kihasználni, hogy ugyanazon modell több verzióját helyezzük üzembe ugyanabban a végpontban. Az új üzembe helyezés azonban a forgalom 0%-át kapja meg a könyörgéskor. Miután meggyőződtünk arról, hogy az új modell megfelelően működik, fokozatosan át fogjuk helyezni a forgalmat az egyik üzembe helyezésről a másikra.

  1. A végpontoknak egy névre van szükségük, amelynek egyedinek kell lennie ugyanabban a régióban. Hozzunk létre egy nem létezőt:

    ENDPOINT_SUFIX=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-5} | head -n 1)
    ENDPOINT_NAME="heart-classifier-$ENDPOINT_SUFIX"
    
  2. A végpont konfigurálása

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: heart-classifier-edp
    auth_mode: key
    
  3. Hozza létre a végpontot:

    az ml online-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
    
  4. A végpont hitelesítési titkos kódjának lekérése.

    ENDPOINT_SECRET_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME | jq -r ".accessToken")
    

Kék üzembe helyezés létrehozása

A végpont egyelőre üres. Nincsenek központi telepítések rajta. Hozzuk létre az elsőt ugyanazzal a modellel, amelyen korábban is dolgoztunk. Ezt az üzemelő példányt "alapértelmezettnek" nevezzük, amely a "kék üzembe helyezést" jelöli.

  1. A telepítés konfigurálása

    blue-deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: default
    endpoint_name: heart-classifier-edp
    model: azureml:heart-classifier@latest
    instance_type: Standard_DS2_v2
    instance_count: 1
    
  2. Az üzembe helyezés létrehozása

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

    Ha a végpont nem rendelkezik kimenő kapcsolattal, használja a modell csomagolását (előzetes verzió) a jelzővel --with-package:

    az ml online-deployment create --with-package --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-traffic
    

    Tipp.

    A jelölőt --all-traffic a létrehozási parancsban állítjuk be, amely az összes forgalmat hozzárendeli az új üzembe helyezéshez.

  3. Az összes forgalom hozzárendelése az üzembe helyezéshez

    A végpontnak egy üzemelő példánya van, de egyik forgalom sincs hozzá rendelve. Rendeljük hozzá.

    Ez a lépés nem szükséges az Azure CLI-ben, mivel a létrehozás során használtuk.--all-traffic

  4. Frissítse a végpont konfigurációját:

    Ez a lépés nem szükséges az Azure CLI-ben, mivel a létrehozás során használtuk.--all-traffic

  5. Mintabemenet létrehozása az üzembe helyezés teszteléséhez

    sample.yml

    {
        "input_data": {
            "columns": [
                "age",
                "sex",
                "cp",
                "trestbps",
                "chol",
                "fbs",
                "restecg",
                "thalach",
                "exang",
                "oldpeak",
                "slope",
                "ca",
                "thal"
            ],
            "data": [
                [ 48, 0, 3, 130, 275, 0, 0, 139, 0, 0.2, 1, 0, "normal" ]
            ]
        }
    }
    
  6. Az üzemelő példány tesztelése

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file sample.json
    

Zöld üzembe helyezés létrehozása a végpont alatt

Tegyük fel, hogy a fejlesztőcsapat által létrehozott modell új verziója készen áll az éles üzemre. Először megpróbálhatjuk irányítani ezt a modellt, és ha biztosak vagyunk benne, frissíthetjük a végpontot, hogy a forgalmat hozzá irányíthassuk.

  1. Új modellverzió regisztrálása

    MODEL_NAME='heart-classifier'
    az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
    

    Szerezzük be az új modell verziószámát:

    VERSION=$(az ml model show -n heart-classifier --label latest | jq -r ".version")
    
  2. Új üzembe helyezés konfigurálása

    green-deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: xgboost-model
    endpoint_name: heart-classifier-edp
    model: azureml:heart-classifier@latest
    instance_type: Standard_DS2_v2
    instance_count: 1
    

    Az üzembe helyezést a következőképpen nevezzük el:

    GREEN_DEPLOYMENT_NAME="xgboost-model-$VERSION"
    
  3. Az új üzembe helyezés létrehozása

    az ml online-deployment create -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
    

    Ha a végpont nem rendelkezik kimenő kapcsolattal, használja a modell csomagolását (előzetes verzió) a jelzővel --with-package:

    az ml online-deployment create --with-package -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
    
  4. Az üzembe helyezés tesztelése a forgalom módosítása nélkül

    az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name $GREEN_DEPLOYMENT_NAME --request-file sample.json
    

    Tipp.

    Figyelje meg, hogyan jelezzük most a meghívni kívánt üzembe helyezés nevét.

A forgalom fokozatos frissítése

Az új üzembe helyezéssel kapcsolatban biztosak vagyunk abban, hogy frissíthetjük a forgalmat, hogy egy részét az új üzembe helyezéshez irányíthassuk. A forgalom a végpont szintjén van konfigurálva:

  1. A forgalom konfigurálása:

    Ez a lépés nem kötelező az Azure CLI-ben

  2. A végpont frissítése

    az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=90 $GREEN_DEPLOYMENT_NAME=10"
    
  3. Ha úgy dönt, hogy a teljes forgalmat az új üzembe helyezésre váltja, frissítse az összes forgalmat:

    Ez a lépés nem kötelező az Azure CLI-ben

  4. A végpont frissítése

    az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=0 $GREEN_DEPLOYMENT_NAME=100"
    
  5. Mivel a régi üzembe helyezés nem fogad forgalmat, biztonságosan törölheti azt:

    az ml online-deployment delete --endpoint-name $ENDPOINT_NAME --name default
    

    Tipp.

    Figyelje meg, hogy ezen a ponton a korábbi "kék üzembe helyezést" törölték, és az új "zöld üzembe helyezés" vette át a "kék üzembe helyezés" helyét.

Erőforrások törlése

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

Fontos

Figyelje meg, hogy a végpont törlése az alatta lévő összes üzembe helyezést is törli.

Következő lépések