Jalankan Model Perkiraan Cuaca WRF dengan Fluid Numerics' Slurm-GCP

1. Pengantar

Wilayah AS kontinental

Terakhir diperbarui: 05-05-2021

Yang akan Anda buat

Dalam codelab ini, Anda akan men-deploy cluster High Performance Computing (HPC) penskalaan otomatis di Google Cloud dengan penjadwal tugas Slurm. Anda akan menggunakan contoh deployment Terraform yang men-deploy cluster ini dengan WRF® yang diinstal melalui Spack. Kemudian, Anda akan menggunakan infrastruktur ini untuk menjalankan tolok ukur CONUS 2,5 km atau tolok ukur CONUS 12 km.

Yang akan Anda pelajari

  • Cara mengonfigurasi kebijakan Identity and Access Management (IAM) untuk mengoperasikan cluster HPC di Google Cloud Platform
  • Cara men-deploy cluster HPC berbasis cloud dengan penjadwal tugas Slurm
  • Cara menjalankan WRF® secara paralel di Google Cloud menggunakan tugas batch Slurm

Yang Anda butuhkan

2. Konfigurasi

Mengaktifkan Google Cloud API

API resource Google Cloud harus diaktifkan untuk membuat dan menggunakan API tersebut.

gcloud services enable compute.googleapis.com 

Menetapkan Kebijakan IAM

Dalam HPC, ada perbedaan yang jelas antara administrator sistem dan pengguna sistem. Administrator sistem umumnya memiliki akses {i>root<i}. yang memungkinkan mereka mengelola dan mengoperasikan resource komputasi. Pengguna sistem umumnya adalah peneliti, ilmuwan, dan insinyur aplikasi yang hanya perlu menggunakan sumber daya untuk menjalankan tugas.

Di Google Cloud, OS Login API menyediakan informasi pengguna POSIX dari akun Google Workspace, Cloud Identity, dan Gmail. Selain itu, Login OS terintegrasi dengan sistem Identity and Access Management (IAM) GCP untuk menentukan apakah pengguna harus diizinkan untuk mengeskalasikan hak istimewa di sistem Linux.

Dalam tutorial ini, kami menganggap Anda mengisi peran administrator sistem dan administrator Compute Engine. Kami akan mengonfigurasi kebijakan IAM agar Anda memiliki izin yang memadai untuk menyelesaikan tugas-tugas berikut

  • Membuat/Menghapus instance VM Google Compute Engine (GCE)
  • SSH ke instance VM GCE

57883cb8acc09653.pngS

Untuk memberi Anda peran IAM yang diperlukan untuk menyelesaikan tutorial ini, di Konsol Google Cloud:

  1. Buka IAM & Admin > IAM di menu Produk dan Layanan.
  2. Klik "+Tambahkan" di dekat bagian atas halaman.
  3. Ketik akun Google Workspace, Akun Cloud Identity, atau akun Gmail Anda di bagian "Anggota baru"
  4. Tambahkan peran berikut : Compute Admin, Login Compute OS, dan Service Account User
  5. Klik Simpan

Login Anda sekarang memiliki izin yang diperlukan untuk memulai pembuatan cluster HPC.

Untuk memastikan bahwa Anda telah menetapkan peran yang tepat, buka Cloud Shell, dan jalankan perintah berikut, dengan mengganti YOUR_PROJECT dan EMAIL_ADDRESS dengan project dan alamat email Anda.

$ gcloud projects get-iam-policy YOUR_PROJECT --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members=user:EMAIL_ADDRESS"

Perintah ini akan menghasilkan output:

ROLE
roles/compute.osLogin
roles/iam.serviceAccountUser
roles/compute.admin

3. Kuota Rendah: Deploy cluster HPC penskalaan otomatis dengan Terraform

Di bagian ini, Anda akan men-deploy cluster HPC penskalaan otomatis, termasuk scheduler tugas Slurm. Opsi ini identik dengan opsi Kuota Tinggi, tetapi jenis mesin yang digunakan lebih kecil dan jumlah vCPU yang digunakan lebih sedikit.

  1. Buka Cloud Shell Anda di GCP.
  2. Meng-clone repositori FluidNumerics/slurm-gcp
cd ~
git clone https://github.com/FluidNumerics/slurm-gcp.git
  1. Ubah ke direktori WRF:
cd  ~/slurm-gcp/tf/examples/wrf
  1. Membuat dan meninjau rencana terraform. Setel variabel lingkungan WRF_NAME, WRF_PROJECT, dan WRF_ZONE untuk menentukan nama cluster, project GCP, dan zona tempat Anda ingin men-deploy.
export WRF_PROJECT=<PROJECT ID>
export WRF_ZONE=<ZONE>
export WRF_NAME="wrf-small"
  1. Saat pertama kali menjalankan terraform, Anda harus menjalankan perintah init:
terraform init
  1. Buat rencana dengan perintah make, yang akan menjalankan terraform
make plan
  1. Men-deploy cluster. Proses penginstalan dan penyiapan dapat memerlukan waktu hingga 2 jam. Selama deployment, WRF dan semua dependensinya akan diinstal.
make apply
  1. Jalankan SSH ke node login yang dibuat di langkah sebelumnya. Anda dapat melihat node ini pada langkah sebelumnya (mungkin disebut wrf-small-login0). Anda dapat melakukannya dengan mengklik tombol SSH di samping daftar Instance VM di item menu konsol Compute Engine -> di instance VM.

Opsi: Pasangan perintah gcloud ini akan mengetahui nama node login dan SSH ke dalamnya:

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}

  1. Setelah Anda terhubung ke node login, untuk memverifikasi penyiapan cluster, periksa apakah modul wrf tersedia.
$ 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
  1. Pastikan /apps/share/conus-12km memiliki konten yang tercantum di bawah.
$  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. Jalankan Tolok Ukur CONUS 12 km

Untuk menjalankan benchmark CONUS 12 km, Anda harus mengirimkan tugas batch Slurm. Presentasi input untuk benchmark ini disertakan dalam image VM wrf-gcp di /apps/share/benchmarks/conus-12km.

Untuk bagian ini, Anda harus memiliki SSH yang terhubung ke node login cluster

  1. Salin contoh file batch wrf-conus.sh dari /apps/share
cp /apps/share/wrf-conus12.sh ~/
  1. Buka wrf-conus.sh di editor teks untuk memastikan --partition dan --ntasks disetel dengan benar. Jumlah tugas harus ditetapkan ke jumlah peringkat MPI yang ingin Anda gunakan untuk meluncurkan tugas. Untuk demonstrasi ini, jumlah tugas setara dengan jumlah vCPU yang digunakan untuk tugas, dan tidak boleh melebihi kuota yang tersedia.
#!/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
  1. Kirim tugas batch menggunakan sbatch.
sbatch wrf-conus12.sh
  1. Tunggu tugas selesai. Tolok ukur ini dikonfigurasi untuk menjalankan perkiraan 6 jam, yang membutuhkan waktu sekitar 3 jam untuk menyelesaikan 24 peringkat. Anda dapat memantau status pekerjaan dengan squeue.
  2. Setelah tugas selesai, periksa konten rsl.out.0000 untuk memastikan bahwa Anda melihat pernyataan "wrf: SUCCESS SELESAI WRF". Akhiran numerik akan berbeda jika Anda telah menjalankan tugas lebih dari sekali, misalnya, setelan konfigurasi Anda salah dan harus dijalankan kembali.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF

5. Kuota Tinggi: Deploy cluster HPC penskalaan otomatis dengan Terraform

Di bagian ini, Anda akan men-deploy cluster HPC penskalaan otomatis, termasuk penjadwal tugas Slurm di GCP.

  1. Buka Cloud Shell Anda di GCP.
  2. Meng-clone repositori FluidNumerics/slurm-gcp
cd ~
git clone https://github.com/FluidNumerics/slurm-gcp.git
  1. Ubah ke direktori WRF:
cd  ~/slurm-gcp/tf/examples/wrf
  1. Membuat dan meninjau rencana terraform. Tetapkan variabel lingkungan WRF_NAME, WRF_PROJECT, WRF_ZONE, WRF_MAX_NODE, dan WRF_MACHINE_TYPE untuk menentukan nama cluster, project GCP, zona tempat Anda ingin men-deploy, jumlah node maksimum, dan jenis mesin. Untuk benchmark CONUS 2,5 km, sebaiknya gunakan instance c2-standard-60 dengan setidaknya 8 node tugas yang tersedia dengan peringkat 480 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"
  1. Jika tidak melakukannya di atas, Anda harus menjalankan terraform init untuk memulai terraform:
terraform init
  1. Buat rencana dengan perintah make.
make plan
  1. Men-deploy cluster. Proses penginstalan dan penyiapan dapat memerlukan waktu hingga 2 jam. Selama deployment, WRF dan semua dependensinya akan diinstal.
make apply
  1. Jalankan SSH ke node login yang dibuat di langkah sebelumnya. Anda dapat melihat node ini pada langkah sebelumnya (mungkin disebut wrf-large-login0). Anda dapat melakukannya dengan mengklik tombol SSH di samping daftar Instance VM di item menu konsol Compute Engine -> di instance VM.

Opsi: Pasangan perintah gcloud ini akan mengetahui nama node login dan SSH ke dalamnya:

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}

Perintah kedua akan membuat Anda terhubung ke node Slurm Login.

  1. Setelah Anda terhubung ke node login, untuk memverifikasi penyiapan cluster, periksa apakah modul wrf tersedia.
$ 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
  1. Pastikan /apps/share/conus-2.5km memiliki konten yang tercantum di bawah.
$ 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. Jalankan Tolok Ukur CONUS 2,5km

Untuk menjalankan tolok ukur CONUS 2,5 km, Anda harus mengirimkan tugas batch Slurm. Presentasi input untuk benchmark ini disertakan dalam image VM wrf-gcp di /apps/share/benchmarks/conus-2.5km.

Untuk bagian ini, Anda harus memiliki SSH yang terhubung ke node login cluster

  1. Salin contoh file batch wrf-conus.sh dari /apps/share
cp /apps/share/wrf-conus2p5.sh ~/
  1. Buka wrf-conus.sh di editor teks untuk memastikan --partition dan --ntasks disetel dengan benar. Partisi harus disetel ke c2-60. Jumlah tugas harus ditetapkan ke jumlah peringkat MPI yang ingin Anda gunakan untuk meluncurkan tugas. Untuk demonstrasi ini, jumlah tugas setara dengan jumlah vCPU yang digunakan untuk tugas, dan tidak boleh melebihi kuota yang tersedia.
#!/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
  1. Kirim tugas batch menggunakan sbatch.
sbatch wrf-conus2p5.sh
  1. Tunggu tugas selesai. Tolok ukur ini dikonfigurasi untuk menjalankan prakiraan 6 jam, yang membutuhkan waktu sekitar 1 jam untuk menyelesaikan 480 peringkat. Anda dapat memantau status pekerjaan dengan squeue.
  2. Setelah tugas selesai, periksa konten rsl.out.0000 untuk memastikan bahwa Anda melihat pernyataan "wrf: SUCCESS SELESAI WRF". Akhiran numerik akan berbeda jika Anda telah menjalankan tugas lebih dari sekali, misalnya, setelan konfigurasi Anda salah dan harus dijalankan kembali.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF

7. Selamat

Dalam codelab ini, Anda telah membuat cluster HPC berbasis cloud dengan penskalaan otomatis dan menjalankan simulasi WRF® paralel di Google Cloud Platform.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Platform Anda untuk resource yang digunakan dalam codelab ini:

Menghapus project

Cara termudah untuk meniadakan penagihan adalah dengan menghapus project yang Anda buat untuk codelab.

Perhatian: Menghapus project memiliki efek berikut:

  • Semua hal dalam project akan dihapus. Jika Anda menggunakan project yang sudah ada untuk codelab ini, saat menghapusnya, Anda juga akan menghapus semua pekerjaan lain yang telah dilakukan di project tersebut.
  • Project ID kustom akan hilang. Saat membuat project ini, Anda mungkin telah membuat project ID kustom yang masih ingin Anda gunakan pada masa mendatang. Untuk mempertahankan URL yang menggunakan project ID, seperti URL appspot.com, hapus resource yang dipilih di dalam project, bukan menghapus keseluruhan project.

Jika Anda berencana untuk mempelajari beberapa codelab dan panduan memulai, menggunakan kembali project dapat membantu Anda agar tidak melampaui batas kuota project.

  1. Di Cloud Console, buka halaman Manage resource. Buka halaman Kelola resource
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete dc096e8341a05fec.png.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource satu per satu

  1. Buka Cloud Shell dan buka direktori contoh wrf
cd  ~/slurm-gcp/tf/examples/wrf
  1. Jalankan make hancurkan untuk menghapus semua sumber daya.
make destroy