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
-
AWS ParallelCluster está instalado.
-
O AWS CLI está instalado e configurado.
-
Você tem um par de chaves EC2.
-
Você tem um perfil do IAM com as permissões necessárias para executar a CLI pcluster.
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
$
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 comst
em seu nome. Esse nó está sempre disponível e corresponde aomin_count = 1
da configuração do seu cluster. -
spot-dy-t2micro-1
é um nó dinâmico comdy
em seu nome. Esse nó está disponível no momento porque corresponde ainitial_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
$
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
$
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 filaspot
. Você também pode enviar um trabalho para a filaondemand
, 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óst2.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.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 | +-----------------------------------------------------------------------------+
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.