Progressieve implementatie van MLflow-modellen voor online-eindpunten
Artikel
In dit artikel leert u hoe u MLflow-modellen geleidelijk kunt bijwerken en implementeren in Online-eindpunten zonder dat dit serviceonderbreking veroorzaakt. U gebruikt blauwgroene implementatie, ook wel een veilige implementatiestrategie genoemd, om een nieuwe versie van een webservice in productie te introduceren. Met deze strategie kunt u uw nieuwe versie van de webservice implementeren voor een kleine subset van gebruikers of aanvragen voordat u deze volledig uitrolt.
Over dit voorbeeld
Online-eindpunten hebben het concept eindpunt en implementatie. Een eindpunt vertegenwoordigt de API die klanten gebruiken om het model te gebruiken, terwijl de implementatie de specifieke implementatie van die API aangeeft. Met dit onderscheid kunnen gebruikers de API loskoppelen van de implementatie en de onderliggende implementatie wijzigen zonder dat dit van invloed is op de consument. In dit voorbeeld worden dergelijke concepten gebruikt om het geïmplementeerde model in eindpunten bij te werken zonder serviceonderbreking te introduceren.
Het model dat we gaan implementeren, is gebaseerd op de UCI Heart Disease Data Set. De database bevat 76 kenmerken, maar we gebruiken een subset van 14 kenmerken. Het model probeert de aanwezigheid van hart- en vaatziekten bij een patiënt te voorspellen. Het is een geheel getal van 0 (geen aanwezigheid) tot 1 (aanwezigheid). Het is getraind met behulp van een XGBBoost classificatie en alle vereiste voorverwerking is verpakt als een scikit-learn pijplijn, waardoor dit model een end-to-end-pijplijn is die van onbewerkte gegevens naar voorspellingen gaat.
De informatie in dit artikel is gebaseerd op codevoorbeelden in de opslagplaats azureml-examples . Als u de opdrachten lokaal wilt uitvoeren zonder bestanden te hoeven kopiëren/plakken, kloont u de opslagplaats en wijzigt u de mappen sdk/using-mlflow/deployin .
Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) wordt gebruikt om toegang te verlenen tot bewerkingen in Azure Machine Learning. Als u de stappen in dit artikel wilt uitvoeren, moet aan uw gebruikersaccount de rol eigenaar of inzender zijn toegewezen voor de Azure Machine Learning-werkruimte, of aan een aangepaste rol die Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*toestaat. Zie Toegang tot een Azure Machine Learning-werkruimte beheren voor meer informatie.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
De werkruimte is de resource op het hoogste niveau voor Azure Machine Learning en biedt een gecentraliseerde werkplek met alle artefacten die u maakt in Azure Machine Learning. In deze sectie maken we verbinding met de werkruimte waarin u implementatietaken uitvoert.
Importeer de vereiste bibliotheken:
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
Configureer werkruimtegegevens en haal een ingang op voor de werkruimte:
Zorg ervoor dat uw model is geregistreerd in het Azure Machine Learning-register. Implementatie van niet-geregistreerde modellen wordt niet ondersteund in Azure Machine Learning. U kunt een nieuw model registreren met behulp van de MLflow SDK:
Online-eindpunten zijn eindpunten die worden gebruikt voor onlinedeductie (realtime). Online-eindpunten bevatten implementaties die gereed zijn om gegevens van clients te ontvangen en die reacties in realtime kunnen terugsturen.
We gaan deze functionaliteit benutten door meerdere versies van hetzelfde model onder hetzelfde eindpunt te implementeren. De nieuwe implementatie ontvangt echter 0% van het verkeer bij het smeken. Zodra we zeker weten dat het nieuwe model correct werkt, gaan we het verkeer van de ene implementatie naar de andere geleidelijk verplaatsen.
Eindpunten vereisen een naam, die uniek moet zijn in dezelfde regio. Laten we ervoor zorgen dat u er een maakt die niet bestaat:
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",
)
We kunnen de eigenschappen van dit eindpunt configureren met behulp van een configuratiebestand. In het volgende voorbeeld configureren we de verificatiemodus van het eindpunt als sleutel:
Deze functionaliteit is niet beschikbaar in de MLflow SDK. Ga naar Azure Machine Learning-studio, navigeer naar het eindpunt en haal daar de geheime sleutel op.
Een blauwe implementatie maken
Tot nu toe is het eindpunt leeg. Er zijn geen implementaties op. We gaan de eerste maken door hetzelfde model te implementeren waarop we eerder hebben gewerkt. We noemen deze implementatie 'standaard', die onze 'blauwe implementatie' vertegenwoordigt.
Met de volgende codevoorbeelden 5 waarnemingen uit de trainingsgegevensset verwijdert u de target kolom (zoals het model dit voorspelt) en wordt er een aanvraag gemaakt in het bestand sample.json dat kan worden gebruikt met de modelimplementatie.
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))}
)
)
De volgende codevoorbeelden 5 waarnemingen uit de trainingsgegevensset, verwijdert de target kolom (zoals het model dit voorspelt) en maakt een aanvraag.
Stel dat er een nieuwe versie van het model is gemaakt door het ontwikkelteam en klaar is om in productie te zijn. We kunnen eerst proberen om dit model te vliegen en zodra we vertrouwen, kunnen we het eindpunt bijwerken om het verkeer naar het model te routeren.
We gebruiken dezelfde hardwarebevestiging die wordt aangegeven in de deployment-config-file. Er zijn echter geen vereisten om dezelfde configuratie te hebben. U kunt verschillende hardware voor verschillende modellen configureren, afhankelijk van de vereisten.
Schrijf de configuratie naar een bestand:
deployment_config_path = "deployment_config.json"
with open(deployment_config_path, "w") as outfile:
outfile.write(json.dumps(deploy_config))
U ziet nu hoe we de naam aangeven van de implementatie die we willen aanroepen.
Het verkeer geleidelijk bijwerken
Een implementatie die we vertrouwen hebben, kunnen we het verkeer bijwerken om een deel ervan naar de nieuwe implementatie te leiden. Verkeer is geconfigureerd op eindpuntniveau:
U ziet dat op dit moment de voormalige 'blauwe implementatie' is verwijderd en dat de nieuwe 'groene implementatie' de plaats van de 'blauwe implementatie' heeft genomen.