Caratteristiche di AWS Batch

Perché Batch AWS?

Batch AWS permette di creare pacchetti di codice per i processi batch, specificarne le dipendenze e inoltrare tali processi tramite la Console di gestione AWS, le interfacce a riga di comando e i kit SDK. Una volta specificati i parametri di esecuzione e le dipendenze tra i processi, Batch AWS facilita l'integrazione con un'ampia gamma di motori di flusso di lavoro e linguaggi di elaborazione batch comuni (ad esempio Pegasus WMS, Luigi, Nextflow, Metaflow, Apache Airflow e AWS Step Functions). Batch AWS effettua in modo efficiente e dinamico il provisioning e il ridimensionamento delle risorse di calcolo di Amazon Elastic Container Service (ECS), Amazon Elastic Kubernetes Service (EKS) e AWS Fargate, offrendo la possibilità di utilizzare istanze On-Demand o Spot in base ai requisiti del processo. Batch AWS fornisce code di processi predefinite e definizioni dell'ambiente di elaborazione con cui iniziare a lavorare rapidamente.

Definizioni dei processi

I processi multi-container costituiscono una funzionalità che rende più semplice e veloce l'esecuzione di simulazioni su scala quando si testano sistemi complessi come quelli utilizzati nei veicoli autonomi e nella robotica. Grazie alla possibilità di eseguire più container in un processo, è possibile usufruire delle funzionalità avanzate di dimensionamento, pianificazione e ottimizzazione dei costi di AWS Batch senza dover ricostruire il sistema all'interno di un complesso container monolitico. Invece, puoi mantenere l'uso di più contenitori modulari più piccoli, ciascuno dei quali rappresenta diversi componenti di sistema come un ambiente virtuale 3D, sensori di percezione robotica o un sidecar per la registrazione dei dati. I processi multi-container accelerano i tempi di sviluppo riducendo le fasi di preparazione del lavoro ed eliminando la necessità di creare strumenti interni aggiuntivi. L'esecuzione di processi di simulazione con più container semplifica anche lo sviluppo del software (Dev) e le operazioni IT (Ops) definendo la responsabilità dei componenti in modo che i diversi team possano trovare e correggere gli errori nei componenti del proprio team senza essere distratti da quelli degli altri team.

Batch AWS supporta processi paralleli multi-nodo, consentendo quindi l'esecuzione di singoli lavori su più istanze EC2. Grazie a questa funzione, è possibile utilizzare AWS Batch per eseguire efficientemente carichi di lavoro come applicazioni di calcolo ad alte prestazioni (HPC) su larga scala e strettamente interdipendenti oppure l'addestramento distribuito di modelli su GPU. Batch AWS supporta inoltre Elastic Fabric Adapter, un'interfaccia di rete che consente di eseguire applicazioni che richiedono elevati livelli di comunicazione tra nodi su larga scala su AWS.

AWS Batch consente di specificare i requisiti delle risorse, come vCPU e memoria, i ruoli AWS Identity and Access Management (IAM), i punti di montaggio dei volumi, le proprietà dei container e le variabili d'ambiente per definire le modalità di esecuzione dei processi. Batch AWS esegue i processi come applicazioni containerizzate su Amazon ECS.   È anche possibile definire le dipendenze tra i diversi processi. Ad esempio, un processo batch può essere composto da tre diverse fasi di elaborazione con esigenze di risorse diverse. Mediante le dipendenze, è possibile creare tre processi consecutivi e interdipendenti che richiedono risorse differenti.

Integrazioni

AWS Batch può essere integrato con linguaggi e motori di flusso di lavoro commerciali e open source quali Pegasus WMS, Luigi, Nextflow, Metaflow, Apache Airflow e AWS Step Functions, così da poter utilizzare linguaggi di flusso di lavoro familiari per modellare le pipeline di elaborazione batch.

AWS Batch ora supporta i modelli di lancio EC2, così puoi creare modelli personalizzati per le tue risorse di calcolo mentre Batch ridimensiona le istanze per soddisfare i tuoi requisiti. Tra le diverse funzionalità, c’è la possibilità di specificare il modello di lancio EC2 per aggiungere volumi di storage, selezionare le interfacce di rete o la configurazione di autorizzazioni. I modelli di lancio EC2 riducono il numero di passaggi necessari per configurare gli ambienti batch tramite l'acquisizione di parametri di lancio all'interno di una risorsa.

 

I parametri operativi chiave dei processi in batch di AWS Batch sono disponibili nella Console di gestione AWS. È possibile consultare i parametri relativi alle capacità di elaborazione e ai processi in esecuzione, in attesa e completati. I log dei processi (ad esempio STDERR e STDOUT) sono disponibili nella console e vengono anche memorizzati tramite Amazon CloudWatch Logs.

AWS Batch usa IAM per controllare e monitorare le risorse AWS a cui i processi possono accedere, ad esempio le tabelle Amazon DynamoDB. Tramite IAM, puoi anche definire le policy per singoli utenti nell'organizzazione. Ad esempio, gli amministratori potranno avere autorizzazioni di accesso complete a qualsiasi operazione API di AWS Batch, gli sviluppatori avranno autorizzazioni limitate alla configurazione degli ambienti di elaborazione e alla registrazione dei processi, mentre gli utenti finali potranno solamente inviare ed eliminare processi.

Ambienti di elaborazione

AWS Batch può eseguire i tuoi processi batch sui tuoi cluster Amazon EKS esistenti. Si specificano i requisiti di vCPU, memoria e GPU necessari ai container e quindi li si invia a una coda collegata a un ambiente di calcolo abilitato per il cluster EKS. Batch AWS gestisce sia il dimensionamento dei nodi Kubernetes, sia la collocazione di pod all'interno dei nodi. Inoltre, AWS Batch gestisce le code, il monitoraggio delle dipendenze, i nuovi processi, l'assegnazione delle priorità e l'invio dei pod, oltre a fornire supporto per le istanze on-demand e Spot di Amazon Elastic Compute Cloud (EC2). AWS Batch si integra con il tuo cluster EKS in un diverso namespace, ciò significa che non devi preoccuparti se i processi di Batch AWS interferiscano con i processi esistenti. Infine, AWS Batch gestisce al posto tuo la capacità, così come il mantenimento di un warm pool di nodi, la limitazione della capacità a una certa quantità di vCPU, la scalabilità dei nodi e l'esecuzione di processi in un singolo cluster o su più cluster.

AWS Batch con le risorse Fargate consente di avere un'architettura completamente serverless per i processi batch in corso. Con Fargate, ogni processo riceve l'esatta quantità di CPU e memoria necessarie (entro gli SKU di Fargate consentiti), in modo che non vi sia alcuno spreco di risorse o la necessità di attendere l'avvio di un'istanza EC2.

Agli utenti di AWS Batch, Fargate consente un livello di separazione da EC2 aggiuntivo. Non è necessario gestire o applicare patch ad Amazon Machine Images (AMI). Quando invii a Batch i processi compatibili con Fargate, non devi preoccuparti di gestire due servizi diversi se alcuni carichi di lavoro vengono eseguiti su EC2 e altri su Fargate.

AWS fornisce un sistema di pianificazione completo nativo per il cloud con una coda gestita e la capacità di specificare priorità, nuovi tentativi, dipendenze, timeout e altro ancora. Batch gestisce l'invio a Fargate e il ciclo di vita dei processi automaticamente.

Fargate offre anche vantaggi in termini di sicurezza che non richiedono alcun sforzo aggiuntivo (ad esempio, conformità SOX, PCI) e isolamento tra le risorse di calcolo per ogni processo.

Pianificazione

Grazie ad AWS Batch puoi impostare più code con diversi livelli di priorità. I processi in batch vengono inseriti nelle code fino a quando non sono disponibili le risorse di calcolo necessarie per l’esecuzione del processo. La funzione di pianificazione di AWS Batch stima quando, dove e come eseguire i processi inoltrati a una coda in base ai requisiti di ciascun processo. Questa funzione valuta la priorità di ciascuna coda ed esegue i processi in ordine di priorità su risorse di calcolo ottimali (ad esempio memoria o CPU ottimizzata), ammesso che non prevedano dipendenze in attesa.

La pianificazione della GPU permette di specificare il numero e il tipo di acceleratori che le attività richiedono come variabili di input per la definizione dei processi in AWS Batch. AWS Batch ridimensiona le istanze adatte ai tuoi lavori in base al numero richiesto di GPU e isola gli acceleratori in base alle esigenze di ciascun lavoro, affinché solo i container corretti possano accedervi.

Dimensionamento

Quando utilizzi Fargate o AWS Fargate Spot con AWS Batch, devi configurare in Batch solo pochi concetti (ambiente di elaborazione, coda processi e definizione di processo) per avere una coda, un sistema di pianificazione e un'architettura di calcolo completi senza dover gestire una singola parte dell'infrastruttura di calcolo.

Se si desiderano istanze EC2, AWS Batch fornisce ambienti di elaborazione gestiti che effettuano il provisioning e ricalibrano automaticamente le risorse di calcolo in base ai volumi e ai requisiti dei lavori inoltrati. Puoi configurare gli ambienti di elaborazione gestiti di AWS Batch con requisiti come il tipo di istanze EC2, le configurazioni della sottorete VPC, il numero minimo/massimo/desiderato di vCPU in tutte le istanze e l'importo che sei disposto a pagare per le istanze Spot in percentuale al prezzo dell'istanza on demand.

In alternativa, è possibile effettuare il provisioning e gestire le risorse di elaborazione all'interno di ambienti di elaborazione non gestiti da AWS Batch se hai bisogno utilizzare configurazioni di istanze EC2 diverse da quelle fornite dagli ambienti di elaborazione gestiti (ad esempio volumi EBS di dimensioni maggiori oppure sistemi operativi differenti). È sufficiente effettuare il provisioning di istanze EC2 che includano l'agente di Amazon ECS ed eseguano versioni supportate di Linux e Docker. AWS Batch eseguirà processi in batch nelle istanze EC2 allocate.

Con AWS Batch, puoi scegliere tre metodi per assegnare le risorse di calcolo. Queste strategie ti consentono di tenere conto della velocità di trasmissione effettiva e del prezzo quando decidi in che modo AWS Batch deve scalare le istanze.

Migliore adattamento: AWS Batch seleziona un tipo di istanza che si adatta meglio alle esigenze dei processi, dando priorità al tipo di istanza più economico. Se non sono disponibili ulteriori istanze del tipo selezionato, AWS Batch attenderà la disponibilità di nuove istanze aggiuntive. Se non sono disponibili sufficienti istanze o se l'utente sta raggiungendo i limiti del servizio Amazon EC2, i processi aggiuntivi non verranno eseguiti fino al completamento di quelli già in corso. Questa strategia di allocazione mantiene i costi più bassi ma può limitare il dimensionamento.

Migliore adattamento progressivo: AWS Batch selezionerà altri tipi di istanze sufficientemente grandi da soddisfare i requisiti dei processi in coda, dando priorità ai tipi di istanza con un costo inferiore per unità vCPU. Se non sono disponibili ulteriori istanze dei tipi di istanza precedentemente selezionati, AWS Batch selezionerà nuovi tipi di istanza.

Capacità spot ottimizzata: AWS Batch selezionerà uno o più tipi di istanza sufficientemente grandi da soddisfare i requisiti dei processi in coda, dando priorità ai tipi di istanza che hanno meno probabilità di essere interrotti. Questa strategia di allocazione è disponibile solo per le risorse di calcolo dell'istanza Spot.