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.
- Abra o Cloud Shell no GCP.
- Clone o repositório FluidNumerics/rcc-apps
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- 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.
- Abra o Cloud Shell no GCP.
- Clone o repositório FluidNumerics/rcc-apps
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- Mude para o diretório do Terraform do Gromacs:
cd ~/rcc-apps/gromacs/tf/slurm
- Crie e revise um plano do Terraform. Defina as variáveis de ambiente
GMX_NAME,GMX_PROJECTeGMX_ZONEpara 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"
- 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"
- Crie o plano com o comando make, que vai executar
terraform init && terraform plan.
make plan
- 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
- 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}
- 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
- Verifique se
/opt/share/gromacstem 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 :

em que
é a posição do átomo i, t é o tempo,
é a massa do átomo i e
é a força não ligada no átomo i devido ao átomo j e
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:
- benchMEM
- benchRIB
- 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.
- 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.
- Quando o job for concluído, você verá um diretório chamado
run/que contém a saída da simulação (emrun/MEM) e um arquivo de registro no diretório atual chamadogromacs.out. O diretóriorun/MEMcontém dois arquivos:ener.edremd.log. O arquivoener.edrarmazena 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 arquivomd.logconté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 degmx mdrune é 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
- Abra o Cloud Shell e navegue até o diretório de exemplo
gromacs/tf/slurm.
cd ~/rcc-apps/gromacs/tf/slurm
- 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.
- No console do Cloud, acesse a página Gerenciar recursos : Acessar a página "Gerenciar recursos"
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir
. - Na caixa de diálogo, digite o ID do projeto e clique em Desligar para excluir o projeto.