O blog da AWS

Como colocar um supercomputador nas mãos de todos os cientistas

Paulo Aragão, Senior Solutions Architect, Amazon Web Services (AWS)
Nina Vogl, Senior Specialist HPC Solutions Architect, Global Public Sector AWS
José Cuéncar, Senior Solutions Architect, Global Public Sector AWS

 

A Amazon Web Services (AWS) fornece recursos de TI sob demanda pela Internet e os clientes pagam somente pelo que usam. Ao invés de comprar, gerenciar, e manter seus próprios data centers e servidores, as organizações podem comprar tecnologia como poder de computação, armazenamento, bancos de dados e outros serviços, conforme necessário. Esta é uma proposta muito interessante, especialmente para Computação de Alta Performance (HPC), uma vez que o rápido avanço da tecnologia torna rapidamente obsoleto os investimentos feitos em soluções para datacenters próprios. Pesquisadores, Engenheiros, Geofísicos, Cientistas de Dados e todos os usuários de HPC conhecem as dificuldades que existem: 1/ longas filas de acesso à ambientes de HPC, 2/ atraso na execução e demora ao acesso aos resultados, levando à um atraso no desenvolvimento de um produto e a perda de competitividade no mercado, 3/ dificuldade em manter o ambiente operacional adicionando complexidade e custo ao projeto, 4/ dificuldade em obter a melhor performance devido à falta de equipamento especializado para o problema a ser resolvido, entre outros. Além disso, instituições e empresas menores muitas vezes tem dificuldade em conseguir o orçamento necessário para criar um primeiro ambiente de HPC, e contratar as pessoas adequadas para gerenciá-lo.

Neste blog, vamos explicar como usar o AWS ParallelCluster para criar e configurar um cluster de HPC de forma flexível, elástica e repetível, assim como mostraremos como gerenciar seu software de HPC da mesma maneira. A facilidade que o AWS ParallelCluster traz para os usuários de HPC permite que eles criem clusters efêmeros ou persistentes podendo adequá-los às suas necessidades orçamentárias, assim como reduzindo a complexidade operacional ao automatizar e abstrair grande parte da implementação da infraestrutura. Por fim, um benefício que a nuvem traz é o acesso às mais novas tecnologias de forma ágil, permitindo testes em diferentes tipos de equipamentos com agilidade, acelerando o acesso à grandes recursos computacionais, ajudando a reduzir o time-to-market e tudo isso com um menor custo do que datacenters próprios.

Visão geral da solução

A Nuvem AWS oferece acesso a uma infraestrutura praticamente ilimitada e oferece muitas opções de infraestrutura adequadas para cargas de trabalho de HPC, como diferentes arquiteturas de microprocessadores (Intel, AMD, ARM64), aceleração de GPGPU (nVIDIA e AMD), FPGA, chips de inferência e muito mais. As ferramentas que estamos apresentando hoje permitirão que você configure clusters de HPC com facilidade, customizado para a sua necessidade e quando precisar deles. Além disso, mostraremos como você pode tornar seu aplicativo HPC favorito disponível para estes ambientes, permitindo executar cargas de trabalho como química computacional, processamento de genoma, dinâmica de fluidos computacional, transcodificação, codificação, modelagem e simulação de tempo, só para citar alguns.

Usaremos um aplicativo de código aberto (Palabos) como exemplo para mostrar como é fácil instalar aplicativos de HPC e, em seguida, reutilizá-los em novos clusters. Palabos é um aplicativo de dinâmica dos fluidos computacional (na sigla em inglês, CFD) baseado no método Lattice Boltzman (LB). Seguiremos o passo a passo do download, instalaremos o software em um disco apartado, e então aproveitaremos essa instalação em um novo cluster. Palabos é somente um exemplo e você pode substitui-lo por qualquer um dos seus aplicativos HPC favoritos.

A arquitetura acima representa o que construiremos juntos. Os seguintes serviços serão utilizados:

  • O Amazon EC2, Elastic Compute Cloud, é um serviço web que fornece capacidade de computação segura e de tamanho variável na nuvem;
  • O AWS Cloud9 é um IDE (Integrated Development Environment) fornecido pela AWS, um “terminal de nuvem”, no qual você paga somente pelos recursos consumidos;
  • Amazon S3, Simple Storage Service, é um armazenamento de objetos que fornece uma maneira segura, escalável e durável para casos de uso como sites, data lakes e arquivos, entre outros, como dados e resultados de entrada de aplicativos HPC;
  • O AWS ParallelCluster é uma ferramenta gratuita para gerenciar e implantar clusters de código aberto. Utiliza o AWS CloudFormation para provisionar todos os recursos necessários para o cluster de HPC de forma automatizada e segura.

Passo a passo:

Este blog é dividido nas seguintes etapas:

  1. Etapa A: Criar uma única instância do Elastic Compute Cloud (EC2), para preparar o ambiente de aplicativos;
  2. Etapa B: Instalar o software de nossa escolha em um sistema de arquivos montado em um volume do Elastic Block Store conectado à instância do EC2 e cria um snapshot. Usaremos Palabos e seus pré-requisitos como exemplo.
  • Etapa C: vamos instalar o AWS ParallelCluster e configurar o arquivo que fará o deploy do nosso primeiro cluster HPC.
  • Etapa D: Executar uma carga de trabalho do Palabos a partir de um script de execução de tarefa do SLURM. Ao terminar a execução, vamos usar o NICE DCV para visualizar os resultados de forma remota, utilizando uma solução de visualização gráfica avançada de alta performance.

Antes de começar a seguir as etapas, é importante garantir os seguintes pré-requisitos:

  • Uma conta da AWS;
  • Navegador da Web (por exemplo, Chrome, Edge, Safari ou Firefox);
  • Opcional: Conhecimento básico de Linux.
  • Opcional: configurar o AWS Cloud9 para facilitar o acesso às instâncias.

Etapas detalhadas

Você pode configurar um ambiente do AWS Cloud9 para ter acesso via internet à uma IDE que facilitará todo o processo de conexão ao cluster HPC e às instâncias criadas. Para isso, siga a documentação do AWS Cloud9. Garanta que o seu ambiente será criado na mesma região que você usará para o seu cluster HPC. Neste blog post, estamos usando North Virginia (us-east-1).

Após criar o seu ambiente AWS Cloud9, conecte-se à ele e instale o AWS CLI. Além disso, copie a chave de acesso à instância Amazon EC2. Se ainda não criou esta chave, ela será criada na Etapa A. Se for o caso, você pode executar o passo 2 abaixo depois de executar a Etapa A. Os comandos abaixo instalarão o AWS CLI, criarão o arquivo de post-install, assim como o bucket no Amazon S3 e por fim fará o upload do arquivo de post-install. Lembrando que o nome do seu bucket tem que ser único, substitua o <seu-bucket-com-nome-unico> pelo nome a sua escolha.

$ sudo pip3 install awscli -U --user
$ aws s3api create-bucket —-bucket <seu-bucket-com-nome-unico> —-region us-east-1
$ cat <<EOF > postInstall.sh
#! /bin/bash
sudo yum install -y ImageMagick
EOF
$ aws s3 cp postInstall.sh s3://<seu-bucket-com-nome-unico>/postInstall.sh

Faça o upload da chave de conexão (keyPair) através do menu do AWS Cloud 9 indo em File -> Upload e escolhendo o arquivo salvo. Depois, volte ao terminal e execute o comando abaixo:

$ chmod 400 keypairhpcblog.pem

Etapa A: criar uma instância EC2 para instalar o Palabos.

Para este blog post, sugerimos seguir os passos de pré-requisitos e as etapas 1 e 2 da documentação. Ao criar sua instância, escolha como AMI a “aws-parallelcluster-2.10.4-amzn2-hvm-x86” e nomeie a sua instância como MyHPCBlogInstance. A AMI do AWS ParallelCluster se encontra na parte de Community AMIs (que fica no menu à esquerda). Não se esqueça de abrir a porta 22 TCP (SSH) para acesso ao seu IP no Security Group associado à instância. Mais detalhes nesta parte da documentação. E para saber o seu IP, poderá usar o site https://www.whatsmyip.com. Não esqueça de anotar o VPC ID e o Subnet ID pois serão necessários ao configurar o AWS ParallelCluster. E, por fim, crie uma nova chave de conexão, nomeie-a como KeyPairHPCBlog e não deixe de salvá-la pois precisaremos depois.

Etapa B: anexar o volume à instância e instalar o software

Para criar um volume Amazon Elastic Block Store (EBS) basta seguir os passos da documentação em Criar um Volume. Depois será necessário anexar este volume à instância Amazon EC2 já criada na Etapa A. Para isso, siga os passos da documentação em Vincular um Volume a uma Instância.

Depois de criado e vinculado, é necessário formatar o volume no sistema operacional. Para isso, se conecte à instância Amazon EC2 e formate o volume usando o comando “mkfs”, conforme passos abaixo. Lembre-se que para conectar à sua instância EC2 é necessário usar o IP público e substitui-lo no comando abaixo:

$ ssh -i “KeyPairHPCBlog.pem” ec2-user@instanceIP

Para formatar o disco, primeiro identifique seu ID e depois execute o comando mkfs:

$ lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0   30G  0 disk
├─nvme0n1p1   259:1    0   30G  0 part /
└─nvme0n1p128 259:2    0    1M  0 part
nvme1n1       259:3    0  100G  0 disk

$ sudo mkfs -t xfs /dev/nvme1n1

Por ultimo, vamos montar o filesystem em um diretório para podermos instalar o Palabos:

$ sudo mkdir /apps
$ sudo mount /dev/nvme1n1 /apps
$ sudo chown -R ec2-user:ec2-user /apps

Para instalarmos o Palabos há um pré-requisito de ter o pacote cmake na versão 3.0 ou superior, e as bibliotecas do HDF5 também. Vamos então atualizar o cmake-2.8 para o cmake-3.0 e instalar estas bibliotecas usando os seguintes comandos:

$ sudo yum remove cmake -y
$ sudo yum install hdf5-devel -y
$ wget https://cmake.org/files/v3.21/cmake-3.21.1.tar.gz
$ tar -xvzf cmake-3.21.1.tar.gz
$ cd cmake-3.21.1
$ ./bootstrap
$ gmake
$ sudo make install
$ . /etc/profile

O último comando carrega as variáveis de ambiente novamente, incluindo o $PATH, e com isso devemos ter o comando cmake disponível na versão correta. Podemos então instalar o Palabos. Para isso, siga os passos abaixo:

$ cd /apps
$ wget https://gitlab.com/unigespc/palabos/-/archive/v2.2.1/palabos-v2.2.1.tar.gz
$ tar xvfz palabos-v2.2.1.tar.gz
$ cd palabos-v2.2.1/build
$ cmake ..
$ make

Nota: Você pode escolher um exemplo diferente de Palabos.  Aqui usaremos a abordagem Bousinessq da Rayleigh Benard para convecção térmica 3D.  As execuções anteriores levaram aproximadamente 1h:32 minutos em 20 nós (c5n.18xlarge).  Se você está preocupado com o custo, talvez queira selecionar um exemplo menor, como cylinder2d ou cavity2d. Saiba mais sobre o Palabos neste link.

Para completar o nosso ambiente, vamos instalar o Paraview para podermos visualizar a saída do nosso processamento usando o NICE DCV. Os comandos abaixo irão baixar e instalar o Paraview:

$ wget -O - -q "https://www.paraview.org/paraview-downloads/download.php?submit=Download&version=v5.8&type=binary&os=Linux&downloadFile=ParaView-5.8.1-MPI-Linux-Python3.7-64bit.tar.gz" >> paraview-5.8.1-MPI-Linux-Python3.7-64bit.tar.gz

$ tar xvfz paraview-5.8.1-MPI-Linux-Python3.7-64bit.tar.gz

O Paraview requer que instalemos um pacote adicional chamado ImageMagick. Para usarmos todas as funcionalidades do AWS ParallelCluster, iremos deixar a instalação do ImageMagick acontecer durante a implementação do cluster HPC, usando um processo automatizado de script post-install.

Agora que temos todos os aplicativos instalados, vamos criar um snapshot para reutilizarmos ele sempre que precisarmos processar dados com estes softwares. Para criar um snapshot do seu disco EBS, vá em EC2 Dashboardà Elastic Block Store à clique em Volumes. Procure seu volume. Clique em Actions -> Create Snapshot. Coloque uma descrição no seu snapshot e clique em Create snapshot. Anote o snapshot ID pois você o usará nas próximas etapas.

Para obter mais informações, acesse a documentação da AWS.

Etapa C: instalar e configurar o AWS ParallelCluster

Agora que temos toda a fundação pronta, vamos voltar à nossa instância do Cloud9 e instalar o AWS ParallelCluster para criar nosso primeiro cluster. Os comandos a seguir irão instalar o AWS ParallelCluster e começar a configuração guiada. Não se preocupe com as respostas agora, podendo deixa-las em seu padrão. Iremos customizar nosso cluster depois:

$ pip3 install aws-parallelcluster --upgrade –-user
$ pcluster configure

Aceite todos os parâmetros com os valores padrão. Iremos alterar esta configuração usando os parâmetros a seguir. No final, teremos um cluster com:

  • Nó principal com placa gráfica nVIDIA T4 (g4dn.2xlarge) e o snapshot com as nossas aplicações anexada à ele;
  • Nós computacionais c5n.18xlarge, com Elastic Fabric Adapter (EFA) habilitado;
  • VPC com uma subnet pública para o nó principal e uma subnet privada para os nós computacionais;
  • Script de pós-instalação, armazenado no bucket do Amazon S3, será utilizado toda vez que um nó de computação for instanciado.

Para alterar a configuração inicial gerada pelo comando pcluster configure vamos editar o arquivo ~/.parallelcluster/config e substitui-lo pelo seguinte conteúdo:

*Nota: Veja as áreas destacadas e substitua seus valores de VPC, Subnet, e Snapshot. Não esqueça de fazer isso antes de colar o texto no seu terminal.

$ cat <<EOF > ~/.parallelcluster/config

[aws]
aws_region_name = us-east-1

[alias]
ssh = ssh {CFN_USER} @ {MASTER_IP} {ARGS}

[global]
cluster_template = default
update_check = true
sanity_check = true

[cluster default]
key_name = KeyPairHPCBlog
base_os = alinux2
scheduler = slurm
s3_read_resource = arn:aws:s3:::<seu-bucket-com-nome-unico>/*
post_install = s3://<seu-bucket-com-nome-unico>/postInstall.sh
post_install_args = 'R curl wget'
master_instance_type = g4dn.2xlarge
vpc_settings = default
queue_settings = compute
ebs_settings = custom

dcv_settings = dcv

[vpc default]
vpc_id = vpc-xxx
master_subnet_id = subnet-xxx

[ebs custom]
shared_dir = apps
ebs_snapshot_id = snap-xxx
volume_type = gp2

[queue compute]
enable_efa = true
disable_hyperthreading = true 
placement_group = DYNAMIC
compute_resource_settings = default

[compute_resource default]
instance_type = c5n.18xlarge
max_count = 10
initial_count = 0 
min_count = 0

[dcv dcv]
enable = master
port = 8443
access_from = 0.0.0.0/0

EOF

Após definir o seu cluster HPC neste arquivo, vamos criar o cluster HPC com um só comando:

$ pcluster create myhpcblogcluster

Ao executar este comando, o AWS ParallelCluster irá sintetizar um script do AWS Cloudformation e submetê-lo para a criação do ambiente usando infraestrutura como código. Você poderá acompanhar estes passos pelo terminal que está usando, ou indo ao painel do AWS Cloudformation.

Etapa D: executando o aplicativo e rodando a carga de trabalho

Após o término da criação do cluster, você poderá acessá-lo usando SSH sem precisar saber o IP, usando o nome que deu para o seu cluster. Basta digitar o comando abaixo no seu terminal do AWS Cloud9:

$ pcluster ssh myhpcblogcluster -i keypairhpcblog.pem

Se houver algum problema com a criação do cluster, você poderá verificar o estado e depois deletar o cluster antes de tentar de novo.

$  pcluster list –color
$ pcluster delete myhpcblogcluster

Estes, e outros comandos do AWS ParallelCluster, podem ser encontrados no guia do usuário.

Para executar a carga de trabalho com o Palabos, vamos criar um arquivo de submissão do SLURM e executá-lo.

$ cat <<EOF > slurm-job.sh

#!/bin/bash
#SBATCH --job-name=palabos
#SBATCH --output=palabos_%J.out
#SBATCH --nodes=10 # Número de nós
#SBATCH --ntasks=360 # Número de rank MPI
#SBATCH --ntasks-per-node=36 # Número de classificações de MPI por nó
#SBATCH --cpus-per-task=1 # Número de threads OpenMP para cada processo/classificação MPI
date; hostname; pwd
#export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
cd /apps/palabos-v2.2.1/examples/showCases/boussinesqThermal3d
mpirun -np 360 ./boussinesqThermal3d 1000
date

EOF

Salve o arquivo e depois rode o comando abaixo para iniciar a execução:

$ sbatch slurm-job.sh

Essa configuração especifica a execução de um trabalho em lote com o SLURM usando 10 nós de computação. Cada nó irá executar 36 tarefas usando mpirun. Ajuste os números destacados em amarelo se você planeja executar um modelo de amostra menor.  Você pode acompanhar a execução com o comando abaixo:

$ alias squeue='squeue --format="%.3i %.9P %.40j %.8T %.10M %.6D %.30R %E"'
$ squeue -i 10

A execução deve demorar por volta de 90 minutos. Para consultar os jobs agendados, e mais informações sobre o cluster HPC, você pode usar os comandos sinfo e squeue. Você pode acompanhar o progresso da execução lendo o arquivo palabos_X.out, onde “X” será o ID da submissão do job. Você verá a data impressa quando terminar. Se você decidir cancelar o trabalho, poderá fazê-lo usando o jobid (retornado do comando squeue) e o comando scancel.

Depois disso, você pode encerrar o cluster usando os comandos na seção de limpeza.  Não tente interromper instâncias no painel de controle do EC2. 

Agora, para visualizarmos os resultados utilizando o NICE DCV Server vamos voltar ao terminal do AWS Cloud9 e usar um comando do AWS ParallelCluster para criar uma URL de conexão ao NICE DCV Server.

$ pcluster dcv connect -k keypairhpcblog.pem myhpcblogcluster

Isso lhe dará um URL para se conectar ao NICE DCV válida pelos próximos 30 segundos. Use esta URL em qualquer aba de navegador para se conectar ao DCV. Você receberá um aviso de que o certificado SSL é auto-assinado, não se preocupe. O NICE DCV Server utiliza criptografia em trânsito, usando o protocolo HTTPS, e para facilitar a instalação ele se utiliza de um certificado auto-assinado próprio. Pode autorizar o seu browser a aceitar o certificado e continuar para a sessão do NICE DCV.  Após se conectar, clique em Activities à Files. Vá até a pasta do Paraview (Other Locations -> apps). Abra o Paraview indo na pasta bin e clicando duas vezes no seu ícone paraview. (obs: aguarde um pouco pois pode parecer que nada aconteceu mas o Paraview demora um pouco para iniciar em sua primeira execução)

No Paraview, vá em File -> Open. Os resultados da execução estão na pasta Palabos-v2.1/examples/showcases/bousinessThermal3d/tmp. Escolha o grupo de arquivos vti.

Na seção de propriedades, à esquerda da tela, clique em Apply e selecione temperatura e volume. Agora você verá o volume renderizado na tela.

Para obter mais detalhes sobre o AWS ParallelCluster, acesse a documentação da  Getting Started with AWS ParallelCluster.

Limpando o ambiente e deletando recursos

Para evitar cobranças futuras, recomendamos que você exclua os recursos criados neste blog. Como usamos o AWS ParallelCluster, é muito fácil excluir seu cluster e os recursos relacionados.

Cluster HPC: a partir do terminal do AWS Cloud9, pare e exclua o cluster usando os seguintes comandos:

$ pcluster stop myhpcblogcluster
$ pcluster delete myhpcblogcluster

Instâncias do EC2 usada para instalação do Palabos: navegue até o console do Amazon EC2. Selecione sua instância de preparação (a instância do EC2 que usamos para instalar Palabos e Paraview e criar o snapshot do EBS) clique em Actions à Terminate. Isso excluirá a instância sem a possibilidade de retração.

Volumes EBS e snapshot: no painel do Amazon EC2, no menu à esquerda, localize a seção Elastic Block Store e clique em Volumes. Quando a página for carregada, encontre seu volume e clique em Actions à Delete volume. Repita a mesma ação, mas clicando na seção de snapshots.

AWS Cloud9: navegue até o painel do AWS Cloud9. Selecione seu ambiente, e clique no botão Delete.

Amazon S3: navegue até o painel do Amazon S3. Selecione seu bucket. Primeiro, esvazie o bucket clicando no botão Empty. Em seguida, exclua-o clicando no botão Delete.

Conclusão

Acabamos de demonstrar como criar um cluster de HPC, instalar e executar aplicativos, e visualizar os resultados. Tudo isso utilizando recursos sob demanda, pagos conforme o uso, disponíveis na AWS. Você pode usar as mesmas etapas para criar e instalar qualquer aplicativo, ou até mesmo vários aplicativos, e “salvá-los” em um snapshot do EBS (se você instalar vários aplicativos diferentes, poderá instalá-los no mesmo snapshot ou em vários diferentes), criar clusters efêmeros ou persistentes (os quais poderá iniciar/interromper várias vezes), e aproveitar a diversidade de famílias de instâncias do Amazon EC2 e de todas as soluções focadas em HPC da AWS.

 


Sobre os autores

Paulo Aragão é um Arquiteto de Soluções Sênior que trabalha há mais de 20 anos com clientes Enterprise. Ampla experiência em Computação de Alta Performance (HPC), atualmente dedica seus dias a ajudar clientes a inovarem através do uso de serviços de IA e ML na nuvem AWS. Apaixonado por música e mergulho, gosta de ler livros, jogar World of Warcraft, e cozinhar para os amigos.

 

 

 

 

José Lorenzo Cuéncar é arquiteto sênior de soluções na Amazon Web Services para o setor público global. José ajudou várias instituições no México a adotar tecnologias de nuvem na América Latina.

 

 

 

 

Nina Vogl é arquiteta sênior especialista em soluções de HPC na Amazon Webservices no setor público global. A Nina ajudou muitos clientes em todo o mundo a executar com sucesso Provas e Pilotos de HPC na nuvem.

 

 

 

 

 

Explore mais conteúdos sobre Computação na página de Sessions On Demand.

Acesse >