Condividi tramite


Creare un cluster di elaborazione di Azure Machine Learning con CLI v1

SI APPLICA A:estensione per Machine Learning dell'interfaccia della riga di comando di Azure v1Python SDK azuremlv1

Informazioni su come creare e gestire un cluster di elaborazione nell'area di lavoro di Azure Machine Learning.

È possibile usare il cluster di elaborazione di Azure Machine Learning per distribuire il processo di training o di inferenza batch in un cluster di nodi di calcolo CPU o GPU nel cloud. Per altre informazioni sulle dimensioni delle macchine virtuali che includono GPU, consultare il documento Dimensioni delle macchine virtuali ottimizzate per GPU.

In questo articolo viene spiegato come:

  • Creare un cluster di elaborazione
  • Ridurre il costo del cluster di elaborazione
  • Configurare un'identità gestita per il cluster

Prerequisiti

Che cos'è un cluster di elaborazione?

Un cluster di elaborazione di Azure Machine Learning è un'infrastruttura di calcolo gestito che consente di creare facilmente un ambiente di calcolo a uno o più nodi. Il cluster di elaborazione è una risorsa da poter condividere con altri utenti dell'area di lavoro. Il calcolo si ridimensiona verticalmente in modo automatico quando viene inviato un processo e può essere inserito in una Rete virtuale di Azure. I cluster di elaborazione supportano distribuzioni di ID non pubblici, nonché nelle reti virtuali. Il calcolo viene eseguito in un ambiente basato su contenitori, con la creazione di un pacchetto delle dipendenze del modello in un contenitore Docker.

I cluster di elaborazione possono eseguire processi in modo sicuro in un ambiente di rete virtuale senza richiedere alle aziende di aprire porte SSH. Il processo viene eseguito in un ambiente basato su contenitori, con la creazione di un pacchetto delle dipendenze del modello in un contenitore Docker.

Limiti

  • I cluster di elaborazione possono essere creati in un'area e una rete virtuali diverse rispetto all'area di lavoro dell'utente. Tuttavia, questa funzionalità è accessibile solo usando SDK v2, CLI v2 o Studio. Per altre informazioni, vedere la versione v2 degli ambienti di training sicuri.

  • Al momento è supportata solo la creazione (e non l'aggiornamento) di cluster tramite modelli ARM. Per l'elaborazione dell'aggiornamento, per ora si consiglia di usare l'SDK, l'interfaccia della riga di comando o l'esperienza utente di Azure.

  • Per alcuni aspetti, l'ambiente di calcolo di Azure Machine Learning prevede limiti predefiniti, ad esempio il numero di core che possono essere allocati. Per altre informazioni, consultare il documento Gestire e richiedere quote per risorse di Azure.

  • Azure consente di inserire blocchi delle risorse, in modo che non possano essere eliminate o siano di sola lettura. Non applicare blocchi delle risorse al gruppo di risorse che contiene l'area di lavoro. L'applicazione di un blocco al gruppo di risorse che contiene l'area di lavoro impedirà le operazioni di ridimensionamento per i cluster di elaborazione di Azure Machine Learning. Per altre informazioni sul blocco delle risorse, vedere Bloccare le risorse per impedire modifiche impreviste.

Suggerimento

I cluster possono in genere essere ridimensionati fino a 100 nodi, purché si disponga di una quota sufficiente per il numero di core necessari. Per impostazione predefinita, i cluster sono impostati con la comunicazione tra i nodi abilitata, ad esempio per supportare i processi MPI. È tuttavia possibile ridimensionare i cluster fino a migliaia di nodi. A tale scopo è sufficiente generare un ticket di supporto e richiedere di inserire nell'elenco degli elementi consentiti la sottoscrizione, l'area di lavoro o un cluster specifico per disabilitare la comunicazione tra i nodi.

Creazione

Tempo stimato: circa 5 minuti.

Un ambiente di calcolo di Azure Machine Learning può essere usato su più esecuzioni. L'ambiente di calcolo può essere condiviso con altri utenti nell'area di lavoro e mantenuto da un'esecuzione all'altra, ridimensionando automaticamente i nodi in base al numero di esecuzioni inviate e all'impostazione max_nodes definita nel cluster. L'impostazione min_nodes controlla il numero minimo di nodi disponibili.

I core dedicati per area per quota di famiglia di macchine virtuali e quota regionale totale, che si applica alla creazione del cluster di elaborazione, è unificata a e condivisa con la quota dell'istanza di ambiente di calcolo del training di Azure Machine Learning.

Importante

Per evitare addebiti quando non è in esecuzione alcun processo, impostare il numero minimo di nodi su 0. Questa impostazione consente ad Machine Learning di deallocare i nodi quando non sono in uso. Qualsiasi valore superiore a 0 manterrà in esecuzione tale numero di nodi, anche se non sono in uso.

Il calcolo viene ridimensionato automaticamente fino a zero nodi quando non viene usato. Le macchine virtuali dedicate vengono create per eseguire i processi in base alle esigenze.

Per creare una risorsa permanente di ambiente di calcolo di Machine Learning in Python, specificare le proprietà vm_size e max_nodes. Azure Machine Learning quindi usa valori predefiniti intelligenti per le altre proprietà.

  • vm_size: la famiglia di macchine virtuali dei nodi creati dall'ambiente di calcolo di Azure Machine Learning.
  • max_nodes: il numero massimo di nodi per la scalabilità automatica durante l'esecuzione di un processo in un ambiente di calcolo di Azure Machine Learning.

SI APPLICA A:Python SDK azureml v1

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your CPU cluster
cpu_cluster_name = "cpucluster"

# Verify that cluster does not exist already
try:
    cpu_cluster = ComputeTarget(workspace=ws, name=cpu_cluster_name)
    print('Found existing cluster, use it.')
except ComputeTargetException:
    # To use a different region for the compute, add a location='<region>' parameter
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                           max_nodes=4)
    cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)

cpu_cluster.wait_for_completion(show_output=True)

Durante la creazione di un ambiente di calcolo di Machine Learning è anche possibile configurare diverse proprietà avanzate. Le proprietà consentono di creare un cluster permanente di dimensione fissa o all'interno di una Rete virtuale di Azure esistente nella sottoscrizione. Per informazioni dettagliate, consultare AmlCompute class (Classe AmlCompute).

Avviso

Quando si imposta il parametro location, se è un'area diversa rispetto all'area di lavoro o agli archivi dati dell'utente, si potrebbe riscontrare un aumento della latenza di rete e dei costi di trasferimento dei dati. La latenza e i costi possono aumentare nell'ambito della creazione del cluster e dell'esecuzione di processi su di esso.

Ridurre il costo del cluster di elaborazione

È anche possibile scegliere di usare macchine virtuali con priorità bassa per eseguire alcuni o tutti i carichi di lavoro. Queste macchine virtuali non hanno una disponibilità garantita e possono essere terminate durante l'uso. Sarà necessario riavviare un processo interrotto.

SI APPLICA A:Python SDK azureml v1

compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                            vm_priority='lowpriority',
                                                            max_nodes=4)

Configurare identità gestita

I cluster di elaborazione di Azure Machine Learning supportano anche le identità gestite per autenticare l'accesso alle risorse di Azure senza includere credenziali nel codice. Sono disponibili due tipi di identità gestite:

  • Un'identità gestita assegnata dal sistema viene abilitata direttamente nel cluster di elaborazione di Azure Machine Learning e nell'istanza di ambiente di calcolo. Il ciclo di vita di un'identità assegnata dal sistema è direttamente collegata al cluster di elaborazione o all'istanza dell'ambiente di calcolo. Se viene effettuata l'eliminazione del cluster di elaborazione o dell'istanza dell'ambiente di calcolo, Azure pulisce automaticamente le credenziali e l'identità in Microsoft Entra ID.
  • Un'identità gestita assegnata dall'utente è una risorsa di Azure autonoma fornita tramite il servizio di gestione delle identità di Azure. È possibile assegnare un'identità assegnata dall'utente a più risorse, che saranno conservate per il tempo desiderato. Questa identità gestita deve essere creata in anticipo ed essere poi convalidata come identity_id come parametro richiesto.

SI APPLICA A:Python SDK azureml v1

  • Configurare l'identità gestita nella configurazione del provisioning:

    • Identità gestita assegnata dal sistema creata in un'area di lavoro denominata ws

      # configure cluster with a system-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="SystemAssigned",
                                                              )
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
    • Identità gestita assegnata dall'utente creata in un'area di lavoro denominata ws

      # configure cluster with a user-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="UserAssigned",
                                                              identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
  • Aggiungere l'identità gestita a un cluster di elaborazione esistente denominato cpu_cluster

    • Identità gestita assegnata dal sistema:

      # add a system-assigned managed identity
      cpu_cluster.add_identity(identity_type="SystemAssigned")
      
    • Identità gestita assegnata dall'utente:

      # add a user-assigned managed identity
      cpu_cluster.add_identity(identity_type="UserAssigned", 
                                  identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      

Nota

I cluster di elaborazione di Azure Machine Learning supportano solo un'identità gestita assegnata dal sistema o più identità gestite assegnate dall'utente, non contemporaneamente.

Utilizzo identità gestita

L'identità gestita predefinita è l'identità gestita assegnata dal sistema o la prima identità gestita assegnata dall'utente.

Durante un'esecuzione sono previste due applicazioni di un'identità:

  1. Il sistema usa un'identità per configurare i montaggi di archiviazione dell'utente, il registro contenitori e gli archivi dati.

    • In questo caso, il sistema userà l'identità gestita predefinita.
  2. L'utente applica un'identità per accedere alle risorse dal codice per un'esecuzione inviata

    • In questo caso, fornire il client_id corrispondente all'identità gestita che si desidera usare per recuperare una credenziale.
    • In alternativa, ottenere l'ID del client dell'identità assegnata dall'utente tramite la variabile di ambiente DEFAULT_IDENTITY_CLIENT_ID.

    Ad esempio, per recuperare un token per un archivio dati con l'identità gestita predefinita:

    client_id = os.environ.get('DEFAULT_IDENTITY_CLIENT_ID')
    credential = ManagedIdentityCredential(client_id=client_id)
    token = credential.get_token('https://storage.azure.com/')
    

Risoluzione dei problemi

Esiste una possibilità per cui alcuni utenti che hanno creato l'area di lavoro di Azure Machine Learning dal portale di Azure prima della versione in disponibilità generale potrebbero non essere in grado di creare un ambiente di calcolo di Azure Machine Learning nell'area di lavoro. È possibile generare una richiesta di supporto per il servizio o creare una nuova area di lavoro tramite il portale o il SDK per annullare il blocco immediatamente.

Bloccato in fase di ridimensionamento

Se il cluster di calcolo di Azure Machine Learning risulta bloccato in fase di ridimensionamento (0 -> 0) per lo stato del nodo, ciò potrebbe essere causato da blocchi delle risorse di Azure.

Azure consente di inserire blocchi delle risorse, in modo che non possano essere eliminate o siano di sola lettura. Il blocco di una risorsa può causare risultati imprevisti. Alcune operazioni che non sembrano modificare la risorsa richiedono effettivamente azioni bloccate dal blocco.

Con Azure Machine Learning, l'applicazione di un blocco di eliminazione al gruppo di risorse per l'area di lavoro impedirà le operazioni di ridimensionamento per i cluster di calcolo di Azure Machine Learning. Per ovviare a questo problema, è consigliabile rimuovere il blocco dal gruppo di risorse e applicarlo a singoli elementi nel gruppo.

Importante

Non applicare il blocco alle risorse seguenti:

Nome risorsa Tipo di risorsa
<GUID>-azurebatch-cloudservicenetworksecurityggroup Gruppo di sicurezza di rete
<GUID>-azurebatch-cloudservicepublicip Indirizzo IP pubblico
<GUID>-azurebatch-cloudserviceloadbalancer Bilanciamento del carico

Queste risorse vengono usate per comunicare con il cluster di elaborazione e per eseguire operazioni come il ridimensionamento sul cluster di elaborazione. La rimozione del blocco delle risorse da queste risorse deve consentire il ridimensionamento automatico dei cluster di calcolo.

Per altre informazioni sul blocco delle risorse, vedere Bloccare le risorse per impedire modifiche impreviste.

Passaggi successivi

Usare il cluster di elaborazione per: