View a markdown version of this page

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

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 il primo lavoro "Hello World" in AWS ParallelCluster modalità coda multipla.

Quando si utilizza l'interfaccia a riga di AWS ParallelCluster comando (CLI) o l'API, si pagano solo le AWS risorse create quando si creano o si aggiornano AWS ParallelCluster immagini e cluster. Per ulteriori informazioni, consulta AWS servizi usati da AWS ParallelCluster.

Prerequisiti

Configura il tuo cluster

Innanzitutto, verifica che AWS ParallelCluster sia 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, pcluster configure esegui 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 configura pcluster.

Dopo aver completato questo passaggio, viene visualizzato un file di configurazione di base denominatomulti-queue-mode.yaml. 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 in multi-queue-cluster 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.1", "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.1", "clusterStatus": "CREATE_IN_PROGRESS" } }

Quando il cluster viene creato, viene visualizzato il clusterStatus campoCREATE_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 il sinfo comando per verificare che le code di pianificazione siano impostate e configurate.

Per ulteriori informazionisinfo, consulta https://slurm.schedmd.com/sinfo.html sinfo nella documentazione. Slurm

$ 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 hai uno t2.micro e un nodo di c5.xlarge calcolo nello idle stato disponibile nel tuo cluster.

Gli altri nodi sono tutti in stato di risparmio energetico, indicato dal ~ suffisso nello stato del nodo, e non sono supportati 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. Assicuratevi 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. Richiedete due nodi per questo job con l'-N 2opzione e verificate che il job venga inviato correttamente. Per ulteriori informazionisbatch, consulta la documentazione sbatch di Slurm.

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

Puoi visualizzare la coda e controllare lo stato del lavoro con il comando. squeue Poiché non è stata specificata una coda specifica, viene utilizzata la coda predefinita (). spot Per ulteriori informazioni susqueue, consulta squeue la documentazione. Slurm

$ 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. Attendi che il lavoro finisca. Questa operazione richiede circa 30 secondi. Quindi, corri squeue di nuovo.

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

Ora che i lavori in coda sono tutti terminati, cercate il file di output denominato slurm-1.out nella directory corrente.

$ 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 sui nodi spot-st-t2micro-1 andspot-st-c5xlarge-1.

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 alla spot coda. È inoltre possibile inviare un lavoro alla ondemand coda specificando. -p ondemand

  • -C "[c5.xlarge*1&t2.micro*2]"— specifica i vincoli di nodo specifici per questo job. Ciò richiede l'utilizzo di un c5.xlarge nodo e due t2.micro nodi per questo job.

Esegui il sinfo comando per visualizzare i nodi e le code. Le code in ingresso AWS ParallelCluster sono denominate 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 le 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 job è nello stato 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 passa allo stato R (RUNNING).

$ 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 termina e tutti e tre i nodi sono nello 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, se nessun lavoro è rimasto in coda, controllalo slurm-2.out nella tua directory 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 esserti disconnesso dal cluster, puoi effettuare la pulizia pcluster delete-cluster eseguendo. 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" } }