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.
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
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:
- Layanan ini mengalokasikan akses eksklusif atau non-eksklusif ke resource (node komputasi) kepada pengguna selama beberapa durasi waktu, sehingga mereka dapat menjalankan pekerjaan.
- Node ini menyediakan framework untuk memulai, mengeksekusi, dan memantau pekerjaan (biasanya tugas paralel) pada kumpulan node yang dialokasikan.
- 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:
Klik Create Project.
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:
Kemudian klik Start Cloud Shell:
Hanya perlu waktu beberapa saat untuk melakukan 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 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:
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.
Anda akan melihat pengontrol dan instance VM login tercantum:
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.
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:
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:
- 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 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!