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

Google Cloud berkolaborasi dengan SchedMD untuk merilis serangkaian alat yang memudahkan peluncuran pengelola workload Slurm di Compute Engine, dan untuk memperluas cluster yang ada secara dinamis saat Anda membutuhkan resource tambahan. Integrasi ini dibuat oleh pakar di SchedMD sesuai dengan praktik terbaik Slurm.
Jika Anda berencana menggunakan integrasi Slurm di Google Cloud Platform, atau jika ada pertanyaan, sebaiknya bergabunglah dengan Grup Diskusi Komunitas Google Cloud & Slurm kami.
Tentang Slurm

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 penjadwalan tugas dan pengelolaan beban kerja open source, fault-tolerant, dan sangat skalabel untuk cluster Linux kecil dan besar. Slurm tidak memerlukan modifikasi kernel untuk pengoperasiannya dan relatif mandiri. Sebagai pengelola beban kerja cluster, Slurm memiliki tiga fungsi utama:
- Fitur ini mengalokasikan akses eksklusif atau non-eksklusif ke resource (node komputasi) kepada pengguna selama jangka waktu tertentu sehingga mereka dapat melakukan pekerjaan.
- Framework ini menyediakan framework untuk memulai, mengeksekusi, dan memantau pekerjaan (biasanya pekerjaan paralel) pada kumpulan node yang dialokasikan.
- Layanan ini menyelesaikan pertentangan untuk mendapatkan resource dengan mengelola antrean tugas 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 melakukan penskalaan otomatis node untuk mengakomodasi parameter dan persyaratan tugas tertentu
- Tempat untuk mendapatkan 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 Kelola resource:

Klik Buat Project.

Masukkan nama project. Ingat project ID (ditandai dengan warna 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 codelab ini tidak akan menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih 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 dari jarak jauh menggunakan laptop Anda, dalam codelab ini, kita akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Membuka Google Cloud Shell
Dari Konsol GCP, klik ikon Cloud Shell di toolbar kanan atas:

Kemudian, klik Start Cloud Shell:

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

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 disetel dengan benar, Anda dapat menyetelnya dengan perintah ini:
$ gcloud config set project <PROJECT_ID>
Output perintah:
Updated property [core/project].
3. Menyiapkan dan Meninjau Konfigurasi Terraform Slurm
Download Konfigurasi Terraform Slurm
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
Beralih ke direktori konfigurasi deployment Slurm dengan menjalankan perintah berikut:
cd slurm-gcp
Mengonfigurasi tfvars Terraform Slurm
File basic.tfvars.example menjelaskan konfigurasi deployment, termasuk jaringan, instance, dan penyimpanan yang akan di-deploy. Salin ke file baru, yang akan kita sebut "file tfvars", lalu edit sesuai kebutuhan.
cd tf/example/basic cp basic.tfvars.example basic.tfvars
Di 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 isi file:

Tinjau isi 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 tfvars ini, ada beberapa kolom yang perlu dikonfigurasi. Satu-satunya kolom yang harus dikonfigurasi adalah project. Semua konfigurasi lainnya dalam contoh dapat digunakan sebagaimana adanya, tetapi ubah sesuai kebutuhan untuk situasi Anda. Untuk mengetahui deskripsi opsi konfigurasi yang lebih mendetail, lihat di sini.
- cluster_name: Nama cluster Slurm
- project: ID Project Google Cloud tempat resource akan di-deploy
- zone: Zona Google Cloud yang akan berisi instance login dan pengontrol 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
- disable_controller_public_ips: Tetapkan IP eksternal ke pengontrol Slurm?
- disable_login_public_ips: Tetapkan IP eksternal ke node login Slurm?
- disable_compute_login_ips: Tetapkan IP eksternal ke node login Slurm?
- suspend_time: Waktu tunggu 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 boot disk 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 instance pengontrol
- cloudsql: Server Google CloudSQL yang akan digunakan sebagai database Slurm, bukan menghosting database di instance pengontrol
- server_ip: IP server CloudSQL
- pengguna: Nama pengguna Cloud SQL
- password: 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. Kolom komputasi yang ditentukan akan menggantikan properti template. Misalnya, jika controller_image ditentukan, image di template instance akan diganti.
- login_machine_type: Jenis instance node login (dapat diakses melalui 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 boot disk 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 di instance login
- login_node_scopes: Cakupan akses instance login
- login_instance_template: Template instance GCP yang akan digunakan untuk instance login. Kolom komputasi yang ditentukan akan menggantikan properti template. Misalnya, jika login_image ditentukan, image di template instance akan diganti.
- network_storage: Penyimpanan jaringan untuk di-mount di semua node. Kolom akan langsung ditambahkan 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 diinstal secara otomatis)
- mount_options: Opsi pemasangan (yaitu defaults,_netdev)
- login_network_storage: Penyimpanan jaringan untuk di-mount di 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 diinstal secara otomatis)
- mount_options: Opsi pemasangan (yaitu defaults,_netdev)
- compute_node_service_account: Akun layanan yang akan digunakan di instance komputasi
- compute_node_scopes: Cakupan akses instance komputasi
- partitions: Konfigurasi partisi Slurm. Dapat diulang untuk partisi tambahan.
- name: Nama partisi
- machine_type: Node komputasi jenis instance
- static_node_count: Jumlah node komputasi yang selalu aktif
- max_node_count: Jumlah maksimum total node komputasi yang diizinkan - maksimum 64 ribu
- zone: Zona Google Cloud yang akan berisi resource partisi ini - Info Selengkapnya
- image: Jenis mesin node image komputasi
- image_hyperthreads: Mengaktifkan atau menonaktifkan hyperthreading pada instance
- compute_disk_type: Jenis boot disk instance compute (pd-standard, pd-ssd)
- compute_disk_size_gb: Ukuran boot disk instance Compute
- 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 di partisi
- gpu_type: Jenis GPU yang akan dilampirkan ke instance partisi
- network_storage: Penyimpanan jaringan untuk di-mount di semua node komputasi dalam partisi. Kolom akan langsung ditambahkan 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 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: Mengizinkan Slurm mengalokasikan seluruh node ke tugas
- enable_placement: Aktifkan kebijakan penempatan tempat instance akan ditempatkan berdekatan satu sama lain untuk 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 bernilai benar (true), kebijakan ini digunakan untuk menentukan region yang akan digunakan dan zona mana di region tersebut yang tidak akan digunakan
- Instance_template: Template instance GCP yang akan digunakan untuk instance komputasi. Kolom komputasi yang ditentukan akan menggantikan properti template. Misalnya, jika gambar ditentukan, gambar tersebut akan menggantikan 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 dengan beberapa cara yang diuraikan dalam "Menginstal aplikasi di cluster Slurm di Compute Engine", atau dengan menyesuaikan image 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 diinstal di atasnya.
Untuk menggunakan image Anda sendiri, buat image dengan konfigurasi Anda sendiri berdasarkan Image VM SchedMD publik yang tercantum dalam file tfvars. Selanjutnya, ganti URI gambar yang ditentukan dalam file tfvars dengan gambar Anda sendiri, lalu uji perubahan tersebut.
Pemecahan masalah
Selama codelab ini, lihat bagian Pemecahan masalah di ReadMe repositori Slurm-GCP.
Masalah yang paling sering terjadi adalah kesalahan dalam mengonfigurasi file tfvars, dan batasan kuota. Codelab ini dirancang untuk dijalankan dalam alokasi kuota standar pengguna baru dan dalam kredit gratis senilai $300 yang diterima pengguna baru. Jika upaya pembuatan VM gagal, periksa file /var/log/slurm/resume.log di node pengontrol untuk memeriksa 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 menyetujui 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 memerlukan waktu beberapa menit hingga selesai, jadi bersabarlah.
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, lalu pilih Compute Engine > VM Instances.

Anda akan melihat pengontrol dan instance VM login yang tercantum:

Di bagian VM instances, tinjau dua instance virtual machine yang telah dibuat oleh Terraform.
Nama akan berbeda jika Anda mengubah kolom cluster_name.
- g1-controller
- 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 (seharusnya us-central1-b):
gcloud compute ssh g1-login0 --zone=<ZONE>
Perintah ini akan membuat Anda login ke virtual machine g1-login0.
Metode lain untuk mengakses node login dengan mudah adalah dengan mengklik tombol "SSH" di samping VM g1-login0 di halaman VM Instances untuk membuka tab baru dengan koneksi SSH.

Jika ini pertama kalinya Anda menggunakan Cloud Shell, Anda mungkin melihat pesan seperti di bawah yang meminta Anda 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 demikian, masukkan Y. Jika diminta untuk memilih frasa sandi, biarkan kosong 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 hingga 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.
Kemudian, 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 selesai.
Tur Alat CLI Slurm
Sekarang Anda sudah login ke node login Slurm cluster Anda. Ini adalah node yang dikhususkan untuk interaksi pengguna/admin, penjadwalan tugas Slurm, dan aktivitas administratif.
Mari kita jalankan beberapa perintah untuk memperkenalkan command line Slurm kepada Anda.
Jalankan perintah sinfo untuk melihat status resource cluster kita:
sinfo
Contoh output sinfo 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 dapat melihat 10 node kami, yang ditentukan oleh "max_node_count" 10 partisi debug, ditandai sebagai "idle~" (node dalam mode tidak aktif dan tidak dialokasikan, siap untuk diaktifkan).
Selanjutnya, jalankan perintah squeue untuk melihat status antrean cluster:
squeue
Output squeue yang diharapkan muncul di bawah. squeue melaporkan status antrean untuk cluster. Hal ini mencakup setiap ID tugas dari setiap tugas yang dijadwalkan di cluster, partisi yang ditetapkan untuk tugas, nama tugas, pengguna yang meluncurkan tugas, status tugas, waktu jam dinding saat tugas telah berjalan, dan node yang dialokasikan untuk tugas. Kita tidak memiliki tugas yang sedang berjalan, sehingga isi perintah ini kosong.
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
Perintah Slurm "srun" dan "sbatch" digunakan untuk menjalankan tugas yang dimasukkan ke dalam antrean. "srun" menjalankan tugas paralel, dan dapat digunakan sebagai wrapper untuk mpirun. "sbatch" digunakan untuk mengirimkan tugas batch ke slurm, dan dapat memanggil srun sekali atau berkali-kali dalam konfigurasi yang berbeda. "sbatch" dapat mengambil skrip batch, atau dapat digunakan dengan opsi –wrap untuk menjalankan seluruh tugas dari command line.
Mari jalankan tugas agar kita dapat melihat cara kerja Slurm dan mendapatkan tugas dalam antrean kita.
6. Menjalankan Tugas Slurm dan Menskalakan Cluster
Menjalankan Tugas Slurm dan Menskalakan Cluster
Setelah cluster Slurm kita berjalan, mari kita jalankan tugas dan tingkatkan skala cluster.
Perintah "sbatch" digunakan untuk menjalankan perintah dan skrip batch Slurm. Mari kita jalankan skrip sbatch sederhana yang akan menjalankan "hostname" di VM yang diskalakan otomatis.
Saat login ke g1-login0, jalankan perintah berikut:
sbatch -N2 --wrap="srun hostname"
Perintah ini menjalankan perintah batch Slurm. Skrip ini menentukan bahwa sbatch akan menjalankan 2 node dengan opsi "-N". Bagian ini juga menentukan bahwa setiap node tersebut akan menjalankan perintah "srun hostname" dalam opsi "–wrap".
Secara default, sbatch akan menulis outputnya ke "slurm-%j.out" di direktori kerja tempat perintah dijalankan, dengan %j diganti dengan ID Tugas sesuai dengan Pola Nama File Slurm. Dalam contoh ini, sbatch dijalankan dari folder /home pengguna, yang merupakan sistem file bersama berbasis NFS yang dihosting di pengontrol secara default. Hal ini memungkinkan node komputasi berbagi data input dan output jika diinginkan. Di lingkungan produksi, penyimpanan kerja harus terpisah dari penyimpanan /home untuk menghindari dampak performa pada operasi cluster. Pemasangan penyimpanan terpisah dapat ditentukan dalam file tfvars di opsi "network_storage".
Setelah menjalankan skrip sbatch menggunakan command line sbatch, skrip akan menampilkan Job ID untuk tugas terjadwal, 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 tugas yang Anda jalankan tercantum seperti di bawah:
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, ini menghilangkan pekerjaan yang biasanya diperlukan dalam cluster HPC untuk menyediakan node secara manual, mengonfigurasi software, mengintegrasikan node ke dalam cluster, lalu men-deploy tugas. Kedua, pengguna dapat menghemat uang karena node yang tidak aktif dan tidak digunakan akan di-scale down hingga jumlah minimum node berjalan.
Anda dapat menjalankan perintah sinfo untuk melihat cluster Slurm yang sedang di-spin up:
sinfo
Perintah ini akan menampilkan node yang tercantum dalam squeue dalam status "alloc#", 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. Perlu waktu beberapa menit untuk mengaktifkan node dan menjalankan Slurm sebelum tugas dialokasikan ke node yang baru dialokasikan. Daftar instance VM Anda akan segera terlihat seperti berikut:

Setelah node menjalankan tugas, instance akan berpindah ke status "alloc", yang berarti tugas dialokasikan ke tugas:
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 di squeue, dan node "alloc" di sinfo akan kembali ke status "idle". Jalankan "squeue" secara berkala hingga tugas selesai, setelah satu atau dua menit.
File output slurm-%j.out akan ditulis ke folder /home yang dibagikan melalui NFS, dan akan berisi nama host. Buka atau gabungkan file output (biasanya slurm-2.out), isi file output akan berisi:
g1-compute-0-0 g1-compute-0-1
Kerja bagus, Anda telah menjalankan tugas dan meningkatkan skala cluster Slurm.
7. Menjalankan Tugas MPI
Sekarang, mari kita jalankan tugas MPI di seluruh node. Saat login ke g1-login0, gunakan wget untuk mendownload 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 ini:
module load openmpi
Kita akan menggunakan alat "mpicc" untuk mengompilasi kode MPI C. Jalankan perintah berikut:
mpicc mpi_hello_world.c -o mpi_hello_world
Langkah ini mengompilasi kode C kita ke kode mesin sehingga kita dapat menjalankan kode di seluruh cluster melalui Slurm.
Selanjutnya, gunakan editor teks pilihan Anda untuk membuat skrip sbatch bernama "helloworld_batch":
vi helloworld_batch
Ketik i untuk masuk ke mode penyisipan vi.
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 keluar dari editor kode dengan menekan escape dan mengetik ":wq" tanpa tanda petik.
Skrip ini menentukan lingkungan dan tugas eksekusi batch Slurm. Pertama, lingkungan eksekusi ditentukan sebagai bash. Selanjutnya, skrip menentukan opsi Slurm terlebih dahulu dengan baris "#SBATCH". Nama tugas ditentukan sebagai "hello_world".
File output ditetapkan 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 ini, folder /home pengguna adalah sistem file bersama berbasis NFS. Hal ini memungkinkan node komputasi berbagi data input dan output jika diinginkan. Di lingkungan produksi, penyimpanan yang berfungsi harus terpisah dari penyimpanan /home untuk menghindari dampak performa pada operasi cluster.
Terakhir, jumlah node yang harus dijalankan skrip ini ditentukan sebagai 2.
Setelah opsi ditentukan, perintah yang dapat dieksekusi akan diberikan. 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
Menjalankan sbatch akan menampilkan Job ID untuk tugas terjadwal, misalnya:
Submitted batch job 3
Perintah 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 menyediakan 2 node, tugas ini akan berjalan dengan cepat.
Pantau squeue hingga tugas selesai dan tidak lagi tercantum:
squeue
Setelah selesai, buka atau cat file hello_world-3.out dan konfirmasi bahwa file tersebut berjalan di 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 suspend_time YAML, atau kolom SuspendTime slurm.conf), node komputasi yang disediakan secara dinamis akan dibatalkan alokasinya untuk melepaskan resource. Anda dapat memvalidasinya 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 siapkan lebih banyak instance, hingga Kuota yang diizinkan di region tempat Anda men-deploy cluster, dan jalankan aplikasi MPI yang berbeda.
8. Kesimpulan
Selamat, Anda telah membuat cluster Slurm di Google Cloud Platform dan menggunakan fitur terbarunya untuk menskalakan cluster secara otomatis guna memenuhi permintaan workload. Anda dapat menggunakan model ini untuk menjalankan berbagai jenis tugas, dan model ini dapat menskalakan hingga ratusan instance dalam hitungan menit hanya dengan meminta node di Slurm.
Jika Anda ingin terus mempelajari cara menggunakan Slurm di GCP, pastikan untuk melanjutkan dengan codelab " Membangun Cluster HPC Gabungan dengan Slurm". Codelab ini akan memandu Anda menyiapkan dua cluster Slurm terfederasi di cloud, untuk menunjukkan cara mencapai federasi multi-cluster, baik di lokal maupun di cloud.
Apakah Anda sedang membangun sesuatu yang keren menggunakan fungsi baru Slurm yang kompatibel dengan GCP? Ada pertanyaan? Punya saran fitur? Hubungi tim Google Cloud sekarang melalui situs Solusi Komputasi Performa Tinggi Google Cloud, atau mulai chat dengan kami di Grup Diskusi Google Cloud & Slurm.
Membersihkan Deployment Terraform
Logout dari node slurm:
exit
Biarkan semua node yang diskalakan otomatis diturunkan skalanya 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 "Hapus".
Anda dapat membersihkan deployment Terraform dengan mudah setelah selesai dengan menjalankan perintah berikut dari Google Cloud Shell, 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 dapat memerlukan waktu beberapa menit, harap bersabar.
Menghapus Project
Untuk membersihkan, kita cukup menghapus project.
- Di menu navigasi, pilih IAM & Admin
- Kemudian, klik setelan di submenu
- Klik ikon tempat sampah dengan teks "Hapus Project"
- Ikuti petunjuk perintah
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 melakukan penskalaan otomatis node dengan Slurm di GCP untuk mengakomodasi parameter dan persyaratan tugas tertentu.
- Cara mengompilasi dan menjalankan aplikasi MPI di Slurm di GCP.
Menemukan Dukungan Slurm
Jika Anda memerlukan dukungan untuk menggunakan integrasi ini di lingkungan pengujian atau produksi, hubungi SchedMD secara langsung menggunakan halaman kontak mereka di sini: https://www.schedmd.com/contact.php
Anda juga dapat menggunakan Panduan pemecahan masalah yang tersedia:
- Panduan Pemecahan Masalah Slurm di GCP: https://github.com/SchedMD/slurm-gcp#troubleshooting
- Panduan Pemecahan Masalah SchedMD: https://slurm.schedmd.com/troubleshoot.html
Terakhir, Anda juga dapat memposting pertanyaan ke Grup Diskusi Google Cloud & Slurm yang dapat ditemukan di sini: https://groups.google.com/g/google-cloud-slurm-discuss
Pelajari Lebih Lanjut
Masukan
Kirim masukan tentang codelab ini menggunakan link ini. Memberikan masukan memerlukan waktu kurang dari 5 menit. Terima kasih!