Eseguire il training di modelli con l'SDK, l'API REST e l'interfaccia della riga di comando di Azure Machine Learning

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)

Azure Machine Learning offre diversi modi per inviare processi di training di Machine Learning. In questo articolo si apprenderà come inviare processi usando i metodi seguenti:

  • Estensione dell'interfaccia della riga di comando di Azure per l'apprendimento automatico: l'estensione ml, detta anche interfaccia della riga di comando v2.
  • Python SDK v2 per Azure Machine Learning.
  • API REST: API su cui si basano l'interfaccia della riga di comando e l'SDK.

Prerequisiti

Per usare le informazioni sull'SDK, installare SDK v2 per Python di Azure Machine Learning.

Clonare il repository di esempi

I frammenti di codice in questo articolo sono basati su esempi compresi nel repository GitHub degli esempi di Azure Machine Learning. Per clonare il repository nell'ambiente di sviluppo, usare il comando seguente:

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

Suggerimento

Usare --depth 1 per clonare solo il commit più recente nel repository, riducendo il tempo necessario per completare l'operazione.

Processo di esempio

Gli esempi in questo articolo usano il set di dati dei fiori iris per eseguire il training di un modello MLFlow.

Eseguire il training nel cloud

Quando si esegue il training nel cloud, è necessario connettersi all'area di lavoro di Azure Machine Learning e selezionare una risorsa di calcolo che verrà usata per eseguire il processo di training.

1. Connettersi all'area di lavoro

Suggerimento

Usare le schede seguenti per selezionare il metodo da usare per eseguire il training di un modello. Se si seleziona una scheda, tutte le schede di questo articolo verranno automaticamente visualizzate nella stessa scheda. È possibile selezionare un'altra scheda in qualsiasi momento.

Per connettersi all’area di lavoro, occorrono i parametri identificatore, ovvero una sottoscrizione, un gruppo di risorse e un nome dell’area di lavoro. Questi dettagli verranno usati in MLClient dallo spazio dei nomi azure.ai.ml per ottenere un handle per l'area di lavoro di Azure Machine Learning necessaria. Per eseguire l'autenticazione, usare l'autenticazione di Azure predefinita. Per altre informazioni su come configurare le credenziali e connettersi a un'area di lavoro, vedere questo esempio.

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

2. Creare una risorsa di calcolo per il training

Nota

Per provare il calcolo serverless, ignorare questo passaggio e passare al 3. Inviare il processo di training.

Un cluster di elaborazione di Azure Machine Learning è una risorsa di calcolo completamente gestita che può essere usata per eseguire il processo di training. Negli esempi seguenti viene creato un cluster di calcolo denominato cpu-compute.

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

3. Inviare il processo di training

Per eseguire questo script, si userà un oggetto command che esegue lo script Python main.py situato in ./sdk/python/jobs/single-step/lightgbm/iris/src/. Il comando verrà eseguito inviandolo come job ad Azure Machine Learning.

Nota

Per usare il calcolo serverless, eliminare compute="cpu-cluster" in questo codice.

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

Negli esempi precedenti sono stati configurati:

  • code: percorso in cui si trova il codice per l’esecuzione del comando
  • command: comando che deve essere eseguito
  • environment : ambiente necessario per eseguire lo script del training. In questo esempio viene usato un ambiente curato o pronto fornito da Azure Machine Learning e denominato AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Viene usata la versione più recente di questo ambiente usando la direttiva @latest. È anche possibile usare ambienti personalizzati specificando un'immagine Docker di base assieme a un yaml Conda.
  • inputs : dizionario di input con coppie nome-valore per il comando. La chiave è un nome per l'input nel contesto del processo e il valore è il valore di input. Agli input viene fatto riferimento in command usando l'espressione ${{inputs.<input_name>}}. Per usare file o cartelle come input, è possibile usare la classe Input. Per altre informazioni, vedere Espressioni SDK e dell'interfaccia della riga di comando v2.

Per altre informazioni, vedere la documentazione di riferimento.

Quando si invia il processo, viene restituito un URL allo stato del processo in studio di Azure Machine Learning. Usare l'interfaccia utente di Studio per visualizzare lo stato di avanzamento del processo. È anche possibile usare returned_job.status per verificare lo stato corrente del processo.

Registrare il modello sottoposto a training

Gli esempi seguenti illustrano come registrare un modello nell'area di lavoro di Azure Machine Learning.

Suggerimento

La proprietà name restituita dal processo di training viene utilizzata come parte del percorso del modello.

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)

Passaggi successivi

Dopo aver creato un modello sottoposto a training, vedere come distribuirlo usando un endpoint online.

Per altri esempi, vedere il repository GitHub degli esempi di Azure Machine Learning.

Per altre informazioni sui comandi dell'interfaccia della riga di comando di Azure, sulle classi Python SDK o sulle API REST usate in questo articolo, vedere la documentazione di riferimento seguente: