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) com escalonamento automático no Google Cloud.Uma implantação do Terraform cria esse cluster com os Gromacs instalados pelo Spack. O cluster será gerenciado com o programador de jobs do Slurm. Quando o cluster for criado, você executará os comparativos de mercado benchMEM, benchPEP ou benchRIB.

O que você aprenderá

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

O que é necessário

2. Configuração

Para concluir este codelab , você precisa 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. Lembre-se de substituir seu project-id por abaixo.

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

Cuidado:se você planeja usar SSH de terceiros (por exemplo, OpenSSH) para se conectar ao cluster, anexe uma chave SSH ao perfil do Cloud Identity 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 Gromacs

Neste codelab, fornecemos uma imagem pré-criada para você, já que o processo de compilação pode levar até duas horas para instalar o Gromacs e todas as dependências dele. Se você quiser usar essa imagem pré-criada para economizar tempo, avance 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 baseada na imagem de VM slurm-gcp (CentOS7). Durante o processo de criação, o compilador, todos os dependências e o Gromacs será instalado.

O pipeline da Gromacs Cloud Build no repositório RCC Apps contém 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 a aceleração de GPU ativada.

  1. Abra o Cloud Shell no GCP.
  2. Clonar 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 seu processo de build no painel do Google Cloud Build.

O processo de build pode levar até duas horas. Para acelerar esse processo,modifique o esquema do arquivo de configuração do build e altere o tipo de máquina e melhore 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 for concluído, você terá uma imagem de VM disponível no projeto do Google Cloud que pode 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 programador de jobs Slurm instalado. Este cluster será implantado com nós de computação, cada um com 8 vCPUs e 1 GPU Nvidia® Tesla V100.

  1. Abra o Cloud Shell no GCP.
  2. Clonar o repositório FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Mude para o diretório do Terraform "gromacs":
cd ~/rcc-apps/gromacs/tf/slurm
  1. Criar e revisar um terraform plan. 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 implantar. 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 será necessário definir a variável de ambiente GMX_IMAGE.

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

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

Opção: este par de comandos gcloud descobrirá o nome do nó de login e 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 verificar 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 do 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 de 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çãos 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 decorrentes das interações vinculadas. Dada a temperatura, pressão, posições atômicas e velocidades atômicas, as forças são calculadas e o sistema é numericamente integrado para obter novas velocidades e posições atômicas. Esse processo é repetido para simular a dinâmica molecular de um determinado período.

A imagem da Gromacs (a que você criou ou a que forneceu) vem com três comparações

  1. benchMEM
  2. benchRIB
  3. benchPEP

Essas referências são do Dr. o conjunto de Free Gromacs Benchmarks de Kutzner (em inglês) e um conjunto padrão de simulações de dinâmica molecular transitória. Cada comparativo varia no número de átomos e na duração da simulação. As configurações relevantes para cada simulação estão na tabela abaixo.

Métrica / comparativo de mercado

benchMEM

benchRIB

benchPEP

Número de Atoms

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

Cutoff Radii / nm (em inglês)

1

1

1.2

Espaçamento da grade do PME / nm

0,12

0,135

0,16

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

Nesta seção, é preciso usar o 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 provisionará um nó de computação para você. Ao executar sinfo, você verá que um nó de computação está no estado alloc#, o que significa que ele está alocado para seu job, mas está em processo de provisionamento. Quando o job estiver em execução, o nó será definido com 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. A comparação padrão (benchRIB) simula cerca de 8 milhões de átomos e está configurada para executar 5.000 etapas de tempo (com 4 timesteps/fs) e levar cerca de 6 minutos para ser concluída. É possível monitorar o status do job com este comando:

watch squeue

Quando o job sair da fila, use ctrl-C para sair.

  1. Quando o job for concluído, você verá um diretório chamado run/, que contém a saída da simulação (em run/MEM) e um arquivo de registros 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, temperatura, pressão, tamanho da caixa, densidade e virais do sistema em um formato binário portátil. Como a extensão sugere, o arquivo md.log contém registros para a simulação do Gromacs e inclui informações sobre o desempenho da simulação, além de informações de registro dos solucionadores de partículas-partículas e PMEs. O conteúdo de gromacs.out contém a saída padrão de gmx mdrun deve ser semelhante ao 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 dos recursos usados neste codelab na conta do Google Cloud, siga estas etapas:

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 eliminar o faturamento é excluir o projeto que você criou para o codelab.

Cuidado: excluir um projeto tem os seguintes efeitos:

  • Tudo no projeto é excluído. Se você usou um projeto atual neste codelab, a exclusão dele também afeta todos os outros trabalhos feitos no projeto.
  • 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 os recursos selecionados do projeto em vez de excluir o projeto inteiro.

Se você planeja conhecer vários codelabs e guias de início rápido, a reutilização de projetos pode evitar que você exceda os limites de 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.