1. Introdução

Última atualização:05/05/2021
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 com o agendador de jobs Slurm. Você vai usar um exemplo de implantação do Terraform que implanta esse cluster com o WRF® instalado pelo Spack. Em seguida, use essa infraestrutura para executar o benchmark de 2,5 km da CONUS ou o benchmark de 12 km da CONUS.
O que você aprenderá
- Como configurar políticas do Identity and Access Management (IAM) para operar um cluster de HPC no Google Cloud Platform
- Como implantar um cluster de HPC nativo da nuvem com o programador de jobs Slurm
- Como executar o WRF® em paralelo no Google Cloud usando um job em lote do Slurm
O que é preciso
- Conta do Gmail com uma chave SSH anexada ou Google Workspace, Cloud Identity
- Projeto do Google Cloud Platform com o faturamento ativado
- Função de proprietário do projeto no seu projeto do GCP
- Cota suficiente do Compute Engine (480 vCPUs c2 e 500 GB de disco PD-Standard)
2. Configuração
ativar APIs do Google Cloud
Para criar e usar recursos do Google Cloud, as APIs precisam estar ativadas.
gcloud services enable compute.googleapis.com
Definir políticas do IAM
No HPC, há distinções claras entre administradores e usuários do sistema. Os administradores de sistema geralmente têm "acesso root", o que permite gerenciar e operar recursos de computação. Os usuários do sistema geralmente são pesquisadores, cientistas e engenheiros de aplicativos que só precisam usar os recursos para executar jobs.
No Google Cloud, a API Login do SO provisiona informações de usuários POSIX de contas do Google Workspace, do Cloud Identity e do Gmail. Além disso, o Login do SO se integra ao sistema de Identity and Access Management (IAM) do GCP para determinar se os usuários podem elevar privilégios em sistemas Linux.
Neste tutorial, presumimos que você está preenchendo as funções de administrador de sistema e administrador do Compute Engine. Vamos configurar políticas do IAM para conceder permissões suficientes para realizar as seguintes tarefas:
- Criar/excluir instâncias de VM do Google Compute Engine (GCE)
- SSH em instâncias de VM do GCE

Para conceder a si mesmo os papéis necessários do IAM para concluir este tutorial, no console do Google Cloud:
- Acesse IAM e administrador > IAM no menu "Produtos e serviços".
- Clique em "+Adicionar" perto da parte de cima da página.
- Digite sua conta do Google Workspace, do Cloud Identity ou do Gmail em "Novos membros".
- Adicione os seguintes papéis : Administrador do Compute, Login do SO do Compute e Usuário da conta de serviço.
- Clique em "Salvar".
Seu login agora tem as permissões necessárias para iniciar a criação do cluster de HPC.
Para verificar se você atribuiu as funções corretas, abra o Cloud Shell e execute o comando a seguir, substituindo YOUR_PROJECT e EMAIL_ADDRESS pelo projeto e endereço de e-mail.
$ gcloud projects get-iam-policy YOUR_PROJECT --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members=user:EMAIL_ADDRESS"
Esse comando vai gerar a saída:
ROLE roles/compute.osLogin roles/iam.serviceAccountUser roles/compute.admin
3. Cota baixa: implante um cluster de HPC de escalonamento automático com o Terraform
Nesta seção, você vai implantar um cluster de HPC de escalonamento automático, incluindo o programador de jobs do Slurm. É idêntico à opção de cota alta, exceto que o tipo de máquina usado é menor, assim como o número de vCPUs.
- Abra o Cloud Shell no GCP.
- Clone o repositório FluidNumerics/slurm-gcp
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- Mude para o diretório WRF:
cd ~/slurm-gcp/tf/examples/wrf
- Crie e revise um plano do Terraform. Defina as variáveis de ambiente
WRF_NAME,WRF_PROJECTeWRF_ZONEpara especificar o nome do cluster, o projeto do GCP e a zona em que você quer fazer a implantação.
export WRF_PROJECT=<PROJECT ID> export WRF_ZONE=<ZONE> export WRF_NAME="wrf-small"
- Na primeira vez que você executar o Terraform, use o comando
init:
terraform init
- Crie o plano com o comando make, que vai executar
terraform
make plan
- Implantar o cluster. O processo de instalação e configuração pode levar até duas horas. Durante a implantação, o WRF e todas as dependências dele serão instalados.
make apply
- Use SSH para acessar o nó de login criado na etapa anterior. Você pode ver esse nó na etapa anterior (provavelmente chamado wrf-small-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 ${WRF_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)
gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${WRF_ZONE}
- Depois de se conectar ao nó de login, verifique se o módulo wrf está disponível para verificar a configuração do cluster.
$ module load gcc && module load openmpi && module avail -------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/openmpi/4.0.5-eagetxh/gcc/9.2.0 -------------------------------------- hdf5/1.10.7 netcdf-c/4.7.4 netcdf-fortran/4.5.3 parallel-netcdf/1.12.1 wrf/4.2 ------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/gcc/9.2.0 ------------------------------------------------- hwloc/2.2.0 libiconv/1.16 libpng/1.6.37 nasm/2.15.05 openmpi/4.0.5 (L,D) time/1.9 zlib/1.2.11 jasper/2.0.16 libjpeg-turbo/2.0.4 libtirpc/1.2.6 ncurses/5.9.20130511 perl/5.16.3 util-macros/1.19.1 krb5/1.15.1 libpciaccess/0.16 libxml2/2.9.10 numactl/2.0.14 tcsh/6.22.02 xz/5.2.2 --------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/Core ---------------------------------------------------- gcc/9.2.0 (L) ---------------------------------------------------------------------- /apps/modulefiles ---------------------------------------------------------------------- openmpi/v4.1.x
- Verifique se
/apps/share/conus-12kmtem o conteúdo listado abaixo.
$ ls -1 /apps/share/conus-12km/ FILE:2018-06-17_00 FILE:2018-06-17_03 FILE:2018-06-17_06 FILE:2018-06-17_09 FILE:2018-06-17_12 geo_em.d01.nc geogrid.log met_em.d01.2018-06-17_00:00:00.nc met_em.d01.2018-06-17_03:00:00.nc met_em.d01.2018-06-17_06:00:00.nc met_em.d01.2018-06-17_09:00:00.nc met_em.d01.2018-06-17_12:00:00.nc metgrid.log namelist.input namelist.wps ungrib.log wrfbdy_d01 wrfinput_d01
4. Executar o comparativo de mercado de 12 km do CONUS
Para executar o comparativo de mercado CONUS de 12 km, envie um job em lote do Slurm. Os conjuntos de entrada para esse comparativo estão incluídos na imagem da VM wrf-gcp em /apps/share/benchmarks/conus-12km.
Para esta seção, você precisa estar conectado por SSH ao nó login do cluster.
- Copie o arquivo em lote de exemplo wrf-conus.sh de /apps/share
cp /apps/share/wrf-conus12.sh ~/
- Abra o arquivo wrf-conus.sh em um editor de texto para verificar se
--partitione--ntasksestão definidos corretamente. O número de tarefas precisa ser definido como o número de classificações MPI que você quer usar para iniciar o job. Para esta demonstração, o número de tarefas é equivalente ao número de vCPUs usadas no job e não pode exceder a cota disponível.
#!/bin/bash
#SBATCH --partition=wrf
#SBATCH --ntasks=24
#SBATCH --ntasks-per-node=8
#SBATCH --mem-per-cpu=2g
#SBATCH --cpus-per-task=1
#SBATCH --account=default
#
# /////////////////////////////////////////////// #
WORK_PATH=${HOME}/wrf-benchmark/
SRUN_FLAGS="-n $SLURM_NTASKS --cpu-bind=threads"
. /apps/share/spack.sh
module load gcc/9.2.0
module load openmpi
module load hdf5 netcdf-c netcdf-fortran wrf
mkdir -p ${WORK_PATH}
cd ${WORK_PATH}
ln -s ${INSTALL_ROOT}/share/conus-12km/* .
ln -s $(spack location -i wrf)/run/* .
srun $MPI_FLAGS ./wrf.exe
- Envie o job em lote usando sbatch.
sbatch wrf-conus12.sh
- Aguarde a conclusão do job. Esse comparativo de mercado está configurado para executar uma previsão de 6 horas, que leva cerca de 3 horas para ser concluída com 24 classificações. Monitore o status do job com
squeue. - Quando o job for concluído, verifique o conteúdo de rsl.out.0000 para confirmar se a instrução "wrf: SUCCESS COMPLETE WRF" aparece. O sufixo numérico será diferente se você tiver executado o job mais de uma vez. Por exemplo, se você errou uma configuração e precisou executar de novo.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF
5. Cota alta: implante um cluster de HPC de escalonamento automático com o Terraform
Nesta seção, você vai implantar um cluster de HPC de escalonamento automático, incluindo o programador de jobs Slurm no GCP.
- Abra o Cloud Shell no GCP.
- Clone o repositório FluidNumerics/slurm-gcp
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- Mude para o diretório WRF:
cd ~/slurm-gcp/tf/examples/wrf
- Crie e revise um plano do Terraform. Defina as variáveis de ambiente
WRF_NAME,WRF_PROJECT,WRF_ZONE,WRF_MAX_NODEeWRF_MACHINE_TYPEpara especificar o nome do cluster, o projeto do GCP, a zona em que você quer fazer a implantação, o número máximo de nós e o tipo de máquina. Para o comparativo de mercado de 2,5 km do CONUS, recomendamos usar instâncias c2-standard-60 com pelo menos oito nós disponíveis para executar jobs com 480 classificações de MPI.
export WRF_PROJECT=<PROJECT ID> export WRF_ZONE=<ZONE> export WRF_NAME=wrf-large export WRF_MAX_NODE=5 export WRF_MACHINE_TYPE="c2-standard-60"
- Se você não fez isso acima, execute
terraform initpara iniciar o Terraform:
terraform init
- Crie o plano com o comando "make".
make plan
- Implantar o cluster. O processo de instalação e configuração pode levar até duas horas. Durante a implantação, o WRF e todas as dependências dele serão instalados.
make apply
- Use SSH para acessar o nó de login criado na etapa anterior. Você pode ver esse nó na etapa anterior (provavelmente chamado wrf-large-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 ${WRF_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)
gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${WRF_ZONE}
O segundo comando vai conectar você ao nó de login do Slurm.
- Depois de se conectar ao nó de login, verifique se o módulo wrf está disponível para verificar a configuração do cluster.
$ module load gcc && module load openmpi && module avail -------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/openmpi/4.0.5-eagetxh/gcc/9.2.0 -------------------------------------- hdf5/1.10.7 netcdf-c/4.7.4 netcdf-fortran/4.5.3 parallel-netcdf/1.12.1 wrf/4.2 ------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/gcc/9.2.0 ------------------------------------------------- hwloc/2.2.0 libiconv/1.16 libpng/1.6.37 nasm/2.15.05 openmpi/4.0.5 (L,D) time/1.9 zlib/1.2.11 jasper/2.0.16 libjpeg-turbo/2.0.4 libtirpc/1.2.6 ncurses/5.9.20130511 perl/5.16.3 util-macros/1.19.1 krb5/1.15.1 libpciaccess/0.16 libxml2/2.9.10 numactl/2.0.14 tcsh/6.22.02 xz/5.2.2 --------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/Core ---------------------------------------------------- gcc/9.2.0 (L) ---------------------------------------------------------------------- /apps/modulefiles ---------------------------------------------------------------------- openmpi/v4.1.x
- Verifique se
/apps/share/conus-2.5kmtem o conteúdo listado abaixo.
$ ls -1 /apps/share/conus-2.5km FILE:2018-06-17_00 FILE:2018-06-17_03 FILE:2018-06-17_06 FILE:2018-06-17_09 FILE:2018-06-17_12 geo_em.d01.nc geogrid.log gfs.0p25.2018061700.f000.grib2 gfs.0p25.2018061700.f003.grib2 gfs.0p25.2018061700.f006.grib2 gfs.0p25.2018061700.f009.grib2 gfs.0p25.2018061700.f012.grib2 met_em.d01.2018-06-17_00:00:00.nc met_em.d01.2018-06-17_03:00:00.nc met_em.d01.2018-06-17_06:00:00.nc met_em.d01.2018-06-17_09:00:00.nc met_em.d01.2018-06-17_12:00:00.nc metgrid.log namelist.input namelist.wps ungrib.log wrfbdy_d01 wrfinput_d01
6. Executar o comparativo de mercado de 2,5 km do CONUS
Para executar o comparativo de mercado CONUS de 2,5 km, envie um job em lote do Slurm. Os conjuntos de dados de entrada para esse comparativo de mercado estão incluídos na imagem da VM wrf-gcp em /apps/share/benchmarks/conus-2.5km.
Para esta seção, você precisa estar conectado por SSH ao nó login do cluster.
- Copie o arquivo em lote de exemplo wrf-conus.sh de /apps/share
cp /apps/share/wrf-conus2p5.sh ~/
- Abra o arquivo wrf-conus.sh em um editor de texto para verificar se
--partitione--ntasksestão definidos corretamente. A partição precisa ser definida como c2-60. O número de tarefas precisa ser definido como o número de classificações MPI que você quer usar para iniciar o job. Para esta demonstração, o número de tarefas é equivalente ao número de vCPUs usadas no job e não pode exceder a cota disponível.
#!/bin/bash
#SBATCH --partition=c2-60
#SBATCH --ntasks=480
#SBATCH --ntasks-per-node=60
#SBATCH --mem-per-cpu=2g
#SBATCH --cpus-per-task=1
#SBATCH --account=default
#
# /////////////////////////////////////////////// #
WORK_PATH=${HOME}/wrf-benchmark/
SRUN_FLAGS="-n $SLURM_NTASKS --cpu-bind=threads"
. /apps/share/spack.sh
module load gcc/9.2.0
module load openmpi
module load hdf5 netcdf-c netcdf-fortran wrf
mkdir -p ${WORK_PATH}
cd ${WORK_PATH}
ln -s ${INSTALL_ROOT}/share/conus-2.5km/* .
ln -s $(spack location -i wrf)/run/* .
srun $MPI_FLAGS ./wrf.exe
- Envie o job em lote usando sbatch.
sbatch wrf-conus2p5.sh
- Aguarde a conclusão do job. Esse comparativo está configurado para executar uma previsão de 6 horas, que leva cerca de 1 hora para ser concluída com 480 classificações. Monitore o status do job com
squeue. - Quando o job for concluído, verifique o conteúdo de rsl.out.0000 para confirmar se a instrução "wrf: SUCCESS COMPLETE WRF" aparece. O sufixo numérico será diferente se você tiver executado o job mais de uma vez. Por exemplo, se você errou uma configuração e precisou executar de novo.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF
7. Parabéns
Neste codelab, você criou um cluster de HPC nativo da nuvem com escalonamento automático e executou uma simulação paralela do WRF® no Google Cloud Platform.
Limpar
Para evitar cobranças na sua conta do Google Cloud Platform pelos recursos usados neste codelab:
Excluir o projeto
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.
Excluir recursos individuais
- Abra o Cloud Shell e navegue até o diretório de exemplo do wrf.
cd ~/slurm-gcp/tf/examples/wrf
- Execute make destroy para excluir todos os recursos.
make destroy