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.confekleyin:

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:

Zamanlayıcıyı Düzenle

Zamanlayıcıyı Düzenle

execute Ve nodearray: Edit Nodearray

bölümüne aşağıdaki öznitelikleri Configuration ekleyin:

Yapılandırmayı Düzenle

    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.loggüç 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.logde 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).