Tutorial sobre el modo de cola múltiple - AWS ParallelCluster

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial sobre el modo de cola múltiple

Ejecutar sus trabajosAWS ParallelCluster con el modo de cola múltiple

Este tutorial te explica cómo ejecutar tu primer trabajo en Hello WorldAWS ParallelCluster conModo de cola múltiple.

Requisitos previos
nota

El modo de cola múltiple solo se admite enAWS ParallelCluster la versión 2.9.0 o posterior.

Configuración de su clúster

En primer lugar, compruebe queAWS ParallelCluster está correctamente instalado; para ello, ejecute el siguiente comando.

$ pcluster version

Para obtener más información acerca de pcluster version, consulte pcluster version.

Este comando devuelve la versión en ejecución deAWS ParallelCluster.

A continuación, ejecutepcluster configure para generar un archivo de configuración básica. Siga todas las instrucciones que aparecen después de este comando.

$ pcluster configure

Para obtener más información acerca del comando pcluster configure, consulte pcluster configure.

Cuando realice este paso, tendrá un archivo de configuración básica en~/.parallelcluster/config. Este archivo debe contener una configuración básica del clúster y una sección de VPC.

La siguiente parte del tutorial describe cómo modificar la configuración recién creada y lanzar un clúster con varias colas.

nota

Algunas instancias utilizadas en este tutorial no son aptas para el nivel gratuito.

Para este tutorial, utilice la siguiente configuración.

[global] update_check = true sanity_check = true cluster_template = multi-queue [aws] aws_region_name = <Your Región de AWS> [scaling demo] scaledown_idletime = 5 # optional, defaults to 10 minutes [cluster multi-queue-special] key_name = < Your key name > base_os = alinux2 # optional, defaults to alinux2 scheduler = slurm master_instance_type = c5.xlarge # optional, defaults to t2.micro vpc_settings = <Your VPC section> scaling_settings = demo # optional, defaults to no custom scaling settings queue_settings = efa,gpu [cluster multi-queue] key_name = <Your SSH key name> base_os = alinux2 # optional, defaults to alinux2 scheduler = slurm master_instance_type = c5.xlarge # optional, defaults to t2.micro vpc_settings = <Your VPC section> scaling_settings = demo queue_settings = spot,ondemand [queue spot] compute_resource_settings = spot_i1,spot_i2 compute_type = spot # optional, defaults to ondemand [compute_resource spot_i1] instance_type = c5.xlarge min_count = 0 # optional, defaults to 0 max_count = 10 # optional, defaults to 10 [compute_resource spot_i2] instance_type = t2.micro min_count = 1 initial_count = 2 [queue ondemand] compute_resource_settings = ondemand_i1 disable_hyperthreading = true # optional, defaults to false [compute_resource ondemand_i1] instance_type = c5.2xlarge

creación de su clúster

En esta sección se detalla cómo crear el clúster en modo de cola múltiple.

Primero, asigne un nombre al clústermulti-queue-hello-world y cree el clúster de acuerdo con la sección demulti-queue clústeres definida en la sección anterior.

$ pcluster create multi-queue-hello-world -t multi-queue

Para obtener más información acerca de pcluster create, consulte pcluster create.

Cuando se crea el clúster, se muestra el siguiente resultado:

Beginning cluster creation for cluster: multi-queue-hello-world Creating stack named: parallelcluster-multi-queue-hello-world Status: parallelcluster-multi-queue-hello-world - CREATE_COMPLETE MasterPublicIP: 3.130.xxx.xx ClusterUser: ec2-user MasterPrivateIP: 172.31.xx.xx

El mensajeCREATE_COMPLETE indica que el clúster se creó correctamente. La salida también proporciona las direcciones IP públicas y privadas del nodo principal.

Iniciar sesión en tu nodo principal

Usa tu archivo de clave SSH privada para iniciar sesión en tu nodo principal.

$ pcluster ssh multi-queue-hello-world -i ~/path/to/keyfile.pem

Para obtener más información acerca de pcluster ssh, consulte pcluster ssh.

Tras iniciar sesión, ejecute elsinfo comando para comprobar que las colas del planificador están configuradas y configuradas.

Para obtener más información sobresinfo, consulte sinfo en la Slurmdocumentación.

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

El resultado muestra que tiene dos nodos det2.micro procesamiento en elidle estado que están disponibles en su clúster.

nota
  • spot-st-t2micro-1es un nodo estáticost con su nombre. Este nodo está siempre disponible y corresponde amin_count = 1 la configuración de su clúster.

  • spot-dy-t2micro-1es un nodo dinámicody con su nombre. Este nodo está disponible actualmente porque corresponde ainitial_count - min_count = 1 la configuración del clúster. Este nodo se reduce después descaledown_idletime la rutina de cinco minutos.

Todos los demás nodos están en estado de ahorro de energía, como se muestra con el~ sufijo en estado de nodo, sin ninguna instancia de EC2 que los respalde. La cola predeterminada se designa con un* sufijo después del nombre de la cola, al igualspot que la cola de trabajos predeterminada.

Ejecución del trabajo en modo de cola múltiple

A continuación, intente realizar un trabajo para dormir un rato. Posteriormente, el trabajo generará su propio nombre de host. Asegúrese de que el usuario actual pueda ejecutar este script.

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

Envíe el trabajo mediante elsbatch comando. Solicite dos nodos para este trabajo con la-N 2 opción y compruebe que el trabajo se haya enviado correctamente. Para obtener más información al respectosbatch, consulta sbatchla documentación de Slurm.

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

Puede ver la cola y comprobar el estado del trabajo con elsqueue comando. Tenga en cuenta que, dado que no especificó una cola específica, se utiliza la cola predeterminada (spot). Para obtener más información sobresqueue, consulte squeuela Slurmdocumentación.

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

El resultado muestra que el trabajo se encuentra actualmente en estado de ejecución. Espere 30 segundos a que el trabajo se termine y, a continuación, vuelva a ejecutar squeue.

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

Ahora que todos los trabajos de la cola han terminado, busque el archivo de salidaslurm-2.out en su directorio actual.

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

El resultado también muestra que nuestro trabajo se ejecutó correctamente en losspot-st-t2micro-2 nodosspot-st-t2micro-1 y.

Ahora envíe el mismo trabajo especificando las restricciones para instancias específicas con los siguientes comandos.

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

Usó estos parámetros parasbatch.

  • -N 3— solicita tres nodos

  • -p spot— envía el trabajo a laspot cola. También puede enviar un trabajo a laondemand cola especificando-p ondemand.

  • -C "[c5.xlarge*1&t2.micro*2]"— especifica las restricciones de nodo específicas para este trabajo. Esto solicita que se usen un (1)c5.xlarge nodo y dos (2)t2.micro nodos para este trabajo.

Ejecute elsinfo comando para ver los nodos y las colas. (Las colas de entradaAWS ParallelCluster se denominan particiones de entrada)Slurm.

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

Los nodos se están encendiendo. Esto se indica con el# sufijo del estado del nodo. Ejecute elsqueue comando para ver información sobre los trabajos del clúster.

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

Su trabajo está en el estadoCF (CONFIGURING), esperando a que las instancias se amplíen y se unan al clúster.

Después de unos tres minutos, los nodos deberían estar disponibles y el trabajo pasará al estadoR (RUNNING).

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

El trabajo finaliza y los tres nodos están en elidle estado.

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

Luego, cuando no quede ningún trabajo en la cola, puede buscarloslurm-3.out en su directorio local.

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

El resultado también muestra que el trabajo se ejecutó correctamente en los nodos correspondientes.

Puede observar el proceso de reducción. En la configuración de su clúster, especificó una configuración personalizadascaledown_idletime de 5 minutos. Después de cinco minutos en estado inactivo, sus nodos dinámicos se reducenspot-dy-t2micro-1 automáticamentespot-dy-c5xlarge-1 y entran enPOWER_DOWN modo. Tenga en cuenta que el nodo estáticospot-st-t2micro-1 no se reduce.

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

En el código anterior, puedes verlospot-dy-c5xlarge-1 yspot-dy-t2micro-1 estás enPOWER_DOWN modo. Esto se indica con el% sufijo. Las instancias correspondientes se cancelan inmediatamente, pero los nodos permanecen en elPOWER_DOWN estado y no están disponibles para su uso durante 120 segundos (dos minutos). Transcurrido este tiempo, los nodos vuelven a ahorrar energía y vuelven a estar disponibles para su uso. Para obtener más información, consulte Slurmguía para el modo de cola múltiple.

Este debe ser el estado final del clúster:

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

Cuando realice el cierre de sesión del clúster, podrá eliminarlo al abandonarpcluster delete el Para obtener más información, sobrepcluster list ypcluster delete, consultepcluster list ypcluster delete.

$ pcluster list multi-queue CREATE_COMPLETE 2.11.9 $ pcluster delete multi-queue Deleting: multi-queue ...

Ejecución de trabajos en clúster con instancias de EFA y GPU

En esta parte del tutorial se detalla cómo modificar la configuración y lanzar un clúster con varias colas que contenga instancias con recursos de GPU y redes EFA. Tenga en cuenta que las instancias que se utilizan en este tutorial tienen un precio más elevado.

Comprueba los límites de tu cuenta para asegurarte de que estás autorizado a usar estas instancias antes de continuar con los pasos descritos en este tutorial.

Modifique el archivo de configuración mediante el siguiente procedimiento.

[global] update_check = true sanity_check = true cluster_template = multi-queue-special [aws] aws_region_name = <Your Región de AWS> [scaling demo] scaledown_idletime = 5 [cluster multi-queue-special] key_name = <Your SSH key name> base_os = alinux2 # optional, defaults to alinux2 scheduler = slurm master_instance_type = c5.xlarge # optional, defaults to t2.micro vpc_settings = <Your VPC section> scaling_settings = demo queue_settings = efa,gpu [queue gpu] compute_resource_settings = gpu_i1 disable_hyperthreading = true # optional, defaults to false [compute_resource gpu_i1] instance_type = g3.8xlarge [queue efa] compute_resource_settings = efa_i1 enable_efa = true placement_group = DYNAMIC # optional, defaults to no placement group settings [compute_resource efa_i1] instance_type = c5n.18xlarge max_count = 5

creación del clúster

$ pcluster create multi-queue-special -t multi-queue-special

Una vez creado el clúster, usa tu archivo de clave SSH privada para iniciar sesión en tu nodo principal.

$ pcluster ssh multi-queue-special -i ~/path/to/keyfile.pem

Este debe ser el estado inicial del clúster:

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 5 idle~ efa-dy-c5n18xlarge-[1-5] gpu up infinite 10 idle~ gpu-dy-g38xlarge-[1-10]

En esta sección se describe cómo enviar algunos trabajos para comprobar que los nodos tienen recursos de EFA o GPU.

Primero, escribe los guiones de trabajo. efa_job.shdormirá por 30 segundos. Después de lo cual, busque EFA en la salida dellspci comando. gpu_job.shdormirá por 30 segundos. Después de lo cual, ejecutanvidia-smi para mostrar la información de la GPU sobre el nodo.

$ cat efa_job.sh #!/bin/bash sleep 30 lspci | grep "EFA" $ cat gpu_job.sh #!/bin/bash sleep 30 nvidia-smi $ chmod +x efa_job.sh $ chmod +x gpu_job.sh

Envíe el trabajo consbatch,

$ sbatch -p efa --wrap "srun efa_job.sh" Submitted batch job 2 $ sbatch -p gpu --wrap "srun gpu_job.sh" -G 1 Submitted batch job 3 $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 efa wrap ec2-user CF 0:32 1 efa-dy-c5n18xlarge-1 3 gpu wrap ec2-user CF 0:20 1 gpu-dy-g38xlarge-1 $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 1 mix# efa-dy-c5n18xlarge-1 efa* up infinite 4 idle~ efa-dy-c5n18xlarge-[2-5] gpu up infinite 1 mix# gpu-dy-g38xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10]

Después de unos minutos, debería ver los nodos en línea y los trabajos en ejecución.

[ec2-user@ip-172-31-15-251 ~]$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 4 idle~ efa-dy-c5n18xlarge-[2-5] efa* up infinite 1 mix efa-dy-c5n18xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10] gpu up infinite 1 mix gpu-dy-g38xlarge-1 [ec2-user@ip-172-31-15-251 ~]$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 4 gpu wrap ec2-user R 0:06 1 gpu-dy-g38xlarge-1 5 efa wrap ec2-user R 0:01 1 efa-dy-c5n18xlarge-1

Cuando realice el trabajo, compruebe el resultado. En el resultado delslurm-2.out archivo, puede ver que EFA está presente en elefa-dy-c5n18xlarge-1 nodo. En la salida delslurm-3.out archivo, puede ver que lanvidia-smi salida contiene información de la GPU delgpu-dy-g38xlarge-1 nodo.

$ cat slurm-2.out 00:06.0 Ethernet controller: Amazon.com, Inc. Elastic Fabric Adapter (EFA) $ cat slurm-3.out Thu Oct 1 22:19:18 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.51.05 Driver Version: 450.51.05 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla M60 Off | 00000000:00:1D.0 Off | 0 | | N/A 28C P0 38W / 150W | 0MiB / 7618MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla M60 Off | 00000000:00:1E.0 Off | 0 | | N/A 36C P0 37W / 150W | 0MiB / 7618MiB | 98% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+

Puede observar el proceso de reducción. En la configuración del clúster, especificó anteriormente una configuración personalizadascaledown_idletime de cinco minutos. Como resultado, después de cinco minutos en estado inactivo, sus nodos dinámicosspot-dy-c5xlarge-1 yspot-dy-t2micro-1, automáticamente, se reducen y entran enPOWER_DOWN modo. Finalmente, los nodos entran en el modo de ahorro de energía y vuelven a estar disponibles para su uso.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 1 idle% efa-dy-c5n18xlarge-1 efa* up infinite 4 idle~ efa-dy-c5n18xlarge-[2-5] gpu up infinite 1 idle% gpu-dy-g38xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10] # After 120 seconds $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 5 idle~ efa-dy-c5n18xlarge-[1-5] gpu up infinite 10 idle~ gpu-dy-g38xlarge-[1-10]

Cuando realice el cierre de sesión del clúster, podrá eliminarlo al abandonarpcluster delete <cluster name> el

$ pcluster list multi-queue-special CREATE_COMPLETE 2.11.9 $ pcluster delete multi-queue-special Deleting: multi-queue-special ...

Para obtener más información, consulte Slurmguía para el modo de cola múltiple.