Tutorial do modo de fila múltipla - AWS ParallelCluster

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial do modo de fila múltipla

Como executar seus trabalhos no AWS ParallelCluster com o modo de várias filas

Este tutorial orienta você durante a execução de sua primeira tarefa Hello World no AWS ParallelCluster com Modo de fila múltipla.

Pré-requisitos
nota

O modo de fila múltipla só é compatível com o AWS ParallelCluster versão 2.9.0 ou posterior.

Configuração do cluster

Primeiro, verifique se o AWS ParallelCluster está instalado corretamente, executando o comando a seguir.

$ pcluster version

Para obter mais informações sobre o pcluster version, consulte pcluster version.

Esse comando retorna a versão do AWS ParallelCluster em execução.

Em seguida, execute o pcluster configure para gerar um arquivo de configuração básico. Siga todas as instruções que seguem esse comando.

$ pcluster configure

Para obter mais informações sobre o comando pcluster configure, consulte pcluster configure.

Depois de concluir esta etapa, você deverá ter um arquivo de configuração básica em ~/.parallelcluster/config. Esse arquivo deve conter configurações básicas de cluster e uma seção de VPC.

A próxima parte do tutorial descreve como modificar sua configuração recém-criada e iniciar um cluster com várias filas.

nota

Algumas instâncias que este tutorial usa não são elegíveis para o nível gratuito.

Para este tutorial, use a seguinte configuração.

[global] update_check = true sanity_check = true cluster_template = multi-queue [aws] aws_region_name = <Your Região da 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

Como criar seu cluster

Esta seção detalha como criar o cluster no modo de fila múltipla.

Primeiro, nomeie seu cluster multi-queue-hello-world e crie o cluster de acordo com a seção de cluster de multi-queue definida na seção anterior.

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

Para obter mais informações sobre o pcluster create, consulte pcluster create.

Quando o cluster é criado, a seguinte saída é exibida:

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

A mensagem CREATE_COMPLETE mostra que o cluster foi criado com êxito. A saída também fornece os endereços IP público e privado do nó principal.

Fazer login em seu nó principal

Use seu arquivo de chave SSH privada para fazer login no nó principal.

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

Para obter mais informações sobre o pcluster ssh, consulte pcluster ssh.

Depois de fazer login, execute o comando sinfo para verificar se suas filas do programador estão definidas e configuradas.

Para obter mais informações sobre sinfo, consulte sinfo na documentação Slurm.

$ 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

A saída mostra que você tem dois nós de computação t2.micro no estado idle que estão disponíveis no seu cluster.

nota
  • spot-st-t2micro-1 é um nó estático com st em seu nome. Esse nó está sempre disponível e corresponde ao min_count = 1 da configuração do seu cluster.

  • spot-dy-t2micro-1 é um nó dinâmico com dy em seu nome. Esse nó está disponível no momento porque corresponde a initial_count - min_count = 1 de acordo com a configuração do seu cluster. Esse nó é reduzido verticalmente após seu scaledown_idletime personalizado de cinco minutos.

Todos os outros nós estão no estado de economia de energia, indicado pelo sufixo ~ no estado do nó, sem nenhuma instância do EC2 suportando-os. A fila padrão é indicada por um sufixo * após o nome da fila. A spot é sua fila de trabalhos padrão.

Como executar o trabalho no modo de várias filas

Em seguida, tente fazer com que o trabalho fique em latência por um tempo. Posteriormente, o trabalho gera seu próprio nome de host. Certifique-se de que esse script possa ser executado pelo usuário atual.

$ 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

Envie o trabalho usando o comando sbatch. Solicite dois nós para esse trabalho com a opção -N 2 e verifique se o trabalho foi enviado com êxito. Para obter mais informações sobre sbatch, consulte sbatch na documentação do Slurm.

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

Agora, você pode visualizar a fila e verificar o status do trabalho com o comando squeue. Observe que, como você não especificou uma fila específica, a fila padrão (spot) é usada. Para obter mais informações sobre squeue, consulte squeue na documentação do Slurm.

$ 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

A saída mostra que, no momento, a tarefa está em um estado de execução. Aguarde 30 segundos para que a tarefa seja concluída e execute squeue novamente.

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

Agora que todos os trabalhos na fila foram concluídos, procure o arquivo de saída slurm-2.out em seu diretório atual.

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

A saída também mostra que o trabalho foi executado com êxito nos nós spot-st-t2micro-1 e spot-st-t2micro-2.

Agora, envie o mesmo trabalho especificando restrições para instâncias específicas com os comandos a seguir.

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

Você usou esses parâmetros para sbatch.

  • -N 3— solicita três nós

  • -p spot— envia o trabalho para a fila spot. Você também pode enviar um trabalho para a fila ondemand, especificando -p ondemand.

  • -C "[c5.xlarge*1&t2.micro*2]"— especifica as restrições específicas do nó para esse trabalho. Isso solicita que um (1) nó c5.xlarge e dois (2) nós t2.micro sejam usados para esse trabalho.

Execute o comando sinfo para visualizar os nós e as filas. (As filas em AWS ParallelCluster são chamadas de partições no 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

Os nós estão sendo ativados. Isso é indicado pelo sufixo # no estado do nó. Execute o comando squeue para visualizar informações sobre os trabalhos no cluster.

$ 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

Seu trabalho está no estado CF (CONFIGURING), aguardando que a escala das instâncias aumente verticalmente e que elas se juntem ao cluster.

Após cerca de três minutos, os nós deverão estar disponíveis e o trabalho entra no estado R (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

O trabalho termina e todos os três nós estão no estado idle.

$ 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

Então, depois que nenhum trabalho permanecer na fila, procure slurm-3.out no seu diretório 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

A saída também mostra que o trabalho foi executado com êxito nos nós correspondentes.

Você pode observar o processo de redução de escala. Em sua configuração de cluster, você especificou um scaledown_idletime personalizado de 5 minutos. Depois de cinco minutos em estado ocioso, seus nós dinâmicos spot-dy-c5xlarge-1 e spot-dy-t2micro-1 são automaticamente reduzidos verticalmente e entram no modo POWER_DOWN. Observe que o nó estático spot-st-t2micro-1 não é reduzido verticalmente.

$ 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

No código acima, você pode ver que spot-dy-c5xlarge-1 e spot-dy-t2micro-1 estão no modo POWER_DOWN. Isso é indicado pelo sufixo %. As instâncias correspondentes são encerradas imediatamente, mas os nós permanecem no estado POWER_DOWN e não ficam disponíveis para uso por 120 segundos (dois minutos). Após esse período, os nós retornam economizando energia e estão disponíveis para uso novamente. Para ter mais informações, consulte Slurm guia para o modo de fila múltipla.

Esse deve ser o estado final do cluster:

$ 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

Depois de se desconectar do cluster, você pode limpá-lo, executando o pcluster delete. Para obter mais informações sobre pcluster list e pcluster delete, consulte pcluster list e pcluster delete.

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

Execução de trabalhos em cluster com instâncias EFA e GPU

Esta parte do tutorial detalha como modificar a configuração e iniciar um cluster com várias filas que contêm instâncias com rede EFA e atributos GPU. Observe que as instâncias usadas neste tutorial têm preços mais altos.

Verifique os limites da sua conta para ter certeza de que você está autorizado a usar essas instâncias antes de prosseguir com as etapas descritas neste tutorial.

Modifique o arquivo de configuração da seguinte forma.

[global] update_check = true sanity_check = true cluster_template = multi-queue-special [aws] aws_region_name = <Your Região da 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

Criar um cluster

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

Depois da criação do cluster, use seu arquivo de chave SSH privada para fazer login no nó principal.

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

Esse deve ser o estado inicial do cluster:

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

Esta seção descreve como enviar alguns trabalhos para verificar se os nós têm atributos de EFA ou GPU.

Primeiro, escreva os scripts de trabalho. O efa_job.sh aguarda por 30 segundos. Depois disso, procure o EFA na saída do comando lspci. O gpu_job.sh aguarda por 30 segundos. Depois disso, execute nvidia-smi para mostrar as informações do GPU sobre o nó.

$ 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

Envie o trabalho com sbatch.

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

Após alguns minutos, você deverá ver os nós on-line e os trabalhos em execução.

[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

Depois que o trabalho for concluído, verifique a saída. Na saída do arquivo slurm-2.out, você pode ver que o EFA está presente no nó efa-dy-c5n18xlarge-1. Na saída do arquivo slurm-3.out, você pode ver que a saída nvidia-smi contém informações de GPU para o nó gpu-dy-g38xlarge-1.

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

Você pode observar o processo de redução de escala. Em sua configuração de cluster, você especificou um scaledown_idletime personalizado de cinco minutos. Por isso, depois de cinco minutos em estado ocioso, seus nós dinâmicos spot-dy-c5xlarge-1 e spot-dy-t2micro-1 são automaticamente reduzidos verticalmente e entram no modo POWER_DOWN. Por fim, os nós entram no modo de economia de energia e ficam disponíveis para uso novamente.

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

Depois de se desconectar do cluster, você pode limpá-lo, executando o pcluster delete <cluster name>.

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

Para ter mais informações, consulte Slurm guia para o modo de fila múltipla.