Executando trabalhos em um cluster de modo de várias filas - 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á.

Executando trabalhos em um cluster de modo de várias filas

Este tutorial aborda como executar seu primeiro trabalho "Hello World" no modo AWS ParallelCluster de várias filas.

Ao usar a interface de linha de AWS ParallelCluster comando (CLI) ou a API, você paga apenas pelos AWS recursos criados ao criar ou atualizar AWS ParallelCluster imagens e clusters. Para ter mais informações, consulte AWS serviços usados por AWS ParallelCluster.

A AWS ParallelCluster interface do usuário é construída em uma arquitetura sem servidor e você pode usá-la na categoria AWS Free Tier na maioria dos casos. Para ter mais informações, consulte Custos de interface de usuário do AWS ParallelCluster.

Pré-requisitos

Configure seu cluster

Primeiro, verifique se 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 em execução do AWS ParallelCluster.

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 --config multi-queue-mode.yaml

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

Depois de concluir esta etapa, um arquivo de configuração básico chamado multi-queue-mode.yaml é exibido. Esse arquivo contém uma configuração básica de cluster.

Na próxima etapa, você modifica seu novo arquivo de configuração e inicia 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, modifique seu arquivo de configuração para que corresponda à configuração a seguir. Os itens destacados em vermelho representam os valores do arquivo de configuração. Mantenha seus próprios 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

Crie seu cluster do

Crie um cluster chamado multi-queue-cluster com base no seu arquivo de configuração.

$ 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 obter mais informações sobre o comando pcluster create-cluster, consulte pcluster create-cluster.

Para verificar o status do cluster, execute o comando a seguir.

$ 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" } }

Quando o cluster é criado, o campo clusterStatus exibe CREATE_COMPLETE.

Faça o login no nó principal.

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

$ pcluster ssh --cluster-name multi-queue-cluster -i ~/path/to/yourkeyfile.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 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]

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

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 Amazon 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.

Executar 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.

$ 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

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 1

Agora, você pode visualizar a fila e verificar o status do trabalho com o comando squeue. 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) 1 spot wrap ec2-user R 0:10 2 spot-st-c5xlarge-1,spot-st-t2micro-1

A saída mostra que, no momento, a tarefa está em um estado de execução. Aguarde o término do trabalho. Isso leva cerca de 30 segundos. Em seguida, 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 chamado slurm-1.out em seu diretório atual.

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

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

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 2

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 nó c5.xlarge e dois nós t2.micro sejam usados para esse trabalho.

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

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) 2 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 ficam disponíveis e o trabalho entra no 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

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

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

Esse é o estado final do cluster.

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

Depois de se desconectar do cluster, você pode limpá-lo, executando o pcluster delete-cluster. Para ter mais informações, consulte pcluster list-clusters e 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" } }