Condividi tramite


Eseguire il training di modelli con l'SDK di Python (v1) di Azure Machine Learning

SI APPLICA A:Python SDK azureml v1

Informazioni su come collegare risorse di calcolo di Azure all'area di lavoro di Azure Machine Learning con SDK v1. Quindi è possibile usare queste risorse come training e inferenza di destinazioni di calcolo nelle attività di apprendimento automatico.

In questo articolo di scoprirà come configurare l'area di lavoro per usare queste risorse di calcolo:

  • Il computer locale
  • Macchine virtuali remote
  • Pool di Apache Spark (con tecnologia Azure Synapse Analytics)
  • Azure HDInsight
  • Azure Batch
  • Azure Databricks: usato come destinazione di calcolo per il training solo nelle pipeline di apprendimento automatico
  • Azure Data Lake Analytics.
  • Azure Container Instance
  • Azure Machine Learning Kubernetes

Per usare le destinazioni di calcolo gestite da Azure Machine Learning, vedere:

Importante

Gli elementi in questo articolo contrassegnati come "anteprima" sono attualmente in anteprima pubblica. La versione di anteprima viene messa a disposizione senza contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Prerequisiti

Limiti

  • Non creare più collegamenti simultanei allo stesso ambiente di calcolo dall'area di lavoro. Ad esempio, collegare un cluster di servizio Azure Kubernetes a un'area di lavoro usando due nomi diversi. Ogni nuovo collegamento interromperà i collegamenti precedenti esistenti.

    Se si vuole ricollegare una destinazione di calcolo, ad esempio per cambiare TLS o un'altra impostazione di configurazione del cluster, è necessario per prima cosa rimuovere il collegamento esistente.

Che cos'è una destinazione di calcolo?

Con Azure Machine Learning è possibile eseguire il training del modello in varie risorse o diversi ambienti, collettivamente definiti destinazioni di calcolo. Una destinazione di calcolo può essere un computer locale o una risorsa cloud, come un ambiente di calcolo di Azure Machine Learning, Azure HDInsight o una macchina virtuale remota. È possibile anche usare destinazioni di calcolo per la distribuzione del modello, come descritto in "Dove e come distribuire i modelli".

Computer locale

Quando si usa il computer locale per il training, non è necessario creare una destinazione di calcolo. Basta inviare l'esecuzione del training dal computer locale.

Quando si usa il computer locale per l'inferenza, è necessario avere Docker installato. Per eseguire la distribuzione, usare LocalWebservice.deploy_configuration() per definire la porta che il servizio Web userà. Quindi usare il processo di distribuzione standard come descritto in Distribuire modelli con Azure Machine Learning.

Macchine virtuali remote

Azure Machine Learning supporta anche il collegamento di una macchina virtuale di Azure. La macchina virtuale deve essere una Azure Data Science Virtual Machine (DSVM). La macchina virtuale offre una scelta dettagliata di strumenti e framework per l'intero ciclo di vita dello sviluppo dell'apprendimento automatico. Per altre informazioni su come usare una Data Science Virtual Machine, consultare Configurare un ambiente di sviluppo per Azure Machine Learning.

Suggerimento

Anziché una macchina virtuale remota, è consigliabile usare l'istanza di ambiente di calcolo di Azure Machine Learning. Si tratta di una soluzione di calcolo completamente gestita e basata sul cloud, specifica di Azure Machine Learning. Per altre informazioni, vedere Creare e gestire un'istanza di ambiente di calcolo di Azure Machine Learning.

  1. Creazione: Azure Machine Learning non può creare un VM remota. È necessario, invece, creare la VM e quindi collegarlo all'area di lavoro di Azure Machine Learning. Per informazioni sulla creazione di DSVM, vedere Effettuare il provisioning della Data Science Virtual Machine per Linux (Ubuntu).

    Avviso

    Azure Machine Learning supporta solo macchine virtuali che eseguono Ubuntu. Quando si crea una macchina virtuale o se ne sceglie una esistente, è necessario selezionare una macchina virtuale che usa Ubuntu.

    Azure Machine Learning richiede anche che la macchina virtuale disponga di un indirizzo IP pubblico.

  2. Collegare: per collegare una macchina virtuale esistente come destinazione di calcolo, è necessario specificare l'ID risorsa, il nome utente e la password per la macchina virtuale. L'ID risorsa della macchina virtuale può essere creato usando l'ID sottoscrizione, il nome del gruppo di risorse e il nome della macchina virtuale nel formato stringa seguente: /subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.Compute/virtualMachines/<vm_name>

    from azureml.core.compute import RemoteCompute, ComputeTarget
    
    # Create the compute config 
    compute_target_name = "attach-dsvm"
    
    attach_config = RemoteCompute.attach_configuration(resource_id='<resource_id>',
                                                    ssh_port=22,
                                                    username='<username>',
                                                    password="<password>")
    
    # Attach the compute
    compute = ComputeTarget.attach(ws, compute_target_name, attach_config)
    
    compute.wait_for_completion(show_output=True)
    

    In alternativa, è possibile collegare la Data Science VM all'area di lavoro usando Azure Machine Learning Studio.

    Avviso

    Non creare più collegamenti simultanei alla stessa DSVM dall'area di lavoro. Ogni nuovo collegamento interromperà i collegamenti precedenti esistenti.

  3. Configurare: creare una configurazione di esecuzione per la destinazione di calcolo Data Science Virtual Machine. Docker e conda vengono usati per creare e configurare l'ambiente di training nella Data Science Virtual Machine.

    from azureml.core import ScriptRunConfig
    from azureml.core.environment import Environment
    from azureml.core.conda_dependencies import CondaDependencies
    
    # Create environment
    myenv = Environment(name="myenv")
    
    # Specify the conda dependencies
    myenv.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'])
    
    # If no base image is explicitly specified the default CPU image "azureml.core.runconfig.DEFAULT_CPU_IMAGE" will be used
    # To use GPU in DSVM, you should specify the default GPU base Docker image or another GPU-enabled image:
    # myenv.docker.enabled = True
    # myenv.docker.base_image = azureml.core.runconfig.DEFAULT_GPU_IMAGE
    
    # Configure the run configuration with the Linux DSVM as the compute target and the environment defined above
    src = ScriptRunConfig(source_directory=".", script="train.py", compute_target=compute, environment=myenv) 
    

Suggerimento

Per rimuovere una VM dall'area di lavoro, usare il metodo RemoteCompute.detach().

Azure Machine Learning non elimina automaticamente la macchina virtuale. La macchina virtuale deve essere eliminata manualmente usando il portale di Azure, l'interfaccia della riga di comando o l'SDK per la macchina virtuale di Azure.

Pool di Apache Spark

L'integrazione di Azure Synapse Analytics con Azure Machine Learning (anteprima) consente di collegare un pool Apache Spark supportato da Azure Synapse per l'esplorazione e la preparazione interattive dei dati. Grazie a questa integrazione è possibile avere un ambiente di calcolo dedicato per il data wrangling in modo scalabile. Per altre informazioni, vedere Come collegare pool di Apache Spark basati su Azure Synapse Analytics.

Azure HDInsight

Azure HDInsight è una piattaforma comune per l'analisi dei Big Data. La piattaforma include Apache Spark, che può essere usato per il training del modello.

  1. Creare: Azure Machine Learning non può creare un cluster HDInsight. È necessario, invece, creare il cluster e quindi collegarlo all'area di lavoro di Azure Machine Learning. Per altre informazioni, vedere Creare un cluster Spark in HDInsight.

    Avviso

    Azure Machine Learning richiede che il cluster HDInsight disponga di un indirizzo IP pubblico.

    Quando si crea il cluster, è necessario specificare un nome utente e una password SSH. Prendere nota di questi valori, perché saranno necessari quando si usa HDInsight come destinazione di calcolo.

    Dopo aver creato il cluster, collegarlo al nome host <clustername>-ssh.azurehdinsight.net, dove <clustername> è il nome fornito per il cluster.

  2. Collegare: per collegare un cluster HDInsight come destinazione di calcolo, è necessario specificare l'ID risorsa, il nome utente e la password per il cluster HDInsight. L'ID risorsa del cluster HDInsight può essere creato usando l'ID sottoscrizione, il nome del gruppo di risorse e il nome del cluster HDInsight nel formato stringa seguente: /subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.HDInsight/clusters/<cluster_name>

    from azureml.core.compute import ComputeTarget, HDInsightCompute
    from azureml.exceptions import ComputeTargetException
    
    try:
    # if you want to connect using SSH key instead of username/password you can provide parameters private_key_file and private_key_passphrase
    
    attach_config = HDInsightCompute.attach_configuration(resource_id='<resource_id>',
                                                          ssh_port=22, 
                                                          username='<ssh-username>', 
                                                          password='<ssh-pwd>')
    hdi_compute = ComputeTarget.attach(workspace=ws, 
                                       name='myhdi', 
                                       attach_configuration=attach_config)
    
    except ComputeTargetException as e:
    print("Caught = {}".format(e.message))
    
    hdi_compute.wait_for_completion(show_output=True)
    

    In alternativa, è possibile collegare il cluster HDInsight all'area di lavoro usando Azure Machine Learning Studio.

    Avviso

    Non creare più collegamenti simultanei allo stesso cluster HDInsight dall'area di lavoro. Ogni nuovo collegamento interromperà i collegamenti precedenti esistenti.

  3. Configurare: creare una configurazione di esecuzione per la destinazione di calcolo HDI.

    from azureml.core.runconfig import RunConfiguration
    from azureml.core.conda_dependencies import CondaDependencies
    
    
    # use pyspark framework
    run_hdi = RunConfiguration(framework="pyspark")
    
    # Set compute target to the HDI cluster
    run_hdi.target = hdi_compute.name
    
    # specify CondaDependencies object to ask system installing numpy
    cd = CondaDependencies()
    cd.add_conda_package('numpy')
    run_hdi.environment.python.conda_dependencies = cd
    

Suggerimento

Per rimuovere un cluster HDInsight dall'area di lavoro, usare il metodo HDInsightCompute.detach().

Azure Machine Learning non elimina automaticamente il cluster HDInsight. Il cluster deve essere eliminato manualmente usando il portale di Azure, l'interfaccia della riga di comando o l'SDK per Azure HDInsight.

Azure Batch

Azure Batch viene usato per eseguire in modo efficiente applicazioni parallele e HPC (High Performance Computing) su larga scala nel cloud. AzureBatchStep può essere usato in una pipeline di Azure Machine Learning per inviare processi a un pool di computer di Azure Batch.

Per collegare Azure Batch come destinazione di calcolo è necessario usare Azure Machine Learning SDK e specificare le informazioni seguenti:

  • Nome dell'ambiente di calcolo di Azure Batch: un nome descrittivo da usare per l'ambiente di calcolo nell'area di lavoro
  • Nome account Azure Batch: il nome dell'account Azure Batch
  • Gruppo di risorse: il gruppo di risorse che contiene l'account Azure Batch.

Il codice seguente illustra come collegare Azure Batch come destinazione di calcolo:

from azureml.core.compute import ComputeTarget, BatchCompute
from azureml.exceptions import ComputeTargetException

# Name to associate with new compute in workspace
batch_compute_name = 'mybatchcompute'

# Batch account details needed to attach as compute to workspace
batch_account_name = "<batch_account_name>"  # Name of the Batch account
# Name of the resource group which contains this account
batch_resource_group = "<batch_resource_group>"

try:
    # check if the compute is already attached
    batch_compute = BatchCompute(ws, batch_compute_name)
except ComputeTargetException:
    print('Attaching Batch compute...')
    provisioning_config = BatchCompute.attach_configuration(
        resource_group=batch_resource_group, account_name=batch_account_name)
    batch_compute = ComputeTarget.attach(
        ws, batch_compute_name, provisioning_config)
    batch_compute.wait_for_completion()
    print("Provisioning state:{}".format(batch_compute.provisioning_state))
    print("Provisioning errors:{}".format(batch_compute.provisioning_errors))

print("Using Batch compute:{}".format(batch_compute.cluster_resource_id))

Avviso

Non creare più collegamenti simultanei alla stessa istanza di Azure Batch dall'area di lavoro. Ogni nuovo collegamento interromperà i collegamenti precedenti esistenti.

Azure Databricks

Azure Databricks è un ambiente basato su Apache Spark nel cloud di Azure. Può essere usata come destinazione di calcolo con una pipeline di Azure Machine Learning.

Importante

Azure Machine Learning non può creare una destinazione di calcolo di Azure Databricks. È invece necessario creare un'area di lavoro di Azure Databricks e quindi collegarla all'area di lavoro di Azure Machine Learning. Per creare una risorsa dell'area di lavoro, vedere il documento Eseguire un processo Spark in Azure Databricks.

Per collegare un'area di lavoro di Azure Databricks da una sottoscrizione di Azure diversa, all'utente (o al suo account Microsoft Entra) deve essere concesso il ruolo Collaboratore nell'area di lavoro di Azure Databricks. Controllare l'accesso nel portale di Azure.

Per collegare Azure Databricks come destinazione di calcolo, fornire le informazioni seguenti:

  • Nome ambiente di calcolo Databricks: il nome da assegnare a questa risorsa di calcolo.
  • Nome area di lavoro di Databricks: il nome dell'area di lavoro di Azure Databricks.
  • Token di accesso a Databricks: il token di accesso usato per eseguire l'autenticazione ad Azure Databricks. Per generare un token di accesso vedere il documento Authentication (Autenticazione).

Il codice seguente illustra come connettere Azure Databricks come destinazione di calcolo con l'SDK di Azure Machine Learning:

import os
from azureml.core.compute import ComputeTarget, DatabricksCompute
from azureml.exceptions import ComputeTargetException

databricks_compute_name = os.environ.get(
    "AML_DATABRICKS_COMPUTE_NAME", "<databricks_compute_name>")
databricks_workspace_name = os.environ.get(
    "AML_DATABRICKS_WORKSPACE", "<databricks_workspace_name>")
databricks_resource_group = os.environ.get(
    "AML_DATABRICKS_RESOURCE_GROUP", "<databricks_resource_group>")
databricks_access_token = os.environ.get(
    "AML_DATABRICKS_ACCESS_TOKEN", "<databricks_access_token>")

try:
    databricks_compute = ComputeTarget(
        workspace=ws, name=databricks_compute_name)
    print('Compute target already exists')
except ComputeTargetException:
    print('compute not found')
    print('databricks_compute_name {}'.format(databricks_compute_name))
    print('databricks_workspace_name {}'.format(databricks_workspace_name))
    print('databricks_access_token {}'.format(databricks_access_token))

    # Create attach config
    attach_config = DatabricksCompute.attach_configuration(resource_group=databricks_resource_group,
                                                           workspace_name=databricks_workspace_name,
                                                           access_token=databricks_access_token)
    databricks_compute = ComputeTarget.attach(
        ws,
        databricks_compute_name,
        attach_config
    )

    databricks_compute.wait_for_completion(True)

Per un esempio più dettagliato, vedere un notebook di esempio in GitHub.

Avviso

Non creare più collegamenti simultanei alla stessa istanza di Azure Databricks dall'area di lavoro. Ogni nuovo collegamento interromperà i collegamenti precedenti esistenti.

Azure Data Lake Analytics.

Azure Data Lake Analytics è una piattaforma di analisi dei Big Data nel cloud di Azure. Può essere usata come destinazione di calcolo con una pipeline di Azure Machine Learning.

Creare un account di Azure Data Lake Analytics prima di usarla. Per creare questa risorsa vedere il documento Introduzione ad Azure Data Lake Analytics con il portale di Azure.

Per connettere Data Lake Analytics come destinazione di calcolo è necessario usare Azure Machine Learning SDK e specificare le informazioni seguenti:

  • Nome del calcolo: il nome da assegnare a questa risorsa di calcolo.
  • Gruppo di risorse: il gruppo di risorse che contiene l'account Data Lake Analytics.
  • Nome account: il nome dell'account Data Lake Analytics.

Il codice seguente illustra in che modo connettere Data Lake Analytics come destinazione di calcolo:

import os
from azureml.core.compute import ComputeTarget, AdlaCompute
from azureml.exceptions import ComputeTargetException


adla_compute_name = os.environ.get(
    "AML_ADLA_COMPUTE_NAME", "<adla_compute_name>")
adla_resource_group = os.environ.get(
    "AML_ADLA_RESOURCE_GROUP", "<adla_resource_group>")
adla_account_name = os.environ.get(
    "AML_ADLA_ACCOUNT_NAME", "<adla_account_name>")

try:
    adla_compute = ComputeTarget(workspace=ws, name=adla_compute_name)
    print('Compute target already exists')
except ComputeTargetException:
    print('compute not found')
    print('adla_compute_name {}'.format(adla_compute_name))
    print('adla_resource_id {}'.format(adla_resource_group))
    print('adla_account_name {}'.format(adla_account_name))
    # create attach config
    attach_config = AdlaCompute.attach_configuration(resource_group=adla_resource_group,
                                                     account_name=adla_account_name)
    # Attach ADLA
    adla_compute = ComputeTarget.attach(
        ws,
        adla_compute_name,
        attach_config
    )

    adla_compute.wait_for_completion(True)

Per un esempio più dettagliato, vedere un notebook di esempio in GitHub.

Avviso

Non creare più collegamenti simultanei alla stessa istanza ADLA dall'area di lavoro. Ogni nuovo collegamento interromperà i collegamenti precedenti esistenti.

Suggerimento

Le pipeline di Azure Machine Learning possono funzionare solo con i dati archiviati nell'archivio dati predefinito dell'account Data Lake Analytics. Se i dati sui quali è necessario lavorare sono in un archivio non predefinito, è possibile usare DataTransferStep per copiare i dati prima del training.

Azure Container Instance

Istanze di Azure Container vengono create in modo dinamico quando si distribuisce un modello. Non è possibile creare o collegare Istanze di Azure Container all'area di lavoro in altro modo. Per altre informazioni, vedere Distribuire un modello in Istanze di Azure Container.

Kubernetes

Azure Machine Learning fornisce la possibilità di collegare i propri cluster Kubernetes per training e inferenza. Vedere Configurare un cluster Kubernetes per Azure Machine Learning.

Per rimuovere un cluster Kubernetes dall'area di lavoro, usare il metodo seguente:

compute_target.detach()

Avviso

La rimozione di un cluster non elimina il cluster. Per eliminare un cluster del servizio Azure Kubernetes, vedere Usare l'interfaccia della riga di comando di Azure con il servizio Azure Kubernetes. Per eliminare un cluster Kubernetes abilitato per Azure Arc, vedere Avvio rapido di Azure Arc.

Esempi di notebook

Consultare questi notebook per esempi di training con varie destinazioni di calcolo:

Per informazioni su come eseguire i notebook, vedere l'articolo Esplorare Azure Machine Learning con notebook Jupyter.

Passaggi successivi