Execute simulações de dinâmica molecular da Gromacs com fluidos numéricos Slurm-GCP

1. Introdução

Última atualização:25/04/2022

O que você criará

Neste codelab, você vai implantar um cluster de computação de alto desempenho (HPC) de escalonamento automático no Google Cloud.Uma implantação do Terraform cria esse cluster com o Gromacs instalado pelo Spack. O cluster será gerenciado com o programador de jobs do Slurm. Quando o cluster for criado, execute os benchmarks benchMEM, benchPEP ou benchRIB.

O que você aprenderá

  • Como implantar um cluster de HPC compatível com o programador de jobs Slurm
  • Como executar simulações de dinâmica molecular aceleradas por GPU com o Gromacs no Google Cloud usando um job em lote do Slurm

O que é preciso

2. Configuração

Para concluir este codelab , é necessário ativar as APIs Compute Engine e Cloud Build. Para ativar as APIs Compute Engine e Cloud Build, abra o Cloud Shell e execute os comandos a seguir. Substitua project-id por abaixo.

gcloud config set project <PROJECT_ID>
gcloud services enable compute.googleapis.com
gcloud services enable cloudbuild.googleapis.com

Atenção:se você planeja usar SSH de terceiros (por exemplo, OpenSSH) para se conectar ao cluster, anexe uma chave SSH ao seu perfil de identidade na nuvem usando o Login do SO. Saiba mais sobre como adicionar chaves SSH ao seu perfil do Cloud Identity.

3. [OPCIONAL] Criar uma imagem de VM do GCP com o Gromacs

Neste codelab, fornecemos uma imagem pré-criada para você, já que o processo de build pode levar até duas horas para instalar o Gromacs e todas as dependências dele. Se quiser usar essa imagem pré-criada para economizar tempo, pule para a próxima seção.

Ao executar aplicativos de pesquisa no Google Cloud, há muitas opções para instalar e implantar seu aplicativo. Nesta seção do codelab, você vai criar uma imagem de máquina virtual com base na imagem de VM slurm-gcp (CentOS7). Durante o processo de criação, o compilador, todas as dependências do Gromacs e o próprio Gromacs serão instalados.

O pipeline do Gromacs Cloud Build no repositório de apps do RCC encapsula as instruções necessárias para instalar o Gromacs. O processo de instalação usa o Packer para implantar uma VM que instala o Spack, que, por sua vez, instala o compilador GCC@9.2.0 e o Gromacs@2021.2 com aceleração de GPU ativada.

  1. Abra o Cloud Shell no GCP.
  2. Clone o repositório FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Crie a imagem usando o Google Cloud Build.
cd rcc-apps
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async

É possível verificar o status do processo de build no painel do Google Cloud Build.

O processo de build pode levar até duas horas. Para acelerar esse processo,considere modificar o esquema do arquivo de configuração de build para mudar o tipo de máquina e melhorar o desempenho do build. Isso pode ser feito usando a variável de build _MACHINE_TYPE. Exemplo:

gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64

Quando o build terminar, você terá uma imagem de VM disponível no seu projeto do Google Cloud, que poderá ser usada para implantar o cluster.

4. Implantar um cluster de HPC de escalonamento automático com o Terraform

Nesta seção, você vai usar o Terraform para implantar um cluster de HPC de escalonamento automático com o agendador de jobs Slurm instalado. Esse cluster será implantado com nós de computação que têm 8 vCPUs e uma GPU Nvidia® Tesla V100 cada.

  1. Abra o Cloud Shell no GCP.
  2. Clone o repositório FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Mude para o diretório do Terraform do gromacs:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Crie e revise um plano do Terraform. Defina as variáveis de ambiente GMX_NAME, GMX_PROJECT e GMX_ZONE para especificar o nome do cluster, o projeto do GCP e a zona em que você quer fazer a implantação. Leia a observação abaixo se não tiver certeza
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE>
export GMX_NAME="gromacs"
  1. Se você criou sua própria imagem de VM na seção anterior deste codelab, também precisará definir a variável de ambiente GMX_IMAGE.

export GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"

  1. Crie o plano com o comando make, que vai executar terraform init && terraform plan.
make plan
  1. Implantar o cluster. O processo de configuração leva apenas alguns minutos, já que o Gromacs e as dependências dele vêm pré-instalados no cluster.
make apply
  1. Use SSH para acessar o nó de login criado na etapa anterior. Você pode ver esse nó na etapa anterior (provavelmente chamado de gromacs-login0). Para fazer isso, clique no botão SSH ao lado da lista de instâncias de VM no item de menu do console do Google Cloud Compute Engine -> Instância de VM.

Opção:este par de comandos gcloud vai descobrir o nome do nó de login e usar SSH nele:

export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${GMX_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)
gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${GMX_ZONE}
  1. Depois de se conectar ao nó de login, verifique se o Gromacs está instalado para confirmar a configuração do cluster.
$ spack find gromacs
==> In environment /apps/spack-pkg-env
==> Root specs
gromacs@2021.2 +cuda~mpi

==> 1 installed package
-- linux-centos7-x86_64 / gcc@9.2.0 -----------------------------
gromacs@2021.2
  1. Verifique se /opt/share/gromacs tem o conteúdo listado abaixo.
$ ls /opt/share/gromacs/
benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr

5. Executar o comparativo de mercado benchRIB

O Gromacs é um software de pesquisa usado para simular a dinâmica molecular e calcular estruturas moleculares sob restrições de minimização de energia. Os comparativos de mercado fornecidos na imagem da VM para este codelab se concentram na dinâmica molecular, a evolução dos sistemas de átomos.

Na dinâmica molecular, as posições, velocidades e acelerações dos átomos são simuladas usando as leis de movimento de Newton :

638fa1fba54c3874.png

em que vetor de posição é a posição do átomo i, t é o tempo, 72a717ea69626d54.png é a massa do átomo i e b5e52e17becb80ec.png é a força não ligada no átomo i devido ao átomo j e 538199b3881cd305.png são as forças devido a interações ligadas. Com a temperatura, a pressão, as posições e as velocidades dos átomos, as forças são calculadas e o sistema é integrado numericamente para obter novas velocidades e posições dos átomos. Esse processo é repetido para simular a dinâmica molecular por um determinado período.

A imagem do Gromacs (a que você criou ou a fornecida) vem com três comparativos de mercado.

  1. benchMEM
  2. benchRIB
  3. benchPEP

Esses comparativos são do conjunto de comparativos sem custo financeiro do Gromacs do Dr. Kutzner (link em inglês) e são um conjunto padrão de simulações transientes de dinâmica molecular. Cada comparativo varia no número de átomos e na duração da simulação. As configurações relevantes para cada simulação são apresentadas na tabela abaixo.

Métrica / Comparativo de mercado

benchMEM

benchRIB

benchPEP

Número de átomos

81.743

2.136.412

12.495.503

Tamanho do sistema / nm

10,8 x 10,2 x 9,6

31,2 x 31,2 x 31,2

50,0 x 50,0 x 50,0

Etapa de tempo / fs

2

4

2

Raio de corte / nm

1

1

1.2

Espaçamento da grade PME / nm

0,12

0,135

0,16

Para executar o comparativo, envie um job em lote do Slurm. Por padrão, o script em lote fornecido executa o comparativo de mercado benchRIB. Os baralhos de entrada que definem as configurações para os comparativos fornecidos estão incluídos na imagem da VM do Gromacs em /opt/share/gromacs. Além disso, um exemplo de script bash para executar o Gromacs está disponível em /opt/share.

Para esta seção, você precisa usar SSH no nó de login do cluster.

  1. Enviar um job em lote usando o comando sbatch
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh

Isso vai enfileirar o job para execução, e o Slurm vai provisionar um nó de computação para você. Ao executar sinfo, você vai notar que um nó de computação está no estado alloc#, ou seja, ele está alocado para seu job, mas ainda está sendo provisionado. Quando o job estiver em execução, o nó será definido como o estado alloc.

$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
gromacs*     up   infinite      1 alloc# gromacs-compute-0-0
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 2   gromacs gromacs_      joe  R       0:02      1 gromacs-compute-0-0
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
gromacs*     up   infinite      1  alloc gromacs-compute-0-0

Aguarde a conclusão do job. O comparativo padrão (benchRIB) simula cerca de 8 milhões de átomos e é configurado para executar 5.000 etapas de tempo (com 4 etapas de tempo/fs) e leva cerca de 6 minutos para ser concluído. Monitore o status do job com este comando:

watch squeue

Quando o job sair da fila, você poderá sair com ctrl-C.

  1. Quando o job for concluído, um diretório chamado run/ vai aparecer com a saída da simulação (em run/MEM) e um arquivo de registro no diretório atual chamado gromacs.out. O diretório run/MEM contém dois arquivos: ener.edr e md.log. O arquivo ener.edr armazena as energias, a temperatura, a pressão, o tamanho da caixa, a densidade e os viriais do sistema em um formato binário portátil. Como o nome sugere, o arquivo md.log contém registros da simulação do Gromacs e inclui informações sobre a performance da simulação, além de informações de registro dos solucionadores de partículas e PME. O conteúdo de gromacs.out contém a saída padrão de gmx mdrun e é semelhante ao que é mostrado abaixo.
$ tail -n9 gromacs.out
step 5000, remaining wall clock time:     0 s
               Core t (s)   Wall t (s)        (%)
       Time:     3085.342      385.683      800.0
                 (ns/day)    (hour/ns)
Performance:        4.481        5.356

GROMACS reminds you: "I never thought of stopping, and I just hated sleeping. I can't imagine having a better life." (Barbara McClintock)

OK

6. Parabéns

Neste codelab, você criou um cluster de HPC nativo da nuvem com escalonamento automático e executou uma simulação de dinâmica molecular acelerada por GPU com o Gromacs no Google Cloud.

Limpar

Para evitar cobranças na conta do Google Cloud pelos recursos usados neste codelab:

RECOMENDADO:excluir o cluster de HPC com o Terraform

  1. Abra o Cloud Shell e navegue até o diretório de exemplo gromacs/tf/slurm.
cd ~/rcc-apps/gromacs/tf/slurm
  1. Execute make destroy para excluir todos os recursos.
make destroy

OU, exclua o projeto (mais eficaz e destrutivo)

A maneira mais fácil de evitar o faturamento é excluir o projeto criado para o codelab.

Cuidado: excluir um projeto tem os seguintes efeitos:

  • Tudo no projeto é excluído. Se você usou um projeto existente neste codelab, a exclusão dele também vai excluir outros trabalhos feitos nele.
  • Os IDs do projeto personalizados são perdidos. Ao criar o projeto, você pode ter criado um ID do projeto personalizado para ser usado no futuro. Para preservar os URLs que usam o ID do projeto, como um URL appspot.com, exclua recursos específicos do projeto, em vez de excluir o projeto inteiro.

Se você planeja explorar vários codelabs e guias de início rápido, a reutilização de projetos pode evitar que você exceda os limites da cota do projeto.

  1. No console do Cloud, acesse a página Gerenciar recursos: Acessar a página "Gerenciar recursos"
  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir c01e35138ac49503.png.
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.