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_nodes
scale
.
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
:
Dan nodearray execute
:
dan tambahkan atribut berikut ke bagian Configuration
:
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.log
ada . 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. |