Descrivere l'integrazione e la scalabilità automatica dell'utilità di pianificazione Azure CycleCloud

Completato

L'agilità del cloud consente alle aziende di trarre vantaggio dalle funzionalità di iperscalabilità di Azure riducendo al minimo i costi operativi associati all'uso delle risorse di calcolo. La possibilità di dimensionare automaticamente la quantità di risorse in risposta ai modelli di utilizzo è un aspetto fondamentale di tale agilità. Nel contesto di Azure CycleCloud e HPC, ciò significa implementare una stretta correlazione tra le richieste di risorse dei processi del cluster e il numero di nodi di calcolo del cluster.

In generale, l'orchestrazione del ridimensionamento dei nodi del cluster è responsabilità delle utilità di pianificazione. Le utilità di pianificazione devono riuscire a comunicare le proprie richieste alla piattaforma che fornisce le risorse di calcolo. Azure CycleCloud consente di implementare questa funzionalità. In questa unità vengono illustrati i principi di questa implementazione.

Qual è il ruolo di Azure CycleCloud nella scalabilità automatica del cluster?

Azure CycleCloud facilita la distribuzione delle utilità di pianificazione in Azure, che a loro volta distribuiscono e gestiscono i processi in esecuzione nei cluster costituiti dalle risorse di Azure. Azure CycleCloud non funziona come utilità di pianificazione, ma come intermediario tra le utilità di pianificazione e la piattaforma sottostante. Azure CycleCloud semplifica anche lo sviluppo della funzionalità di scalabilità automatica per le utilità di pianificazione corrispondenti fornendo un'interfaccia di programmazione basata sull'API REST e una libreria client basata su Python.

Azure CycleCloud consente di correlare il comportamento dei cluster gestiti a livello di scalabilità automatica con la lunghezza delle code dei processi del cluster. È possibile personalizzare ulteriormente questo comportamento definendo i parametri dei modelli che controllano, ad esempio, l'intervallo di tempo dopo il quale i nodi inattivi vengono terminati o la frequenza dei controlli di arresto automatico.

Tutti i modelli predefiniti espongono le impostazioni di scalabilità automatica direttamente nell'interfaccia grafica di Azure CycleCloud. In ogni caso, le impostazioni includono l'opzione per specificare i limiti minimo e massimo dell'intervallo di scalabilità automatica, espresso come numero di core CPU. Il limite massimo consente di ridurre al minimo la possibilità di addebiti imprevisti. È possibile limitare ulteriormente le conseguenze di questo rischio impostando avvisi relativi al budget.

Con la soglia minima impostata su 0, la creazione di un cluster comporta solo il provisioning del nodo head dell'utilità di pianificazione. Quando tuttavia l'utilità di pianificazione rileva processi accodati, avvia il provisioning dei nodi di calcolo necessari per eseguire il carico di lavoro corrispondente, fino al limite definito. Per supportare processi in parallelo o ad accoppiamento debole, in cui le singole attività vengono eseguite indipendentemente l'una dall'altra, i processi iniziano a essere eseguiti non appena il primo nodo diventerà disponibile. Per i processi strettamente accoppiati, ad esempio quelli che usano la funzionalità MPI (Message Passing Interface), il tempo di attesa è più lungo, a seconda della portata delle dipendenze tra i nodi. Dopo che la coda di processi è rimasta vuota per un periodo di tempo superiore al tempo di inattività consentito, i nodi di calcolo iniziano ad arrestarsi automaticamente e il cluster è costituito ancora una volta solo dal nodo head dell'utilità di pianificazione.

Nota

I concetti sottostanti descritti in questa unità sono comuni alle diverse utilità di pianificazione, ma i dettagli dell'implementazione sono diversi a seconda dell'utilità di pianificazione. Per informazioni approfondite su ogni implementazione, vedere la documentazione delle singole utilità di pianificazione.

Come integrare le utilità di pianificazione con la scalabilità automatica di Azure CycleCloud

I due componenti principali che implementano l'integrazione con la scalabilità automatica di Azure CycleCloud sono la libreria di scalabilità automatica e il calcolatore della domanda di Azure CycleCloud.

Diagramma dell'architettura generale di Azure CycleCloud.

La libreria di scalabilità automatica di Azure CycleCloud è un progetto open source ospitato da GitHub che consente agli helper Python di semplificare lo sviluppo della scalabilità automatica per qualsiasi utilità di pianificazione distribuita in Azure. Gli helper usano l'API REST di Azure CycleCloud per gestire il provisioning delle risorse di Azure. Il progetto usa Python 3 e ha molte dipendenze di Python. ma le funzionalità principali si basano sulla libreria client di Python per Azure CycleCloud. La scalabilità automatica si integra con i nodi head dell'utilità di pianificazione che monitorano le code di processi. La scalabilità automatica aumenta o riduce il numero di nodi di calcolo interagendo con l'API REST di scalabilità automatica in esecuzione nel server applicazioni di Azure CycleCloud.

Il calcolatore della richiesta è responsabile della valutazione dei requisiti delle risorse in base ai dati dei nodi di calcolo e dei processi raccolti dall'utilità di pianificazione. Questa valutazione considera i vincoli di calcolo e di rete, ad esempio le dimensioni massime del cluster o i limiti relativi a InfiniBand. I requisiti delle risorse risultanti vengono convertiti in una richiesta di provisioning o deprovisioning di macchine virtuali di Azure con una determinata dimensione e configurazione. La libreria di scalabilità automatica inoltra queste richieste all'API REST di Azure CycleCloud, che quindi le recapita ad Azure Resource Manager tramite l’agente di orchestrazione.

Nota

Mentre l'integrazione dell'utilità di pianificazione supporta i carichi di lavoro ad accoppiamento debole o in parallelo in cui la gestione delle dimensioni del cluster è il fattore principale, Azure CycleCloud supporta anche carichi di lavoro strettamente accoppiati, in cui la prossimità dei nodi e la latenza di rete sono fondamentali.