Tutorial: Mengelola akun dan penjadwalan tugas di cluster

Jika Anda tertarik dengan cluster pelatihan Vertex AI, hubungi perwakilan penjualan Anda untuk mendapatkan akses.

Panduan ini menunjukkan cara menggunakan fitur akuntansi dan Quality of Service (QOS) Slurm untuk mengelola secara efektif satu cluster pelatihan yang digunakan bersama oleh beberapa tim dengan prioritas dan kebutuhan resource yang berbeda.

Tujuan

Setelah menyelesaikan tutorial ini, Anda akan memiliki framework untuk mengelola resource cluster yang dapat:

  • Menerapkan batas resource per tim.
  • Memprioritaskan dan mendahului pekerjaan berdasarkan urgensi.
  • Memberikan akuntansi yang jelas untuk penggunaan resource.
  • Memaksimalkan pemanfaatan cluster sekaligus menjaga keadilan.

Prasyarat

  • Cluster pelatihan yang sedang berjalan dengan Akuntansi, Penghentian Sementara, dan Prioritas yang dikonfigurasi untuk mengelola akun, menjadwalkan, dan memprioritaskan tugas.

  • Mengorkestrasikan

  • Setelan Slurm lanjutan

  • sudo di node login cluster untuk menjalankan perintah administrator.

Konsep inti: Elemen dasar akuntansi Slurm

Slurm menggunakan hierarki yang jelas dan fleksibel untuk mengelola resource. Memahami empat elemen dasar ini sangat penting.

Komponen Contoh Tujuan
Akun Tim atau project Unit utama untuk mengelompokkan pengguna dan menetapkan batas resource keseluruhan (misalnya, team_ace dapat menggunakan maksimal 10 node).
User Peneliti perorangan Orang yang mengirimkan tugas. Setiap pengguna harus menjadi bagian dari akun default.
Partisi Antrean hardware Pengelompokan node secara logis. Untuk fleksibilitas maksimum, sebaiknya gunakan satu partisi yang berisi semua node Anda.
QOS Buku peraturan Kumpulan aturan bernama yang menentukan batas tugas (misalnya, "tugas dalam QOS ini hanya dapat menggunakan 2 node") dan prioritas penjadwalan.

Dengan model ini, Anda dapat menetapkan kuota tingkat tinggi untuk seluruh akun dan menerapkan batas per-job yang lebih terperinci menggunakan QOS.

Persona: Admin versus peneliti

Ada dua peran berbeda yang berinteraksi dengan sistem ini: administrator cluster dan peneliti.

Administrator cluster

  • Alat utama: sacctmgr (pengelola akun Slurm)
  • Tugas Anda: Anda membangun "kerangka" akun, pengguna, dan aturan QOS. Tugas ini biasanya merupakan tugas "konfigurasi sekali, perbarui sesuai kebutuhan".
  • Tugas utama: Buat akun, tetapkan pengguna ke akun, tentukan buku aturan QOS, dan tautkan semuanya.

Peneliti

  • Alat utama: sbatch, squeue, sinfo
  • Tugas mereka: Mengirim dan memantau tugas penelitian mereka.
  • Keajaibannya: Saat peneliti mengirimkan tugas, Slurm akan otomatis memeriksa aturan yang terkait dengan akun dan QOS-nya. Jika tugas melanggar batas apa pun, Slurm akan menolaknya dengan pesan error yang jelas.

Tutorial: Panduan progresif

Tutorial berikut mempraktikkan konsep ini melalui serangkaian skenario progresif. Untuk panduan ini, asumsikan peran administrator cluster. Tugas Anda adalah menyiapkan satu akun, team_ace, dan satu pengguna, user_alice. Skenario dimulai tanpa batas dan secara progresif menambahkan lapisan kontrol.

Bagian 1: Penyiapan awal (tanpa batas)

Buat akun dan kaitkan pengguna.

  • Tujuannya: Buat hierarki dasar untuk team_ace dan user_alice.
  • Metode: Gunakan sacctmgr untuk menambahkan akun, lalu tambahkan pengguna yang terkait dengan akun tersebut.
# --- (Run as Admin) ---

# 1. Create the 'team_ace' account
sudo sacctmgr add account team_ace Description="The Ace Team"

# 2. Create the 'user_alice' user and map them to their default account
# (Note: 'user_alice' must already exist as a Linux user on the node)
sudo sacctmgr add user user_alice Account=team_ace

# 3. Show the hierarchy we just built to confirm
sacctmgr show associations where account=team_ace

Hasil: Sebagai pengguna user_alice, Anda kini dapat mengirimkan tugas besar. Karena tidak ada batas, tugas 7 node akan diterima dan langsung dijalankan (dengan asumsi 7 node tidak ada yang sedang digunakan).

Bagian 2: Menambahkan batas tingkat grup ke akun

Selanjutnya, terapkan batas resource ke akun team_ace, yang membatasi seluruh tim hingga maksimum 6 node dan total 4 tugas.

  • Tujuannya: Tetapkan batas total resource untuk seluruh tim.

  • Metode: Kami menerapkan batas ini ke akun team_ace menggunakan GrpJobs (Group Jobs) dan GrpTRES (Group Trackable Resources, dalam hal ini, node=6).

# --- (Run as Admin) ---

# 1. Add group-level job and node limits to the 'team_ace' account
sudo sacctmgr modify account where name=team_ace set GrpJobs=4 GrpTRES=node=6

# 2. View the limits to confirm the change
sacctmgr show association where account=team_ace

Hasil: Untuk memverifikasi bahwa batas baru berfungsi, lakukan pengujian berikut sebagai user_alice:

  1. Batas node: Pengiriman tugas 7 node kini gagal. Tugas ditempatkan dalam status tertunda (PD) dengan alasan (AssocGrpNodeLimit).
  2. Batas tugas: Mengirimkan 5 tugas node tunggal akan menghasilkan 4 tugas yang berjalan (R) dan tugas ke-5 yang tertunda (PD) dengan alasan (AssocGrpJobsLimit).

Batas tingkat akun berfungsi dengan sempurna.

Bagian 3: Menambahkan batas per tugas dengan QOS

Batas grup tingkat akun efektif untuk membatasi total penggunaan resource tim. Namun, hal ini tidak mencegah pengguna mengirimkan satu tugas yang menggunakan seluruh kuota tim. Untuk mengontrol ukuran setiap tugas, langkah berikutnya adalah menggunakan Quality of Service (QOS).

  • Tujuannya: Membatasi ukuran maksimum setiap tugas yang dikirimkan oleh tim.
  • Metode: Kita akan membuat Quality of Service (QOS) bernama qos1 dengan aturan MaxTRESPerJob=node=2. Kemudian, kami akan menjadikannya QOS default untuk seluruh akun team_ace.
# --- (Run as Admin) ---

# 1. Create a QOS with a per-job limit of 2 nodes
sudo sacctmgr add qos qos1 MaxTRESPerJob=node=2

# 2. Allow the 'team_ace' account to use this QOS
sudo sacctmgr modify account where account=team_ace set QOS=qos1

# 3. Set 'qos1' as the DEFAULT QOS for all users in this account
sudo sacctmgr modify account where account=team_ace set DefaultQOS=qos1

Hasil: Sekarang, jika user_alice mengirimkan tugas 3 node, tugas tersebut akan ditempatkan dalam status tertunda dengan alasan (QOSMaxNodePerJobLimit). Pengguna masih berada dalam kuota akun total (6 node), tetapi mereka telah melanggar aturan QOS per tugas.

Bagian 4: Menambahkan penggantian khusus pengguna

Bagaimana jika user_alice adalah seorang peserta magang dan perlu dibatasi untuk mengerjakan tugas yang lebih kecil, tanpa memengaruhi anggota tim lainnya?

  • Tujuannya: Menerapkan batas yang lebih ketat kepada satu pengguna.
  • Metodenya: Kita akan membuat QOS (qos_intern) baru yang lebih ketat dan menerapkannya sebagai default khusus untuk user_alice. Opsi ini menggantikan QOS default akun.

# --- (Run as Admin) ---

# 1. Create a more restrictive QOS with a 1-node limit
sudo sacctmgr add qos qos_intern MaxTRESPerJob=node=1

# 2. Allow the account to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_intern

# 3. Apply 'qos_intern' as the default QOS for the specific user association
sudo sacctmgr modify user where name=user_alice account=team_ace set DefaultQOS=qos_intern

Hasil: Jika user_alice mencoba mengirimkan tugas 2-node yang sebelumnya diizinkan dalam qos1, tugas tersebut akan gagal dengan (QOSMaxNodePerJobLimit). Aturan tingkat pengguna yang lebih spesifik telah berhasil menggantikan aturan tingkat akun umum.

Bagian 5: Mengonfigurasi prioritas dan pendahuluan

Terakhir, konfigurasi prioritas dan penghentian tugas untuk memastikan tugas penting dapat segera dijalankan, meskipun cluster penuh.

  • Tujuannya: Membuat QOS "mendesak" dengan prioritas tinggi yang dapat menjeda atau membatalkan tugas dengan prioritas lebih rendah untuk membebaskan resource.
  • Metode:

    1. Buat qos_urgent baru dengan nilai Priority yang tinggi.
    2. Memberi tahu qos_urgent bahwa qos_urgent diizinkan untuk Preempt tugas yang berjalan di qos1.
    3. Konfigurasi qos1 ke REQUEUE tugasnya saat tugas tersebut di-preempt.

# --- (Run as Admin) ---

# 1. Create a new 'qos_urgent' with a high priority that can preempt 'qos1'
sudo sacctmgr add qos qos_urgent Priority=1000 Preempt=qos1

# 2. Configure 'qos1' to requeue preempted jobs after a 10-second grace period
sudo sacctmgr modify qos where name=qos1 set PreemptMode=REQUEUE GraceTime=10

# 3. Allow the 'team_ace' account and 'user_alice' to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_urgent
sudo sacctmgr modify user where name=user_alice account=team_ace set QOS+=qos_urgent

# 4. For this scenario, remove the group limits so preemption is easier to trigger
sudo sacctmgr modify account where name=team_ace set GrpJobs=-1 GrpTRES=node=-1

Hasil:

  1. Di satu terminal, user_alice mengirimkan tugas yang berjalan lama dengan qos1 default. Mulai berjalan (R).
  2. Di terminal kedua, user_alice mengirimkan tugas besar menggunakan QOS mendesak (sbatch --qos=qos_urgent ...).
  3. Dalam beberapa detik, status pekerjaan pertama berubah dari berjalan (R) menjadi tertunda (PD) dengan alasan (Preempted). Kemudian, pekerjaan mendesak mulai berjalan.

Berhasil! Anda telah mengonfigurasi sistem yang secara otomatis menggantikan pekerjaan berprioritas rendah dengan pekerjaan berprioritas tinggi.

Ringkasan dan langkah selanjutnya

Dengan mengikuti tutorial ini, Anda telah mempelajari cara menggunakan fitur akuntansi hierarkis Slurm untuk mendapatkan kontrol terperinci atas cluster bersama. Anda kini dapat:

  • Menetapkan batas global: Gunakan akun untuk menetapkan total kuota resource untuk seluruh tim.
  • Terapkan aturan per tugas: Gunakan QOS untuk mengontrol ukuran dan prioritas setiap tugas.
  • Buat penggantian spesifik: Terapkan QOS yang berbeda untuk Pengguna guna mendapatkan kontrol yang lebih terperinci.
  • Menjamin prioritas: Konfigurasi penghentian sementara untuk memastikan beban kerja penting selalu dapat berjalan.

Model berlayer ini memberikan cara yang fleksibel dan efektif untuk mengelola resource cluster secara adil dan efisien. Untuk konfigurasi yang lebih canggih, lihat dokumentasi Slurm resmi.