Ejecución de trabajos en un clúster en 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.

Ejecución de trabajos en un clúster en modo de cola múltiple

En este tutorial se explica cómo ejecutar su primer trabajo “Hello World“ en AWS ParallelCluster con el modo de cola múltiple.

Al utilizar la interfaz de línea de comandos (CLI) o API de AWS ParallelCluster, solo paga por los recursos de AWS que se crean al crear o actualizar imágenes y clústeres de AWS ParallelCluster. Para obtener más información, consulte Servicios de AWS utilizados por AWS ParallelCluster.

La interfaz de usuario de AWS ParallelCluster se basa en una arquitectura sin servidor y, en la mayoría de los casos, se puede utilizar en la categoría de nivel AWS gratuito. Para obtener más información, consulte Costes de la interfaz de usuario de AWS ParallelCluster.

Requisitos previos

Configuración de su clúster

Para comprobar que AWS ParallelCluster se ha instalado correctamente, 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 de AWS ParallelCluster.

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

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

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

Cuando realice este paso, multi-queue-mode.yaml aparecerá un archivo de configuración básico con el nombre. Este archivo contiene una configuración de clúster básica.

En el siguiente paso, modificará el nuevo archivo de configuración y lanzará un clúster con varias colas.

nota

Algunas instancias que se utilizan en este tutorial no son aptas para la versión gratuita.

Para este tutorial, modifique el archivo de configuración para que coincida con la siguiente configuración. Los elementos que están resaltados en rojo representan los valores del archivo de configuración. Mantén tus propios valores.

Region: region-id Image: Os: alinux2 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

Cree su clúster de

Cree un clúster con un nombre multi-queue-cluster basado en su archivo de configuración.

$ 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.7.0", "clusterStatus": "CREATE_IN_PROGRESS" } }

Para obtener más información acerca del comando pcluster create-cluster, consulte pcluster create-cluster.

Para comprobar el estado del clúster, use el comando siguiente.

$ 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.7.0", "clusterStatus": "CREATE_IN_PROGRESS" } }

Cuando se crea el clúster, se muestra el clusterStatus campo CREATE_COMPLETE.

Inicie sesión en el nodo director

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

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

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

Después de iniciar sesión, ejecute el comando sinfo para comprobar que sus colas de programador se instalan y configuran.

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

$ 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]

El resultado muestra que tiene uno t2.micro y un nodo de c5.xlarge cómputo en el idle estado que están disponibles en su clúster.

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

Ejecute el trabajo en modo de cola múltiple

A continuación, intente ejecutar un trabajo para dormir durante un tiempo. Posteriormente, el trabajo genera su propio nombre de servidor. Asegúrese de que el usuario actual pueda ejecutar este script.

$ 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

Envíe el trabajo mediante el comando sbatch. Solicite dos nodos para este trabajo con la -N 2 opción y compruebe que el trabajo se envía correctamente. Para obtener más información acerca de sbatch, consulte sbatch en la documentación de Slurn.

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

Ahora puede ver la cola y comprobar el estado del trabajo con el comando squeue. Como no especificó una cola específica, se usa la cola predeterminada (spot). Para obtener más información acerca de squeue, consulte squeue en la documentación 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

El resultado muestra que el trabajo se encuentra actualmente en estado de ejecución. Espere a que finalice la tarea. Este proceso tarda por 30 segundos. Luego, corre de squeue nuevo.

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

Ahora que todos los trabajos de la cola han terminado, busque el archivo de salida cuyo nombre aparece slurm-1.out en el directorio actual.

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

El resultado muestra que el trabajo se ha ejecutado correctamente en los nodos spot-st-t2micro-1 y spot-st-c5xlarge-1.

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 2

Ha utilizado estos parámetros para sbatch:

  • -N 3— solicita tres nodos.

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

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

Ejecute el sinfo comando para ver los nodos y las colas. Las colas de entrada AWS ParallelCluster se denominan particiones de entrada en 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]

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

$ 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

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

Transcurridos unos tres minutos, los nodos estarán disponibles y el trabajo pasará al estado 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

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

$ 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]

A continuación, cuando no quede ningún trabajo en la cola, compruébelo slurm-2.out en su directorio local.

$ 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

Este es el estado final del clúster.

$ 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]

Cuando realice la sesión en el clúster, podrá eliminarla al abandonar el clúster pcluster delete-cluster. Para obtener más información, consulte pcluster list-clusters y 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" } }