Bagikan melalui


Slurm

Slurm adalah manajer beban kerja sumber terbuka yang sangat dapat dikonfigurasi. Lihat situs proyek Slurm untuk gambaran umum.

Catatan

Pada CycleCloud 8.4.0, integrasi Slurm telah ditulis ulang untuk mendukung fitur dan fungsionalitas baru. Lihat dokumentasi Slurm 3.0 untuk informasi selengkapnya.

Slurm dapat dengan mudah diaktifkan pada kluster CycleCloud dengan memodifikasi "run_list" di bagian konfigurasi definisi kluster Anda. Dua komponen dasar kluster Slurm adalah simpul 'master' (atau 'penjadwal') yang menyediakan sistem file bersama tempat perangkat lunak Slurm berjalan, dan simpul 'jalankan' yang merupakan host yang memasang sistem file bersama dan menjalankan pekerjaan yang dikirimkan. Misalnya, cuplikan templat kluster sederhana mungkin terlihat seperti:

[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 dapat dengan mudah diaktifkan pada kluster CycleCloud dengan memodifikasi "run_list" di bagian konfigurasi definisi kluster Anda. Dua komponen dasar kluster Slurm adalah simpul 'penjadwal' yang menyediakan sistem file bersama tempat perangkat lunak Slurm berjalan, dan simpul 'jalankan' yang merupakan host yang memasang sistem file bersama dan menjalankan pekerjaan yang dikirimkan. Misalnya, cuplikan templat kluster sederhana mungkin terlihat seperti:

[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

Mengedit Kluster Slurm yang Ada

Kluster Slurm yang berjalan di CycleCloud versi 7.8 dan yang lebih baru menerapkan versi terbaru dari API penskalaan otomatis yang memungkinkan kluster untuk menggunakan beberapa nodearray dan partisi. Untuk memfasilitasi fungsionalitas ini di Slurm, CycleCloud telah mengisi simpul eksekusi di kluster. Karena itu, Anda perlu menjalankan perintah pada simpul penjadwal Slurm setelah membuat perubahan apa pun pada kluster, seperti batas skala otomatis atau jenis VM.

Membuat Perubahan Kluster

Kluster Slurm yang disebarkan di CycleCloud berisi skrip yang memfasilitasi ini. Setelah membuat perubahan apa pun pada kluster, jalankan yang berikut sebagai root (misalnya, dengan menjalankan sudo -i) pada simpul penjadwal slurm.conf Slurm untuk membangun kembali dan memperbarui node di kluster:

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Catatan

Untuk CycleCloud versi < 7.9.10, cyclecloud_slurm.sh skrip terletak di /opt/cycle/jetpack/system/bootstrap/slurm.

Penting

Jika Anda membuat perubahan apa pun yang memengaruhi VM untuk simpul dalam partisi MPI (seperti ukuran VM, gambar, atau cloud-init), semua simpul harus dihentikan terlebih dahulu. Perintah remove_nodes mencetak peringatan dalam kasus ini, tetapi tidak keluar dengan kesalahan. Jika ada simpul yang berjalan, Anda akan mendapatkan kesalahan This node does not match existing scaleset attribute ketika simpul baru dimulai.

/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes

Catatan

Untuk CycleCloud versi < 8.2, cyclecloud_slurm.sh skrip terletak di /opt/cycle/jetpack/system/bootstrap/slurm.

Jika Anda membuat perubahan yang memengaruhi VM untuk simpul dalam partisi MPI (seperti ukuran VM, gambar, atau cloud-init), dan simpul berjalan, Anda akan mendapatkan kesalahan This node does not match existing scaleset attribute ketika simpul baru dimulai. Untuk alasan ini, apply_changes perintah memastikan simpul dihentikan, dan gagal dengan pesan kesalahan berikut jika tidak: Simpul berikut harus sepenuhnya dihentikan sebelum menerapkan perubahan.

Jika Anda membuat perubahan yang TIDAK memengaruhi properti VM untuk simpul MPI, Anda tidak perlu mengakhiri simpul yang sedang berjalan terlebih dahulu. Dalam hal ini, Anda dapat membuat perubahan dengan menggunakan dua perintah berikut:

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Catatan

Perintah apply_changes hanya ada di CycleCloud 8.3+, jadi satu-satunya cara untuk membuat perubahan dalam versi sebelumnya adalah dengan perintah di atas + remove_nodesscale. Pastikan bahwa remove_nodes perintah tidak mencetak peringatan tentang simpul yang perlu dihentikan.

Membuat partisi tambahan

Templat default yang dikirim dengan Azure CycleCloud memiliki dua partisi (hpc dan htc), dan Anda dapat menentukan nodearray kustom yang memetakan langsung ke partisi Slurm. Misalnya, untuk membuat partisi GPU, tambahkan bagian berikut ke templat kluster Anda:

    [[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

Pengaturan memori

CycleCloud secara otomatis mengatur jumlah memori yang tersedia untuk digunakan Slurm untuk tujuan penjadwalan. Karena jumlah memori yang tersedia dapat sedikit berubah karena opsi kernel Linux yang berbeda, dan OS dan VM dapat menggunakan sejumlah kecil memori yang akan tersedia untuk pekerjaan, CycleCloud secara otomatis mengurangi jumlah memori dalam konfigurasi Slurm. Secara default, CycleCloud menahan 5% dari memori yang dilaporkan tersedia dalam VM, tetapi nilai ini dapat ditimpa dalam templat kluster dengan mengatur slurm.dampen_memory ke persentase memori untuk menahan. Misalnya, untuk menahan 20% memori VM:

    slurm.dampen_memory=20

Menonaktifkan skala otomatis untuk simpul atau partisi tertentu

Meskipun fitur "KeepAlive" CycleCloud bawaan saat ini tidak berfungsi untuk kluster Slurm, dimungkinkan untuk menonaktifkan skala otomatis untuk kluster Slurm yang sedang berjalan dengan mengedit file slurm.conf secara langsung. Anda dapat mengecualikan simpul individual atau seluruh partisi agar tidak diskalakan otomatis.

Mengecualikan node

Untuk mengecualikan simpul atau beberapa simpul dari skala otomatis, tambahkan SuspendExcNodes=<listofnodes> ke file konfigurasi Slurm. Misalnya, untuk mengecualikan simpul 1 dan 2 dari partisi hpc, tambahkan yang berikut ini ke /sched/slurm.conf:

SuspendExcNodes=hpc-pg0-[1-2]

Kemudian mulai slurmctld ulang layanan agar konfigurasi baru berlaku.

Mengecualikan partisi

Tidak termasuk seluruh partisi dari skala otomatis mirip dengan mengecualikan simpul. Untuk mengecualikan seluruh hpc partisi, tambahkan yang berikut ini ke /sched/slurm.conf

SuspendExcParts=hpc

Kemudian mulai ulang slurmctld layanan.

Pemecahan Masalah

Konflik UID untuk pengguna Slurm dan Munge

Secara default, proyek ini menggunakan UID dan GID 11100 untuk pengguna Slurm dan 11101 untuk pengguna Munge. Jika ini menyebabkan konflik dengan pengguna atau grup lain, default ini dapat ditimpa.

Untuk mengambil alih UID dan GID, klik tombol edit untuk kedua simpul scheduler :

Edit Scheduler

Edit Scheduler

Dan nodearray execute : Edit Nodearray

dan tambahkan atribut berikut ke bagian Configuration :

Edit Konfigurasi

    slurm.user.name = slurm
    slurm.user.uid = 11100
    slurm.user.gid = 11100
    munge.user.name = munge
    munge.user.uid = 11101
    munge.user.gid = 11101

Skala otomatis

CycleCloud menggunakan fitur Komputasi Elastis Slurm. Untuk men-debug masalah skala otomatis, ada beberapa log pada simpul penjadwal yang dapat Anda periksa. Yang pertama adalah memastikan bahwa panggilan resume hemat daya sedang dilakukan dengan memeriksa /var/log/slurmctld/slurmctld.log. Anda akan melihat baris seperti:

[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1

Log lain yang akan diperiksa adalah /var/log/slurmctld/resume.log. Jika langkah resume gagal, juga akan /var/log/slurmctld/resume_fail.logada . Jika ada pesan tentang nama simpul yang tidak diketahui atau tidak valid, pastikan Anda belum menambahkan simpul ke kluster tanpa mengikuti langkah-langkah di bagian "Membuat Perubahan Kluster" di atas.

Referensi Konfigurasi Slurm

Berikut ini adalah opsi konfigurasi khusus Slurm yang dapat Anda alihkan untuk menyesuaikan fungsionalitas:

Opsi Konfigurasi Khusus Slurm Deskripsi
slurm.version Default: '18.08.7-1'. Ini adalah versi Slurm untuk diinstal dan dijalankan. Saat ini adalah opsi default dan satu-satunya . Di masa mendatang, versi tambahan perangkat lunak Slurm mungkin didukung.
slurm.autoscale Default: 'false'. Ini adalah pengaturan per-nodearray yang mengontrol apakah Slurm harus secara otomatis menghentikan dan memulai simpul dalam nodearray ini.
slurm.hpc Default: 'true'. Ini adalah pengaturan per-nodearray yang mengontrol apakah simpul dalam nodearray akan ditempatkan dalam grup penempatan yang sama. Terutama digunakan untuk nodearray menggunakan keluarga VM dengan InfiniBand. Ini hanya berlaku ketika slurm.autoscale diatur ke 'true'.
slurm.default_partition Default: 'false'. Ini adalah pengaturan per nodearray yang mengontrol apakah nodearray harus menjadi partisi default untuk pekerjaan yang tidak meminta partisi secara eksplisit.
slurm.dampen_memory Default: '5'. Persentase memori yang akan ditahan untuk overhead OS/VM.
slurm.suspend_timeout Default: '600'. Jumlah waktu (dalam detik) antara panggilan tangguhan dan kapan simpul tersebut dapat digunakan lagi.
slurm.resume_timeout Default: '1800'. Jumlah waktu (dalam detik) untuk menunggu simpul berhasil di-boot.
slurm.install Default: 'true'. Menentukan apakah Slurm diinstal pada boot node ('true'). Jika Slurm diinstal dalam gambar kustom, ini harus diatur ke 'false'. (proj versi 2.5.0+)
slurm.use_pcpu Default: 'true'. Ini adalah pengaturan per nodearray untuk mengontrol penjadwalan dengan vcpu hyperthreaded. Atur ke 'false' untuk mengatur CPU=vcpus di cyclecloud.conf.
slurm.user.name Default: 'slurm'. Ini adalah nama pengguna untuk digunakan layanan Slurm.
slurm.user.uid Default: '11100'. ID Pengguna yang digunakan untuk pengguna Slurm.
slurm.user.gid Default: '11100'. ID Grup yang digunakan untuk pengguna Slurm.
munge.user.name Default: 'munge'. Ini adalah nama pengguna untuk layanan autentikasi MUNGE yang akan digunakan.
munge.user.uid Default: '11101'. ID Pengguna yang digunakan untuk pengguna MUNGE.
munge.user.gid Default: '11101'. ID Grup yang digunakan untuk pengguna MUNGE.

CycleCloud mendukung sekumpulan atribut autostop standar di seluruh penjadwal:

Atribut Deskripsi
cyclecloud.cluster.autoscale.stop_enabled Apakah autostop diaktifkan pada simpul ini? [benar/salah]
cyclecloud.cluster.autoscale.idle_time_after_jobs Jumlah waktu (dalam detik) untuk simpul untuk duduk diam setelah menyelesaikan pekerjaan sebelum diturunkan skalanya.
cyclecloud.cluster.autoscale.idle_time_before_jobs Jumlah waktu (dalam detik) untuk simpul untuk duduk diam sebelum menyelesaikan pekerjaan sebelum diturunkan skalanya.