View a markdown version of this page

Esecuzione di processi in un cluster in modalità coda multipla - AWS ParallelCluster

Questa documentazione fa riferimento AWS ParallelCluster. Per l'esecuzione di carichi di lavoro HPC e AI, consigliamo AWS Servizio di calcolo parallelo (AWS PEZZI), il nostro servizio Slurm gestito che ti consente di concentrarti sull'esecuzione dei carichi di lavoro anziché sulla gestione dell'infrastruttura.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esecuzione di processi in un cluster in modalità coda multipla

Questo tutorial spiega come eseguire la prima»Hello World«lavoro in corso AWS ParallelCluster con modalità coda multipla.

Quando si utilizza AWS ParallelCluster interfaccia a riga di comando (CLI) o API, paghi solo AWS risorse che vengono create durante la creazione o l'aggiornamento AWS ParallelCluster immagini e cluster. Per ulteriori informazioni, consulta AWS servizi usati da AWS ParallelCluster.

Prerequisiti

Configura il tuo cluster

Innanzitutto, verificalo AWS ParallelCluster viene installato correttamente eseguendo il comando seguente.

$ pcluster version

Per ulteriori informazioni su pcluster version, consultare versione pcluster.

Questo comando restituisce la versione in esecuzione di AWS ParallelCluster.

Quindi, corri pcluster configure per generare un file di configurazione di base. Segui tutte le istruzioni che seguono questo comando.

$ pcluster configure --config multi-queue-mode.yaml

Per ulteriori informazioni sul comando pcluster configure, consulta pcluster configura.

Dopo aver completato questo passaggio, un file di configurazione di base denominato multi-queue-mode.yaml appare. Questo file contiene una configurazione di base del cluster.

Nel passaggio successivo, si modifica il nuovo file di configurazione e si avvia un cluster con più code.

Nota

Alcuni esempi utilizzati da questo tutorial non sono idonei al livello gratuito.

Per questo tutorial, modifica il file di configurazione in modo che corrisponda alla seguente configurazione. Gli elementi evidenziati in rosso rappresentano i valori del file di configurazione. Mantieni i tuoi valori.

Region: region-id Image: Os: alinux2023 HeadNode: InstanceType: c5.xlarge Networking: SubnetId: subnet-abcdef01234567890 Ssh: KeyName: yourkeypair Scheduling: Scheduler: slurm SlurmQueues: - Name: spot ComputeResources: - Name: c5xlarge InstanceType: c5.xlarge MinCount: 1 MaxCount: 10 - Name: t2micro InstanceType: t2.micro MinCount: 1 MaxCount: 10 Networking: SubnetIds: - subnet-abcdef01234567890 - Name: ondemand ComputeResources: - Name: c52xlarge InstanceType: c5.2xlarge MinCount: 0 MaxCount: 10 Networking: SubnetIds: - subnet-021345abcdef6789

Creazione di un cluster

Crea un cluster denominato multi-queue-cluster in base al tuo file di configurazione.

$ pcluster create-cluster --cluster-name multi-queue-cluster --cluster-configuration multi-queue-mode.yaml { "cluster": { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.16.2", "clusterStatus": "CREATE_IN_PROGRESS" } }

Per ulteriori informazioni sul comando pcluster create-cluster, consulta pcluster create-cluster.

Per verificare lo stato del cluster, esegui il comando seguente.

$ pcluster list-clusters { "cluster": { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.16.2", "clusterStatus": "CREATE_IN_PROGRESS" } }

Quando il cluster viene creato, clusterStatus il campo mostra CREATE_COMPLETE.

Accedi al nodo principale

Usa il tuo file di chiave SSH privato per accedere al nodo principale.

$ pcluster ssh --cluster-name multi-queue-cluster -i ~/path/to/yourkeyfile.pem

Per ulteriori informazioni su pcluster ssh, consultare pcluster ssh.

Dopo aver effettuato l'accesso, esegui sinfo comando per verificare che le code dello scheduler siano impostate e configurate.

Per ulteriori informazioni su sinfo, vedi sinfo nel Slurm documentazione.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 18 idle~ spot-dy-c5xlarge-[1-9],spot-dy-t2micro-[1-9] spot* up infinite 2 idle spot-st-c5xlarge-1,spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

L'output mostra che ne hai uno t2.micro e uno c5.xlarge nodo di calcolo in idle stati disponibili nel tuo cluster.

Gli altri nodi sono tutti in stato di risparmio energetico, indicato dal ~ suffisso nello stato del nodo, senza che siano supportate da istanze Amazon EC2. La coda predefinita è indicata da un * suffisso dopo il nome della coda. spot è la coda di lavoro predefinita.

Esegui il processo in modalità coda multipla

Quindi, prova a far addormentare un lavoro per un po'. Successivamente, il lavoro emette il proprio nome host. Assicurati che questo script possa essere eseguito dall'utente corrente.

$ tee <<EOF hellojob.sh #!/bin/bash sleep 30 echo "Hello World from \$(hostname)" EOF $ chmod +x hellojob.sh $ ls -l hellojob.sh -rwxrwxr-x 1 ec2-user ec2-user 57 Sep 23 21:57 hellojob.sh

Invia il lavoro utilizzando il sbatch comando. Richiedi due nodi per questo lavoro con il -N 2 opzione e verifica che il lavoro venga inviato correttamente. Per ulteriori informazioni su sbatch, vedi sbatch nel documentazione Slurm.

$ sbatch -N 2 --wrap "srun hellojob.sh" Submitted batch job 1

Puoi visualizzare la tua coda e controllare lo stato del lavoro con squeue comando. Poiché non hai specificato una coda specifica, la coda predefinita (spot) viene utilizzata. Per ulteriori informazioni su squeue, vedi squeue nel Slurm documentazione.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 1 spot wrap ec2-user R 0:10 2 spot-st-c5xlarge-1,spot-st-t2micro-1

L'output indica che il processo è attualmente in un stato di esecuzione. Aspetta che il lavoro finisca. Questa operazione richiede circa 30 secondi. Quindi, corri squeue ancora.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)

Ora che i lavori in coda sono tutti terminati, cerca il file di output denominato slurm-1.out nella tua cartella attuale.

$ cat slurm-1.out Hello World from spot-st-t2micro-1 Hello World from spot-st-c5xlarge-1

L'output mostra che il processo è stato eseguito correttamente su spot-st-t2micro-1 e spot-st-c5xlarge-1 nodi.

Ora invia lo stesso lavoro specificando i vincoli per istanze specifiche con i seguenti comandi.

$ sbatch -N 3 -p spot -C "[c5.xlarge*1&t2.micro*2]" --wrap "srun hellojob.sh" Submitted batch job 2

Hai usato questi parametri per sbatch:

  • -N 3— richiede tre nodi.

  • -p spot— invia il lavoro al spot coda. Puoi anche inviare un lavoro al ondemand coda specificando -p ondemand.

  • -C "[c5.xlarge*1&t2.micro*2]"— specifica i vincoli di nodo specifici per questo job. Ciò richiede uno c5.xlarge nodo e due t2.micro nodi da utilizzare per questo lavoro.

Esegui il sinfo comando per visualizzare i nodi e le code. Code in AWS ParallelCluster sono chiamate partizioni in Slurm.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 1 alloc# spot-dy-t2micro-1 spot* up infinite 17 idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9] spot* up infinite 1 mix spot-st-c5xlarge-1 spot* up infinite 1 alloc spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

I nodi si stanno accendendo. Ciò è indicato dal # suffisso sullo stato del nodo. Esegui il squeue comando per visualizzare informazioni sui lavori nel cluster.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 spot wrap ec2-user CF 0:04 3 spot-dy-c5xlarge-1,spot-dy-t2micro-1,spot-st-t2micro-1

Il tuo lavoro è nel CF (CONFIGURING), in attesa che le istanze si ingrandiscano e si uniscano al cluster.

Dopo circa tre minuti, i nodi sono disponibili e il job entra nel R (RUNNING) stato.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 spot wrap ec2-user R 0:07 3 spot-dy-t2micro-1,spot-st-c5xlarge-1,spot-st-t2micro-1

Il lavoro viene completato e tutti e tre i nodi si trovano nel idle stato.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 17 idle~ spot-dy-c5xlarge-[1-9],spot-dy-t2micro-[2-9] spot* up infinite 3 idle spot-dy-t2micro-1,spot-st-c5xlarge-1,spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

Quindi, dopo che nessun lavoro è rimasto in coda, verifica slurm-2.out nella tua rubrica locale.

$ cat slurm-2.out Hello World from spot-st-t2micro-1 Hello World from spot-dy-t2micro-1 Hello World from spot-st-c5xlarge-1

Questo è lo stato finale del cluster.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 17 idle~ spot-dy-c5xlarge-[1-9],spot-dy-t2micro-[2-9] spot* up infinite 3 idle spot-dy-t2micro-1,spot-st-c5xlarge-1,spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

Dopo la disconnessione dal cluster, è possibile effettuare la pulizia eseguendo pcluster delete-cluster. Per ulteriori informazioni, consulta pcluster list-clusters e pcluster delete-cluster.

$ pcluster list-clusters { "clusters": [ { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "CREATE_COMPLETE", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.1.4", "clusterStatus": "CREATE_COMPLETE" } ] } $ pcluster delete-cluster -n multi-queue-cluster { "cluster": { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "DELETE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.1.4", "clusterStatus": "DELETE_IN_PROGRESS" } }