Slurm
Slurm, yüksek oranda yapılandırılabilir bir açık kaynak iş yükü yöneticisidir. Genel bakış için Slurm proje sitesine bakın.
Not
CycleCloud 8.4.0 sürümünden itibaren yeni özellikleri ve işlevleri desteklemek için Slurm tümleştirmesi yeniden yazılmıştır. Daha fazla bilgi için Slurm 3.0 belgelerine bakın.
Slurm, küme tanımınızın yapılandırma bölümündeki "run_list" değiştirilerek CycleCloud kümesinde kolayca etkinleştirilebilir. Slurm kümesinin iki temel bileşeni, Slurm yazılımının çalıştığı bir paylaşılan dosya sistemi sağlayan 'ana' (veya 'scheduler') düğümü ve paylaşılan dosya sistemini bağlayıp gönderilen işleri yürüten konaklar olan 'execute' düğümleridir. Örneğin, basit bir küme şablonu parçacığı şöyle görünebilir:
[cluster custom-slurm]
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:master]]]
[[[configuration]]]
run_list = role[slurm_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_master_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
Slurm, küme tanımınızın yapılandırma bölümündeki "run_list" değiştirilerek CycleCloud kümesinde kolayca etkinleştirilebilir. Slurm kümesinin iki temel bileşeni, Slurm yazılımının çalıştığı bir paylaşılan dosya sistemi sağlayan 'scheduler' düğümü ve paylaşılan dosya sistemini bağlayıp gönderilen işleri yürüten konaklar olan 'execute' düğümleridir. Örneğin, basit bir küme şablonu parçacığı şöyle görünebilir:
[cluster custom-slurm]
[[node scheduler]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:scheduler]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
Mevcut Slurm Kümelerini Düzenleme
CycleCloud sürüm 7.8 ve sonraki sürümlerinde çalışan Slurm kümeleri, kümelerin birden çok nodearray ve bölüm kullanmasına olanak tanıyan güncelleştirilmiş bir otomatik ölçeklendirme API'leri sürümünü uygular. Slurm'da bu işlevselliği kolaylaştırmak için CycleCloud, kümedeki yürütme düğümlerini önceden doldurur. Bu nedenle, kümede otomatik ölçeklendirme sınırları veya VM türleri gibi değişiklikler yaptıktan sonra Slurm zamanlayıcı düğümünde bir komut çalıştırmanız gerekir.
Küme Değişiklikleri Yapma
CycleCloud'da dağıtılan Slurm kümesi bunu kolaylaştıran bir betik içerir. Kümede herhangi bir değişiklik yaptıktan sonra kümedeki düğümleri yeniden oluşturmak slurm.conf
ve güncelleştirmek için Slurm zamanlayıcı düğümünde aşağıdakini kök olarak çalıştırın (örneğin komutunu çalıştıraraksudo -i
).
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Not
CycleCloud 7.9.10 sürümleri < için cyclecloud_slurm.sh
betik /opt/cycle/jetpack/system/bootstrap/slurm konumunda bulunur.
Önemli
Bir MPI bölümündeki düğümler için VM'leri etkileyen değişiklikler yaparsanız (VM boyutu, görüntü veya cloud-init gibi), önce düğümlerin tümü sonlandırılmalıdır .
Komut remove_nodes
bu durumda bir uyarı yazdırır, ancak bir hatayla çıkmaz.
Çalışan düğümler varsa, yeni düğümlerin ne zaman başlatılacağını gösteren This node does not match existing scaleset attribute
bir hata alırsınız.
/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes
Not
CycleCloud 8.2 sürümleri < için cyclecloud_slurm.sh
betik /opt/cycle/jetpack/system/bootstrap/slurm konumunda bulunur.
Bir MPI bölümündeki düğümler için VM'leri etkileyen değişiklikler yaparsanız (VM boyutu, görüntü veya cloud-init gibi) ve düğümler çalışıyorsa, yeni düğümlerin ne zaman başlatıldığını belirten bir hata This node does not match existing scaleset attribute
alırsınız. Bu nedenle, apply_changes
komut düğümlerin sonlandırıldığından emin olur ve sonlandırılmazsa aşağıdaki hata iletisiyle başarısız olur: Değişiklikleri uygulamadan önce aşağıdaki düğümlerin tamamen sonlandırılması gerekir.
MPI düğümlerinin VM özelliklerini ETKILEMEYEN bir değişiklik yapıyorsanız, önce çalışan düğümleri sonlandırmanız gerekmez. Bu durumda, aşağıdaki iki komutu kullanarak değişiklikleri yapabilirsiniz:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Not
apply_changes
Komut yalnızca CycleCloud 8.3+ sürümünde bulunur, bu nedenle önceki sürümlerde değişiklik yapmak için yukarıdaki remove_nodes
+ scale
komutları kullanabilirsiniz.
Komutun remove_nodes
sonlandırılması gereken düğümler hakkında bir uyarı yazdırmadığından emin olun.
Ek bölümler oluşturma
Azure CycleCloud ile birlikte gelen varsayılan şablonun iki bölümü (hpc
ve htc
) vardır ve doğrudan Slurm bölümleriyle eşlenmiş özel nodearray'ler tanımlayabilirsiniz. Örneğin, bir GPU bölümü oluşturmak için küme şablonunuza aşağıdaki bölümü ekleyin:
[[nodearray gpu]]
MachineType = $GPUMachineType
ImageName = $GPUImageName
MaxCoreCount = $MaxGPUExecuteCoreCount
Interruptible = $GPUUseLowPrio
AdditionalClusterInitSpecs = $ExecuteClusterInitSpecs
[[[configuration]]]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = false
[[[cluster-init cyclecloud/slurm:execute:2.0.1]]]
[[[network-interface eth0]]]
AssociatePublicIpAddress = $ExecuteNodesPublic
Bellek ayarları
CycleCloud, Slurm'un zamanlama amacıyla kullanabilecekleri kullanılabilir bellek miktarını otomatik olarak ayarlar. Kullanılabilir bellek miktarı farklı Linux çekirdek seçenekleri nedeniyle biraz değişebileceğinden ve işletim sistemi ve VM işler için kullanılabilir olabilecek az miktarda bellek kullanabildiğinden, CycleCloud Slurm yapılandırmasındaki bellek miktarını otomatik olarak azaltır. Varsayılan olarak, CycleCloud vm'de bildirilen kullanılabilir belleğin %5'ini tutar, ancak küme şablonunda bu değer, geriye tutulacak bellek yüzdesine ayarlanarak slurm.dampen_memory
geçersiz kılınabilir. Örneğin, vm belleğinin %20'sini tutmak için:
slurm.dampen_memory=20
Belirli düğümler veya bölümler için otomatik ölçeklendirmeyi devre dışı bırakma
Yerleşik CycleCloud "KeepAlive" özelliği şu anda Slurm kümeleri için çalışmasa da, slurm.conf dosyasını doğrudan düzenleyerek çalışan bir Slurm kümesi için otomatik ölçeklendirmeyi devre dışı bırakmak mümkündür. Tek tek düğümleri veya bölümlerin tamamını otomatik ölçeklendirmenin dışında tutabilirsiniz.
Düğümü dışlama
Bir düğümü veya birden çok düğümü otomatik ölçeklendirmenin dışında tutmak için Slurm yapılandırma dosyasına ekleyin SuspendExcNodes=<listofnodes>
. Örneğin, 1 ve 2 düğümlerini hpc bölümünden dışlamak için aşağıdakileri öğesine /sched/slurm.conf
ekleyin:
SuspendExcNodes=hpc-pg0-[1-2]
Ardından yeni yapılandırmanın slurmctld
etkili olması için hizmeti yeniden başlatın.
Bölümü dışlama
Tüm bölümleri otomatik ölçeklendirmeden dışlamak, düğümleri dışlamaya benzer. Bölümün tamamını hpc
dışlamak için şunu ekleyin: /sched/slurm.conf
SuspendExcParts=hpc
Ardından hizmeti yeniden başlatın slurmctld
.
Sorun giderme
Slurm ve Munge kullanıcıları için UID çakışmaları
Varsayılan olarak, bu proje Slurm kullanıcısı için UID ve 11100 GID, Munge kullanıcısı için 11101 kullanır. Bu başka bir kullanıcı veya grupla çakışmaya neden olursa, bu varsayılanlar geçersiz kılınabilir.
UID ve GID'yi geçersiz kılmak için her iki düğümün düzenle scheduler
düğmesine tıklayın:
execute
Ve nodearray:
bölümüne aşağıdaki öznitelikleri Configuration
ekleyin:
slurm.user.name = slurm
slurm.user.uid = 11100
slurm.user.gid = 11100
munge.user.name = munge
munge.user.uid = 11101
munge.user.gid = 11101
Otomatik Ölçeklendirme
CycleCloud, Slurm'un Elastik Bilgi İşlem özelliğini kullanır. Otomatik ölçeklendirme sorunlarının hatalarını ayıklamak için zamanlayıcı düğümünde denetleyebileceğiniz birkaç günlük vardır. İlki, kontrol ederek /var/log/slurmctld/slurmctld.log
güç tasarrufu özgeçmiş çağrılarının yapıldığından emin olmaktır. Aşağıdaki gibi satırlar görmeniz gerekir:
[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1
Denetlenecek diğer günlük: /var/log/slurmctld/resume.log
. Sürdürme adımı başarısız olursa, bir /var/log/slurmctld/resume_fail.log
de olacaktır. Bilinmeyen veya geçersiz düğüm adları hakkında iletiler varsa, yukarıdaki "Küme Değişiklikleri Yapma" bölümündeki adımları uygulamadan kümeye düğüm eklemediğinizden emin olun.
Slurm Yapılandırma Başvurusu
İşlevleri özelleştirmek için değiştirebileceğiniz Slurm'a özgü yapılandırma seçenekleri şunlardır:
Slurm'a Özgü Yapılandırma Seçenekleri | Description |
---|---|
slurm.version | Varsayılan: '18.08.7-1'. Bu, yüklenip çalıştırılacak Slurm sürümüdür. Bu, şu anda varsayılan ve tek seçenektir. Gelecekte Slurm yazılımının ek sürümleri desteklenebilir. |
slurm.autoscale | Varsayılan: 'false'. Bu, Slurm'un bu nodearray'de düğümleri otomatik olarak durdurması ve başlatması gerekip gerekmediğini denetleen düğüm başına bir ayardır. |
slurm.hpc | Varsayılan: 'true'. Bu, nodearray'deki düğümlerin aynı yerleştirme grubuna yerleştirilip yerleştirilmeyeceğini denetleen nodearray başına bir ayardır. InfiniBand ile VM ailelerini kullanan nodearray'ler için öncelikli olarak kullanılır. Yalnızca slurm.autoscale 'true' olarak ayarlandığında geçerlidir. |
slurm.default_partition | Varsayılan: 'false'. Bu, nodearray değerinin açıkça bölüm istemeyen işler için varsayılan bölüm olup olmayacağını denetleyen nodearray başına bir ayardır. |
slurm.dampen_memory | Varsayılan: '5'. İşletim sistemi/VM ek yükü için geri tutulacak bellek yüzdesi. |
slurm.suspend_timeout | Varsayılan: '600'. Askıya alma çağrısı ile bu düğümün yeniden kullanılabilmesi arasındaki süre (saniye olarak). |
slurm.resume_timeout | Varsayılan: '1800'. Düğümün başarıyla önyüklenmesini bekleme süresi (saniye cinsinden). |
slurm.install | Varsayılan: 'true'. Slurm'un düğüm önyüklemesinde ('true') yüklü olup olmadığını belirler. Özel bir görüntüde Slurm yüklüyse, bu 'false' olarak ayarlanmalıdır. (proj sürüm 2.5.0+) |
slurm.use_pcpu | Varsayılan: 'true'. Bu, hyperthreaded vcpus ile zamanlamayı denetlemek için nodearray başına bir ayardır. cyclecloud.conf dosyasında CPU=vcpus değerini ayarlamak için 'false' olarak ayarlayın. |
slurm.user.name | Varsayılan: 'slurm'. Bu, kullanılacak Slurm hizmetinin kullanıcı adıdır. |
slurm.user.uid | Varsayılan: '11100'. Slurm kullanıcısı için kullanılacak Kullanıcı Kimliği. |
slurm.user.gid | Varsayılan: '11100'. Slurm kullanıcısı için kullanılacak Grup Kimliği. |
munge.user.name | Varsayılan: 'munge'. Bu, MUNGE kimlik doğrulama hizmetinin kullanılası kullanıcı adıdır. |
munge.user.uid | Varsayılan: '11101'. MUNGE kullanıcısı için kullanılacak Kullanıcı Kimliği. |
munge.user.gid | Varsayılan: '11101'. MUNGE kullanıcısı için kullanılacak Grup Kimliği. |
CycleCloud, zamanlayıcılar arasında standart bir otomatik durdurma öznitelikleri kümesini destekler:
Öznitelik | Açıklama |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | Bu düğümde otomatik durdurma etkin mi? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | Bir düğümün ölçeği daraltılmadan önce işleri tamamladıktan sonra boşta kalma süresi (saniye). |
cyclecloud.cluster.autoscale.idle_time_before_jobs | Bir düğümün ölçeği daraltılmadan önce işleri tamamlamadan önce boşta kalma süresi (saniye). |