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: .
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 Learning ingyenes vagy fizetős verzióját.
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 rendelnie az Azure Machine Learning-munkaterület tulajdonosi vagy közreműködői szerepkörét, vagy egy egyéni szerepkört, amely lehetővé teszi a Microsoft.MachineLearningServices/workspaces/onlineEndpoints/* használatát. További információ: Azure Machine Learning-munkaterülethez való hozzáférés kezelése.
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.
Az Azure Machine Learning SDK telepítése Pythonhoz
pip install azure-ai-ml azure-identity
Telepítse a Mlflow SDK-csomagot mlflow és az MLflow-hoz készült Azure Machine Learning beépülő modult azureml-mlflow.
pip install mlflow azureml-mlflow
Ha nem az Azure Machine Learning compute-ben fut, konfigurálja az MLflow-követési URI-t vagy az MLflow beállításjegyzékének URI-ját, hogy a munkaterületre mutasson, amelyen éppen dolgozik. Megtudhatja, hogyan konfigurálhatja az MLflow-t az Azure Machine Learninghez.
Csatlakozás a munkaterülethez
Először csatlakozzunk az Azure Machine Learning-munkaterülethez, ahol dolgozni fogunk.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
A munkaterület az Azure Machine Learning legfelső szintű erőforrása, amely egy központi helyet biztosít az Azure Machine Learning használata során létrehozott összetevőkkel való munkához. Ebben a szakaszban ahhoz a munkaterülethez csatlakozunk, amelyben üzembe helyezési feladatokat fog végrehajtani.
Importálja a szükséges kódtárakat:
from azure.ai.ml import MLClient, Input
from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment, Model
from azure.ai.ml.constants import AssetTypes
from azure.identity import DefaultAzureCredential
Konfigurálja a munkaterület részleteit, és szerezze be a munkaterülethez a leírót:
Győződjön meg arról, hogy a modell regisztrálva van az Azure Machine Learning regisztrációs adatbázisában. A nem regisztrált modellek üzembe helyezése nem támogatott az Azure Machine Learningben. Új modellt az MLflow SDK használatával regisztrálhat:
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.
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:
import random
import string
# Creating a unique endpoint name by including a random suffix
allowed_chars = string.ascii_lowercase + string.digits
endpoint_suffix = "".join(random.choice(allowed_chars) for x in range(5))
endpoint_name = "heart-classifier-" + endpoint_suffix
print(f"Endpoint name: {endpoint_name}")
import random
import string
# Creating a unique endpoint name by including a random suffix
allowed_chars = string.ascii_lowercase + string.digits
endpoint_suffix = "".join(random.choice(allowed_chars) for x in range(5))
endpoint_name = "heart-classifier-" + endpoint_suffix
print(f"Endpoint name: {endpoint_name}")
endpoint = ManagedOnlineEndpoint(
name=endpoint_name,
description="An endpoint to serve predictions of the UCI heart disease problem",
auth_mode="key",
)
A végpont tulajdonságait konfigurációs fájl használatával konfigurálhatjuk. A végpont hitelesítési módját a következő példában "kulcsként" konfiguráljuk:
Ez a funkció nem érhető el az MLflow SDK-ban. Lépjen az Azure Machine Learning Studióba, keresse meg a végpontot, és kérje le onnan a titkos kulcsot.
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.
Az alábbi kód 5 megfigyelést mintáz a betanítási adatkészletből, eltávolítja az target oszlopot (ahogy a modell előrejelzi), és létrehoz egy kérést a fájlban sample.json , amely a modell üzembe helyezéséhez használható.
samples = (
pd.read_csv("data/heart.csv")
.sample(n=5)
.drop(columns=["target"])
.reset_index(drop=True)
)
with open("sample.json", "w") as f:
f.write(
json.dumps(
{"input_data": json.loads(samples.to_json(orient="split", index=False))}
)
)
Az alábbi kód 5 megfigyelést mintáz a betanítási adathalmazból, eltávolítja az target oszlopot (ahogy a modell előrejelzi), és létrehoz egy kérést.
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.
Ugyanazt a hardveres megerősítést használjuk, amely a deployment-config-file. Nincs azonban olyan követelmény, hogy ugyanazzal a konfigurációval rendelkezzen. A követelményektől függően különböző hardvereket konfigurálhat különböző modellekhez.
Írja be a konfigurációt egy fájlba:
deployment_config_path = "deployment_config.json"
with open(deployment_config_path, "w") as outfile:
outfile.write(json.dumps(deploy_config))
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: