Questo articolo descrive come eseguire in modo efficiente i carichi di lavoro che usano nodi GPU in un cluster del servizio Azure Kubernetes (servizio Azure Kubernetes). Informazioni su come scegliere lo SKU corretto, usare i nodi GPU per eseguire il training di modelli di Machine Learning e usare i nodi GPU per eseguire inferenze nel servizio Azure Kubernetes.
Scenari
I carichi di lavoro GPU possono essere costosi da eseguire. Per evitare costi non necessari, sapere quando distribuire nodi basati su GPU nei cluster del servizio Azure Kubernetes.
Le GPU sono create appositamente per grafica, intelligenza artificiale e Machine Learning e attività specializzate, che le rendono ideali per carichi di lavoro a elevato utilizzo di calcolo. Le CPU gestiscono efficacemente logica e diramazione complesse. Le GPU sono ottimizzate per la velocità effettiva. Possono gestire in modo efficiente operazioni aritmetiche e vettoriali semplici.
Per determinare quando usare GPU per i carichi di lavoro del servizio Azure Kubernetes, è necessario comprendere l'ottimizzazione della GPU e l'intensità di calcolo, ma è necessario considerare anche altri fattori. Per ottenere informazioni più dettagliate sull'utilizzo della GPU per i carichi di lavoro del servizio Azure Kubernetes, prendere in considerazione gli esempi di carico di lavoro seguenti che traggono vantaggio dai nodi GPU in un cluster del servizio Azure Kubernetes.
Analisi e analisi scientifica dei dati
È possibile usare le GPU per accelerare la pre-elaborazione dei dati, la progettazione delle funzionalità e il training dei modelli nei flussi di lavoro di data science. Per usare in modo efficiente GPU, framework come RAPIDS e GPU Dask estendono le librerie di elaborazione dati più diffuse, ad esempio pandas e scikit-learn.
I motori di query SQL con accelerazione open source e i database a colonne come BlazingSQL e HeavyDB usano GPU per eseguire rapidamente query e analisi su set di dati di grandi dimensioni.
Apprendimento automatico e Deep Learning
I framework di Machine Learning e Deep Learning più diffusi, ad esempio TensorFlow e PyTorch , traggono vantaggio dalle GPU perché possono accelerare le attività di training e inferenza.
I modelli di Deep Learning hanno reti neurali complesse. L'elaborazione parallela sulle GPU accelera i calcoli del modello. Le GPU offrono moltiplicazioni e convoluzioni di matrici estremamente efficienti, ovvero operazioni di base nell'apprendimento avanzato.
È anche possibile usare GPU per accelerare attività come la classificazione delle immagini, il rilevamento degli oggetti, l'elaborazione del linguaggio naturale e il riconoscimento vocale.
Visione artificiale ed elaborazione di immagini
Le attività di Visione artificiale interpretano i dati visivi per estrarre informazioni significative. Queste attività sono sempre più comuni nelle applicazioni basate su intelligenza artificiale, veicoli autonomi, imaging medico, sistemi di sorveglianza e realtà aumentata. Le GPU usano l'elaborazione parallela, in modo da poter gestire in modo efficiente dati di immagini su larga scala e calcoli complessi per attività come il rilevamento degli oggetti, la classificazione delle immagini e l'estrazione delle funzionalità.
Elaborazione e streaming di video
I video sono sempre più diffusi nell'azienda, quindi le organizzazioni necessitano di hardware basato su GPU anziché CPU. I carichi di lavoro di elaborazione video, tra cui la transcodifica, la codifica e lo streaming, sono a elevato utilizzo di calcolo, soprattutto se hanno contenuto ad alta definizione o contenuto 4K. Le GPU offrono una piattaforma efficiente che offre esperienze video a bassa latenza e prestazioni elevate in diverse applicazioni, ad esempio eventi sportivi in streaming o video aziendali.
I nodi dell'agente abilitati per GPU offrono un'esperienza cliente avanzata negli ambienti desktop virtuali perché scaricano attività a elevato utilizzo di grafica nella GPU. Le funzionalità di codifica e decodifica video con accelerazione GPU consentono di migliorare lo streaming video in tempo reale, la transcodifica video e l'analisi video.
Per accelerare le attività di visione artificiale come il rilevamento degli oggetti, il rilevamento degli oggetti e l'elaborazione di immagini o video, è possibile usare framework come OpenCV, OpenCL, NVIDIA CUDA e NVIDIA cuDNN.
Le piattaforme di gioco e i servizi di gioco cloud si basano su GPU per offrire grafica di alta qualità e esperienze di gioco fluide.
HPC (High Performance Computing)
Le applicazioni HPC (High Performance Computing) spesso richiedono simulazioni complesse, analisi numeriche e calcoli scientifici. Per eseguire rapidamente queste attività, è possibile usare GPU per parallelizzare il carico di lavoro tra più core. Esempi di applicazioni HPC che necessitano di un'elevata potenza di elaborazione parallela includono simulazioni scientifiche, previsioni meteo, fluidodinamica computazionale e modellazione molecolare. Le GPU sono ideali per i calcoli paralleli e accelerano significativamente i carichi di lavoro HPC. Gli sforzi scientifici e basati sulla ricerca traggono vantaggio dalle GPU.
Per accelerare le applicazioni HPC, i framework come NVIDIA CUDA, OpenCL e OpenACC forniscono API e librerie abilitate per GPU.
Analisi genomica e bioinformatica
I carichi di lavoro delle scienze della salute e della vita, come l'analisi genomica e le applicazioni bioinformatiche, sono sempre più comuni. Questi carichi di lavoro comportano l'elaborazione di dati genetici, ad esempio sequenze di DNA e strutture proteiche, e richiedono algoritmi complessi per l'allineamento delle sequenze, le chiamate varianti e il data mining genomico. Le GPU accelerano i flussi di lavoro di analisi genomica in modo che i ricercatori possano elaborare i dati e scoprire informazioni più rapide.
Prendere in considerazione le implicazioni relative ai costi prima di distribuire nodi GPU nei cluster del servizio Azure Kubernetes. Comprendere l'ottimizzazione GPU per attività a elevato utilizzo di calcolo, ad esempio visione artificiale, elaborazione video, HPC e attività di analisi genomica. Prendere in considerazione questi fattori quando si confrontano le risorse GPU e le risorse DELLA CPU nei cluster del servizio Azure Kubernetes.
Modelli di intelligenza artificiale generativi
I modelli di linguaggio di grandi dimensioni, ad esempio OpenAI GPT, Meta Llama, Falcon o Mistral, possono sfruttare le funzionalità di elaborazione parallela GPU. Usare GPU con questi modelli per migliorare le prestazioni.
Le GPU possono velocizzare le attività di training e inferenza, che comportano calcoli complessi e grandi quantità di dati. Le GPU hanno funzionalità di elaborazione parallela che dividono le attività di calcolo di grandi dimensioni di un determinato modello in sottoattività più piccole che vengono eseguite simultaneamente. Questo processo offre risultati rapidi e migliora le prestazioni.
I modelli linguistici hanno spesso reti neurali complesse con diversi livelli e parametri, che possono aumentare la domanda di calcolo. Le GPU accelerano le operazioni chiave nell'elaborazione del linguaggio, ad esempio la moltiplicazione delle matrici e le convoluzioni, velocizzando i tempi di training e inferenza.
Le GPU offrono capacità di memoria, larghezza di banda e potenza di elaborazione sufficienti per gestire applicazioni basate su LLM con interfacce di conversazione e generazione di testo. Ad esempio, i miglioramenti della GPU offrono tempi di risposta rapidi per gli utenti che interagiscono con chatbot e assistenti di intelligenza artificiale.
Non tutti i carichi di lavoro traggono vantaggio dai nodi agente abilitati per la GPU e in alcuni casi le CPU sono sufficienti. Ad esempio, i carichi di lavoro che sono principalmente di input e associati all'output o che non richiedono calcoli pesanti potrebbero non migliorare con le GPU.
Storie dei clienti
Molti clienti Microsoft sfruttano i carichi di lavoro GPU per innovare per i clienti. Vedi gli esempi seguenti:
OriGen accelera le simulazioni del serbatoio energetico di 1.000 volte usando l'infrastruttura di intelligenza artificiale di Azure.
Sensyne Health aiuta il National Servizio integrità nella lotta covid-19 usando le tecnologie Microsoft HPC e IA.
Procedure consigliate per la distribuzione del carico di lavoro GPU
Il servizio Azure Kubernetes offre varie opzioni per distribuire pool di nodi e carichi di lavoro linux e Windows abilitati per GPU. Per garantire il corretto funzionamento del carico di lavoro GPU, seguire queste procedure consigliate.
Distribuzione del carico di lavoro Linux
Creare un pool di nodi con una macchina virtuale (VM) abilitata per GPU supportata e installare manualmente il plug-in del dispositivo NVIDIA per distribuire pool di nodi Linux abilitati per GPU. Questo metodo non supporta l'aggiornamento di un pool di nodi esistente per aggiungere GPU.
Visualizzare le macchine virtuali abilitate per GPU supportate in Azure. È consigliabile usare una dimensione minima di Standard_NC6s_v3 per i pool di nodi del servizio Azure Kubernetes. Il servizio Azure Kubernetes non supporta la serie NVv4 basata su GPU AMD.
Comprendere le limitazioni quando si usa un pool di nodi abilitato per GPU Linux di Azure. Le patch di sicurezza automatiche non vengono applicate e il comportamento predefinito per il cluster non è gestito.
Usare i selettori di nodo Kubernetes, l'affinità dei nodi, i taints e le tolleranze quando si pianificano i carichi di lavoro nei pool di nodi abilitati per GPU.
Distribuzione del carico di lavoro di Windows
Creare un pool di nodi con una macchina virtuale abilitata per gpu supportata per distribuire pool di nodi Windows abilitati per GPU. Il servizio Azure Kubernetes installa automaticamente i driver e i componenti NVIDIA necessari. Questo metodo non supporta l'aggiornamento di un pool di nodi esistente per aggiungere GPU.
Quando si seleziona una macchina virtuale abilitata per la GPU supportata, il servizio Azure Kubernetes installa automaticamente il driver NVIDIA CUDA o GRID appropriato. Alcuni carichi di lavoro dipendono da un driver specifico, che può influire sulla distribuzione. Per le dimensioni delle macchine virtuali serie NC e serie ND, il servizio Azure Kubernetes installa il driver CUDA. Per le dimensioni delle macchine virtuali serie NV, il servizio Azure Kubernetes installa il driver GRID.
Visualizzare le macchine virtuali abilitate per GPU supportate in Azure. È consigliabile usare una dimensione minima di Standard_NC6s_v3 per i pool di nodi del servizio Azure Kubernetes. Il servizio Azure Kubernetes non supporta la serie NVv4 basata su GPU AMD.
Comprendere le limitazioni quando si usa un pool di nodi di Windows. Kubernetes versione 1.28 e successive non supporta le GPU di Windows.
Usare i selettori di nodo Kubernetes, l'affinità dei nodi, i taints e le tolleranze quando si pianificano i carichi di lavoro nei pool di nodi abilitati per GPU.
Nota
Windows GPU è una funzionalità di anteprima. È necessario registrare il flag di WindowsGPUPreview
funzionalità.
Operatore GPU NVIDIA
L'operatore GPU NVIDIA è uno strumento che è possibile usare per distribuire e gestire in modo efficiente le risorse GPU all'interno dei cluster Kubernetes. È possibile usare l'operatore per automatizzare l'installazione, la configurazione e la manutenzione dei componenti software. Questo approccio garantisce l'uso ottimale delle GPU NVIDIA per carichi di lavoro impegnativi, ad esempio l'intelligenza artificiale e i carichi di lavoro di Machine Learning.
L'operatore GPU NVIDIA gestisce automaticamente tutti i componenti software NVIDIA necessari per distribuire GPU, ad esempio il plug-in del dispositivo NVIDIA per Kubernetes e il runtime del contenitore NVIDIA. L'operatore installa automaticamente il driver. Per altre informazioni, vedere Panoramica di NVIDIA.
Se si vuole aumentare il controllo e la flessibilità per carichi di lavoro GPU avanzati, è possibile usare l'operatore GPU NVIDIA con i nodi abilitati per la GPU nel servizio Azure Kubernetes. L'operatore GPU NVIDIA non supporta GPU Windows.
Prendere in considerazione le procedure consigliate seguenti:
Usare l'operatore GPU NVIDIA per eseguire configurazioni GPU avanzate, ad esempio la selezione della versione del driver e il time-slicing.
Ignorare l'installazione automatica del driver prima di usare l'operatore GPU.
Impostare il numero minimo su 1 quando si usa l'operatore GPU con il ridimensionamento automatico del cluster.
Nota
Microsoft non supporta o gestisce la manutenzione e la compatibilità dei driver NVIDIA come parte della distribuzione dell'immagine del nodo quando si usa l'operatore GPU.
Distribuzione del carico di lavoro GPU per i moduli APM
L'operatore della toolchain di intelligenza artificiale Kubernetes (KAITO) è un operatore Kubernetes che semplifica l'esecuzione di VM open source, ad esempio Falcon e Llama2, nel cluster Kubernetes. È possibile distribuire KAITO nel cluster del servizio Azure Kubernetes come componente aggiuntivo gestito per il servizio Azure Kubernetes. KAITO usa Karpenter per effettuare automaticamente il provisioning e la distribuzione di nodi GPU in base a una specifica nella definizione di risorsa personalizzata dell'area di lavoro del modello scelto. KAITO crea il server di inferenza come endpoint per l'LLM e riduce il tempo di onboarding complessivo in modo da poter eseguire operazioni di Machine Learning anziché la configurazione e la manutenzione dell'infrastruttura.
Per migliorare le operazioni di Machine Learning, KAITO offre le funzionalità seguenti:
Gestione delle immagini del contenitore: usare le immagini del contenitore per gestire i moduli APM. KAITO fornisce un server HTTP in modo che sia possibile usare una libreria di modelli supportata per eseguire chiamate di inferenza.
Configurazione hardware GPU: KAITO fornisce configurazioni predefinite applicate automaticamente in base ai requisiti del modello. Non è necessario ottimizzare manualmente i parametri di distribuzione per adattarsi all'hardware GPU.
Provisioning automatico dei nodi GPU: KAITO effettua automaticamente il provisioning dei nodi GPU in base ai requisiti del modello e consiglia dimensioni di VM GPU a costi inferiori per configurare l'inferenza distribuita.
Integrazione con Registro artefatti Microsoft: se la licenza LLM consente, KAITO può ospitare immagini del modello nel registro artefatto pubblico. Questo metodo semplifica l'accesso e la distribuzione di modelli supportati. Per i modelli open source con licenze MIT o Apache2 non supportate dal repository KAITO, è possibile inviare una richiesta per il nuovo onboarding del modello.
Per altre informazioni su KAITO, vedere le risorse seguenti:
- Esplorare il progetto open source KAITO
- Distribuire un modello di intelligenza artificiale nel servizio Azure Kubernetes con KAITO
- Ottimizzare i modelli linguistici con KAITO open source
- Distribuire KAITO nel servizio Azure Kubernetes usando Terraform
Scalabilità del carico di lavoro e del cluster
Per gli scenari di intelligenza artificiale e Machine Learning, è necessario distinguere tra carichi di lavoro di training e inferenza con modelli con training preliminare. Per creare ed eseguire il training del modello di Machine Learning, prendere in considerazione l'uso di calcolo GPU progettato per l'apprendimento avanzato e la parallelizzazione dei calcoli di intelligenza artificiale. Il training richiede spesso una scalabilità graduale e la distribuzione di grandi quantità di dati tra GPU per ottenere un'accuratezza elevata con il parallelismo dei dati.
Il partizionamento orizzontale del modello è una tecnica avanzata comune che è possibile usare per dividere le fasi del training del modello. È possibile assegnare GPU a attività distinte e ottimizzarne l'uso. Le GPU possono aumentare e aumentare le prestazioni dei carichi di lavoro HPC, ad esempio macchine virtuali serie NV o serie ND in Azure. Questa funzionalità consente di mantenere un utilizzo elevato delle risorse e ridurre l'intervento degli utenti per i processi di training di Machine Learning lunghi e costosi.
In alternativa, è possibile usare modelli di intelligenza artificiale open source pre-training e machine learning solo per l'inferenza. Iniziare a usare modelli popolari come Llama, Falcon o Mistral come opzione più veloce e conveniente rispetto alla creazione e al training di un LLM da zero. Per altre informazioni, vedere Modelli linguistici nel servizio Azure Kubernetes.
Quando si usano modelli con training preliminare per l'inferenza, è possibile che si verifichi un utilizzo di risorse dinamico e fluttuante, a seconda del volume di dati elaborati. Quando si eseguono dati in tempo reale tramite il modello scelto, talvolta si verificano picchi di traffico a seconda delle dimensioni e dei requisiti del modello. È necessario mantenere un livello di latenza accettabile e basso durante il processo di inferenza. Per usare in modo efficace le GPU per prestazioni elevate e bassa latenza, è possibile eseguire l'inferenza distribuita con i modelli supportati da KAITO. Questo approccio espande le opzioni di calcolo per includere SKU con numero di GPU inferiore con una o due GPU ognuna, offre disponibilità elevata nelle aree di Azure e riduce i costi di manutenzione.
Gestione dei costi del carico di lavoro GPU
Le GPU possono aumentare i costi. Monitorare correttamente i carichi di lavoro per comprendere quali sono i costi della GPU e identificare le opportunità di ottimizzazione. Per aumentare la visibilità dei costi, è possibile usare il componente aggiuntivo analisi dei costi del servizio Azure Kubernetes.
Gli scenari seguenti traggono vantaggio dalla visibilità dei costi.
Costo delle dimensioni delle macchine virtuali abilitate per GPU
Selezionare le dimensioni corrette delle MACCHINE virtuali abilitate per la GPU per ottimizzare il costo dell'esecuzione di GPU. I costi giornalieri possono variare a seconda delle dimensioni della macchina virtuale scelte. Le GPU A100 sono costose. È consigliabile evitarli a meno che il carico di lavoro non abbia requisiti specifici. L'analisi dei costi del servizio Azure Kubernetes mostra il costo giornaliero per ognuna delle macchine virtuali e suddivide i costi associati di ogni carico di lavoro eseguito nella macchina virtuale abilitata per la GPU. Usare questi dati per valutare se le dimensioni della macchina virtuale sono appropriate o se è necessaria un'opzione più conveniente.
Costo inattiva
Dopo aver creato un pool di nodi abilitato per GPU, si comportano costi per la risorsa di Azure anche se non si esegue un carico di lavoro GPU. I costi di inattività rappresentano il costo della capacità di risorse disponibile che i carichi di lavoro non usano. Questo costo aumenta rapidamente se sono presenti diversi nodi inutilizzati. Per evitare costi di inattività elevati, creare pool di nodi solo quando si esegue il carico di lavoro e usare metodi come la funzionalità di arresto del cluster quando non si esegue il carico di lavoro. L'analisi dei costi del servizio Azure Kubernetes mostra i costi inattive per ognuno dei nodi.
Overprovisioning e sottoutilizzazione
L'overprovisioning è quando si allocano più risorse del necessario per un pod. L'overprovisioning comporta sprechi di risorse e sottoutilizza. Le risorse in eccesso rimangono riservate per il nodo anche se non vengono usate. Per ridurre il provisioning eccessivo, usare il ridimensionamento automatico verticale dei pod per impostare richieste e limiti accurati in base ai modelli di utilizzo precedenti.
L'uso di sottoutilizza può verificarsi quando i carichi di lavoro non usano completamente GPU. Prendere in considerazione tecniche avanzate di condivisione e partizionamento della GPU. Invece di usare più nodi, è possibile usare un singolo nodo con il partizionamento per ottimizzare l'utilizzo della GPU. Queste tecniche consentono di allocare la quantità appropriata di accelerazione GPU per ogni carico di lavoro, che può migliorare l'utilizzo e ridurre i costi operativi della distribuzione.
Le distribuzioni di carichi di lavoro GPU Linux nel servizio Azure Kubernetes supportano GPU a più istanze. Usare questa funzionalità per partizionare una GPU NVIDIA A100 in un massimo di sette istanze indipendenti. Ogni istanza ha una propria memoria e un multiprocessore di flusso.
NVIDIA supporta altre tecniche di partizionamento, ad esempio il time-slicing e l'implementazione del servizio multiprocesso. Per applicare manualmente queste configurazioni, usare l'operatore GPU NVIDIA.
Per scenari avanzati, è possibile migliorare la compressione del contenitore delle risorse nei nodi. È possibile impostare le configurazioni dell'utilità di pianificazione ed eseguire una seconda utilità di pianificazione. Configurare e gestire un'utilità di pianificazione secondaria per usare strategie di posizionamento del carico di lavoro diverse dall'utilità di pianificazione del servizio Azure Kubernetes predefinita. Per altre informazioni, vedere Configurare più utilità di pianificazione in Kubernetes.
Collaboratori
Questo articolo viene gestito da Microsoft. Originariamente è stato scritto dai seguenti contributori.
Autore principale:
- Ayobami Ayodeji | Senior Program Manager
Altri contributori:
- Steve Buchanan | Principal Program Manager
- Sachi Desai | Product Manager
- Ally Ford | Product Manager 2
- Paolo Salvatori | Ingegnere del servizio principale
- Erin Schaffer | Content Developer 2
Per visualizzare i profili LinkedIn non pubblici, accedere a LinkedIn.
Passaggi successivi
- Usare modelli di intelligenza artificiale personalizzati per app intelligenti nel servizio Azure Kubernetes con KAITO
- Distribuire un modello di intelligenza artificiale nel servizio Azure Kubernetes con KAITO
- Distribuire un'applicazione che usa OpenAI nel servizio Azure Kubernetes
- Distribuire KAITO nel servizio Azure Kubernetes usando Terraform
- Distribuire l'estensione Azure Machine Learning nel servizio Azure Kubernetes o nei cluster Kubernetes abilitati per Azure Arc
- Informazioni sul catalogo dei modelli e sulle raccolte in Azure
- Usare GPU per i pool di nodi Windows nel servizio Azure Kubernetes
- Usare GPU nel servizio Azure Kubernetes