1. Giriş

Last Updated: 2021-05-05
Ne oluşturacaksınız?
Bu codelab'de, Slurm iş planlayıcı ile Google Cloud'da otomatik ölçeklendirmeli bir yüksek performanslı bilgi işlem (HPC) kümesi dağıtacaksınız. Bu kümeyi Spack aracılığıyla yüklenen WRF® ile dağıtan örnek bir Terraform dağıtımı kullanacaksınız. Ardından, CONUS 2,5 km karşılaştırması veya CONUS 12 km karşılaştırmasını çalıştırmak için bu altyapıyı kullanacaksınız.
Öğrenecekleriniz
- Google Cloud Platform'da bir HPC kümesi çalıştırmak için Kimlik ve Erişim Yönetimi (IAM) politikalarını yapılandırma
- Slurm iş zamanlayıcı ile bulutta yerel bir HPC kümesi dağıtma
- Slurm toplu işini kullanarak Google Cloud'da WRF®'yi paralel olarak çalıştırma
İhtiyacınız olanlar
- Bir SSH anahtarı eklenmiş Gmail hesabı veya Google Workspace, Cloud Identity
- Faturalandırmanın etkinleştirildiği Google Cloud Platform projesi
- GCP projenizde proje sahibi rolü
- Yeterli Compute Engine kotası (480 c2 sanal CPU ve 500 GB PD-Standard Disk)
2. Yapılandırma
Google Cloud API'lerini etkinleştirin
Google Cloud kaynakları oluşturmak ve kullanmak için API'lerin etkinleştirilmesi gerekir.
gcloud services enable compute.googleapis.com
IAM politikaları ayarlama
Yüksek performanslı bilgi işlemde, sistem yöneticileri ve sistem kullanıcıları arasında net ayrımlar vardır. Sistem yöneticileri genellikle bilgi işlem kaynaklarını yönetmelerine ve çalıştırmalarına olanak tanıyan "kök erişimine" sahiptir. Sistem kullanıcıları genellikle yalnızca işleri yürütmek için kaynakları 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ını yükseltmelerine izin verilip verilmeyeceğini belirlemek için GCP'nin Kimlik ve Erişim Yönetimi (IAM) sistemiyle entegre olur.
Bu eğitimde, sistem yöneticisi ve Compute Engine yöneticisi rollerini doldurduğunuz varsayılır. Aşağıdaki görevleri tamamlamanız için yeterli izinleri verecek IAM politikaları yapılandıracağız.
- Google Compute Engine (GCE) sanal makine örnekleri oluşturma/silme
- GCE sanal makine örneklerine SSH ile bağlanma

Bu eğitimi tamamlamak için kendinize gerekli IAM rollerini vermek üzere Google Cloud Console'da:
- Ürünler ve Hizmetler menüsünde IAM ve Yönetici > IAM'e gidin.
- Sayfanın üst kısmına yakın bir yerde bulunan "+Ekle"yi tıklayın.
- "Yeni üyeler" bölümüne Google Workspace hesabınızı, Cloud Identity hesabınızı veya Gmail hesabınızı girin.
- Aşağıdaki rolleri ekleyin : Compute Admin, Compute OS Login ve Service Account User
- Kaydet'i tıklayın.
Girişiniz artık HPC kümesinin oluşturulmasını başlatmak için gereken izinlere sahip.
Doğru rolleri atadığınızı doğrulamak için Cloud Shell'inizi açın ve aşağıdaki komutu çalıştırın. YOUR_PROJECT ve EMAIL_ADDRESS yerine projenizi ve e-posta adresinizi girin.
$ 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 HPC kümesi dağıtma
Bu bölümde, Slurm iş zamanlayıcısı da dahil olmak üzere otomatik ölçeklendirmeli bir HPC kümesi dağıtacaksınız. Bu, kullanılan makine türü ve vCPU sayısı daha küçük olduğundan Yüksek Kota seçeneğiyle aynıdır.
- GCP'de Cloud Shell'inizi açın.
- FluidNumerics/slurm-gcp deposunu klonlayın.
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- WRF dizinine geçin:
cd ~/slurm-gcp/tf/examples/wrf
- Terraform planı oluşturun ve inceleyin. Kümenizin adını, GCP projenizi ve dağıtım yapmak istediğiniz bölgeyi belirtmek için
WRF_NAME,WRF_PROJECTveWRF_ZONEortam değişkenlerini ayarlayın.
export WRF_PROJECT=<PROJECT ID> export WRF_ZONE=<ZONE> export WRF_NAME="wrf-small"
- Terraform'u ilk kez çalıştırdığınızda
initkomutunu çalıştırmanız gerekir:
terraform init
- Planı,
terraformkomutunu çalıştıracak olan make komutuyla oluşturun.
make plan
- 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ılıkları yüklenir.
make apply
- Önceki adımda oluşturulan giriş düğümüne SSH ile bağlanın. Bu düğümü önceki adımda (büyük ihtimalle wrf-small-login0 olarak adlandırılır) görebilirsiniz. Bunu, konsol menü öğesi Compute Engine -> VM instance'da (Compute Engine -> Sanal makine örneği) VM örnekleri listesinin yanındaki SSH düğmesini tıklayarak yapabilirsiniz.
Seçenek: Bu gcloud komutları çifti, giriş düğümü adını bulur ve SSH ile bağlanır:
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}
- Giriş düğümüne bağlandıktan sonra küme kurulumunuzu doğrulamak için wrf modülünün kullanılabilir olduğunu kontrol edin.
$ 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
/apps/share/conus-12kmiçinde aşağıda listelenen içeriklerin bulunduğ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ırmasını çalıştırma
CONUS 12 km karşılaştırma testini çalıştırmak için bir Slurm toplu işi göndereceksiniz. Bu karşılaştırma testinin giriş desteleri, /apps/share/benchmarks/conus-12km altındaki wrf-gcp sanal makine görüntüsünde yer alır.
Bu bölüm için kümenin login düğümüne SSH ile bağlanmanız gerekir.
- /apps/share dizinindeki örnek wrf-conus.sh toplu iş dosyasını kopyalayın.
cp /apps/share/wrf-conus12.sh ~/
--partitionve--ntasksdeğerlerinin doğru 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ıralamalarının 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
- Toplu işi sbatch kullanarak gönderin.
sbatch wrf-conus12.sh
- İş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.
squeueile işinizin durumunu izleyebilirsiniz. - İş tamamlandığında rsl.out.0000 dosyasının içeriğini kontrol ederek "wrf: SUCCESS COMPLETE WRF" ifadesini gördüğünüzü doğrulayın. İşi birden fazla kez çalıştırdıysanız sayısal sonek farklı olur. Örneğin, bir yapılandırma ayarını yanlış yaptınız ve işi yeniden çalıştırmanız gerekti.
$ 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 HPC kümesi dağıtma
Bu bölümde, GCP'de Slurm iş zamanlayıcısını içeren otomatik ölçeklendirmeli bir HPC kümesi dağıtacaksınız.
- GCP'de Cloud Shell'inizi açın.
- FluidNumerics/slurm-gcp deposunu klonlayın.
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- WRF dizinine geçin:
cd ~/slurm-gcp/tf/examples/wrf
- Terraform planı oluşturun ve inceleyin. Kümenizin adını, GCP projenizi, dağıtım yapmak istediğiniz bölgeyi, maksimum düğüm sayısını ve makine türünü belirtmek için
WRF_NAME,WRF_PROJECT,WRF_ZONE,WRF_MAX_NODEveWRF_MACHINE_TYPEortam değişkenlerini ayarlayın. CONUS 2,5 km karşılaştırma testi için, 480 MPI sıralamasıyla iş çalıştırmak üzere en az 8 düğümün bulunduğu 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"
- Yukarıda yapmadıysanız terraform'u başlatmak için
terraform initkomutunu çalıştırmanız gerekir:
terraform init
- make komutuyla planı oluşturun.
make plan
- 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ılıkları yüklenir.
make apply
- Önceki adımda oluşturulan giriş düğümüne SSH ile bağlanın. Bu düğümü önceki adımda (büyük olasılıkla wrf-large-login0 olarak adlandırılır) görebilirsiniz. Bunu, konsol menü öğesi Compute Engine -> VM instance'da (Compute Engine -> Sanal makine örneği) VM örnekleri listesinin yanındaki SSH düğmesini tıklayarak yapabilirsiniz.
Seçenek: Bu gcloud komutları çifti, giriş düğümü adını bulur ve SSH ile bağlanır:
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.
- Giriş düğümüne bağlandıktan sonra küme kurulumunuzu doğrulamak için wrf modülünün kullanılabilir olduğunu kontrol edin.
$ 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
/apps/share/conus-2.5kmiçinde aşağıda listelenen içeriklerin bulunduğ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ırmasını çalıştırma
CONUS 2, 5 km karşılaştırma testini çalıştırmak için bir Slurm toplu işi göndereceksiniz. Bu karşılaştırma testinin giriş desteleri, /apps/share/benchmarks/conus-2.5km altındaki wrf-gcp VM görüntüsüne dahil edilmiştir.
Bu bölüm için kümenin login düğümüne SSH ile bağlanmanız gerekir.
- /apps/share dizinindeki örnek wrf-conus.sh toplu iş dosyasını kopyalayın.
cp /apps/share/wrf-conus2p5.sh ~/
--partitionve--ntasksdeğerlerinin doğru 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ıralamalarının 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
- Toplu işi sbatch kullanarak gönderin.
sbatch wrf-conus2p5.sh
- İş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 480 sıralamayla tamamlanması yaklaşık 1 saat sürer.
squeueile işinizin durumunu izleyebilirsiniz. - İş tamamlandığında rsl.out.0000 dosyasının içeriğini kontrol ederek "wrf: SUCCESS COMPLETE WRF" ifadesini gördüğünüzü doğrulayın. İşi birden fazla kez çalıştırdıysanız sayısal sonek farklı olur. Örneğin, bir yapılandırma ayarını yanlış yaptınız ve işi yeniden çalıştırmanız gerekti.
$ 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, buluta özel 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 istemiyorsanız:
Projeyi silme
Faturalandırılmanın önüne geçmenin en kolay yolu, codelab için oluşturduğunuz projeyi silmektir.
Dikkat: Bir projeyi silmenin aşağıdaki etkileri olur:
- Projedeki her şey silinir. Bu codelab için mevcut bir proje kullandıysanız projeyi sildiğinizde projede yaptığınız diğer tüm çalışmalar da silinir.
- Ö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 ve hızlı başlangıç kılavuzu incelemeyi planlıyorsanız projeleri yeniden kullanmak proje kotası sınırlarını aşmanızı önleyebilir.
- Cloud Console'da Kaynakları yönetin sayfasına gidin. Kaynakları yönetin sayfasına gidin
- Proje listesinde, silmek istediğiniz projeyi seçin ve Sil 'i
tıklayın. - İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
Kaynakları tek tek silme
- Cloud Shell'inizi açın ve wrf örnek dizinine gidin.
cd ~/slurm-gcp/tf/examples/wrf
- Tüm kaynakları silmek için make destroy komutunu çalıştırın.
make destroy