Azure Machine Learning biedt meerdere manieren om ML-trainingstaken in te dienen. In dit artikel leert u hoe u taken verzendt met behulp van de volgende methoden:
Azure CLI-extensie voor machine learning: de ml extensie, ook wel CLI v2 genoemd.
Python SDK v2 voor Azure Machine Learning.
REST API: de API waarop de CLI en SDK zijn gebouwd.
Als u de REST API-gegevens wilt gebruiken, hebt u het volgende nodig:
Een service-principal in uw werkruimte. Beheer-REST-aanvragen maken gebruik van verificatie van de service-principal.
Een verificatietoken voor de service-principal. Volg de stappen in Een verificatietoken voor de service-principal ophalen om dit token op te halen.
Het krulhulpprogramma . Het curl-programma is beschikbaar in de Windows-subsysteem voor Linux of een UNIX-distributie.
Tip
In PowerShell curl is dit een alias voor Invoke-WebRequest en curl -d "key=val" -X POST uri wordt Invoke-WebRequest -Body "key=val" -Method POST -Uri uri.
Hoewel het mogelijk is om de REST API aan te roepen vanuit PowerShell, gaan de voorbeelden in dit artikel ervan uit dat u Bash gebruikt.
Het hulpprogramma jq voor het verwerken van JSON. Dit hulpprogramma wordt gebruikt om waarden te extraheren uit de JSON-documenten die worden geretourneerd door REST API-aanroepen.
De opslagplaats met voorbeelden klonen
De codefragmenten in dit artikel zijn gebaseerd op voorbeelden in de GitHub-opslagplaats voor Azure Machine Learning-voorbeelden. Gebruik de volgende opdracht om de opslagplaats naar uw ontwikkelomgeving te klonen:
Gebruik --depth 1 dit om alleen de meest recente doorvoering naar de opslagplaats te klonen, waardoor de bewerking minder lang duurt.
Voorbeeldtaak
In de voorbeelden in dit artikel wordt de irisbloemgegevensset gebruikt om een MLFlow-model te trainen.
Trainen in de cloud
Wanneer u in de cloud traint, moet u verbinding maken met uw Azure Machine Learning-werkruimte en een rekenresource selecteren die wordt gebruikt om de trainingstaak uit te voeren.
1. Verbinding maken met de werkruimte
Tip
Gebruik de onderstaande tabbladen om de methode te selecteren die u wilt gebruiken om een model te trainen. Als u een tabblad selecteert, worden alle tabbladen in dit artikel automatisch naar hetzelfde tabblad overgeschakeld. U kunt op elk gewenst moment een ander tabblad selecteren.
Als u verbinding wilt maken met de werkruimte, hebt u id-parameters nodig: een abonnement, resourcegroep en werkruimtenaam. U gebruikt deze gegevens in de MLClientazure.ai.ml naamruimte om een ingang te krijgen tot de vereiste Azure Machine Learning-werkruimte. Voor verificatie gebruikt u de standaardVerificatie van Azure. Bekijk dit voorbeeld voor meer informatie over het configureren van referenties en het maken van verbinding met een werkruimte.
#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'
#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
Wanneer u de Azure CLI gebruikt, hebt u id-parameters nodig: een abonnement, resourcegroep en werkruimtenaam. Hoewel u deze parameters voor elke opdracht kunt opgeven, kunt u ook standaardwaarden instellen die worden gebruikt voor alle opdrachten. Gebruik de volgende opdrachten om standaardwaarden in te stellen. Vervang , <Azure Machine Learning workspace name>en <resource group> door <subscription ID>de waarden voor uw configuratie:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
De REST API-voorbeelden in dit artikel gebruiken$SUBSCRIPTION_ID, $RESOURCE_GROUPen $LOCATION$WORKSPACE tijdelijke aanduidingen. Vervang de tijdelijke aanduidingen als volgt door uw eigen waarden:
$SUBSCRIPTION_ID: uw Azure-abonnements-id.
$RESOURCE_GROUP: De Azure-resourcegroep die uw werkruimte bevat.
$LOCATION: De Azure-regio waar uw werkruimte zich bevindt.
$WORKSPACE: de naam van uw Azure Machine Learning-werkruimte.
$COMPUTE_NAME: De naam van uw Azure Machine Learning-rekencluster.
Beheer-REST vraagt een verificatietoken voor de service-principal aan. U kunt een token ophalen met de volgende opdracht. Het token wordt opgeslagen in de $TOKEN omgevingsvariabele:
De serviceprovider gebruikt het api-version argument om compatibiliteit te garanderen. Het api-version argument varieert van service tot service. Stel de API-versie in als een variabele voor toekomstige versies:
API_VERSION="2022-05-01"
Wanneer u traint met behulp van de REST API, moeten gegevens en trainingsscripts worden geüpload naar een opslagaccount waartoe de werkruimte toegang heeft. In het volgende voorbeeld worden de opslaggegevens voor uw werkruimte opgehaald en opgeslagen in variabelen, zodat we deze later kunnen gebruiken:
Een Azure Machine Learning-rekencluster is een volledig beheerde rekenresource die kan worden gebruikt om de trainingstaak uit te voeren. In de volgende voorbeelden wordt een rekencluster met de naam cpu-compute gemaakt.
Hoewel een antwoord na een paar seconden wordt geretourneerd, geeft dit alleen aan dat de aanvraag voor het maken is geaccepteerd. Het kan enkele minuten duren voordat het cluster is gemaakt.
Als u dit script wilt uitvoeren, gebruikt u een command script dat wordt uitgevoerd main.py Python-script onder ./sdk/python/jobs/single-step/lightgbm/iris/src/. De opdracht wordt uitgevoerd door deze als een job naar Azure Machine Learning te verzenden.
Notitie
Als u serverloze berekeningen wilt gebruiken, verwijdert compute="cpu-cluster" u deze code.
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url
In de bovenstaande voorbeelden hebt u het volgende geconfigureerd:
code - pad waar de code voor het uitvoeren van de opdracht zich bevindt
command - opdracht die moet worden uitgevoerd
environment - de omgeving die nodig is om het trainingsscript uit te voeren. In dit voorbeeld gebruiken we een gecureerde of kant-en-klare omgeving die wordt geleverd door Azure Machine Learning genaamd AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. We gebruiken de nieuwste versie van deze omgeving met behulp van de @latest richtlijn. U kunt ook aangepaste omgevingen gebruiken door een basis-Docker-installatiekopieën op te geven en er een conda yaml bovenop op te geven.
inputs - woordenlijst van invoer met behulp van naam-waardeparen voor de opdracht. De sleutel is een naam voor de invoer binnen de context van de taak en de waarde is de invoerwaarde. In de command${{inputs.<input_name>}} expressie wordt verwezen naar invoer. Als u bestanden of mappen als invoer wilt gebruiken, kunt u de Input klasse gebruiken. Zie SDK- en CLI v2-expressies voor meer informatie.
Wanneer u de taak verzendt, wordt er een URL geretourneerd naar de taakstatus in de Azure Machine Learning-studio. Gebruik de gebruikersinterface van Studio om de voortgang van de taak weer te geven. U kunt ook de returned_job.status huidige status van de taak controleren.
Voor de az ml job create opdracht die in dit voorbeeld wordt gebruikt, is een YAML-taakdefinitiebestand vereist. De inhoud van het bestand dat in dit voorbeeld wordt gebruikt, zijn:
Notitie
Als u serverloze berekeningen wilt gebruiken, verwijdert compute: azureml:cpu-cluster" u deze code.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: src
command: >-
python main.py
--iris-csv ${{inputs.iris_csv}}
inputs:
iris_csv:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
environment: azureml:AzureML-lightgbm-3.3@latest
compute: azureml:cpu-cluster
display_name: lightgbm-iris-example
experiment_name: lightgbm-iris-example
description: Train a LightGBM model on the Iris dataset.
In het bovenstaande hebt u het volgende geconfigureerd:
code - pad waar de code voor het uitvoeren van de opdracht zich bevindt
command - opdracht die moet worden uitgevoerd
inputs - woordenlijst van invoer met behulp van naam-waardeparen voor de opdracht. De sleutel is een naam voor de invoer binnen de context van de taak en de waarde is de invoerwaarde. In de command${{inputs.<input_name>}} expressie wordt verwezen naar invoer. Zie SDK- en CLI v2-expressies voor meer informatie.
environment - de omgeving die nodig is om het trainingsscript uit te voeren. In dit voorbeeld gebruiken we een gecureerde of kant-en-klare omgeving die wordt geleverd door Azure Machine Learning genaamd AzureML-lightgbm-3.3. We gebruiken de nieuwste versie van deze omgeving met behulp van de @latest richtlijn. U kunt ook aangepaste omgevingen gebruiken door een basis-Docker-installatiekopieën op te geven en er een conda yaml bovenop op te geven.
Gebruik de volgende opdracht om de taak in te dienen. De uitvoerings-id (naam) van de trainingstaak wordt opgeslagen in de $run_id variabele:
run_id=$(az ml job create -f jobs/single-step/lightgbm/iris/job.yml --query name -o tsv)
U kunt de opgeslagen uitvoerings-id gebruiken om informatie over de taak te retourneren. Met --web de parameter wordt de Azure Machine Learning-studio webgebruikersinterface geopend, waar u kunt inzoomen op details van de taak:
az ml job show -n $run_id --web
Als onderdeel van het indienen van taken moeten de trainingsscripts en -gegevens worden geüpload naar een cloudopslaglocatie waartoe uw Azure Machine Learning-werkruimte toegang heeft.
Gebruik de volgende Azure CLI-opdracht om het trainingsscript te uploaden. Met de opdracht geeft u de map op die de bestanden bevat die nodig zijn voor training, niet een afzonderlijk bestand. Als u REST wilt gebruiken om de gegevens te uploaden, raadpleegt u de verwijzing Put Blob :
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/lightgbm/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Maak een versiereferentie naar de trainingsgegevens. In dit voorbeeld bevinden de gegevens zich al in de cloud en bevinden ze zich op https://azuremlexamples.blob.core.windows.net/datasets/iris.csv. Zie Gegevens in Azure Machine Learning voor meer informatie over het verwijzen naar gegevens:
Registreer een versie-verwijzing naar het trainingsscript voor gebruik met een taak. In dit voorbeeld is de scriptlocatie het standaardopslagaccount en de container waarnaar u in stap 1 hebt geüpload. De id van de trainingscode met versiebeheer wordt geretourneerd en opgeslagen in de $TRAIN_CODE variabele:
Maak de omgeving die door het cluster wordt gebruikt om het trainingsscript uit te voeren. In dit voorbeeld gebruiken we een gecureerde of kant-en-klare omgeving die wordt geleverd door Azure Machine Learning genaamd AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Met de volgende opdracht wordt een lijst met de omgevingsversies opgehaald, waarbij de nieuwste versie boven aan de verzameling staat. jq wordt gebruikt om de id van de nieuwste ([0]) versie op te halen, die vervolgens wordt opgeslagen in de $ENVIRONMENT variabele.
Dien ten slotte de taak in. In het volgende voorbeeld ziet u hoe u de taak verzendt, verwijst naar de trainingscode-id, omgevings-id, URL voor de invoergegevens en de id van het rekencluster. De locatie van de taakuitvoer wordt opgeslagen in de $JOB_OUTPUT variabele:
Tip
De taaknaam moet uniek zijn. In dit voorbeeld uuidgen wordt gebruikt om een unieke waarde voor de naam te genereren.
Notitie
Als u serverloze berekeningen wilt gebruiken, verwijdert u de \"computeId\": regel in deze code.
De name eigenschap die door de trainingstaak wordt geretourneerd, wordt gebruikt als onderdeel van het pad naar het model.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
run_model = Model(
path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
name="run-model-example",
description="Model created from run.",
type=AssetTypes.MLFLOW_MODEL
)
ml_client.models.create_or_update(run_model)
Tip
De naam (opgeslagen in de $run_id variabele) wordt gebruikt als onderdeel van het pad naar het model.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Tip
De naam (opgeslagen in de $run_id variabele) wordt gebruikt als onderdeel van het pad naar het model.
Zie de volgende referentiedocumentatie voor meer informatie over de Azure CLI-opdrachten, Python SDK-klassen of REST API's die in dit artikel worden gebruikt: