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
-
AWS ParallelClusterestá instalado.
-
Tiene un key pair EC2.
-
Tiene un rol de IAM con los permisos necesarios para ejecutar lapcluster CLI.
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.
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
$
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.
-
spot-st-t2micro-1
es 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-1
es 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 sbatch
$
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 squeue
$
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.sh
dormirá por 30 segundos. Después de lo cual, busque EFA en la salida dellspci
comando. gpu_job.sh
dormirá 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.out00: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
el<cluster name>
$
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.