MLflow-modellen implementeren als Azure-webservices
VAN TOEPASSING OP: Python SDK azureml v1
MLflow is een opensource-bibliotheek voor het beheren van de levenscyclus van machine learning-experimenten. Met MLflow-integratie met Azure Machine Learning kunt u de beheermogelijkheden uitbreiden buiten modeltraining naar de implementatiefase van productiemodellen. In dit artikel implementeert u een MLflow-model als een Azure-webservice en past u azure Machine Learning-modelbeheer- en gegevensdriftdetectiefuncties toe op uw productiemodellen.
In het volgende diagram ziet u hoe de MLflow deploy-API kan worden geïntegreerd met Azure Machine Learning om modellen te implementeren. U maakt modellen als Azure-webservices met behulp van populaire frameworks zoals PyTorch, Tensorflow of scikit-learn en beheert de services in uw werkruimte:
Tip
Dit artikel ondersteunt gegevenswetenschappers en ontwikkelaars die een MLflow-model willen implementeren naar een Azure Machine Learning-webservice-eindpunt. Als u een beheerder bent die het resourcegebruik en de gebeurtenissen van Azure Machine Learning wil bewaken, zoals quota, voltooide trainingsuitvoeringen of voltooide modelimplementaties, raadpleegt u Bewaking van Azure Machine Learning.
Vereisten
Een machine learning-model trainen. Als u geen getraind model hebt, downloadt u het notebook dat het beste past bij uw rekenscenario in de Azure Machine Learning Notebooks-opslagplaats op GitHub. Volg de instructies in het notebook en voer de cellen uit om het model voor te bereiden.
Stel de MLflow Tracking-URI in om Verbinding te maken met Azure Machine Learning.
Installeer het azureml-mlflow-pakket . Met dit pakket worden de azureml-coredefinities automatisch geladen in de Azure Machine Learning Python SDK, die de connectiviteit voor MLflow biedt voor toegang tot uw werkruimte.
Controleer of u de vereiste toegangsmachtigingen hebt voor MLflow-bewerkingen met uw werkruimte.
Implementatieopties
Azure Machine Learning biedt de volgende implementatieconfiguratieopties:
- Azure Container Instances: geschikt voor snelle implementatie van dev-test.
- Azure Kubernetes Service (AKS): aanbevolen voor schaalbare productie-implementatie.
Notitie
Azure Machine Learning-eindpunten (v2) bieden een verbeterde, eenvoudigere implementatie-ervaring. Eindpunten ondersteunen zowel realtime- als batchdeductiescenario's. Eindpunten bieden een uniforme interface voor het aanroepen en beheren van modelimplementaties in verschillende rekentypen. Zie Wat zijn Azure Machine Learning-eindpunten?
Zie MLflow en Azure Machine Learning (v2) voor meer integraties van MLflow- en Azure Machine Learning-functionaliteit, die gebruikmaakt van de v2 SDK.
Implementeren naar Azure Container Instances
Als u uw MLflow-model wilt implementeren in een Azure Machine Learning-webservice, moet uw model worden ingesteld met de MLflow Tracking-URI om verbinding te maken met Azure Machine Learning.
Voor de implementatie naar Azure Container Instances hoeft u geen implementatieconfiguratie te definiëren. De service wordt standaard ingesteld op een Azure Container Instances-implementatie wanneer er geen configuratie wordt opgegeven. U kunt het model in één stap registreren en implementeren met de implementatiemethode van MLflow voor Azure Machine Learning.
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))
JSON-bestand voor implementatieconfiguratie aanpassen
Als u liever niet de standaardinstellingen gebruikt, kunt u uw implementatie instellen met een JSON-bestand voor implementatieconfiguratie dat parameters van de methode deploy_configuration() gebruikt als referentie.
Configuratieparameters voor implementatie definiëren
In het JSON-bestand voor de implementatieconfiguratie definieert u elke implementatieconfiguratieparameter in de vorm van een woordenlijst. Het volgende codefragment bevat een voorbeeld. Voor meer informatie over wat uw JSON-bestand voor de implementatieconfiguratie van uw implementatie kan bevatten, raadpleegt u het configuratieschema voor de implementatie van Azure Container Instance in de Azure Machine Learning Azure CLI-verwijzing.
{"computeType": "aci",
"containerResourceRequirements": {"cpu": 1, "memoryInGB": 1},
"location": "eastus2"
}
Uw json-configuratiebestand kan vervolgens worden gebruikt om uw implementatie te maken:
# 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")
Implementeren in Azure Kubernetes Service (AKS)
Als u uw MLflow-model wilt implementeren in een Azure Machine Learning-webservice, moet uw model worden ingesteld met de MLflow Tracking-URI om verbinding te maken met Azure Machine Learning.
Voor implementatie naar AKS maakt u eerst een AKS-cluster met behulp van de methode ComputeTarget.create(). Dit proces kan 20-25 minuten duren om een nieuw cluster te maken.
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)
Maak een json voor de implementatieconfiguratie met behulp van de methodewaarden deploy_configuration() als verwijzing. Definieer elke implementatieconfiguratieparameter als een woordenlijst, zoals wordt weergegeven in het volgende voorbeeld:
{"computeType": "aks", "computeTargetName": "aks-mlflow"}
Registreer en implementeer vervolgens het model in één stap met de MLflow-implementatieclient:
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")
De service-implementatie kan enkele minuten duren.
Resources opschonen
Als u niet van plan bent uw geïmplementeerde webservice te gebruiken, gebruikt u de service.delete()
methode om de service uit uw notebook te verwijderen. Zie de delete()-methode van de WebService-klasse in de Python SDK-documentatie voor meer informatie.
Voorbeeldnotebooks verkennen
De MLflow met Azure Machine Learning-notebooks laten zien en uitbreiden op concepten die in dit artikel worden gepresenteerd.
Notitie
Voor een communitygestuurde opslagplaats met voorbeelden die gebruikmaken van MLflow, raadpleegt u de opslagplaats met Azure Machine Learning-voorbeelden op GitHub.