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.
- 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 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.
- 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. Leia 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 precisará 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
- 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
- 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}
- 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
- 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 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 :

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. 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.
- benchMEM
- benchRIB
- 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.
- 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.
- Quando o job for concluído, um diretório chamado
run/vai aparecer com 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 o nome 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 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
- 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)
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.
- 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 Encerrar para excluí-lo.