Distribuera MLflow-modeller som Azure-webbtjänster
GÄLLER FÖR: Python SDK azureml v1
MLflow är ett bibliotek med öppen källkod för att hantera livscykeln för maskininlärningsexperiment. Med MLflow-integrering med Azure Mašinsko učenje kan du utöka hanteringsfunktionerna utöver modellträning till distributionsfasen av produktionsmodeller. I den här artikeln distribuerar du en MLflow-modell som en Azure-webbtjänst och tillämpar Azure Mašinsko učenje-modellhanterings- och dataavvikelseidentifieringsfunktioner på dina produktionsmodeller.
Följande diagram visar hur MLflow-distributions-API:et integreras med Azure Mašinsko učenje för att distribuera modeller. Du skapar modeller som Azure-webbtjänster med hjälp av populära ramverk som PyTorch, Tensorflow eller scikit-learn och hanterar tjänsterna på din arbetsyta:
Dricks
Den här artikeln stöder dataforskare och utvecklare som vill distribuera en MLflow-modell till en Azure Mašinsko učenje webbtjänstslutpunkt. Om du är en administratör som vill övervaka resursanvändning och händelser från Azure Mašinsko učenje, till exempel kvoter, slutförda träningskörningar eller slutförda modelldistributioner, kan du läsa Övervaka Azure Mašinsko učenje.
Förutsättningar
Träna en maskininlärningsmodell. Om du inte har en tränad modell laddar du ned den notebook-fil som passar bäst för ditt beräkningsscenario i Azure Mašinsko učenje Notebooks-lagringsplatsen på GitHub. Följ anvisningarna i notebook-filen och kör cellerna för att förbereda modellen.
Konfigurera MLflow Tracking URI för att ansluta Azure Mašinsko učenje.
Installera paketet azureml-mlflow. Det här paketet läser automatiskt in azureml-core-definitionerna i Azure Mašinsko učenje Python SDK, vilket ger anslutning för MLflow att komma åt din arbetsyta.
Bekräfta att du har de åtkomstbehörigheter som krävs för MLflow-åtgärder med din arbetsyta.
Distribueringsalternativ
Azure Mašinsko učenje erbjuder följande konfigurationsalternativ för distribution:
- Azure Container Instances: Lämplig för snabb distribution av dev-test.
- Azure Kubernetes Service (AKS): Rekommenderas för skalbar produktionsdistribution.
Kommentar
Azure Mašinsko učenje-slutpunkter (v2) ger en förbättrad och enklare distributionsupplevelse. Slutpunkter stöder scenarier för både realtids- och batchinferens. Slutpunkter ger ett enhetligt gränssnitt för att anropa och hantera modelldistributioner mellan beräkningstyper. Se Vad är Azure Mašinsko učenje slutpunkter?.
Fler MLflow- och Azure Mašinsko učenje-funktionsintegreringar finns i MLflow och Azure Mašinsko učenje (v2), som använder V2 SDK.
Distribuera till Azure Container Instances
Om du vill distribuera din MLflow-modell till en Azure Mašinsko učenje-webbtjänst måste din modell konfigureras med MLflow Tracking-URI:n för att ansluta till Azure Mašinsko učenje.
För distributionen till Azure Container Instances behöver du inte definiera någon distributionskonfiguration. Tjänsten är standard för en Azure Container Instances-distribution när en konfiguration inte tillhandahålls. Du kan registrera och distribuera modellen i ett steg med MLflows distributionsmetod för Azure Mašinsko učenje.
from mlflow.deployments import get_deploy_client
# Set the tracking URI as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())
# Set the model path
model_path = "model"
# Define the model path and the name as the service name
# The model is registered automatically and a name is autogenerated by using the "name" parameter
client.create_deployment(name="mlflow-test-aci", model_uri='runs:/{}/{}'.format(run.id, model_path))
Anpassa json-fil för distributionskonfiguration
Om du föredrar att inte använda standardvärdena kan du konfigurera distributionen med en json-fil för distributionskonfiguration som använder parametrar från metoden deploy_configuration() som referens.
Definiera distributionskonfigurationsparametrar
I json-filen för distributionskonfiguration definierar du varje distributionskonfigurationsparameter i form av en ordlista. Följande kodfragment innehåller ett exempel. Mer information om vad json-filen för distributionskonfiguration kan innehålla finns i konfigurationsschemat för distribution av Azure Container-instanser i Azure Mašinsko učenje Azure CLI-referensen.
{"computeType": "aci",
"containerResourceRequirements": {"cpu": 1, "memoryInGB": 1},
"location": "eastus2"
}
Din konfigurations-json-fil kan sedan användas för att skapa distributionen:
# Set the deployment config json file
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path), config=test_config, name="mlflow-test-aci")
Distribuera till Azure Kubernetes Service (AKS)
Om du vill distribuera din MLflow-modell till en Azure Mašinsko učenje-webbtjänst måste din modell konfigureras med MLflow Tracking-URI:n för att ansluta till Azure Mašinsko učenje.
För distribution till AKS skapar du först ett AKS-kluster med hjälp av metoden ComputeTarget.create(). Den här processen kan ta 20–25 minuter att skapa ett nytt kluster.
from azureml.core.compute import AksCompute, ComputeTarget
# Use the default configuration (can also provide parameters to customize)
prov_config = AksCompute.provisioning_configuration()
aks_name = 'aks-mlflow'
# Create the cluster
aks_target = ComputeTarget.create(workspace=ws, name=aks_name, provisioning_configuration=prov_config)
aks_target.wait_for_completion(show_output = True)
print(aks_target.provisioning_state)
print(aks_target.provisioning_errors)
Skapa en distributionskonfigurations-json med hjälp av metodvärdena deploy_configuration() som referens. Definiera varje distributionskonfigurationsparameter som en ordlista, vilket visas i följande exempel:
{"computeType": "aks", "computeTargetName": "aks-mlflow"}
Registrera och distribuera sedan modellen i ett enda steg med MLflow-distributionsklienten:
from mlflow.deployments import get_deploy_client
# Set the tracking URI as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())
# Set the model path
model_path = "model"
# Set the deployment config json file
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}
# Define the model path and the name as the service name
# The model is registered automatically and a name is autogenerated by using the "name" parameter
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path), config=test_config, name="mlflow-test-aci")
Tjänstdistributionen kan ta flera minuter.
Rensa resurser
Om du inte planerar att använda din distribuerade webbtjänst använder service.delete()
du metoden för att ta bort tjänsten från notebook-filen. Mer information finns i metoden delete() för WebService-klassen i Python SDK-dokumentationen.
Utforska exempel på notebook-filer
MLflow med Azure Mašinsko učenje notebook-filer visar och utökar begrepp som presenteras i den här artikeln.
Kommentar
En community-driven lagringsplats med exempel som använder MLflow finns i azure Mašinsko učenje exempellagringsplatsen på GitHub.