1. Giriş
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
- SSH anahtarı eklenmiş Gmail hesabı veya Google Workspace, Cloud Identity
- Faturalandırmanın etkin olduğu Google Cloud Platform projesi
- GCP Projenizde proje sahibi rolü
- Yeterli Compute Engine Kotası (480 c2 vCPU ve 500 GB PD Standart Disk)
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
Bu eğiticiyi tamamlamak için kendinize gerekli IAM rollerini vermek üzere Google Cloud Console'da:
- IAM & & Yönetici > IAM'yi seçin.
- "+Ekle"yi tıklayın. dokunun.
- "Yeni üyeler" bölümünde Google Workspace hesabınızı, Cloud Identity Hesabınızı veya Gmail hesabınızı yazın
- Şu rolleri ekleyin : İşlem Yöneticisi, Compute OS Girişi ve Hizmet Hesabı Kullanıcısı
- 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.
- GCP'de Cloud Shell'inizi açın.
- FluidNumerics/slurm-gcp deposunu klonlama
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- WRF dizinine geçin:
cd ~/slurm-gcp/tf/examples/wrf
- 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
veWRF_ZONE
ortam 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
init
komutunu çalıştırmanız gerekir:
terraform init
terraform
komutunu çalıştıracak "yap" komutunu kullanarak 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ıları yüklenir.
make apply
- Ö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}
- 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
/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
- Örnek wrf-conus.sh grup dosyasını /apps/share bölümünden kopyalayın
cp /apps/share/wrf-conus12.sh ~/
--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
- 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.
squeue
ile işinizin durumunu izleyebilirsiniz. - İş 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.
- GCP'de Cloud Shell'inizi açın.
- FluidNumerics/slurm-gcp deposunu klonlama
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- WRF dizinine geçin:
cd ~/slurm-gcp/tf/examples/wrf
- 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
veWRF_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"
- Yukarıdaki adımları uygulamadıysanız terraform'u başlatmak için
terraform init
komutunu çalıştırmanız gerekir:
terraform init
- Make (yap) 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ıları yüklenir.
make apply
- Ö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.
- 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
/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
- Örnek wrf-conus.sh grup dosyasını /apps/share bölümünden kopyalayın
cp /apps/share/wrf-conus2p5.sh ~/
--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
- 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 tamamlanması 480 sıralamayla yaklaşık 1 saat sürer.
squeue
ile işinizin durumunu izleyebilirsiniz. - İş 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.
- Cloud Console'da Kaynakları yönetin sayfasına gidin. Kaynakları yönetin sayfasına gidin
- Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil simgesini tıklayın.
- İletişim kutusuna 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 yap kaldırma komutunu çalıştırın.
make destroy