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, na sigla em inglês) 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, você vai executar as comparações benchMEM, benchPEP ou benchRIB.

O que você aprenderá

  • Como implantar um cluster de HPC que oferece suporte ao programador de jobs do 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 você precisa

2. Configuração

Para concluir este codelab , ative 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 seu project-id pelo 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 seu 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 o Gromacs

Para este codelab, fornecemos uma imagem pré-criada, já que o processo de build 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, pule para a próxima seção.

Ao executar aplicativos de pesquisa no Google Cloud, há muitas opções para instalar e implantar o 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 Cloud Build do Gromacs 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 a 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 isso,considere modificar o esquema do arquivo de configuração do 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 projeto na nuvem 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 programador de jobs do Slurm instalado. Esse cluster será implantado com nós de computação que têm 8 vCPUs e 1 GPU Nvidia® Tesla V100.

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

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. Implante 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. SSH para o nó login criado na etapa anterior. É possível conferir esse nó na etapa anterior (provavelmente chamado gromacs-login0). Para fazer isso, clique no botão SSH ao lado da lista de instâncias de VM no item de menu do Google Cloud console Compute Engine -> Instância de VM.

Opção:esse par de comandos gcloud vai descobrir o nome do nó de login e fazer 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, para verificar a configuração do cluster, confira se o Gromacs está instalado.
$ 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 a comparação benchRIB

O Gromacs é um software de pesquisa usado para simular a dinâmica molecular e calcular estruturas moleculares em restrições de minimização de energia. As comparações fornecidas 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çõ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. Considerando 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 gerar novas velocidades e posições de átomos. Esse processo é repetido para simular a dinâmica molecular por um determinado período.

A imagem do Gromacs (criada por você ou fornecida) vem com três comparações:

  1. benchMEM
  2. benchRIB
  3. benchPEP

Essas comparações são do conjunto de comparações sem custo financeiro do Gromacs do Dr. Kutzner e são um conjunto padrão de simulações de dinâmica molecular transitória. Cada comparação varia no número de átomos e na duração da simulação. As configurações relevantes para cada simulação são fornecidas 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 a comparação, envie um job em lote do Slurm. Por padrão, o script em lote fornecido executa a comparação benchRIB. Os decks de entrada que definem as configurações para as comparações fornecidas estão incluídos na imagem de VM do Gromacs em /opt/share/gromacs. Além disso, um script bash de exemplo para executar o Gromacs está disponível em /opt/share.

Para esta seção, é necessário fazer SSH no nó login do cluster.

  1. Envie 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ê verá que um nó de computação está no estado alloc#, o que significa que o nó de computação está alocado para o job, mas está em processo de provisionamento. 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. 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 etapas de tempo/fs) e levar cerca de 6 minutos para ser concluída. Use este comando para monitorar o status do job:

watch squeue

Quando o job desaparecer da fila, saia com ctrl-C.

  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 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 a extensão 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 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 de 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)

O jeito mais fácil de evitar o faturamento é excluindo o projeto criado para este codelab.

Cuidado: excluir um projeto tem os seguintes efeitos:

  • Tudo no projeto é excluído. Se você usou um projeto existente neste codelab, ao excluí-lo, também vai excluir 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 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 Desligar para excluir o projeto.