Menerapkan Kluster HPC Autoscaling dengan Slurm

1. Ringkasan

Selamat datang di Google Codelab untuk menjalankan cluster Slurm di Google Cloud Platform! Di akhir codelab ini, Anda akan memiliki pemahaman yang kuat tentang kemudahan penyediaan dan pengoperasian cluster Slurm penskalaan otomatis.

c16fa310c142ac6f.png

Google Cloud bekerja sama dengan SchedMD untuk merilis serangkaian alat yang mempermudah peluncuran pengelola workload Slurm di Compute Engine, dan untuk memperluas cluster yang ada secara dinamis saat Anda membutuhkan resource tambahan. Integrasi ini dibuat oleh para pakar di SchedMD sesuai dengan praktik terbaik Slurm.

Jika Anda berencana menggunakan integrasi Slurm di Google Cloud Platform, atau jika ada pertanyaan, pertimbangkan untuk bergabung dengan layanan Google Cloud & Grup Diskusi Komunitas Slurm!

Tentang Slurm

a739730a41acff0a.png

Diagram arsitektur dasar Cluster Slurm mandiri di Google Cloud Platform.

Slurm adalah salah satu pengelola workload terkemuka untuk cluster HPC di seluruh dunia. Slurm menyediakan sistem manajemen beban kerja serta penjadwalan tugas yang open source, fault-tolerant, dan sangat skalabel untuk cluster Linux berskala kecil dan besar. Slurm tidak memerlukan modifikasi {i>kernel<i} untuk operasinya dan relatif mandiri. Sebagai pengelola workload cluster, Slurm memiliki tiga fungsi utama:

  1. Layanan ini mengalokasikan akses eksklusif atau non-eksklusif ke resource (node komputasi) kepada pengguna selama beberapa durasi waktu, sehingga mereka dapat menjalankan pekerjaan.
  2. Node ini menyediakan framework untuk memulai, mengeksekusi, dan memantau pekerjaan (biasanya tugas paralel) pada kumpulan node yang dialokasikan.
  3. arbitrer melakukan arbitrase terhadap resource dengan mengelola antrean pekerjaan yang tertunda.

Yang akan Anda pelajari

  • Cara menyiapkan cluster Slurm menggunakan Terraform
  • Cara menjalankan tugas menggunakan SLURM
  • Cara membuat kueri informasi cluster dan memantau tugas yang sedang berjalan di SLURM
  • Cara menskalakan node secara otomatis untuk mengakomodasi parameter dan persyaratan tugas tertentu
  • Tempat menemukan bantuan terkait Slurm

Prasyarat

  • Akun Google Cloud Platform dan Project dengan Penagihan
  • Pengalaman Linux Dasar

2. Penyiapan

Penyiapan lingkungan mandiri

Buat Proyek

Jika belum memiliki Akun Google (Gmail atau G Suite), Anda harus membuatnya. Login ke konsol Google Cloud Platform ( console.cloud.google.com) dan buka halaman Manage resources:

359c06e07e6d699f.pngS

Klik Create Project.

25c23d651abb837b.pngS

Masukkan nama project. Ingat project ID (ditandai merah pada screenshot di atas). ID project harus berupa nama unik di semua project Google Cloud. Jika nama project Anda tidak unik, Google Cloud akan membuat project ID acak berdasarkan nama project.

Selanjutnya, Anda harus mengaktifkan penagihan di Developers Console untuk menggunakan resource Google Cloud.

Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan biaya lebih dari beberapa dolar, tetapi bisa lebih mahal jika Anda memutuskan untuk menggunakan lebih banyak resource atau jika Anda membiarkannya berjalan (lihat bagian "Kesimpulan" di akhir dokumen ini). Kalkulator harga Google Cloud Platform tersedia di sini.

Pengguna baru Google Cloud Platform memenuhi syarat untuk mendapatkan uji coba gratis senilai$300.

Google Cloud Shell

Meskipun Google Cloud dapat dioperasikan secara jarak jauh dari laptop Anda, dalam codelab ini kita akan menggunakan Google Cloud Shell, yakni lingkungan command line yang berjalan di Cloud.

Meluncurkan Google Cloud Shell

Dari GCP Console, klik ikon Cloud Shell di toolbar kanan atas:

dbad104cef962719.png

Kemudian klik Start Cloud Shell:

4e50db320508ac88.pngS

Hanya perlu waktu beberapa saat untuk melakukan penyediaan dan terhubung ke lingkungan:

20b0aa80492144d.pngS

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa jaringan dan menyederhanakan autentikasi. Sebagian besar pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser web atau Google Chromebook.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke PROJECT_ID Anda:

$ gcloud auth list

Output perintah:

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
$ gcloud config list project

Output perintah:

[core]
project = <PROJECT_ID>

Jika project ID tidak ditetapkan dengan benar, Anda dapat menyetelnya dengan perintah ini:

$ gcloud config set project <PROJECT_ID>

Output perintah:

Updated property [core/project].

3. Siapkan dan Tinjau Konfigurasi Slurm Terraform

Download Konfigurasi Slurm Terraform

Dalam sesi Cloud Shell, jalankan perintah berikut untuk meng-clone (mendownload) repositori Git yang berisi file Terraform Slurm untuk Google Cloud Platform:

git clone https://github.com/SchedMD/slurm-gcp.git

Beralihlah ke direktori konfigurasi deployment Slurm dengan menjalankan perintah berikut:

cd slurm-gcp

Mengonfigurasi tfvar Slurm Terraform

File basic.tfvars.example memerinci konfigurasi deployment, termasuk jaringan, instance, dan penyimpanan yang akan di-deploy. Salin file tersebut ke file baru, yang akan kita sebut "file tfvars", lalu edit sesuai kebutuhan.

cd tf/example/basic
cp basic.tfvars.example basic.tfvars

Pada sesi Cloud Shell, buka file tfvars basic.tfvars. Anda dapat menggunakan editor command line pilihan Anda (vi, nano, emacs, dll.) atau menggunakan Editor Kode Konsol Cloud untuk melihat konten file:

214f43bba6c917aa.pngS

Tinjau konten file tfvars.

cluster_name = "g1"
project      = "<project>"
zone         = "us-west1-b"

# network_name            = "<existing network name>"
# subnetwork_name         = "<existing subnetwork name>"
# shared_vpc_host_project = "<vpc host project>"

# disable_controller_public_ips = true
# disable_login_public_ips      = true
# disable_compute_public_ips    = true

# suspend_time  = 300

controller_machine_type = "n1-standard-2"
controller_image        = "projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
controller_disk_type    = "pd-standard"
controller_disk_size_gb = 50
# controller_labels = {
#   key1 = "val1"
#   key2 = "val2"
# }
# controller_service_account = "default"
# controller_scopes          = ["https://www.googleapis.com/auth/cloud-platform"]
# cloudsql = {
#   server_ip = "<cloudsql ip>"
#   user      = "slurm"
#   password  = "verysecure"
#   db_name   = "slurm_accounting"
# }
# controller_secondary_disk      = false
# controller_secondary_disk_size = 100
# controller_secondary_disk_type = "pd-ssd"
#
# When specifying an instance template, specified controller fields will
# override the template properites.
# controller_instance_template = null

login_machine_type = "n1-standard-2"
login_image        = "projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
login_disk_type    = "pd-standard"
login_disk_size_gb = 20
# login_labels = {
#   key1 = "val1"
#   key2 = "val2"
# }
# login_node_count = 1
# login_node_service_account = "default"
# login_node_scopes          = [
#   "https://www.googleapis.com/auth/monitoring.write",
#   "https://www.googleapis.com/auth/logging.write"
# ]
#
# When specifying an instance template, specified login fields will
# override the template properties.
# login_instance_template = null

# Optional network storage fields
# network_storage is mounted on all instances
# login_network_storage is mounted on controller and login instances
# network_storage = [{
#   server_ip     = "<storage host>"
#   remote_mount  = "/home"
#   local_mount   = "/home"
#   fs_type       = "nfs"
#   mount_options = null
# }]
#
# login_network_storage = [{
#   server_ip     = "<storage host>"
#   remote_mount  = "/net_storage"
#   local_mount   = "/shared"
#   fs_type       = "nfs"
#   mount_options = null
# }]

# compute_node_service_account = "default"
# compute_node_scopes          = [
#   "https://www.googleapis.com/auth/monitoring.write",
#   "https://www.googleapis.com/auth/logging.write"
# ]

partitions = [
  { name                 = "debug"
    machine_type         = "n1-standard-2"
    static_node_count    = 0
    max_node_count       = 10
    zone                 = "us-west1-b"
    image                ="projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
    image_hyperthreads   = false
    compute_disk_type    = "pd-standard"
    compute_disk_size_gb = 20
    compute_labels       = {}
    cpu_platform         = null
    gpu_count            = 0
    gpu_type             = null
    network_storage      = []
    preemptible_bursting = false
    vpc_subnet           = null
    exclusive            = false
    enable_placement     = false
    regional_capacity    = false
    regional_policy      = {}
    instance_template    = null
  },
  #  { name                 = "partition2"
  #    machine_type         = "n1-standard-16"
  #    static_node_count    = 0
  #    max_node_count       = 20
  #    zone                 = "us-west1-b"
  #    image                = "projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
  #    image_hyperthreads   = false
  #
  #    compute_disk_type    = "pd-ssd"
  #    compute_disk_size_gb = 20
  #    compute_labels       = {
  #      key1 = "val1"
  #      key2 = "val2"
  #    }
  #    cpu_platform         = "Intel Skylake"
  #    gpu_count            = 8
  #    gpu_type             = "nvidia-tesla-v100"
  #    network_storage      = [{
  #      server_ip     = "none"
  #      remote_mount  = "<gcs bucket name>"
  #      local_mount   = "/data"
  #      fs_type       = "gcsfuse"
  #      mount_options = "file_mode=664,dir_mode=775,allow_other"
  #    }]
  #    preemptible_bursting = true
  #    vpc_subnet           = null
  #    exclusive            = false
  #    enable_placement     = false
  #
  #    ### NOTE ####
  #    # regional_capacity is under development. You may see slowness in
  #    # deleting lots of instances.
  #    #
  #    # With regional_capacity : True, the region can be specified in the zone.
  #    # Otherwise the region will be inferred from the zone.
  #    zone = "us-west1"
  #    regional_capacity    = True
  #    # Optional
  #    regional_policy      = {
  #        locations = {
  #            "zones/us-west1-a" = {
  #                preference = "DENY"
  #            }
  #        }
  #    }
  #
  #    When specifying an instance template, specified compute fields will
  #    override the template properties.
  #    instance_template = "my-template"
]

Dalam file tfvar ini ada beberapa bidang untuk dikonfigurasi. Satu-satunya kolom yang harus dikonfigurasi adalah project. Semua konfigurasi lain dalam contoh ini dapat digunakan sebagaimana adanya, tetapi Anda dapat memodifikasinya sesuai kebutuhan. Untuk deskripsi yang lebih mendetail tentang opsi konfigurasi, lihat di sini.

  • cluster_name: Nama cluster Slurm
  • project: ID Project Google Cloud untuk tempat resource akan di-deploy
  • zona: Zona Google Cloud yang akan berisi instance login dan pengontrol dari cluster ini - Info Selengkapnya
  • network_name: Jaringan Virtual Private Cloud untuk men-deploy cluster Slurm
  • subnetwork_name: Subnetwork Virtual Private Cloud untuk men-deploy cluster Slurm
  • shared_vpc_host_project: Jaringan VPC bersama untuk men-deploy cluster Slurm ke
  • disable_controller_public_ips: Menetapkan IP eksternal ke pengontrol Slurm?
  • disable_login_public_ips: Tetapkan IP eksternal ke node login Slurm?
  • disable_compute_login_ips: Menetapkan IP eksternal ke node login Slurm?
  • suspend_time: Waktu menunggu setelah node tidak ada aktivitas sebelum menangguhkan node
  • controller_machine_type: Jenis instance node pengontrol
  • controller_image: Image GCP yang digunakan untuk membuat instance pengontrol Slurm
  • controller_disk_type: Jenis boot disk instance pengontrol
  • controller_disk_size_gb: Ukuran disk booting instance pengontrol
  • controller_labels: Label yang akan dilampirkan ke instance pengontrol
  • controller_service_account: Akun layanan yang akan digunakan pada instance pengontrol
  • controller_scopes: Cakupan akses dari instance pengontrol
  • cloudsql: server Google CloudSQL untuk digunakan sebagai database Slurm, bukan menghosting database pada instance pengontrol
  • server_ip: IP server CloudSQL
  • pengguna: Nama pengguna CloudSQL
  • sandi: Sandi CloudSQL
  • db_name: Nama database CloudSQL
  • controller_secondary_disk: Tambahkan disk sekunder untuk penyimpanan server NFS?
  • controller_secondary_disk_type: Jenis disk sekunder pengontrol
  • controller_secondary_disk_size_gb: Ukuran disk sekunder pengontrol
  • controller_instance_template: Template instance GCP yang akan digunakan untuk instance pengontrol. Setiap kolom komputasi yang ditentukan akan menggantikan properti template. Misalnya, jika controller_image ditentukan, gambar di template instance akan ditimpa.
  • login_machine_type: Jenis instance node login (dapat diakses SSH)
  • login_image: Image GCP yang digunakan untuk membuat instance login Slurm
  • login_disk_type: Jenis boot disk instance login
  • login_disk_size_gb: Ukuran disk booting instance login
  • login_labels: Label yang akan dilampirkan ke instance login
  • login_node_count: Jumlah node login yang akan dibuat
  • login_node_service_account: Akun layanan yang akan digunakan pada instance login
  • login_node_scopes: Cakupan akses instance login
  • login_instance_template: Template instance GCP yang akan digunakan untuk instance login. Setiap kolom komputasi yang ditentukan akan menggantikan properti template. Misalnya, jika login_image ditentukan, gambar di template instance akan ditimpa.
  • network_storage: Penyimpanan jaringan yang akan dipasang pada semua node. Kolom akan ditambahkan langsung ke fstab. Dapat diulang untuk pemasangan tambahan.
  • server_ip: IP server penyimpanan
  • remote_mount: Nama pemasangan penyimpanan (nama sistem file)
  • local_mount: Direktori pemasangan lokal
  • fs_type: Jenis sistem file (NFS, CIFS, Lustre, GCSFuse yang diinstal secara otomatis)
  • mount_options: Opsi pemasangan (yaitu default,_netdev)
  • login_network_storage: Penyimpanan jaringan yang akan dipasang pada node login dan pengontrol. NFS, CIFS, Lustre, dan GCSFuse akan diinstal secara otomatis. Dapat diulang untuk pemasangan tambahan.
  • server_ip: IP server penyimpanan
  • remote_mount: Nama pemasangan penyimpanan (nama sistem file)
  • local_mount: Direktori pemasangan lokal
  • fs_type: Jenis sistem file (NFS, CIFS, Lustre, GCSFuse yang diinstal secara otomatis)
  • mount_options: Opsi pemasangan (yaitu default,_netdev)
  • compute_node_service_account: Akun layanan yang akan digunakan di instance compute
  • compute_node_scopes: Cakupan akses instance compute
  • partisi: Konfigurasi partisi Slurm. Dapat diulang untuk partisi tambahan.
  • name: Nama partisi
  • machine_type: jenis instance node komputasi
  • static_node_count: Jumlah node komputasi yang selalu aktif
  • max_node_count: Jumlah maksimum total node komputasi yang diizinkan - maksimum 64 ribu
  • zona: Zona Google Cloud yang akan berisi resource partisi ini - Info Selengkapnya
  • image: Jenis mesin node image Compute
  • image_hyperthreads: Mengaktifkan atau menonaktifkan hyperthreading di instance
  • compute_disk_type: Jenis boot disk instance komputasi (pd-standard, pd-ssd)
  • compute_disk_size_gb: Ukuran boot disk instance komputasi
  • compute_labels: Label yang akan dilampirkan ke instance komputasi
  • cpu_platform: Platform CPU minimum yang diperlukan untuk semua node komputasi
  • gpu_count: Jumlah GPU yang akan dipasang ke setiap instance dalam partisi
  • gpu_type: Jenis GPU yang akan dipasang ke instance partisi
  • network_storage: Penyimpanan jaringan yang akan dipasang pada semua node komputasi dalam partisi. Kolom akan ditambahkan langsung ke fstab. Dapat diulang untuk pemasangan tambahan.
  • server_ip: IP server penyimpanan
  • remote_mount: Nama pemasangan penyimpanan (nama sistem file)
  • local_mount: Direktori pemasangan lokal
  • fs_type: Jenis sistem file (NFS, CIFS, Lustre, GCSFuse yang diinstal secara otomatis)
  • mount_options: Opsi pemasangan
  • preemptible_bursting: Apakah instance akan menjadi preemptible instance?
  • vpc_subnet: Subnetwork Virtual Private Cloud untuk men-deploy partisi Slurm
  • eksklusif: Aktifkan Slurm untuk mengalokasikan seluruh node ke tugas
  • enable_placement: Mengaktifkan kebijakan penempatan saat instance akan ditempatkan berdekatan satu sama lain untuk mendapatkan latensi jaringan yang rendah di antara instance.
  • regional_capacity: Mengizinkan instance ditempatkan di zona mana pun di region berdasarkan ketersediaan
  • regional_policy: Jika regional_capacity ditetapkan ke true, kebijakan ini berfungsi untuk menentukan region yang akan digunakan dan zona apa pun di region tersebut yang tidak boleh digunakan
  • Instance_template: Template instance GCP yang akan digunakan untuk instance komputasi. Setiap kolom komputasi yang ditentukan akan menggantikan properti template. Misalnya, jika gambar ditentukan, gambar akan menimpa gambar di template instance.

Konfigurasi Lanjutan

Jika diinginkan, Anda dapat memilih untuk menginstal paket dan software tambahan sebagai bagian dari proses deployment cluster. Anda dapat menginstal software di cluster slurm dalam beberapa cara yang diuraikan dalam bagian "Menginstal aplikasi di cluster Slurm di Compute Engine" atau dengan menyesuaikan gambar yang di-deploy oleh Slurm. Saat ini, Slurm men-deploy Image VM yang disediakan SchedMD dan didasarkan pada Image VM HPC Google Cloud, dengan Slurm terinstal di atasnya.

Untuk menggunakan image Anda sendiri, buat image dengan konfigurasi sendiri berdasarkan Image VM SchedMD publik yang tercantum dalam file tfvars. Selanjutnya, ganti URI gambar yang ditentukan dalam file tfvars dengan gambar Anda sendiri, dan uji perubahannya.

Pemecahan masalah

Dalam codelab ini, lihat bagian Pemecahan Masalah di ReadMe repositori Slurm-GCP.

Masalah yang paling umum adalah kesalahan yang dibuat saat mengkonfigurasi file tfvars, dan batasan kuota. Codelab ini dirancang untuk berjalan dalam alokasi kuota standar pengguna baru dan dalam kredit gratis senilai $300 yang diterima pengguna baru. Jika upaya untuk membuat VM gagal, periksa file /var/log/slurm/resume.log pada node pengontrol untuk memeriksa apakah ada error API.

4. Men-deploy dan memverifikasi konfigurasi

Men-deploy Konfigurasi

Dalam sesi Cloud Shell, jalankan perintah berikut dari folder slurm-gcp/tf/example:

terraform init
terraform apply -var-file=basic.tfvars

Anda akan diminta untuk menerima tindakan yang dijelaskan, berdasarkan konfigurasi yang telah ditetapkan. Masukkan "yes" untuk memulai deployment. Anda juga dapat melihat konfigurasi yang akan di-deploy dengan menjalankan "terraform plan".

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

Operasi ini dapat memakan waktu beberapa menit, jadi harap bersabar.

Setelah deployment selesai, Anda akan melihat output yang mirip dengan:

Apply complete! Resources: 8 added, 0 changed, 0 destroyed.

Outputs:

controller_network_ips = [
  [
    "10.0.0.2",
  ],
]
login_network_ips = [
  [
    "10.0.0.3",
  ],
]

Memverifikasi pembuatan instance VM

Buka menu navigasi dan pilih Compute Engine > Instance VM.

d5832bdd527794ed.png

Anda akan melihat pengontrol dan instance VM login tercantum:

7a1fc9603758d58d.pngS

Di bagian VM instances, tinjau kedua instance virtual machine yang telah dibuat oleh Terraform.

Namanya akan berbeda jika Anda mengubah kolom cluster_name.

  • pengontrol-g1
  • g1-login0

5. Login ke Cluster Slurm

Mengakses Cluster Slurm

Kembali ke tab Code Editor/Cloud Shell. Jalankan perintah berikut untuk login ke instance Anda, dengan mengganti <ZONE> dengan zona node g1-login0 (harus us-central1-b):

gcloud compute ssh g1-login0 --zone=<ZONE>

Perintah ini akan memasukkan Anda ke virtual machine g1-login0.

Metode lain untuk mengakses node login dengan mudah adalah dengan mengklik "SSH" di samping VM g1-login0 pada halaman Instance VM untuk membuka tab baru dengan koneksi SSH.

8c373a87d13620f7.pngS

Jika ini pertama kalinya menggunakan Cloud Shell, Anda mungkin melihat pesan seperti di bawah ini yang meminta Anda untuk membuat kunci SSH:

WARNING: The public SSH key file for gcloud does not exist.
WARNING: The private SSH key file for gcloud does not exist.
WARNING: You do not have an SSH key for gcloud.
WARNING: SSH keygen will be executed to generate a key.
This tool needs to create the directory [/home/user/.ssh] before being
 able to generate SSH keys.

Do you want to continue (Y/n)?

Jika ya, masukkan Y. Jika diminta untuk memilih frasa sandi, kosongkan dengan menekan Enter dua kali.

Jika pesan berikut muncul saat login:

*** Slurm is currently being configured in the background. ***
A terminal broadcast will announce when installation and configuration is
complete.

Tunggu dan jangan lanjutkan lab sampai Anda melihat pesan ini (sekitar 5 menit):

*** Slurm login setup complete ***

Setelah melihat pesan di atas, Anda harus logout dan login kembali ke g1-login0 untuk melanjutkan lab. Untuk melakukannya, tekan CTRL + C untuk mengakhiri tugas.

Selanjutnya, jalankan perintah berikut untuk logout dari instance Anda:

exit

Sekarang, hubungkan kembali ke VM login Anda. Jalankan perintah berikut untuk login ke instance Anda, dengan mengganti <ZONE> dengan zona node g1-login0:

gcloud compute ssh g1-login0 --zone=<ZONE>

Seperti di atas, Anda mungkin harus menunggu satu atau dua menit sebelum dapat terhubung dan semua aspek penyiapan sudah selesai.

Tur Alat Slurm CLI

Anda kini sudah login ke node login Slurm cluster. Ini adalah node yang dikhususkan untuk interaksi pengguna/admin, menjadwalkan tugas Slurm, dan aktivitas administratif.

Mari kita jalankan beberapa perintah untuk memperkenalkan Anda pada baris perintah Slurm.

Jalankan perintah sinfo untuk melihat status resource cluster:

sinfo

Contoh output sinfo akan muncul di bawah. sinfo melaporkan node yang tersedia di cluster, status node tersebut, dan informasi lain seperti partisi, ketersediaan, dan batasan waktu yang diberlakukan pada node tersebut.

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite     10  idle~ g1-compute-0-[0-9]

Anda bisa melihat 10 node kami, yang ditentukan oleh "max_node_count" partisi debug. dari 10, ditandai sebagai "tidak ada aktivitas~" (node dalam mode tidak ada aktivitas dan tidak dialokasikan, siap untuk dijalankan).

Selanjutnya, jalankan perintah squeue untuk melihat status antrean cluster:

squeue

Output squeue yang diharapkan muncul di bawah. squeue melaporkan status antrean untuk sebuah cluster. Data ini mencakup setiap ID tugas dari setiap tugas yang dijadwalkan di cluster, partisi yang ditetapkan tugas, nama tugas, pengguna yang meluncurkan tugas, status tugas, waktu waktu tertentu untuk menjalankan tugas, dan node yang dialokasikan untuk tugas tersebut. Tidak ada tugas yang sedang berjalan, jadi isi perintah ini kosong.

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

Perintah Slurm “memangkas” dan "sbatch" digunakan untuk menjalankan tugas yang dimasukkan ke dalam antrean. "srun" menjalankan tugas paralel, dan dapat digunakan sebagai wrapper untuk mpirun. "sbatch" (sbatch) digunakan untuk mengirimkan tugas batch ke slurm, dan bisa memanggil srun sekali atau beberapa kali dalam konfigurasi yang berbeda. "sbatch" (sbatch) dapat mengambil skrip batch, atau dapat digunakan dengan opsi –wrap untuk menjalankan seluruh tugas dari baris perintah.

Mari kita jalankan tugas agar kita bisa melihat Slurm beraksi dan mendapatkan tugas dalam antrian.

6. Jalankan Tugas Slurm dan Menskalakan Cluster

Jalankan Tugas Slurm dan Menskalakan Cluster

Setelah cluster Slurm berjalan, mari kita jalankan tugas dan tingkatkan skala cluster.

"Sbatch" digunakan untuk menjalankan perintah dan skrip batch Slurm. Mari kita jalankan skrip batch sederhana yang akan menjalankan "nama host" pada VM kami yang diskalakan secara otomatis.

Saat sudah login ke g1-login0, jalankan perintah berikut:

sbatch -N2 --wrap="srun hostname"

Perintah ini menjalankan perintah batch Slurm. Ini menentukan bahwa sbatch akan menjalankan 2 node dengan "-N" sebelumnya. Ini juga menentukan bahwa setiap {i>node<i} tersebut akan menjalankan "{i>srun hostname<i}" pada "–wrap" sebelumnya.

Secara default, sbatch akan menulis outputnya ke "slurm-%j.out" di direktori kerja, perintah akan dijalankan, dengan %j diganti dengan ID Tugas sesuai dengan Pola Nama File Slurm. Dalam contoh kita, sbatch sedang dijalankan dari folder /home pengguna, yang merupakan sistem file bersama berbasis NFS yang dihosting pada pengontrol secara default. Hal ini memungkinkan node komputasi berbagi data input dan output jika diinginkan. Dalam lingkungan produksi, penyimpanan yang berfungsi harus terpisah dari penyimpanan /home untuk menghindari dampak performa terhadap operasi cluster. Dudukan penyimpanan terpisah dapat ditentukan dalam file tfvars di "network_storage" lainnya.

Setelah menjalankan skrip sbatch menggunakan command line sbatch, skrip akan menampilkan ID Pekerjaan untuk tugas yang dijadwalkan, misalnya:

Submitted batch job 2

Kita dapat menggunakan ID Tugas yang ditampilkan oleh perintah sbatch untuk melacak dan mengelola eksekusi dan resource tugas. Jalankan perintah berikut untuk melihat antrean tugas Slurm:

squeue

Anda mungkin akan melihat pekerjaan yang Anda jalankan tercantum seperti di bawah ini:

JOBID PARTITION               NAME     USER ST       TIME  NODES   NODELIST(REASON)
    2     debug g1-compute-0-[0-1] username  R       0:10      2 g1-compute-0-[0-1]

Karena kita tidak memiliki node komputasi yang disediakan, Slurm akan otomatis membuat instance komputasi sesuai dengan persyaratan tugas. Sifat otomatis dari proses ini memiliki dua manfaat. Pertama, solusi ini menghilangkan pekerjaan yang biasanya diperlukan dalam cluster HPC untuk penyediaan node secara manual, mengonfigurasi software, mengintegrasikan node ke dalam cluster, lalu men-deploy tugas. Kedua, cara ini memungkinkan pengguna untuk menghemat uang karena node yang tidak ada aktivitas dan tidak digunakan akan diperkecil skalanya hingga jumlah minimum node yang berjalan.

Anda dapat menjalankan perintah sinfo untuk melihat cluster Slurm yang berputar:

sinfo

Ini akan menampilkan node yang tercantum dalam antrean di kolom "alloc#" status, yang berarti node sedang dialokasikan:

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite      8  idle~ g1-compute-0-[2-9]
debug*       up   infinite      2 alloc#  g1-compute-0-[0-1]

Anda juga dapat memeriksa bagian instance VM di Konsol Google Cloud untuk melihat node yang baru disediakan. Butuh waktu beberapa menit untuk menjalankan node dan menjalankan Slurm sebelum tugas dialokasikan ke node yang baru dialokasikan. Daftar instance VM Anda akan segera terlihat seperti berikut:

9997efff595f1e.pngS

Setelah node menjalankan tugas, instance akan dipindahkan ke "alloc" status, yang berarti pekerjaan dialokasikan ke pekerjaan:

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite      8  idle~ g1-compute-0-[2-9]
debug*       up   infinite      2  alloc g1-compute-0-[0-1]

Setelah tugas selesai, tugas tidak akan lagi tercantum dalam antrean, dan "alloc" {i>node<i} dalam {i>sinfo<i} akan kembali ke tahap "{i>idle<i}" status. Jalankan "squeue" secara berkala sampai pekerjaan selesai, setelah satu atau dua menit.

File {i>output<i} slurm-%j.out akan ditulis ke folder NFS-shared /home Anda, dan akan berisi nama host. Buka atau lakukan {i>cat<i} pada file output (biasanya slurm-2.out), isi file output-nya akan berisi:

g1-compute-0-0
g1-compute-0-1

Bagus, Anda telah menjalankan tugas dan meningkatkan skala cluster Slurm Anda!

7. Menjalankan Tugas MPI

Sekarang, mari kita jalankan tugas MPI di seluruh node. Saat masuk ke g1-login0, gunakan wget untuk mengunduh program MPI yang ditulis dalam bahasa pemrograman C:

wget https://raw.githubusercontent.com/mpitutorial/mpitutorial/gh-pages/tutorials/mpi-hello-world/code/mpi_hello_world.c

Untuk menggunakan alat OpenMPI, Anda perlu memuat modul OpenMPI dengan menjalankan perintah berikut:

module load openmpi

Kita akan menggunakan karakter "mpicc" untuk mengompilasi kode MPI C. Jalankan perintah berikut:

mpicc mpi_hello_world.c -o mpi_hello_world

Perintah ini mengompilasi kode C ke kode mesin sehingga kita dapat menjalankan kode di seluruh cluster melalui Slurm.

Selanjutnya, gunakan editor teks pilihan Anda untuk membuat skrip sbatch yang disebut "helloworld_batch":

vi helloworld_batch

Ketik i untuk masuk ke mode vi insert.

Salin dan tempel teks berikut ke dalam file untuk membuat skrip sbatch sederhana:

#!/bin/bash
#
#SBATCH --job-name=hello_world
#SBATCH --output=hello_world-%j.out
#
#SBATCH --nodes=2

srun mpi_hello_world

Simpan dan tutup editor kode dengan menekan escape dan ketik ":wq" tanpa tanda kutip.

Skrip ini mendefinisikan tugas dan lingkungan eksekusi batch Slurm. Pertama, lingkungan eksekusi didefinisikan sebagai {i>bash<i}. Selanjutnya, skrip mendefinisikan opsi Slurm terlebih dahulu dengan karakter "#SBATCH" penting. Nama pekerjaan ditetapkan sebagai "hello_world".

File output disetel sebagai "hello_world_%j.out" dengan %j diganti dengan ID Tugas sesuai dengan Pola Nama File Slurm. File output ini ditulis ke direktori tempat skrip sbatch dijalankan. Dalam contoh kita ini adalah folder {i> /home<i} pengguna, yang merupakan sistem file bersama berbasis NFS. Hal ini memungkinkan node komputasi berbagi data input dan output jika diinginkan. Dalam lingkungan produksi, penyimpanan yang berfungsi harus terpisah dari penyimpanan /home untuk menghindari dampak performa terhadap operasi cluster.

Terakhir, jumlah node yang harus dijalankan skrip ini ditentukan sebesar 2.

Setelah opsi ditentukan, perintah yang dapat dieksekusi akan disediakan. Skrip ini akan menjalankan kode mpi_hello_world secara paralel menggunakan perintah srun, yang merupakan pengganti langsung untuk perintah mpirun.

Kemudian jalankan skrip sbatch menggunakan command line sbatch:

sbatch helloworld_batch

Batch yang berjalan akan menampilkan ID Pekerjaan untuk tugas terjadwal, misalnya:

Submitted batch job 3

Ini akan menjalankan perintah hostname di 2 node, dengan satu tugas per node, serta mencetak output ke file hello_world-3.out.

Karena kita sudah memiliki 2 node, tugas ini akan berjalan dengan cepat.

Pantau squeue hingga tugas selesai dan tidak lagi tercantum:

squeue

Setelah selesai, buka atau lakukan cat pada file hello_world-3.out dan pastikan file tersebut berjalan pada g1-compute-0-[0-1]:

Hello world from processor g1-compute-0-0, rank 0 out of 2 processors
Hello world from processor g1-compute-0-1, rank 1 out of 2 processors

Setelah tidak ada aktivitas selama 5 menit (dapat dikonfigurasi dengan kolom penangguhan_waktu YAML, atau kolom SuspendTime slurm.conf), node komputasi yang disediakan secara dinamis akan dibatalkan alokasinya untuk melepaskan resource. Anda dapat memvalidasi ini dengan menjalankan sinfo secara berkala dan mengamati ukuran cluster kembali ke 0:

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite     10  idle~ g1-compute-0-[0-9]

Coba jalankan lebih banyak instance, hingga Kuota yang diizinkan di region tempat Anda men-deploy cluster, dan jalankan berbagai aplikasi MPI.

8. Kesimpulan

Selamat, Anda telah membuat cluster Slurm di Google Cloud Platform dan menggunakan fitur terbarunya untuk menskalakan cluster Anda secara otomatis guna memenuhi permintaan workload. Anda bisa menggunakan model ini untuk menjalankan berbagai tugas, dan dapat diskalakan ke ratusan instance dalam hitungan menit hanya dengan meminta node di Slurm.

Jika Anda ingin terus belajar menggunakan Slurm di GCP, pastikan untuk melanjutkan dengan " Membangun Cluster HPC Federasi dengan Slurm" codelab. Codelab ini akan memandu Anda menyiapkan dua cluster Slurm gabungan di cloud, untuk merepresentasikan cara mencapai federasi multi-cluster, baik di infrastruktur lokal maupun di cloud.

Apakah Anda membuat sesuatu yang keren menggunakan fungsi native GCP Slurm yang baru? Ada pertanyaan? Punya saran untuk fitur? Hubungi tim Google Cloud hari ini melalui situs Solusi Komputasi Berperforma Tinggi Google Cloud, atau chat dengan kami di Google Cloud & Grup Diskusi Slurm!

Membersihkan Deployment Terraform

Logout dari node slurm:

exit

Mengizinkan node yang diskalakan secara otomatis memperkecil skala sebelum menghapus deployment. Anda juga dapat menghapus node ini secara manual dengan menjalankan "gcloud compute instances delete <Instance Name>" untuk setiap instance, atau dengan menggunakan GUI Konsol untuk memilih beberapa node dan mengklik "Delete".

Anda dapat dengan mudah membersihkan deployment Terraform setelah kita selesai dengan menjalankan perintah berikut dari Google Cloud Shell Anda, setelah logout dari g1-login0:

cd ~/slurm-gcp/tf/examples/basic
terraform destroy -var-file=basic.tfvars

Saat diminta, ketik yes untuk melanjutkan. Operasi ini memerlukan waktu beberapa menit, harap bersabar.

Menghapus Project

Untuk membersihkan, cukup hapus project.

  • Di menu navigasi, pilih IAM & Admin
  • Kemudian klik setelan di submenu
  • Klik ikon tempat sampah dengan teks "Hapus Project"
  • Ikuti petunjuk petunjuknya

Yang telah kita bahas

  • Cara men-deploy Slurm di GCP menggunakan Terraform.
  • Cara menjalankan tugas menggunakan Slurm di GCP.
  • Cara membuat kueri informasi cluster dan memantau tugas yang sedang berjalan di Slurm.
  • Cara menskalakan node secara otomatis dengan Slurm di GCP untuk mengakomodasi parameter dan persyaratan tugas tertentu.
  • Cara mengompilasi dan menjalankan aplikasi MPI pada Slurm di GCP.

Temukan Dukungan Slurm

Jika Anda memerlukan dukungan dalam menggunakan integrasi ini dalam lingkungan pengujian atau produksi, hubungi SchedMD langsung menggunakan halaman kontak mereka di sini: https://www.schedmd.com/contact.php

Anda juga dapat menggunakan panduan Pemecahan masalah yang tersedia:

Terakhir, Anda juga dapat memposting pertanyaan ke Google Cloud Grup Diskusi Slurm ditemukan di sini: https://groups.google.com/g/google-cloud-slurm-discuss

Pelajari Lebih Lanjut

Masukan

Kirimkan masukan tentang codelab ini menggunakan link ini. Masukan memerlukan waktu kurang dari 5 menit untuk diselesaikan. Terima kasih!