Değişken Sayılarla WRF Hava Tahmin Modelini Çalıştırma' Slurm-GCP

1. Giriş

Amerika Kıtası

Son Güncelleme Tarihi: 05.05.2021

Oluşturacağınız nedir?

Bu codelab'de, Slurm iş planlayıcısını kullanarak Google Cloud'da otomatik ölçeklendirmeli Yüksek Performanslı Bilişim (HPC) kümesi dağıtacaksınız. Bu kümeyi Spack üzerinden yüklenen WRF® ile dağıtan örnek bir Terraform dağıtımı kullanacaksınız. Ardından bu altyapıyı kullanarak CONUS 2, 5 km karşılaştırma veya CONUS 12 km karşılaştırması yapabilirsiniz.

Neler öğreneceksiniz?

  • Google Cloud Platform'da HPC kümesi çalıştırmak için Identity and Access Management (IAM) politikalarını yapılandırma
  • Slurm iş planlayıcı ile bulutta yerel HPC kümesi dağıtma
  • Slurm toplu işi kullanarak Google Cloud'da WRF®'yi paralel olarak çalıştırma

Gerekenler

2. Yapılandırma

Google Cloud API'lerini etkinleştirin

Google Cloud kaynaklarını oluşturmak ve kullanmak için API'ler etkinleştirilmelidir.

gcloud services enable compute.googleapis.com 

IAM Politikaları Belirleme

HPC'de, sistem yöneticileri ile sistem kullanıcıları arasında net bir ayrım vardır. Sistem yöneticileri genellikle "kök erişimine" sahiptir. Böylece bilgi işlem kaynaklarını yönetip çalıştırabilir. Sistem kullanıcıları genellikle kaynakları yalnızca işleri yürütmek için kullanması gereken araştırmacılar, bilim insanları ve uygulama mühendisleridir.

Google Cloud'da OS Login API, Google Workspace, Cloud Identity ve Gmail hesaplarından POSIX kullanıcı bilgilerini sağlar. Ayrıca, OS Login, kullanıcıların Linux sistemlerinde ayrıcalıkları üstlenmesine izin verilip verilmeyeceğini belirlemek için GCP'nin Identity and Access Management (IAM) sistemiyle entegre olur.

Bu eğiticide, sistem yöneticisi ve Compute Engine yöneticisi rollerini doldurduğunuzu varsayıyoruz. IAM politikalarını, aşağıdaki görevleri yerine getirmeniz için size yeterli izinleri verecek şekilde yapılandıracağız

  • Google Compute Engine (GCE) sanal makine örneklerini oluşturma/silme
  • GCE sanal makine örneklerine SSH

57883cb8acc09653.png

Bu eğiticiyi tamamlamak için kendinize gerekli IAM rollerini vermek üzere Google Cloud Console'da:

  1. IAM & & Yönetici > IAM'yi seçin.
  2. "+Ekle"yi tıklayın. dokunun.
  3. "Yeni üyeler" bölümünde Google Workspace hesabınızı, Cloud Identity Hesabınızı veya Gmail hesabınızı yazın
  4. Şu rolleri ekleyin : İşlem Yöneticisi, Compute OS Girişi ve Hizmet Hesabı Kullanıcısı
  5. Kaydet'i tıklayın.

HPC kümesi oluşturma işlemini başlatmak için gereken izinlere artık giriş bilgilerinizle erişebilirsiniz.

Doğru rolleri atadığınızdan emin olmak için Cloud Shell'inizi açın ve YOUR_PROJECT ile EMAIL_ADDRESS değerlerini projeniz ve e-posta adresinizle değiştirerek aşağıdaki komutu çalıştırın.

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

Bu komut şu çıkışı verir:

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

3. Düşük Kota: Terraform ile otomatik ölçeklendirmeli bir HPC kümesi dağıtın

Bu bölümde, Slurm iş planlayıcısını da içeren otomatik ölçeklendirmeli bir HPC kümesi dağıtacaksınız. Kullanılan makine türünün daha küçük olması ve kullanılan vCPU sayısının daha az olması dışında Yüksek Kota seçeneği ile aynıdır.

  1. GCP'de Cloud Shell'inizi açın.
  2. FluidNumerics/slurm-gcp deposunu klonlama
cd ~
git clone https://github.com/FluidNumerics/slurm-gcp.git
  1. WRF dizinine geçin:
cd  ~/slurm-gcp/tf/examples/wrf
  1. Bir Terraform planı oluşturup inceleyin. Kümenizin adını, GCP projenizi ve dağıtım yapmak istediğiniz alt bölgeyi belirtmek için WRF_NAME, WRF_PROJECT ve WRF_ZONE ortam değişkenlerini ayarlayın.
export WRF_PROJECT=<PROJECT ID>
export WRF_ZONE=<ZONE>
export WRF_NAME="wrf-small"
  1. Terraform'u ilk kez çalıştırdığınızda init komutunu çalıştırmanız gerekir:
terraform init
  1. terraform komutunu çalıştıracak "yap" komutunu kullanarak planı oluşturun
make plan
  1. Kümeyi dağıtın. Yükleme ve kurulum işlemi 2 saat sürebilir. Dağıtım sırasında WRF ve tüm bağımlıları yüklenir.
make apply
  1. Önceki adımda oluşturulan login düğümüne SSH uygulayın. Bu düğümü önceki adımda görebilirsiniz (muhtemelen wrf-small-login0 olarak adlandırılır). Bu işlemi konsol menü öğesindeki Compute Engine -> Sanal Makine Örnekleri listesinin yanında bulunan SSH düğmesini tıklayarak yapabilirsiniz. sanal makine örneğidir.

Seçenek: Bu gcloud komutu çifti, giriş düğümü adını ve SSH'yi buna göre çözer:

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. Giriş düğümüne bağlandıktan sonra küme kurulumunuzu doğrulamak için wrf modülünün kullanılabilir olduğundan emin olun.
$ 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. /apps/share/conus-12km sitesinin aşağıda listelenen içeriğe sahip olduğunu doğrulayın.
$  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. CONUS 12 km karşılaştırma yarışına katılın

CONUS 12 km karşılaştırmasını yapmak için bir Slurm toplu işi göndermeniz gerekir. Bu karşılaştırma için giriş sunumları, /apps/share/benchmarks/conus-12km altındaki wrf-gcp sanal makine görüntüsüne dahil edilir.

Bu bölüm için kümenin login düğümüne bağlı SSH olmanız gerekir

  1. Örnek wrf-conus.sh grup dosyasını /apps/share bölümünden kopyalayın
cp /apps/share/wrf-conus12.sh ~/
  1. --partition ve --ntasks öğelerinin doğru şekilde ayarlandığını doğrulamak için wrf-conus.sh dosyasını bir metin düzenleyicide açın. Görev sayısı, işi başlatmak için kullanmak istediğiniz MPI sıralaması sayısına ayarlanmalıdır. Bu gösterimde görev sayısı, iş için kullanılan vCPU sayısına eşittir ve kullanılabilir kotanızı aşmamalıdır.
#!/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. Toplu işi Sbatch kullanarak gönderin.
sbatch wrf-conus12.sh
  1. İşin tamamlanmasını bekleyin. Bu karşılaştırma 6 saatlik bir tahmin çalıştıracak şekilde yapılandırılmıştır. 24 sıralamayla tamamlanması yaklaşık 3 saat sürer. squeue ile işinizin durumunu izleyebilirsiniz.
  2. İş tamamlandığında, "wrf: FAILED COMPLETE WRF" ifadesini gördüğünüzden emin olmak için rsl.out.0000 içeriğini kontrol edin. İşi birden çok kez çalıştırdıysanız (ör. bir yapılandırma ayarınız yanlışsa ve yeniden çalıştırmanız gerektiyse) sayısal sonek farklı olur.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF

5. Yüksek Kota: Terraform ile otomatik ölçeklendirmeli bir HPC kümesi dağıtın

Bu bölümde, GCP'deki Slurm iş planlayıcısını da içeren otomatik ölçeklendirmeli bir HPC kümesi dağıtacaksınız.

  1. GCP'de Cloud Shell'inizi açın.
  2. FluidNumerics/slurm-gcp deposunu klonlama
cd ~
git clone https://github.com/FluidNumerics/slurm-gcp.git
  1. WRF dizinine geçin:
cd  ~/slurm-gcp/tf/examples/wrf
  1. Bir Terraform planı oluşturup inceleyin. Kümenizin adını, GCP projenizi, dağıtım yapmak istediğiniz alt bölgeyi, maksimum düğüm sayısını ve makine türünü belirtmek için WRF_NAME, WRF_PROJECT, WRF_ZONE, WRF_MAX_NODE ve WRF_MACHINE_TYPE ortam değişkenlerini ayarlayın. CONUS 2, 5 km karşılaştırması için 480 MPI sıralamasına sahip en az 8 düğümlü c2-standard-60 örneklerini kullanmanızı öneririz.
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. Yukarıdaki adımları uygulamadıysanız terraform'u başlatmak için terraform init komutunu çalıştırmanız gerekir:
terraform init
  1. Make (yap) komutuyla planı oluşturun.
make plan
  1. Kümeyi dağıtın. Yükleme ve kurulum işlemi 2 saat sürebilir. Dağıtım sırasında WRF ve tüm bağımlıları yüklenir.
make apply
  1. Önceki adımda oluşturulan login düğümüne SSH uygulayın. Bu düğümü önceki adımda görebilirsiniz (muhtemelen wrf-large-login0 olarak adlandırılır). Bu işlemi konsol menü öğesindeki Compute Engine -> Sanal Makine Örnekleri listesinin yanında bulunan SSH düğmesini tıklayarak yapabilirsiniz. sanal makine örneğidir.

Seçenek: Bu gcloud komutu çifti, giriş düğümü adını ve SSH'yi buna göre çözer:

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}

İkinci komut, Slurm Giriş düğümüne bağlanmanızı sağlar.

  1. Giriş düğümüne bağlandıktan sonra küme kurulumunuzu doğrulamak için wrf modülünün kullanılabilir olduğundan emin olun.
$ 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. /apps/share/conus-2.5km sitesinin aşağıda listelenen içeriğe sahip olduğunu doğrulayın.
$ 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. CONUS 2,5 km karşılaştırma yarışına katılın

CONUS 2, 5 km karşılaştırmasını yapmak için bir Slurm toplu işi göndermeniz gerekir. Bu karşılaştırma için giriş sunumları, /apps/share/benchmarks/conus-2.5km altındaki wrf-gcp sanal makine görüntüsüne dahil edilir.

Bu bölüm için kümenin login düğümüne bağlı SSH olmanız gerekir

  1. Örnek wrf-conus.sh grup dosyasını /apps/share bölümünden kopyalayın
cp /apps/share/wrf-conus2p5.sh ~/
  1. --partition ve --ntasks öğelerinin doğru şekilde ayarlandığını doğrulamak için wrf-conus.sh dosyasını bir metin düzenleyicide açın. Bölüm c2-60 olarak ayarlanmalıdır. Görev sayısı, işi başlatmak için kullanmak istediğiniz MPI sıralaması sayısına ayarlanmalıdır. Bu gösterimde görev sayısı, iş için kullanılan vCPU sayısına eşittir ve kullanılabilir kotanızı aşmamalıdır.
#!/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. Toplu işi Sbatch kullanarak gönderin.
sbatch wrf-conus2p5.sh
  1. İşin tamamlanmasını bekleyin. Bu karşılaştırma 6 saatlik bir tahmin çalıştıracak şekilde yapılandırılmıştır. Bu tahminin tamamlanması 480 sıralamayla yaklaşık 1 saat sürer. squeue ile işinizin durumunu izleyebilirsiniz.
  2. İş tamamlandığında, "wrf: FAILED COMPLETE WRF" ifadesini gördüğünüzden emin olmak için rsl.out.0000 içeriğini kontrol edin. İşi birden çok kez çalıştırdıysanız (ör. bir yapılandırma ayarınız yanlışsa ve yeniden çalıştırmanız gerektiyse) sayısal sonek farklı olur.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF

7. Tebrikler

Bu codelab'de otomatik ölçeklendirmeli, bulutta yerel bir HPC kümesi oluşturdunuz ve Google Cloud Platform'da paralel bir WRF® simülasyonu çalıştırdınız.

Temizleme

Bu codelab'de kullanılan kaynaklar için Google Cloud Platform hesabınızın ücretlendirilmesini önlemek amacıyla:

Projeyi silme

Faturalandırmayı ortadan kaldırmanın en kolay yolu, codelab için oluşturduğunuz projeyi silmektir.

Dikkat: Bir projeyi silmenin aşağıdaki etkileri vardır:

  • Projedeki her şey silinir. Bu codelab için mevcut bir projeyi kullandıysanız bu projeyi sildiğinizde, projede yaptığınız diğer çalışmaları da silmiş olursunuz.
  • Özel proje kimlikleri kaybolur. Bu projeyi oluştururken, gelecekte kullanmak istediğiniz özel bir proje kimliği oluşturmuş olabilirsiniz. Proje kimliğini kullanan URL'leri (ör. appspot.com URL'si) korumak için projenin tamamını silmek yerine proje içindeki seçili kaynakları silin.

Birden fazla codelab'i ve hızlı başlangıç kılavuzunu keşfetmeyi planlıyorsanız projeleri yeniden kullanarak proje kota sınırlarını aşmaktan kaçınabilirsiniz.

  1. Cloud Console'da Kaynakları yönetin sayfasına gidin. Kaynakları yönetin sayfasına gidin
  2. Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil dc096e8341a05fec.png simgesini tıklayın.
  3. İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

Kaynakları tek tek silme

  1. Cloud Shell'inizi açın ve wrf örnek dizinine gidin
cd  ~/slurm-gcp/tf/examples/wrf
  1. Tüm kaynakları silmek için yap kaldırma komutunu çalıştırın.
make destroy