Träna modeller med Azure Machine Learning CLI, SDK och REST API

APPLIES TO:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)

Azure Machine Learning tillhandahåller flera sätt att skicka ML-utbildningsjobb. I den här artikeln får du lära dig hur du skickar jobb med hjälp av följande metoder:

  • Azure CLI tillägg för maskininlärning: tillägget ml, även kallat CLI v2.
  • Python SDK v2 för Azure Machine Learning.
  • REST API: DET API som CLI och SDK bygger på.

Förutsättningar

Så här använder du SDK:et:

Klona exempellagringsplatsen

Kodfragmenten i den här artikeln baseras på exempel i Azure Machine Learning exempel GitHub lagringsplats. Om du vill klona lagringsplatsen till utvecklingsmiljön använder du följande kommando:

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples

Tips

Använd --depth 1 för att endast klona den senaste incheckningen till lagringsplatsen, vilket minskar tiden för att slutföra åtgärden.

De återstående kommandona i den här artikeln förutsätter att du kör från azureml-examples katalogen.

Exempeljobb

Exemplen i den här artikeln använder irisblommans datamängd för att träna en modell i MLFlow.

Träna i molnet

När du tränar i molnet måste du ansluta till din Azure Machine Learning arbetsyta och välja en beräkningsresurs för att köra träningsjobbet.

Anslut till arbetsytan

Tips

Använd följande flikar för att välja den metod som du vill använda för att träna en modell. Om du väljer en flik växlar du automatiskt alla flikar i den här artikeln till samma flik. Du kan välja en annan flik när som helst.

För att ansluta till arbetsytan behöver du identifierarparametrar – en prenumeration, en resursgrupp och ett arbetsytenamn. Använd den här informationen i MLClient från namnområdet azure.ai.ml för att få en referens till den Azure Machine Learning arbetsyta som krävs. Om du vill autentisera använder du default Azure-autentisering. Mer information om hur du konfigurerar autentiseringsuppgifter och ansluter till en arbetsyta finns i den här example.

#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)

Verifiera anslutningen genom att skriva ut arbetsytans namn:

print(ml_client.workspace_name)

Skapa en beräkningsresurs för träning

Observera

Om du vill prova serverlös beräkning hoppar du över det här steget och fortsätter till Skicka träningsjobbet.

Ett Azure Machine Learning beräkningskluster är en fullständigt hanterad beräkningsresurs som du kan använda för att köra träningsjobbet. I följande exempel skapar du ett beräkningskluster med namnet cpu-cluster.

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

Kontrollera att beräkningsklustret finns:

cpu_cluster = ml_client.compute.get("cpu-cluster")
print(f"Compute '{cpu_cluster.name}' provisioning state: {cpu_cluster.provisioning_state}")

Skicka träningsjobbet

Om du vill köra det här skriptet använder du en command som kör det main.py Python skriptet som finns under ./sdk/python/jobs/single-step/lightgbm/iris/src/. Du skickar kommandot som en job till Azure Machine Learning.

Observera

Om du vill använda serverlös beräkning tar du bort compute="cpu-cluster" i den här koden.

from azure.ai.ml import command, Input

# define the command
command_job = command(
    code="./src",
    command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
    environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
    inputs={
        "iris_csv": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
        ),
        "learning_rate": 0.9,
        "boosting": "gbdt",
    },
    compute="cpu-cluster",
)

Skicka jobbet i samma Python session:

# 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

I föregående exempel har du konfigurerat:

  • code – sökväg där koden för att köra kommandot finns.
  • command - kommando som måste köras.
  • environment – den miljö som krävs för att köra träningsskriptet. I det här exemplet använder du en kuraterad eller färdig miljö som tillhandahålls av Azure Machine Learning med namnet AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest. Du kan också använda anpassade miljöer genom att ange en bas docker-avbildning och ange en conda yaml ovanpå den.
  • inputs – en ordlista över indata som använder namn-värdepar till kommandot. Nyckeln är ett namn på indata i jobbets kontext och värdet är indatavärdet. Referera till input i genom att använda uttrycket . Om du vill använda filer eller mappar som indata använder du Input klassen . Mer information finns i SDK- och CLI v2-uttryck.

Mer information finns i referensdokumentationen.

När du skickar jobbet returnerar tjänsten en URL till jobbstatusen i Azure Machine Learning Studio. Använd studiogränssnittet för att visa jobbets förlopp. Du kan också använda returned_job.status för att kontrollera jobbets aktuella status.

print(f"Studio URL: {returned_job.studio_url}")

Viktigt

Azure Machine Learning tränings- och kommandojobb stöder inte Azure Container Registries (ACR) som använder anpassade domännamnsetiketter. Jobb som refererar till ett sådant register kan misslyckas vid start på grund av fel vid avbildningshämtning eller miljömatchning. Undvik det här problemet:

  • Använd standardformatet för inloggningsservern (<registry-name>.azurecr.io) för din ACR.
  • När du skapar registret anger du Domännamnsetikettomfång till Oskyddad.

Övervaka träningsjobbet

Vänta tills träningsjobbet har slutförts innan du registrerar modellen. Jobbstatusen övergår via StartingPreparingRunningCompleted.

Använd ml_client.jobs.stream() för att övervaka jobbutdata i realtid:

ml_client.jobs.stream(returned_job.name)

Du kan också kontrollera jobbets status programmatiskt:

returned_job = ml_client.jobs.get(returned_job.name)
print(f"Job status: {returned_job.status}")

Registrera den tränade modellen

Följande exempel visar hur du registrerar en modell på din Azure Machine Learning arbetsyta.

Tips

Träningsjobbet returnerar en name attribut. Använd det här namnet som en del av sökvägen till modellen.

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)

Kontrollera att modellen har registrerats:

registered_model = ml_client.models.get("run-model-example", version="1")
print(f"Model '{registered_model.name}' version {registered_model.version} registered successfully.")

Rensa resurser

Om du inte planerar att använda beräkningsklustret för fler träningsjobb, ta bort det så att du inte fortsätter att debiteras. Klustret fortsätter att fakturera medan det finns, även om noll noder körs.

ml_client.compute.begin_delete("cpu-cluster").wait()

Felsök vanliga fel

Error Orsak Lösning
ImportError: No module named 'azure.identity' Paket saknas azure-identity Kör pip install azure-identity
DefaultAzureCredential failed Inte inloggad på Azure Kör az login först eller ange miljövariabler för autentisering med tjänstens huvudnamn
ComputeNotFound Matchningsfel för klusternamn eller borttaget kluster Verifiera klusternamnet och kontrollera etableringstillståndet
EnvironmentNotFound Den kurerade miljön har fasats ut eller är otillgänglig Visa en lista över tillgängliga miljöer med ml_client.environments.list() och använda en aktuell version
QuotaExceeded Otillräcklig vCPU-kvot för VM-storleken Begär en kvotökning eller använd en mindre VM-storlek

Mer information om miljöspecifika problem finns i Felsöka miljöbildbyggen.

Nästa steg

Nu när du har en tränad modell lär du dig hur du distribuerar den med hjälp av en onlineslutpunkt.

Fler exempel finns i lagringsplatsen Azure Machine Learning GitHub.

Mer information om Azure CLI kommandon, Python SDK-klasser eller REST-API:er som används i den här artikeln finns i följande referensdokumentation: