Distribuire l'estensione di Azure Machine Learning nel servizio Azure Kubernetes o nel cluster Kubernetes

Per consentire al cluster del servizio Azure Kubernetes o Arc Kubernetes di eseguire processi di training o carichi di lavoro di inferenza, è necessario prima distribuire l'estensione Azure Machine Learning in un cluster del servizio Azure Kubernetes o Arc Kubernetes. L'estensione Azure Machine Learning è basata sull'estensione del cluster per il servizio Azure Kubernetes e sull'estensione del cluster o Arc Kubernetes e il relativo ciclo di vita può essere gestito facilmente con l'interfaccia della riga di comando di Azure k8s-extension.

Contenuto dell'articolo:

  • Prerequisiti
  • Limiti
  • Esaminare i set di config dell'estensione di Azure Machine Learning
  • Scenari di distribuzione dell’estensione di Azure Machine Learning
  • Verificare la distribuzione dell'estensione di Azure Machine Learning
  • Esaminare i componenti dell'estensione di Azure Machine Learning
  • Gestire l'estensione Azure Machine Learning

Prerequisiti

  • Un cluster del servizio Azure Kubernetes in esecuzione in Azure. Se le estensioni del cluster non sono state usate in precedenza, è necessario registrare il provider di servizi KubernetesConfiguration.
  • In alternativa un cluster Arc Kubernetes operativo. Seguire le istruzioni in Connettere un cluster Kubernetes esistente ad Azure Arc.
  • Ai fini della produzione, il cluster Kubernetes deve avere almeno 4 core vCPU e 14 GB di memoria. Per altre informazioni sui dettagli delle risorse e sulle dimensioni del cluster consigliate, vedere Pianificazione delle risorse consigliata.
  • Il cluster in esecuzione dietro un server proxy in uscita o un firewall richiede configurazioni di rete aggiuntive.
  • Installare o aggiornare l'interfaccia della riga di comando di Azure alla versione 2.24.0 o a una versione successiva.
  • Installare o aggiornare l'estensione dell'interfaccia della riga di comando di Azure k8s-extension alla versione 1.2.3 o a una versione successiva.

Limiti

  • L'utilizzo di un'entità servizio con il servizio Azure Kubernetes non è supportato da Azure Machine Learning. Il cluster del servizio Azure Kubernetes deve usare invece un'identità gestita. Sono supportate sia l'identità gestita assegnata dal sistema sia l'identità gestita assegnata dall'utente. Per altre informazioni, vedere Usare un'identità gestita nel servizio Azure Kubernetes.
    • Quando l’entità servizio usata dal cluster del servizio Azure Kubernetes viene convertita all'uso di Identità gestita, prima di installare l'estensione, è necessario eliminare e ricreare tutti i pool di nodi, anziché aggiornarli direttamente.
  • La disabilitazione degli account locali per il servizio Azure Kubernetes non è supportata da Azure Machine Learning. Quando il cluster del servizio Azure Kubernetes viene distribuito, gli account locali sono abilitati per impostazione predefinita.
  • Se il cluster del servizio Azure Kubernetes dispone di un intervallo IP autorizzato abilitato per accedere al server API, abilitare gli intervalli IP del piano di controllo di Azure Machine Learning per il cluster del servizio Azure Kubernetes. Il piano di controllo di Azure Machine Learning viene distribuito in diverse aree associate. Senza accesso al server API, i pod di apprendimento automatico non possono essere distribuiti. Quando si abilitano gli intervalli IP in un cluster del servizio Azure Kubernetes, usare gli intervalli IP per entrambe le aree associate.
  • Azure Machine Learning non supporta il collegamento di un cluster del servizio Azure Kubernetes tra sottoscrizioni. Se si dispone di un cluster del servizio Azure Kubernetes in una sottoscrizione diversa, è necessario prima collegarlo ad Azure-Arc e specificarlo nella stessa sottoscrizione dell'area di lavoro di Azure Machine Learning.
  • Azure Machine Learning non garantisce il supporto di tutte le funzionalità in fase di anteprima nel servizio Azure Kubernetes. Ad esempio, l'identità dei pod di Microsoft Entra non è supportata.
  • Se sono stati seguiti i passaggi del documento del servizio Azure Kubernetes v1 di Azure Machine Learning per creare o collegare il servizio Azure Kubernetes come cluster di inferenza, usare il collegamento seguente per pulire le risorse legacy correlate a azureml-fe prima di continuare con il passaggio successivo.

Esaminare le impostazioni di configurazione dell'estensione di Azure Machine Learning

È possibile usare il comando dell'interfaccia della riga di comando di Azure Machine Learning k8s-extension create per distribuire l'estensione Azure Machine Learning. L'interfaccia della riga di comando k8s-extension create consente di specificare un set di impostazioni di configurazione in formato key=value usando il parametro --config o --config-protected. Di seguito è riportato l'elenco delle impostazioni di configurazione disponibili da specificare durante la distribuzione dell'estensione Azure Machine Learning.

Nome chiave dell'impostazione di configurazione Descrizione Formazione Inferenza Training e inferenza
enableTraining True o False, impostazione predefinita False. Deve essere impostato su True per la distribuzione dell'estensione Azure Machine Learning con il supporto del training del modello di Machine Learning e dell'assegnazione dei punteggi batch. N/D
enableInference True o False, impostazione predefinita False. Deve essere impostato su True per la distribuzione dell'estensione Azure Machine Learning con il supporto dell'inferenza di Machine Learning. N/D
allowInsecureConnections True o False, impostazione predefinita False. Può essere impostato su True per usare gli endpoint HTTP di inferenza a scopo di sviluppo o test. N/D Facoltativo Facoltativo
inferenceRouterServiceType loadBalancer, nodePort o clusterIP. Obbligatorio se enableInference=True. N/D
internalLoadBalancerProvider Questa configurazione è applicabile solo al cluster del servizio Azure Kubernetes. Impostare su azure per consentire al router di inferenza di usare il servizio di bilanciamento del carico interno. N/D Facoltativo Facoltativo
sslSecret Nome del segreto Kubernetes nello spazio dei nomi azureml. Questa configurazione viene usata per archiviare cert.pem (certificato TLS/SSL con codifica PEM) e key.pem (chiave TLS/SSL con codifica PEM), necessari per il supporto dell'endpoint HTTPS di inferenza quando allowInsecureConnections è impostato su False. Per una definizione YAML di esempio di sslSecret, vedere Configure sslSecret. Usare questa configurazione o una combinazione di impostazioni di configurazione protette sslCertPemFile e sslKeyPemFile. N/D Facoltativo Facoltativo
sslCname Un CNAME TLS/SSL viene usato dall'endpoint HTTPS di inferenza. Obbligatorio se allowInsecureConnections=False. N/D Facoltativo Facoltativo
inferenceRouterHA True o False, impostazione predefinita True. Per impostazione predefinita, l'estensione Azure Machine Learning distribuisce tre repliche del router di inferenza per la disponibilità elevata, che richiede almeno tre nodi di lavoro in un cluster. Impostare su False se il cluster ha meno di tre nodi di lavoro, in questo caso viene distribuito un solo servizio del router di inferenza. N/D Facoltativo Facoltativo
nodeSelector Per impostazione predefinita, le risorse Kubernetes distribuite e i carichi di lavoro di Machine Learning vengono distribuiti in modo casuale in uno o più nodi del cluster e le risorse DaemonSet vengono distribuite in TUTTI i nodi. Se si vuole limitare la distribuzione dell'estensione e i carichi di lavoro di training/inferenza a nodi specifici con etichetta key1=value1 e key2=value2, usare nodeSelector.key1=value1 e nodeSelector.key2=value2 in modo corrispondente. Facoltativo Facoltativo Facoltativo
installNvidiaDevicePlugin True o False, impostazione predefinita False. Il plug-in dei dispositivi NVIDIA è necessario per i carichi di lavoro di Machine Learning nell'hardware GPU NVIDIA. Per impostazione predefinita, la distribuzione dell'estensione Azure Machine Learning non installerà il plug-in dei dispositivi NVIDIA indipendentemente dal fatto che il cluster Kubernetes disponga o meno di hardware GPU. L'utente può impostare questo valore su True per installarlo, ma assicurarsi di soddisfare i Prerequisiti. Facoltativo Facoltativo Facoltativo
installPromOp True o False, impostazione predefinita True. L'estensione Azure Machine Learning richiede l'operatore Prometheus per gestire Prometheus. Impostare su False per riutilizzare l'operatore Prometheus esistente. Per altre informazioni sul riutilizzo dell'operatore Prometheus esistente, vedere Riutilizzo dell'operatore Prometheus. Facoltativo Facoltativo Facoltativo
installVolcano True o False, impostazione predefinita True. L'estensione Azure Machine Learning richiede l'utilità di pianificazione Volcano per pianificare il processo. Impostare su False per riutilizzare l'utilità di pianificazione Volcano esistente. Per altre informazioni sul riutilizzo dell'utilità di pianificazione Volcano esistente, vedere Riutilizzo dell'utilità di pianificazione Volcano. Facoltativo N/D Facoltativo
installDcgmExporter True o False, impostazione predefinita False. Dcgm-exporter può esporre le metriche GPU per i carichi di lavoro di Azure Machine Learning, che possono essere monitorati nel portale di Azure. Impostare installDcgmExporter su True per installare dcgm-exporter. Ma se si desidera utilizzare il proprio dcgm-exporter, vedere DCGM exporter. Facoltativo Facoltativo Facoltativo
Nome chiave dell'impostazione di configurazione protetta Descrizione Formazione Inferenza Training e inferenza
sslCertPemFile, sslKeyPemFile Percorso del certificato TLS/SSL e del file di chiave (con codifica PEM), necessario per la distribuzione dell'estensione Azure Machine Learning con supporto dell'endpoint HTTPS di inferenza, quando allowInsecureConnections è impostato su False. Nota Il file PEM con passphrase protetta non è supportato. N/D Facoltativo Facoltativo

Come si può vedere dalla tabella delle impostazioni di configurazione, le combinazioni di impostazioni di configurazione diverse consentono di distribuire l'estensione Azure Machine Learning per diversi scenari di carico di lavoro di Machine Learning:

  • Per il carico di lavoro del processo di training e di inferenza batch, specificare enableTraining=True
  • Per il solo carico di lavoro di inferenza, specificare enableInference=True
  • Per tutti i tipi di carico di lavoro di Machine Learning, specificare sia enableTraining=True che enableInference=True

Se si prevede di distribuire l'estensione Azure Machine Learning per il carico di lavoro di inferenza in tempo reale e si vuole specificare enableInference=True, prestare attenzione alle impostazioni di configurazione seguenti correlate al carico di lavoro di inferenza in tempo reale:

  • Il servizio del router azureml-fe è necessario per il supporto dell'inferenza in tempo reale ed è necessario specificare l'impostazione di configurazione inferenceRouterServiceType per azureml-fe. azureml-fe può essere distribuito con uno dei valori seguenti di inferenceRouterServiceType:
    • Digitare LoadBalancer. Espone azureml-fe esternamente usando il servizio di bilanciamento del carico di un provider di servizi cloud. Per specificare questo valore, assicurarsi che il cluster supporti il provisioning del servizio di bilanciamento del carico. Si noti che la maggior parte dei cluster Kubernetes locali potrebbe non supportare il servizio di bilanciamento del carico esterno.
    • Digitare NodePort. Espone azureml-fe nell'indirizzo IP di ogni nodo di una porta statica. Sarà possibile contattare azureml-fe, dall'esterno del cluster, richiedendo <NodeIP>:<NodePort>. L'uso di NodePort consente anche di configurare la propria soluzione di bilanciamento del carico e la terminazione TLS/SSL per azureml-fe.
    • Digitare ClusterIP. Espone azureml-fe in un indirizzo IP interno del cluster e rende azureml-fe raggiungibile solo dall'interno del cluster. Affinché azureml-fe possa gestire le richieste di inferenza provenienti dall'esterno del cluster, è necessario configurare la propria soluzione di bilanciamento del carico e la terminazione TLS/SSL per azureml-fe.
  • Per garantire la disponibilità elevata del servizio di routing azureml-fe, la distribuzione dell'estensione Azure Machine Learning crea per impostazione predefinita tre repliche di azureml-fe per i cluster con tre o più nodi. Se il cluster ha meno di 3 nodi, impostare inferenceRouterHA=False.
  • È inoltre opportuno considerare l'utilizzo di HTTPS per limitare l'accesso agli endpoint del modello e proteggere i dati inviati dai client. A tale scopo, è necessario specificare l'impostazione di configurazione sslSecret o la combinazione di impostazioni di configurazione protette sslKeyPemFile e sslCertPemFile.
  • Per impostazione predefinita, la distribuzione dell'estensione Azure Machine Learning prevede impostazioni di configurazione per il supporto HTTPS. A scopo di sviluppo o test, il supporto HTTP viene fornito in modo pratico tramite l'impostazione di configurazione allowInsecureConnections=True.

Distribuzione dell'estensione di Azure Machine Learning - Esempi di interfaccia della riga di comando e portale di Azure

Per distribuire l'estensione Azure Machine Learning con l'interfaccia della riga di comando, usare il comando az k8s-extension create passando i valori per i parametri obbligatori.

Vengono elencati quattro scenari tipici di distribuzione dell'estensione per riferimento. Per distribuire l'estensione per l'utilizzo in produzione, leggere attentamente l'elenco completo delle impostazioni di configurazione.

  • Usare un cluster del servizio Azure Kubernetes in Azure per un modello di verifica rapido per eseguire tutti i tipi di carico di lavoro di Machine Learning, ad esempio per eseguire processi di training o per distribuire modelli come endpoint online/batch

    Per la distribuzione dell'estensione Azure Machine Learning nel cluster del servizio Azure Kubernetes, assicurarsi di specificare il valore managedClusters per il parametro --cluster-type. Eseguire il comando dell'interfaccia della riga di comando di Azure seguente per distribuire l'estensione Azure Machine Learning:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=LoadBalancer allowInsecureConnections=True InferenceRouterHA=False --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Usare il cluster Arc Kubernetes all'esterno di Azure per un modello di verifica rapido, per eseguire solo i processi di training

    Per la distribuzione dell'estensione Azure Machine Learning nel cluster Arc Kubernetes, è necessario specificare il valore connectedClusters per il parametro --cluster-type. Eseguire il comando dell'interfaccia della riga di comando di Azure seguente per distribuire l'estensione Azure Machine Learning:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Abilitare un cluster del servizio Azure Kubernetes in Azure per il carico di lavoro di training e di inferenza in produzione Per la distribuzione dell'estensione Azure Machine Learning nel servizio Azure Kubernetes, assicurarsi di specificare il valore managedClusters per il parametro --cluster-type. Si supponga che il cluster abbia più di tre nodi e si usi un servizio di bilanciamento del carico pubblico di Azure e HTTPS per il supporto del carico di lavoro di inferenza. Eseguire il comando dell'interfaccia della riga di comando di Azure seguente per distribuire l'estensione Azure Machine Learning:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=LoadBalancer sslCname=<ssl cname> --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • Abilitare un cluster Arc Kubernetes ovunque per il carico di lavoro di training e di inferenza in produzione usando le GPU NVIDIA

    Per la distribuzione dell'estensione Azure Machine Learning nel cluster Arc Kubernetes, assicurarsi di specificare il valore connectedClusters per il parametro --cluster-type. Supponendo che il cluster abbia più di tre nodi, che si usi un tipo di servizio NodePort e HTTPS per il supporto del carico di lavoro di inferenza, eseguire il comando seguente dell'interfaccia della riga di comando di Azure per distribuire l'estensione Azure Machine Learning:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=NodePort sslCname=<ssl cname> installNvidiaDevicePlugin=True installDcgmExporter=True --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    

Verificare la distribuzione dell'estensione di Azure Machine Learning

  1. Eseguire il comando dell'interfaccia della riga di comando seguente per controllare i dettagli dell'estensione Azure Machine Learning:

    az k8s-extension show --name <extension-name> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group>
    
  2. Nella risposta cercare "name" e "provisioningState": "Succeeded". Si noti che potrebbe essere visualizzato "provisioningState": "Pending" per i primi minuti.

  3. Se provisioningState mostra Succeeded, eseguire il comando seguente nel computer con il file kubeconfig a cui punta il cluster per verificare che tutti i pod nello spazio dei nomi "azureml" siano in stato "Running":

     kubectl get pods -n azureml
    

Esaminare il componente dell'estensione di Azure Machine Learning

Al termine della distribuzione dell'estensione Azure Machine Learning, è possibile usare kubectl get deployments -n azureml per visualizzare l'elenco delle risorse create nel cluster. In genere è costituito da un subset delle risorse seguenti in base alle impostazioni di configurazione specificate.

Nome risorsa Tipo di risorsa Formazione Inferenza Training e inferenza Descrizione Comunicazione con il cloud
relayserver Distribuzione di Kubernetes Il server di inoltro viene creato solo per il cluster Arc Kubernetes e non nel cluster del servizio Azure Kubernetes. Il server di inoltro funziona con Inoltro di Azure per comunicare con i servizi cloud. Riceve la richiesta di creazione del processo e di distribuzione modello dal servizio cloud; sincronizza lo stato del processo con il servizio cloud.
gateway Distribuzione di Kubernetes Il gateway viene usato per comunicare inviando e restituendo i dati. Invia le informazioni sui nodi e sulle risorse cluster ai servizi cloud.
aml-operator Distribuzione di Kubernetes N/D Gestisce il ciclo di vita dei processi di training. Scambio di token con il servizio token cloud per l'autenticazione e l'autorizzazione di Registro Azure Container.
metrics-controller-manager Distribuzione di Kubernetes Gestisce la configurazione per Prometheus N/D
{EXTENSION-NAME}-kube-state-metrics Distribuzione di Kubernetes Esporta le metriche correlate al cluster in Prometheus. N/D
{EXTENSION-NAME}-prometheus-operator Distribuzione di Kubernetes Facoltativo Facoltativo Facoltativo Fornisce la distribuzione e la gestione nativa di Kubernetes di Prometheus e dei componenti di monitoraggio correlati. N/D
amlarc-identity-controller Distribuzione di Kubernetes N/D Richiede e rinnova il token di BLOB di Azure/Registro Azure Container tramite l'identità gestita. Scambio di token con il servizio token cloud per l'autenticazione e l'autorizzazione di Registro Azure Container e BLOB di Azure usato dall'inferenza/distribuzione modello.
amlarc-identity-proxy Distribuzione di Kubernetes N/D Richiede e rinnova il token di BLOB di Azure/Registro Azure Container tramite l'identità gestita. Scambio di token con il servizio token cloud per l'autenticazione e l'autorizzazione di Registro Azure Container e BLOB di Azure usato dall'inferenza/distribuzione modello.
azureml-fe-v2 Distribuzione di Kubernetes N/D Componente front-end che indirizza le richieste di inferenza in ingresso ai servizi distribuiti. Invia i log del servizio al BLOB di Azure.
inference-operator-controller-manager Distribuzione di Kubernetes N/D Gestisce il ciclo di vita degli endpoint di inferenza. N/D
volcano-admission Distribuzione di Kubernetes Facoltativo N/D Facoltativo Webhook di ammissione Volcano. N/D
volcano-controllers Distribuzione di Kubernetes Facoltativo N/D Facoltativo Gestisce il ciclo di vita dei pod dei processi di training di Azure Machine Learning. N/D
volcano-scheduler Distribuzione di Kubernetes Facoltativo N/D Facoltativo Usato per eseguire la pianificazione dei processi nel cluster. N/D
fluent-bit DaemonSet Kubernetes Raccoglie il log di sistema dei componenti. Carica il log di sistema dei componenti nel cloud.
{EXTENSION-NAME}-dcgm-exporter DaemonSet Kubernetes Facoltativo Facoltativo Facoltativo dcgm-exporter espone le metriche GPU per Prometheus. N/D
nvidia-device-plugin-daemonset DaemonSet Kubernetes Facoltativo Facoltativo Facoltativo nvidia-device-plugin-daemonset espone le GPU in ogni nodo del cluster N/D
prometheus-prom-prometheus StatefulSet Kubernetes Raccoglie e invia le metriche dei processi al cloud. Invia metriche del processo come l'utilizzo di cpu/gpu/memoria al cloud.

Importante

  • La risorsa Inoltro di Azure si trova nello stesso gruppo di risorse della risorsa cluster Arc. Viene usata per comunicare con il cluster Kubernetes e modificarla interromperà le destinazioni di calcolo collegate.
  • Per impostazione predefinita, le risorse di distribuzione Kubernetes vengono distribuite in modo casuale in 1 o più nodi del cluster e le risorse DaemonSet vengono distribuite in TUTTI i nodi. Se si vuole limitare la distribuzione dell'estensione a nodi specifici, usare l'impostazione di configurazione nodeSelector descritta nella tabella delle impostazioni di configurazione.

Nota

  • {EXTENSION-NAME}: è il nome dell'estensione specificato con il comando dell'interfaccia della riga di comando az k8s-extension create --name.

Gestire l'estensione Azure Machine Learning

Aggiornare, elencare, visualizzare ed eliminare un'estensione Azure Machine Learning.

Passaggi successivi