1. Genel Bakış
Google Cloud Platform'da Slurm kümesi çalıştırmaya yönelik Google Codelab'e hoş geldiniz. Bu codelab'i tamamladığınızda otomatik ölçeklendirmeli Slurm kümesi hazırlamanın ve çalıştırmanın ne kadar kolay olduğunu daha iyi anlayacaksınız.

Google Cloud, SchedMD ile iş ortaklığı yaparak Compute Engine'de Slurm iş yükü yöneticisini başlatmayı ve ekstra kaynağa ihtiyacınız olduğunda mevcut kümenizi dinamik olarak genişletmeyi kolaylaştıran bir dizi araç yayınladı. Bu entegrasyon, Slurm ile ilgili en iyi uygulamalara uygun olarak SchedMD uzmanları tarafından oluşturulmuştur.
Google Cloud Platform'da Slurm entegrasyonlarını kullanmayı planlıyorsanız veya sorularınız varsa lütfen Google Cloud & Slurm Topluluğu Tartışma Grubu'na katılın.
Slurm hakkında

Google Cloud Platform'da bağımsız bir Slurm kümesinin temel mimari diyagramı.
Slurm, dünyanın dört bir yanındaki HPC kümeleri için önde gelen iş yükü yöneticilerinden biridir. Slurm, küçük ve büyük Linux kümeleri için açık kaynaklı, hatadan etkilenmez ve yüksek düzeyde ölçeklenebilir bir iş yükü yönetimi ve iş planlama sistemi sağlar. Slurm'un çalışması için çekirdek değişikliği gerekmez ve nispeten bağımsızdır. Bir küme iş yükü yöneticisi olarak Slurm'un üç temel işlevi vardır:
- Kullanıcıların işlerini yapabilmeleri için belirli bir süre boyunca kaynaklara (işlem düğümleri) özel veya özel olmayan erişim izni verir.
- Ayrılan düğümler kümesinde iş (normalde paralel bir iş) başlatma, yürütme ve izleme için bir çerçeve sağlar.
- Bekleyen işlerin sırasını yöneterek kaynaklar için rekabeti düzenler.
Neler öğreneceksiniz?
- Terraform kullanarak Slurm kümesi oluşturma
- SLURM kullanarak iş çalıştırma
- SLURM'da küme bilgilerini sorgulama ve çalışan işleri izleme
- Belirli iş parametrelerine ve gereksinimlerine uyacak şekilde düğümleri otomatik olarak ölçeklendirme
- Slurm ile ilgili yardım alabileceğiniz yerler
Ön koşullar
- Google Cloud Platform hesabı ve faturalandırma özelliği etkin bir proje
- Temel Linux Deneyimi
2. Kurulum
Yönlendirmesiz ortam kurulumu
Proje oluştur
Google Hesabınız (Gmail veya G Suite) yoksa hesap oluşturmanız gerekir. Google Cloud Platform Console'da ( console.cloud.google.com) oturum açın ve Kaynakları yönetin sayfasını açın:

Proje Oluştur'u tıklayın.

Proje adı girin. Proje kimliğini (yukarıdaki ekran görüntüsünde kırmızı renkle vurgulanmıştır) unutmayın. Proje kimliği, tüm Google Cloud projelerinde benzersiz bir ad olmalıdır. Proje adınız benzersiz değilse Google Cloud, proje adına göre rastgele bir proje kimliği oluşturur.
Ardından, Google Cloud kaynaklarını kullanmak için Developers Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i tamamlamak size birkaç dolardan fazla mal olmayacaktır. Ancak daha fazla kaynak kullanmaya veya kaynakları çalışır durumda bırakmaya karar verirseniz bu tutar artabilir (bu belgenin sonundaki "Sonuç" bölümüne bakın). Google Cloud Platform Fiyat Hesaplayıcı'ya buradan ulaşabilirsiniz.
Google Cloud Platform'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme sürümünden yararlanabilir.
Google Cloud Shell
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, bulutta çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacağız.
Google Cloud Shell'i başlatma
GCP Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ardından Cloud Shell'i başlat'ı tıklayın:

Ortamın sağlanması ve bağlantının kurulması yalnızca birkaç dakikanızı alır:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı önemli ölçüde artar ve kimlik doğrulama basitleşir. Bu laboratuvardaki çalışmalarınızın neredeyse tamamını yalnızca bir web tarayıcısı veya Google Chromebook kullanarak yapabilirsiniz.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, PROJECT_ID'nize ayarlandığını görürsünüz:
$ gcloud auth list
Komut çıkışı:
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
$ gcloud config list project
Komut çıkışı:
[core]
project = <PROJECT_ID>
Proje kimliği doğru ayarlanmamışsa şu komutla ayarlayabilirsiniz:
$ gcloud config set project <PROJECT_ID>
Komut çıkışı:
Updated property [core/project].
3. Slurm Terraform Yapılandırmasını Hazırlama ve İnceleme
Slurm Terraform yapılandırmasını indirme
Cloud Shell oturumunda, Google Cloud Platform için Slurm Terraform dosyalarını içeren Git deposunu klonlamak (indirmek) için aşağıdaki komutu çalıştırın:
git clone https://github.com/SchedMD/slurm-gcp.git
Aşağıdaki komutu çalıştırarak Slurm dağıtım yapılandırma dizinine geçin:
cd slurm-gcp
Slurm Terraform tfvars'ı yapılandırma
basic.tfvars.example dosyasında, dağıtılacak ağ, örnekler ve depolama alanı dahil olmak üzere dağıtımın yapılandırması ayrıntılı olarak açıklanır. Bu dosyayı "tfvars dosyası" olarak adlandıracağımız yeni bir dosyaya kopyalayın ve gerektiği gibi düzenleyin.
cd tf/example/basic cp basic.tfvars.example basic.tfvars
Cloud Shell oturumunda tfvars dosyasını açın basic.tfvars. Dosya içeriklerini görüntülemek için tercih ettiğiniz komut satırı düzenleyiciyi (vi, nano, emacs vb.) veya Cloud Console kod düzenleyiciyi kullanabilirsiniz:

tfvars dosyasının içeriğini inceleyin.
cluster_name = "g1"
project = "<project>"
zone = "us-west1-b"
# network_name = "<existing network name>"
# subnetwork_name = "<existing subnetwork name>"
# shared_vpc_host_project = "<vpc host project>"
# disable_controller_public_ips = true
# disable_login_public_ips = true
# disable_compute_public_ips = true
# suspend_time = 300
controller_machine_type = "n1-standard-2"
controller_image = "projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
controller_disk_type = "pd-standard"
controller_disk_size_gb = 50
# controller_labels = {
# key1 = "val1"
# key2 = "val2"
# }
# controller_service_account = "default"
# controller_scopes = ["https://www.googleapis.com/auth/cloud-platform"]
# cloudsql = {
# server_ip = "<cloudsql ip>"
# user = "slurm"
# password = "verysecure"
# db_name = "slurm_accounting"
# }
# controller_secondary_disk = false
# controller_secondary_disk_size = 100
# controller_secondary_disk_type = "pd-ssd"
#
# When specifying an instance template, specified controller fields will
# override the template properites.
# controller_instance_template = null
login_machine_type = "n1-standard-2"
login_image = "projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
login_disk_type = "pd-standard"
login_disk_size_gb = 20
# login_labels = {
# key1 = "val1"
# key2 = "val2"
# }
# login_node_count = 1
# login_node_service_account = "default"
# login_node_scopes = [
# "https://www.googleapis.com/auth/monitoring.write",
# "https://www.googleapis.com/auth/logging.write"
# ]
#
# When specifying an instance template, specified login fields will
# override the template properties.
# login_instance_template = null
# Optional network storage fields
# network_storage is mounted on all instances
# login_network_storage is mounted on controller and login instances
# network_storage = [{
# server_ip = "<storage host>"
# remote_mount = "/home"
# local_mount = "/home"
# fs_type = "nfs"
# mount_options = null
# }]
#
# login_network_storage = [{
# server_ip = "<storage host>"
# remote_mount = "/net_storage"
# local_mount = "/shared"
# fs_type = "nfs"
# mount_options = null
# }]
# compute_node_service_account = "default"
# compute_node_scopes = [
# "https://www.googleapis.com/auth/monitoring.write",
# "https://www.googleapis.com/auth/logging.write"
# ]
partitions = [
{ name = "debug"
machine_type = "n1-standard-2"
static_node_count = 0
max_node_count = 10
zone = "us-west1-b"
image ="projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
image_hyperthreads = false
compute_disk_type = "pd-standard"
compute_disk_size_gb = 20
compute_labels = {}
cpu_platform = null
gpu_count = 0
gpu_type = null
network_storage = []
preemptible_bursting = false
vpc_subnet = null
exclusive = false
enable_placement = false
regional_capacity = false
regional_policy = {}
instance_template = null
},
# { name = "partition2"
# machine_type = "n1-standard-16"
# static_node_count = 0
# max_node_count = 20
# zone = "us-west1-b"
# image = "projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
# image_hyperthreads = false
#
# compute_disk_type = "pd-ssd"
# compute_disk_size_gb = 20
# compute_labels = {
# key1 = "val1"
# key2 = "val2"
# }
# cpu_platform = "Intel Skylake"
# gpu_count = 8
# gpu_type = "nvidia-tesla-v100"
# network_storage = [{
# server_ip = "none"
# remote_mount = "<gcs bucket name>"
# local_mount = "/data"
# fs_type = "gcsfuse"
# mount_options = "file_mode=664,dir_mode=775,allow_other"
# }]
# preemptible_bursting = true
# vpc_subnet = null
# exclusive = false
# enable_placement = false
#
# ### NOTE ####
# # regional_capacity is under development. You may see slowness in
# # deleting lots of instances.
# #
# # With regional_capacity : True, the region can be specified in the zone.
# # Otherwise the region will be inferred from the zone.
# zone = "us-west1"
# regional_capacity = True
# # Optional
# regional_policy = {
# locations = {
# "zones/us-west1-a" = {
# preference = "DENY"
# }
# }
# }
#
# When specifying an instance template, specified compute fields will
# override the template properties.
# instance_template = "my-template"
]
Bu tfvars dosyasında yapılandırılacak birkaç alan vardır. Yapılandırılması gereken tek alan projedir. Örnekteki diğer tüm yapılandırmalar olduğu gibi kullanılabilir ancak durumunuza göre gerekli değişiklikleri yapabilirsiniz. Yapılandırma seçenekleri hakkında daha ayrıntılı bilgi için burayı inceleyin.
- cluster_name: Slurm kümesinin adı
- project: Kaynakların dağıtılacağı Google Cloud projesinin kimliği
- zone: Bu kümenin denetleyici ve giriş örneklerini içerecek Google Cloud bölgesi - Daha fazla bilgi
- network_name: Slurm kümesinin dağıtılacağı sanal özel bulut ağı
- subnetwork_name: Slurm kümesinin dağıtılacağı Sanal Özel Bulut alt ağı
- Slurm kümesini dağıtmak için shared_vpc_host_project: Paylaşılan VPC ağı
- disable_controller_public_ips: Slurm denetleyicisine harici IP atanacak mı?
- disable_login_public_ips: Slurm giriş düğümüne harici IP adresi atansın mı?
- disable_compute_login_ips: Slurm oturum açma düğümüne harici IP atanacak mı?
- suspend_time: Bir düğüm boşta kaldıktan sonra askıya alınmadan önce beklenecek süre
- controller_machine_type: Denetleyici düğümü örnek türü
- controller_image: Slurm denetleyici örneğini oluşturmak için kullanılan GCP görüntüsü
- controller_disk_type: Denetleyici örneği önyükleme diskinin türü
- controller_disk_size_gb: Denetleyici örneği önyükleme diskinin boyutu
- controller_labels: Denetleyici örneğine eklenecek etiketler
- controller_service_account: Denetleyici örneğinde kullanılacak hizmet hesabı
- controller_scopes: Denetleyici örneğinin erişim kapsamı
- cloudsql: Denetleyici örneğinde veritabanı barındırmak yerine Slurm veritabanı olarak kullanılacak Google CloudSQL sunucusu
- server_ip: CloudSQL sunucu IP'si
- user: Cloud SQL kullanıcı adı
- password: Cloud SQL şifresi
- db_name: Cloud SQL veritabanı adı
- controller_secondary_disk: NFS sunucusu depolama alanı için ikincil bir disk eklemek istiyor musunuz?
- controller_secondary_disk_type: Denetleyici ikincil diskinin türü
- controller_secondary_disk_size_gb: Denetleyici ikincil diskinin boyutu
- controller_instance_template: Denetleyici örneği için kullanılacak GCP örnek şablonu. Belirtilen tüm hesaplama alanları, şablon özelliklerini geçersiz kılar. Örneğin, controller_image belirtilirse örnek şablonundaki görüntünün üzerine yazılır.
- login_machine_type: Giriş (SSH ile erişilebilir) düğümü örnek türü
- login_image: Slurm giriş örneğini oluşturmak için kullanılan GCP görüntüsü
- login_disk_type: Giriş örneği önyükleme diskinin türü
- login_disk_size_gb: Giriş örneği önyükleme diskinin boyutu
- login_labels: Giriş örneğine eklenecek etiketler
- login_node_count: Oluşturulacak giriş düğümü sayısı
- login_node_service_account: Oturum açma örneklerinde kullanılacak hizmet hesabı
- login_node_scopes: erişim kapsamı)
- login_instance_template: Giriş örneği için kullanılacak GCP örnek şablonu. Belirtilen tüm hesaplama alanları, şablon özelliklerini geçersiz kılar. Örneğin, login_image belirtilirse örnek şablonundaki resmin üzerine yazılır.
- network_storage: Tüm düğümlere monte edilecek ağ depolama alanı. Alanlar doğrudan fstab'a eklenir. Ek bağlama işlemleri için tekrarlanabilir.
- server_ip: Depolama sunucusu IP'si
- remote_mount: Depolama alanı bağlama adı (dosya sistemi adı)
- local_mount: Yerel bağlama dizini
- fs_type: Dosya sistemi türü (NFS, CIFS, Lustre, GCSFuse otomatik olarak yüklenir)
- mount_options: Bağlama seçenekleri (ör. defaults,_netdev)
- login_network_storage: Giriş ve denetleyici düğümlerine monte edilecek ağ depolama alanı. NFS, CIFS, Lustre ve GCSFuse otomatik olarak yüklenir. Ek bağlama işlemleri için tekrarlanabilir.
- server_ip: Depolama sunucusu IP'si
- remote_mount: Depolama alanı bağlama adı (dosya sistemi adı)
- local_mount: Yerel bağlama dizini
- fs_type: Dosya sistemi türü (NFS, CIFS, Lustre, GCSFuse otomatik olarak yüklenir)
- mount_options: Bağlama seçenekleri (ör. defaults,_netdev)
- compute_node_service_account: İşlem örneklerinde kullanılacak hizmet hesabı
- compute_node_scopes: İşlem örneklerinin erişim kapsamı
- partitions: Slurm bölüm yapılandırması. Ek bölümler için tekrarlanabilir.
- name: Bölüm adı
- machine_type: İşlem düğümleri örnek türü
- static_node_count: Her zaman açık olan işlem düğümlerinin sayısı
- max_node_count: İzin verilen toplam işlem düğümü sayısı (maksimum 64.000)
- zone: Bu bölümün kaynaklarını içerecek Google Cloud bölgesi - Daha fazla bilgi
- image: İşlem görüntüsü düğümü makine türü
- image_hyperthreads: Örnekte hiper iş parçacığını etkinleştirme veya devre dışı bırakma
- compute_disk_type: İşlem örneği önyükleme diskinin türü (pd-standard, pd-ssd)
- compute_disk_size_gb: İşlem örneği önyükleme diskinin boyutu
- compute_labels: İşlem örneğine eklenecek etiketler
- cpu_platform: Tüm işlem düğümleri için gereken minimum CPU platformu
- gpu_count: Bölümdeki her bir örneğe eklenecek GPU sayısı
- gpu_type: Bölümün örneklerine eklenecek GPU türü
- network_storage: Bölümdeki tüm işlem düğümlerine monte edilecek ağ depolama alanı. Alanlar doğrudan fstab'a eklenir. Ek bağlama işlemleri için tekrarlanabilir.
- server_ip: Depolama sunucusu IP'si
- remote_mount: Depolama alanı bağlama adı (dosya sistemi adı)
- local_mount: Yerel bağlama dizini
- fs_type: Dosya sistemi türü (NFS, CIFS, Lustre, GCSFuse otomatik olarak yüklenir)
- mount_options: Bağlama seçeneği
- preemptible_bursting: Örnekler öncelikli örnekler mi olacak?
- vpc_subnet: Slurm bölümünün dağıtılacağı Sanal Özel Bulut alt ağı
- exclusive: Slurm'un işlere tam düğümler ayırmasını sağlar.
- enable_placement: Örnekler arasında düşük ağ gecikmesi için örneklerin birbirine yakın yerleştirileceği yerleştirme politikalarını etkinleştirin.
- regional_capacity: Kullanılabilirliğe göre bir örneğin bölgedeki herhangi bir alt bölgeye yerleştirilmesine izin verin.
- regional_policy: regional_capacity doğruysa bu politika, hangi bölgenin kullanılacağını ve o bölgedeki hangi alt bölgelerin kullanılmayacağını belirler.
- Instance_template: İşlem örnekleri için kullanılacak GCP örnek şablonu. Belirtilen tüm hesaplama alanları, şablon özelliklerini geçersiz kılar. Örneğin, resim belirtilirse örnek şablonundaki resmin üzerine yazılır.
Gelişmiş Yapılandırma
İsterseniz küme dağıtım sürecinin bir parçası olarak ek paketler ve yazılımlar yükleyebilirsiniz. Slurm kümenize yazılım yüklemek için "Compute Engine'de Slurm kümesine uygulama yükleme" başlıklı makalemizde açıklanan çeşitli yöntemleri kullanabilir veya Slurm tarafından dağıtılan görüntüyü özelleştirebilirsiniz. Şu anda Slurm, SchedMD tarafından sağlanan ve Google Cloud HPC VM Image'e dayalı bir sanal makine görüntüsünü dağıtıyor. Slurm, bu görüntünün üzerine yükleniyor.
Kendi resminizi kullanmak için tfvars dosyasında listelenen herkese açık SchedMD sanal makine görüntüsünü temel alarak kendi yapılandırmanızla bir görüntü oluşturun. Ardından, tfvars dosyasında belirtilen resim URI'sini kendi resminizle değiştirin ve değişikliği test edin.
Sorun giderme
Bu codelab boyunca lütfen Slurm-GCP deposunun ReadMe dosyasındaki Sorun giderme bölümüne bakın.
En sık karşılaşılan sorunlar, tfvars dosyasının yapılandırılmasında yapılan hatalar ve kota kısıtlamalarıdır. Bu codelab, yeni bir kullanıcının standart kota tahsisi ve yeni kullanıcının aldığı 300 ABD doları değerindeki ücretsiz kredi kapsamında çalışacak şekilde tasarlanmıştır. Sanal makineler oluşturulmaya çalışılırken hata oluşursa API hatalarını kontrol etmek için denetleyici düğümündeki /var/log/slurm/resume.log dosyasını inceleyin.
4. Yapılandırmayı dağıtma ve doğrulama
Yapılandırmayı dağıtma
Cloud Shell oturumunda, slurm-gcp/tf/example klasöründen aşağıdaki komutu çalıştırın:
terraform init terraform apply -var-file=basic.tfvars
Yapılandırmalara bağlı olarak, açıklanan işlemleri kabul etmeniz istenir. Dağıtımı başlatmak için "yes" yazın. "terraform plan" komutunu çalıştırarak dağıtılacak yapılandırmayı da görüntüleyebilirsiniz.
Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes
İşlemin tamamlanması birkaç dakika sürebilir. Bu nedenle lütfen bekleyin.
Dağıtım tamamlandığında aşağıdakine benzer bir çıkış görürsünüz:
Apply complete! Resources: 8 added, 0 changed, 0 destroyed.
Outputs:
controller_network_ips = [
[
"10.0.0.2",
],
]
login_network_ips = [
[
"10.0.0.3",
],
]
Sanal makine örneği oluşturmayı doğrulama
Gezinme menüsünü açıp Compute Engine > VM Instances'ı (Sanal Makine Örnekleri) seçin.

Listelenen bir denetleyici ve bir giriş sanal makine örneği görmelisiniz:

VM örnekleri bölümünde, Terraform tarafından oluşturulan iki sanal makine örneğini inceleyin.
cluster_name alanını değiştirdiyseniz adlar farklı olur.
- g1-controller
- g1-login0
5. Slurm kümesine giriş yapma
Slurm kümesine erişme
Kod düzenleyici/Cloud Shell sekmenize dönün. Örneğinizde oturum açmak için aşağıdaki komutu çalıştırın ve <ZONE> yerine g1-login0 düğümünün bölgesini (us-central1-b olmalıdır) girin:
gcloud compute ssh g1-login0 --zone=<ZONE>
Bu komut, g1-login0 sanal makinesine giriş yapmanızı sağlar.
Giriş düğümüne kolayca erişmenin bir başka yöntemi de Sanal Makine Örnekleri sayfasında g1-login0 sanal makinesinin yanındaki "SSH" düğmesini tıklayarak SSH bağlantısı içeren yeni bir sekme açmaktır.

Cloud Shell'i ilk kez kullanıyorsanız aşağıdaki gibi bir mesajla karşılaşabilirsiniz. Bu mesajda sizden bir SSH anahtarı oluşturmanız istenir:
WARNING: The public SSH key file for gcloud does not exist. WARNING: The private SSH key file for gcloud does not exist. WARNING: You do not have an SSH key for gcloud. WARNING: SSH keygen will be executed to generate a key. This tool needs to create the directory [/home/user/.ssh] before being able to generate SSH keys. Do you want to continue (Y/n)?
Bu durumda Y girin. Parola seçmeniz istenirse Enter tuşuna iki kez basarak parolayı boş bırakın.
Giriş yaparken aşağıdaki mesaj gösteriliyorsa:
*** Slurm is currently being configured in the background. *** A terminal broadcast will announce when installation and configuration is complete.
Bu mesajı görene kadar bekleyin ve laboratuvara devam etmeyin (yaklaşık 5 dakika):
*** Slurm login setup complete ***
Yukarıdaki mesajı gördüğünüzde laboratuvara devam etmek için g1-login0 oturumundan çıkış yapıp tekrar oturum açmanız gerekir. Bunu yapmak için CTRL + C tuşlarına basarak görevi sonlandırın.
Ardından, aşağıdaki komutu çalıştırarak örneğinizden çıkış yapın:
exit
Şimdi giriş VM'nize yeniden bağlanın. Aşağıdaki komutu çalıştırarak örneğinize giriş yapın ve <ZONE> yerine g1-login0 düğümünün bölgesini girin:
gcloud compute ssh g1-login0 --zone=<ZONE>
Yukarıdaki örnekte olduğu gibi, bağlanabilmeniz ve kurulumun tüm yönlerinin tamamlanması için bir veya iki dakika beklemeniz gerekebilir.
Slurm KSA Araçları Turu
Artık kümenizin Slurm giriş düğümüne giriş yaptınız. Bu düğüm, kullanıcı/yönetici etkileşimi, Slurm işlerini planlama ve yönetim etkinliği için ayrılmıştır.
Slurm komut satırını tanıtmak için birkaç komut çalıştıralım.
Kümemizin kaynaklarının durumunu görüntülemek için sinfo komutunu çalıştırın:
sinfo
Aşağıda sinfo'nun örnek çıktısı gösterilmektedir. sinfo, kümede bulunan düğümleri, bu düğümlerin durumunu ve bölüm, kullanılabilirlik ve bu düğümlere uygulanan zaman sınırlaması gibi diğer bilgileri bildirir.
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 10 idle~ g1-compute-0-[0-9]
Hata ayıklama bölümünün "max_node_count" değeri 10 olduğundan 10 düğümümüzün "idle~" (düğüm, boşta ve ayrılmamış modda, başlatılmaya hazır) olarak işaretlendiğini görebilirsiniz.
Ardından, kümemizin kuyruğunun durumunu görüntülemek için squeue komutunu çalıştırın:
squeue
squeue komutunun beklenen çıkışı aşağıda gösterilmiştir. squeue, bir kümenin sırasının durumunu bildirir. Bu bilgiler arasında kümede planlanan her işin iş kimliği, işin atandığı bölüm, işin adı, işi başlatan kullanıcı, işin durumu, işin çalıştığı süre ve işin ayrıldığı düğümler yer alır. Çalışan işimiz olmadığı için bu komutun içeriği boş.
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
Kuyruğa alınan işleri çalıştırmak için "srun" ve "sbatch" Slurm komutları kullanılır. "srun" paralel işleri çalıştırır ve mpirun için sarmalayıcı olarak kullanılabilir. "sbatch", toplu işi slurm'a göndermek için kullanılır ve farklı yapılandırmalarda srun'ı bir veya birden çok kez çağırabilir. "sbatch" toplu komut dosyalarını alabilir veya işin tamamını komut satırından çalıştırmak için –wrap seçeneğiyle kullanılabilir.
Slurm'u çalışırken görmek ve kuyruğumuza bir iş eklemek için bir iş çalıştıralım.
6. Slurm işi çalıştırma ve kümeyi ölçeklendirme
Slurm işi çalıştırma ve kümeyi ölçeklendirme
Slurm kümemiz çalıştığına göre şimdi bir iş çalıştıralım ve kümemizin ölçeğini artıralım.
"sbatch" komutu, Slurm toplu komutlarını ve komut dosyalarını çalıştırmak için kullanılır. Otomatik ölçeklendirilmiş sanal makinelerimizde "hostname" komutunu çalıştıracak basit bir sbatch komut dosyası çalıştıralım.
g1-login0'a giriş yapmışken aşağıdaki komutu çalıştırın:
sbatch -N2 --wrap="srun hostname"
Bu komut, Slurm toplu iş komutunu çalıştırır. Bu komut, sbatch'in "-N" seçeneğiyle 2 düğüm çalıştıracağını belirtir. Ayrıca, bu düğümlerin her birinin "–wrap" seçeneğinde "srun hostname" komutunu çalıştıracağını belirtir.
Varsayılan olarak sbatch, çıktısını komutun çalıştırıldığı çalışma dizinindeki "slurm-%j.out " dosyasına yazar. Burada %j, Slurm Dosya Adı Kalıpları'na göre iş kimliğiyle değiştirilir. Örneğimizde sbatch, kullanıcının /home klasöründen çalıştırılıyor. Bu klasör, denetleyicide varsayılan olarak barındırılan NFS tabanlı bir paylaşılan dosya sistemidir. Bu, işlem düğümlerinin istenirse giriş ve çıkış verilerini paylaşmasına olanak tanır. Üretim ortamında, küme işlemlerinin performansını etkilememek için çalışma depolama alanı /home depolama alanından ayrı olmalıdır. Ayrı depolama birimleri, "network_storage" seçeneklerindeki tfvars dosyasında belirtilebilir.
sbatch komut satırını kullanarak sbatch komut dosyasını yürüttükten sonra, planlanan iş için bir İş Kimliği döndürülür. Örneğin:
Submitted batch job 2
İş yürütme ve kaynakları izlemek ve yönetmek için sbatch komutu tarafından döndürülen iş kimliğini kullanabiliriz. Slurm iş kuyruğunu görüntülemek için aşağıdaki komutu yürütün:
squeue
Yürüttüğünüz işi aşağıdaki gibi listelenmiş olarak görürsünüz:
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
2 debug g1-compute-0-[0-1] username R 0:10 2 g1-compute-0-[0-1]
Sağlanan herhangi bir işlem düğümü olmadığından Slurm, iş gereksinimlerine göre işlem örneklerini otomatik olarak oluşturur. Bu sürecin otomatik olması iki avantaj sağlar. İlk olarak, bir HPC kümesinde genellikle gereken düğümleri manuel olarak sağlama, yazılımı yapılandırma, düğümü kümeye entegre etme ve ardından işi dağıtma gibi işlemleri ortadan kaldırır. İkincisi, boşta duran ve kullanılmayan düğümler minimum düğüm sayısı çalışana kadar ölçeklendirildiğinden kullanıcıların para tasarrufu yapmasına olanak tanır.
Slurm kümesinin başlatılmasını görüntülemek için sinfo komutunu çalıştırabilirsiniz:
sinfo
Bu komut, squeue'da "alloc#" durumunda listelenen düğümleri gösterir. Bu, düğümlerin ayrıldığı anlamına gelir:
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 8 idle~ g1-compute-0-[2-9] debug* up infinite 2 alloc# g1-compute-0-[0-1]
Yeni sağlanan düğümleri görüntülemek için Google Cloud Console'daki sanal makine örnekleri bölümünü de kontrol edebilirsiniz. İş, yeni ayrılan düğümlere atanmadan önce düğümlerin başlatılması ve Slurm'un çalıştırılması birkaç dakika sürer. Sanal makine örnekleri listeniz kısa süre içinde aşağıdaki gibi görünecektir:

Düğümler işi çalıştırdıktan sonra örnekler "alloc" durumuna geçer. Bu, işlerin bir işe ayrıldığı anlamına gelir:
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 8 idle~ g1-compute-0-[2-9] debug* up infinite 2 alloc g1-compute-0-[0-1]
Bir iş tamamlandığında squeue'da listelenmez ve sinfo'daki "alloc" düğümleri "idle" durumuna döner. İş tamamlanana kadar bir veya iki dakika sonra "squeue" komutunu düzenli olarak çalıştırın.
slurm-%j.out adlı çıkış dosyası, NFS ile paylaşılan /home klasörünüze yazılır ve ana makine adlarını içerir. Çıkış dosyasını (genellikle slurm-2.out) açın veya içeriğini görüntüleyin. Çıkış dosyasının içeriğinde şunlar yer alır:
g1-compute-0-0 g1-compute-0-1
Tebrikler! Bir iş çalıştırdınız ve Slurm kümenizi ölçeklendirdiniz.
7. MPI işi çalıştırma
Şimdi düğümlerimizde bir MPI işi çalıştıralım. g1-login0'a giriş yapmışken C programlama dilinde yazılmış bir MPI programını indirmek için wget'i kullanın:
wget https://raw.githubusercontent.com/mpitutorial/mpitutorial/gh-pages/tutorials/mpi-hello-world/code/mpi_hello_world.c
OpenMPI araçlarını kullanmak için şu komutu çalıştırarak OpenMPI modüllerini yüklemeniz gerekir:
module load openmpi
MPI C kodunu derlemek için "mpicc" aracını kullanacağız. Aşağıdaki komutu çalıştırın:
mpicc mpi_hello_world.c -o mpi_hello_world
Bu, C kodumuzu makine diline derler. Böylece kodu Slurm aracılığıyla kümemizde çalıştırabiliriz.
Ardından, tercih ettiğiniz metin düzenleyiciyi kullanarak "helloworld_batch" adlı bir sbatch komut dosyası oluşturun:
vi helloworld_batch
vi ekleme moduna girmek için i yazın.
Basit bir sbatch komut dosyası oluşturmak için aşağıdaki metni kopyalayıp dosyaya yapıştırın:
#!/bin/bash # #SBATCH --job-name=hello_world #SBATCH --output=hello_world-%j.out # #SBATCH --nodes=2 srun mpi_hello_world
Escape tuşuna basıp tırnak işareti olmadan ":wq" yazarak kod düzenleyiciden çıkın ve değişiklikleri kaydedin.
Bu komut dosyası, Slurm toplu yürütme ortamını ve görevlerini tanımlar. İlk olarak, yürütme ortamı bash olarak tanımlanır. Ardından, komut dosyası önce "#SBATCH" satırlarıyla Slurm seçeneklerini tanımlar. İş adı "hello_world" olarak tanımlanır.
Çıkış dosyası, Slurm Dosya Adı Kalıpları'na göre iş kimliğinin yerine %j'nin kullanıldığı "hello_world_%j.out" olarak ayarlanır. Bu çıkış dosyası, sbatch komut dosyasının çalıştırıldığı dizine yazılır. Örneğimizde bu, kullanıcının NFS tabanlı paylaşılan dosya sistemi olan /home klasörüdür. Bu, işlem düğümlerinin istenirse giriş ve çıkış verilerini paylaşmasına olanak tanır. Üretim ortamında, küme işlemlerinin performansını etkilememek için çalışma depolama alanı /home depolama alanından ayrı olmalıdır.
Son olarak, bu komut dosyasının üzerinde çalışması gereken düğüm sayısı 2 olarak tanımlanır.
Seçenekler tanımlandıktan sonra yürütülebilir komutlar sağlanır. Bu komut dosyası, mpirun komutunun yerine kullanılabilen srun komutunu kullanarak mpi_hello_world kodunu paralel olarak çalıştırır.
Ardından, sbatch komut satırını kullanarak sbatch komut dosyasını yürütün:
sbatch helloworld_batch
sbatch komutunu çalıştırmak, planlanan iş için bir iş kimliği döndürür. Örneğin:
Submitted batch job 3
Bu işlem, hostname komutunu 2 düğümde (düğüm başına bir görevle) çalıştırır ve çıkışı hello_world-3.out dosyasına yazdırır.
Önceden 2 düğüm sağladığımız için bu iş hızlı bir şekilde çalışacaktır.
İş tamamlanana ve artık listelenmeyene kadar squeue'yu izleyin:
squeue
Tamamlandıktan sonra hello_world-3.out dosyasını açın veya cat komutuyla görüntüleyin ve g1-compute-0-[0-1] üzerinde çalıştığını doğrulayın:
Hello world from processor g1-compute-0-0, rank 0 out of 2 processors Hello world from processor g1-compute-0-1, rank 1 out of 2 processors
5 dakika boyunca boşta kaldıktan sonra (YAML'nin suspend_time alanı veya slurm.conf'un SuspendTime alanı ile yapılandırılabilir) dinamik olarak sağlanan işlem düğümlerinin kaynakları serbest bırakmak için tahsisi kaldırılır. Bunu, sinfo'yu düzenli olarak çalıştırıp küme boyutunun 0'a düştüğünü gözlemleyerek doğrulayabilirsiniz:
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 10 idle~ g1-compute-0-[0-9]
Kümenin dağıtıldığı bölgede izin verilen kotanıza kadar daha fazla örnek oluşturmayı ve farklı MPI uygulamaları çalıştırmayı deneyin.
8. Sonuç
Tebrikler, Google Cloud Platform'da bir Slurm kümesi oluşturdunuz ve kümenizi iş yükü talebini karşılayacak şekilde otomatik olarak ölçeklendirmek için en yeni özelliklerini kullandınız. Bu modeli her türlü işi çalıştırmak için kullanabilirsiniz. Slurm'da düğümleri istemeniz yeterlidir. Bu model, dakikalar içinde yüzlerce örneğe ölçeklenebilir.
GCP'de Slurm'ü kullanmayı öğrenmeye devam etmek istiyorsanız "Slurm Kullanarak Birleşik HPC Kümeleri Derleme" adlı codelab'e devam edin. Bu codelab, şirket içi veya bulutta çok kümeli bir federasyonun nasıl oluşturulabileceğini göstermek için bulutta iki federasyonlu Slurm kümesi oluşturma konusunda size yol gösterecektir.
Slurm'un yeni GCP'ye özel işlevini kullanarak harika bir şey mi geliştiriyorsunuz? Sorularınız mı var? Özellik öneriniz mi var? Google Cloud'un Yüksek Performanslı Bilgi İşlem Çözümleri web sitesi üzerinden Google Cloud ekibine ulaşın veya Google Cloud ve Slurm Tartışma Grubu'nda bizimle sohbet edin.
Terraform Dağıtımını Temizleme
Slurm düğümünden çıkış yapın:
exit
Dağıtımı silmeden önce otomatik olarak ölçeklendirilen tüm düğümlerin ölçeğinin azaltılmasına izin verin. Ayrıca, her örnek için "gcloud compute instances delete <Instance Name>" komutunu çalıştırarak veya Konsol GUI'sini kullanarak birden fazla düğüm seçip "Sil"i tıklayarak bu düğümleri manuel olarak da silebilirsiniz.
g1-login0 oturumunu kapattıktan sonra Google Cloud Shell'inizden aşağıdaki komutu çalıştırarak Terraform dağıtımını kolayca temizleyebilirsiniz:
cd ~/slurm-gcp/tf/examples/basic terraform destroy -var-file=basic.tfvars
İstendiğinde devam etmek için yes yazın. Bu işlem birkaç dakika sürebilir. Lütfen bekleyin.
Projeyi silme
Temizlemek için projemizi silmemiz yeterlidir.
- Gezinme menüsünde IAM & Admin'i (IAM ve Yönetici) seçin.
- Ardından alt menüde ayarları tıklayın.
- "Projeyi Sil" metnini içeren çöp kutusu simgesini tıklayın.
- İstem talimatlarını uygulayın.
İşlediğimiz konular
- Terraform kullanarak GCP'de Slurm'u dağıtma
- GCP'de Slurm kullanarak iş çalıştırma.
- Slurm'da küme bilgilerini sorgulama ve çalışan işleri izleme
- Belirli iş parametrelerine ve gereksinimlerine uyum sağlamak için GCP'de Slurm ile düğümleri otomatik olarak ölçeklendirme
- GCP'de Slurm üzerinde MPI uygulamalarını derleme ve çalıştırma
Slurm desteğini bulma
Bu entegrasyonları test veya üretim ortamlarında kullanmayla ilgili desteğe ihtiyacınız varsa lütfen https://www.schedmd.com/contact.php adresindeki iletişim sayfasını kullanarak doğrudan SchedMD ile iletişime geçin.
Ayrıca, mevcut sorun giderme kılavuzlarından da yararlanabilirsiniz:
- GCP'de Slurm sorun giderme kılavuzu: https://github.com/SchedMD/slurm-gcp#troubleshooting
- SchedMD'nin Sorun Giderme Kılavuzu: https://slurm.schedmd.com/troubleshoot.html
Son olarak, sorunuzu Google Cloud ve Slurm Tartışma Grubu'na da gönderebilirsiniz: https://groups.google.com/g/google-cloud-slurm-discuss
Daha Fazla Bilgi
Geri bildirim
Lütfen bu codelab hakkında geri bildirim göndermek için bu bağlantıyı kullanın. Geri bildirim gönderme işlemi 5 dakikadan kısa sürer. Teşekkürler!