Menerapkan Kluster HPC Penskalaan Otomatis dengan Slurm

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

c16fa310c142ac6f.png

Google Cloud bekerja sama dengan SchedMD untuk merilis sekumpulan alat yang memudahkan peluncuran pengelola beban kerja Slurm di Compute Engine, dan untuk memperluas cluster yang ada secara dinamis saat Anda membutuhkan sumber daya tambahan. Integrasi ini dibangun oleh para ahli di SchedMD sesuai dengan praktik terbaik Slurm.

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

Tentang Slurm

a739730a41acff0a.png

Diagram arsitektur dasar dari Cluster Slurm yang berdiri sendiri di Google Cloud Platform.

Slurm adalah salah satu manajer beban kerja terkemuka untuk cluster HPC di seluruh dunia. Slurm menyediakan manajemen beban kerja open-source, toleran terhadap kesalahan, dan sangat skalabel serta sistem penjadwalan pekerjaan untuk cluster Linux kecil dan besar. Slurm tidak memerlukan modifikasi kernel untuk operasinya dan relatif mandiri. Sebagai manajer beban kerja cluster, Slurm memiliki tiga fungsi utama:

  1. Ini mengalokasikan akses eksklusif atau non-eksklusif ke sumber daya (node ​​komputasi) kepada pengguna untuk beberapa durasi waktu sehingga mereka dapat melakukan pekerjaan.
  2. Ini menyediakan kerangka kerja untuk memulai, menjalankan, dan memantau pekerjaan (biasanya pekerjaan paralel) pada kumpulan node yang dialokasikan.
  3. Ini menengahi pertengkaran untuk sumber daya dengan mengelola antrian pekerjaan yang tertunda.

Apa yang akan Anda pelajari

  • Cara menyiapkan cluster Slurm menggunakan Terraform
  • Bagaimana menjalankan pekerjaan menggunakan SLURM
  • Cara menanyakan informasi cluster dan memantau pekerjaan yang sedang berjalan di SLURM
  • Cara melakukan penskalaan otomatis pada node untuk mengakomodasi parameter dan persyaratan pekerjaan tertentu
  • Di mana menemukan bantuan dengan Slurm

Prasyarat

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

Pengaturan lingkungan mandiri

Buat Proyek

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

359c06e07e6d699f.png

Klik Buat Proyek.

25c23d651abb837b.png

Masukkan nama proyek. Ingat ID proyek (disorot dengan warna merah pada gambar di atas). ID proyek harus berupa nama unik di semua proyek Google Cloud. Jika nama proyek Anda tidak unik, Google Cloud akan membuat ID proyek acak berdasarkan nama proyek.

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

Menjalankan codelab ini seharusnya tidak menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih mahal jika Anda memutuskan untuk menggunakan lebih banyak sumber daya 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 dari laptop Anda, dalam codelab ini kami akan menggunakan Google Cloud Shell , lingkungan baris perintah yang berjalan di Cloud.

Luncurkan Google Cloud Shell

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

dbad104cef962719.png

Lalu klik Mulai Cloud Shell :

4e50db320508ac88.png

Hanya perlu beberapa saat untuk menyediakan dan terhubung ke lingkungan:

20b0aa80492144d.png

Mesin virtual ini dimuat dengan semua alat pengembangan yang Anda perlukan. Ini menawarkan direktori utama 5GB yang persisten, dan berjalan di Google Cloud, sangat meningkatkan kinerja jaringan dan menyederhanakan otentikasi. Banyak, jika tidak semua, 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 tersebut sudah disetel ke PROJECT_ID Anda:

$ gcloud auth list

Keluaran perintah:

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

Keluaran perintah:

[core]
project = <PROJECT_ID>

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

$ gcloud config set project <PROJECT_ID>

Keluaran perintah:

Updated property [core/project].

Unduh Konfigurasi Terraform Slurm

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

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

Beralih ke direktori konfigurasi penerapan Slurm dengan menjalankan perintah berikut:

cd slurm-gcp

Konfigurasikan Slurm Terraform tfvars

File basic.tfvars.example merinci konfigurasi penerapan, termasuk jaringan, instance, dan penyimpanan untuk diterapkan. Salin ke file baru, yang akan kami sebut "file tfvars", lalu edit sesuai kebutuhan.

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

Di sesi Cloud Shell, buka file basic.tfvars . Anda dapat menggunakan editor baris perintah pilihan Anda (vi, nano, emacs, dll.) Atau menggunakan Editor Kode Konsol Cloud untuk melihat konten file:

214f43bba6c917aa.png

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"
]

Di dalam file tfvars ini ada beberapa kolom yang perlu dikonfigurasi. Satu-satunya bidang yang harus dikonfigurasi adalah proyek . Semua konfigurasi lain dalam contoh dapat digunakan sebagaimana adanya, tetapi mengubahnya sesuai kebutuhan untuk situasi Anda. Untuk penjelasan lebih rinci tentang opsi konfigurasi, lihat di sini .

  • cluster_name: Nama cluster Slurm
  • project: Project ID Google Cloud tempat sumber daya akan diterapkan
  • zona: zona Google Cloud yang akan berisi pengontrol dan instance login dari cluster ini - Info Lebih Lanjut
  • network_name: Jaringan Virtual Private Cloud untuk menerapkan cluster Slurm ke dalamnya
  • subnetwork_name: Subnetwork Virtual Private Cloud untuk menerapkan cluster Slurm
  • shared_vpc_host_project: Jaringan VPC bersama untuk menerapkan cluster Slurm
  • disable_controller_public_ips: Tetapkan IP eksternal ke kontroler 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 menunggu setelah node menganggur sebelum menangguhkan node
  • controller_machine_type: Jenis instance node pengontrol
  • controller_image: Gambar GCP yang digunakan untuk membuat instance pengontrol Slurm
  • controller_disk_type: Jenis disk booting instance pengontrol
  • controller_disk_size_gb: Ukuran disk booting instance pengontrol
  • controller_labels: Label yang akan dilampirkan ke instance controller
  • controller_service_account: Akun layanan yang akan digunakan pada instance controller
  • controller_scopes: Mengakses cakupan dari instance controller
  • cloudql: Server Google CloudSQL untuk digunakan sebagai database Slurm alih-alih menghosting database pada instance pengontrol
  • server_ip : IP server CloudSQL
  • pengguna: nama pengguna CloudSQL
  • kata sandi: kata 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 bidang komputasi yang ditentukan akan menimpa properti template. Misalnya. jika controller_image ditentukan, itu akan menimpa gambar di template instance.
  • login_machine_type: Jenis instance node login (dapat diakses SSH)
  • login_image: Gambar GCP yang digunakan untuk membuat instance login Slurm
  • login_disk_type: Jenis disk booting 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: Mengakses cakupan instance login
  • login_instance_template: Template instance GCP yang akan digunakan untuk instance login. Setiap bidang komputasi yang ditentukan akan menimpa properti template. Misalnya. jika login_image ditentukan, itu akan menimpa gambar di template contoh.
  • network_storage: Penyimpanan jaringan untuk dipasang di semua node. Fields akan ditambahkan langsung ke fstab. Dapat diulang untuk dudukan tambahan.
  • server_ip: IP server penyimpanan
  • remote_mount: Nama mount penyimpanan (nama sistem file)
  • local_mount: Direktori pemasangan lokal
  • fs_type: Jenis sistem file (NFS, CIFS, Kilau, GCSFuse diinstal secara otomatis)
  • mount_options: Opsi mount (yaitu defaults, _netdev)
  • login_network_storage: Penyimpanan jaringan untuk dipasang pada node login dan pengontrol. NFS, CIFS, Luster, dan GCSFuse akan diinstal secara otomatis. Dapat diulang untuk dudukan tambahan.
  • server_ip: IP server penyimpanan
  • remote_mount: Nama mount penyimpanan (nama sistem file)
  • local_mount: Direktori pemasangan lokal
  • fs_type: Jenis sistem file (NFS, CIFS, Kilau, GCSFuse diinstal secara otomatis)
  • mount_options: Opsi mount (yaitu defaults, _netdev)
  • compute_node_service_account: Akun layanan yang akan digunakan pada instance komputasi
  • compute_node_scopes: Mengakses cakupan instance komputasi
  • partisi: Konfigurasi partisi slurm. Dapat diulang untuk partisi tambahan.
  • name: Nama partisi
  • machine_type: Menghitung jenis instance node (s)
  • static_node_count: Jumlah node komputasi yang selalu aktif
  • max_node_count: Jumlah maksimum total node komputasi yang diizinkan - maksimum 64K
  • zona: zona Google Cloud yang akan berisi sumber daya partisi ini - Info Lebih Lanjut
  • image: Menghitung jenis mesin node gambar
  • image_hyperthreads: Mengaktifkan atau menonaktifkan hyperthreading pada instance
  • compute_disk_type : Jenis disk booting instance komputasi (pd-standard, pd-ssd)
  • compute_disk_size_gb: Ukuran disk booting instance komputasi
  • compute_labels: Label yang akan dilampirkan ke instance komputasi
  • cpu_platform: Diperlukan platform CPU minimum untuk semua node komputasi
  • gpu_count: Jumlah GPU untuk dipasang ke setiap instance di partisi
  • gpu_type: Jenis GPU untuk dilampirkan ke instance partisi
  • network_storage: Penyimpanan jaringan untuk dipasang di semua node komputasi di partisi. Fields akan ditambahkan langsung ke fstab. Dapat diulang untuk dudukan tambahan.
  • server_ip: IP server penyimpanan
  • remote_mount: Nama mount penyimpanan (nama sistem file)
  • local_mount: Direktori pemasangan lokal
  • fs_type: Jenis sistem file (NFS, CIFS, Kilau, GCSFuse diinstal secara otomatis)
  • mount_options: Opsi mount
  • preemptible_bursting: Apakah instance akan menjadi instance yang dapat diakhiri?
  • vpc_subnet: subjaringan Virtual Private Cloud untuk menerapkan partisi Slurm
  • eksklusif: Aktifkan Slurm untuk mengalokasikan seluruh node ke pekerjaan
  • enable_placement: Mengaktifkankebijakan penempatan tempat instance akan ditempatkan berdekatan untuk latensi jaringan yang rendah di antara instance.
  • regional_capacity: Memungkinkan sebuah instance ditempatkan di zona mana pun di wilayah berdasarkan ketersediaan
  • regional_policy: Jika regional_capacity benar, kebijakan ini untuk menentukan wilayah mana yang akan digunakan dan zona apa pun di wilayah itu yang tidak boleh digunakan
  • Instance_template: Template instance GCP yang akan digunakan untuk instance komputasi. Setiap bidang komputasi yang ditentukan akan menimpa properti template. Misalnya. jika gambar ditentukan, itu akan menimpa gambar di template contoh.

Konfigurasi Lanjutan

Jika diinginkan, Anda dapat memilih untuk menginstal paket dan perangkat lunak tambahan sebagai bagian dari proses penerapan cluster. Anda dapat menginstal software pada cluster slurm Anda dengan berbagai cara yang diuraikan dalam "Menginstal aplikasi dalam cluster Slurm di Compute Engine" , atau dengan menyesuaikan gambar yang diterapkan oleh Slurm. Saat ini Slurm menerapkan Gambar VM yang disediakan SchedMD yang didasarkan pada Gambar VM HPC Google Cloud , dengan Slurm diinstal di atasnya.

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

Penyelesaian masalah

Di seluruh codelab ini, lihat bagian Pemecahan Masalah pada ReadMe repositori Slurm-GCP.

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

Terapkan 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 " ya " untuk memulai penerapan. Anda juga dapat melihat konfigurasi yang akan digunakan 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 dapat memakan waktu beberapa menit hingga selesai, jadi harap bersabar .

Setelah penerapan selesai, Anda akan melihat keluaran 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",
  ],
]

Verifikasi pembuatan instance VM

Buka menu navigasi dan pilih Compute Engine > Instance VM.

d5832bdd527794ed.png

Anda akan melihat pengontrol dan instance VM login terdaftar:

7a1fc9603758d58d.png

Di bawah instance VM, tinjau dua instance mesin virtual yang telah dibuat oleh Terraform.

Namanya akan berbeda jika Anda mengubah kolom cluster_name .

  • g1-pengontrol
  • g1-login0

Akses Cluster Slurm

Kembali ke tab Editor Kode / Cloud Shell Anda. Jalankan perintah berikut untuk masuk ke instance Anda, gantikan <ZONE> untuk zona node g1-login0 (seharusnya us-central1-b ):

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

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

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

8c373a87d13620f7.png

Jika ini adalah pertama kalinya Anda 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, 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 dengan lab sampai Anda melihat pesan ini (kira-kira 5 menit):

*** Slurm login setup complete ***

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

Kemudian jalankan perintah berikut keluar dari instance Anda:

exit

Sekarang, sambungkan kembali ke VM login Anda. Jalankan perintah berikut untuk login ke instance Anda, dengan mengganti <ZONE> untuk 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

Anda sekarang masuk ke node login Slurm cluster Anda. Ini adalah node yang didedikasikan untuk interaksi pengguna / admin, menjadwalkan pekerjaan Slurm, dan aktivitas administratif.

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

Jalankan perintah sinfo untuk melihat status sumber daya cluster kita:

sinfo

Contoh keluaran 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 partisi debug "max_node_count" dari 10, ditandai sebagai "idle ~" (node ​​dalam mode diam dan tidak dialokasikan, siap untuk diputar).

Selanjutnya, jalankan perintah squeue untuk melihat status antrian cluster kita:

squeue

Output yang diharapkan dari squeue muncul di bawah. squeue melaporkan status antrian untuk sebuah cluster. Ini termasuk setiap ID pekerjaan dari setiap pekerjaan yang dijadwalkan di cluster, partisi tempat pekerjaan ditetapkan, nama pekerjaan, pengguna yang meluncurkan pekerjaan, status pekerjaan, jam dinding waktu pekerjaan telah berjalan , dan node tempat tugas dialokasikan. Kami tidak memiliki pekerjaan apa pun yang sedang berjalan, jadi konten perintah ini kosong.

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

Perintah Slurm "srun" dan "sbatch" digunakan untuk menjalankan pekerjaan yang dimasukkan ke dalam antrian. "srun" menjalankan pekerjaan paralel, dan dapat digunakan sebagai pembungkus untuk mpirun. "sbatch" digunakan untuk mengirimkan pekerjaan 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 pekerjaan dari baris perintah.

Mari kita jalankan pekerjaan sehingga kita dapat melihat Slurm beraksi dan mendapatkan pekerjaan di antrean kita!

Jalankan Pekerjaan Slurm dan Skala Cluster

Sekarang setelah cluster Slurm kita berjalan, mari kita menjalankan pekerjaan dan meningkatkan cluster kita.

Perintah "sbatch" digunakan untuk menjalankan perintah dan skrip batch Slurm. Mari kita jalankan skrip sbatch sederhana yang akan menjalankan "nama host" pada VM skala otomatis kita.

Saat masuk 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 opsi "-N". Ini juga menentukan bahwa setiap node tersebut akan menjalankan perintah "srun hostname" pada opsi "–wrap".

Secara default, sbatch akan menulis outputnya ke "slurm-% j.out" di direktori kerja tempat perintah dijalankan, di mana% j diganti untuk ID Pekerjaan menurut Pola Nama File Slurm . Dalam contoh kami, sbatch dijalankan dari folder pengguna / rumah, yang merupakan sistem file bersama berbasis NFS yang dihosting di pengontrol secara default. Ini memungkinkan node komputasi untuk berbagi data input dan output jika diinginkan. Dalam lingkungan produksi, penyimpanan kerja harus terpisah dari penyimpanan / rumah untuk menghindari dampak kinerja pada operasi cluster. Mount penyimpanan terpisah dapat ditentukan dalam file tfvars di opsi "network_storage".

Setelah menjalankan skrip sbatch menggunakan baris perintah sbatch, ia akan mengembalikan ID Pekerjaan untuk pekerjaan yang dijadwalkan, misalnya:

Submitted batch job 2
.dll

Kita bisa menggunakan ID Pekerjaan yang dikembalikan oleh perintah sbatch untuk melacak dan mengelola eksekusi dan sumber daya pekerjaan. Jalankan perintah berikut untuk melihat antrian pekerjaan 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 kami tidak memiliki node komputasi yang disediakan, Slurm akan secara otomatis membuat instance komputasi sesuai dengan persyaratan pekerjaan. Sifat otomatis dari proses ini memiliki dua manfaat. Pertama, ini menghilangkan pekerjaan yang biasanya diperlukan dalam cluster HPC yang menyediakan node secara manual, mengkonfigurasi perangkat lunak, mengintegrasikan node ke dalam cluster, dan kemudian menerapkan pekerjaan tersebut. Kedua, memungkinkan pengguna untuk menghemat uang karena node yang tidak digunakan dan tidak digunakan diperkecil hingga jumlah minimum node berjalan.

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

sinfo

Ini akan menunjukkan node yang terdaftar dalam squeue dalam status "alokasi #", 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 Google Cloud Console untuk melihat node yang baru disediakan. Diperlukan beberapa menit untuk memutar node dan menjalankan Slurm sebelum pekerjaan dialokasikan ke node yang baru dialokasikan. Daftar instance VM Anda akan segera terlihat seperti berikut ini:

9997efff595f1e.png

Setelah node menjalankan pekerjaan, instance akan pindah ke status "alokasi", 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 pekerjaan selesai, pekerjaan itu tidak akan lagi terdaftar dalam squeue, dan node "alokasi" di sinfo akan kembali ke status "idle". Jalankan "squeue" secara berkala hingga pekerjaan selesai, setelah satu atau dua menit.

File keluaran slurm-% j.out akan ditulis ke folder NFS-shared / home Anda, dan akan berisi nama host. Buka atau cat file output (biasanya slurm-2.out), itu konten file output akan berisi:

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

Kerja bagus, Anda telah menjalankan pekerjaan dan meningkatkan cluster Slurm Anda!

Sekarang mari kita menjalankan tugas MPI di seluruh node kita. 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 ini:

module load openmpi

Kami akan menggunakan alat "mpicc" untuk mengkompilasi kode MPI C. Jalankan perintah berikut:

mpicc mpi_hello_world.c -o mpi_hello_world

Ini mengkompilasi kode C kami ke kode mesin sehingga kami dapat menjalankan kode di seluruh cluster kami melalui Slurm.

Selanjutnya, gunakan editor teks pilihan Anda untuk membuat skrip tas bernama " helloworld_batch ":

vi helloworld_batch

Ketik i untuk masuk ke mode sisipan vi.

Salin dan tempel teks berikut ke dalam file untuk membuat skrip tas 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 kutip.

Skrip ini mendefinisikan lingkungan dan tugas eksekusi batch Slurm. Pertama, lingkungan eksekusi didefinisikan sebagai bash. Selanjutnya, skrip mendefinisikan opsi Slurm terlebih dahulu dengan baris "#SBATCH". Nama pekerjaan didefinisikan sebagai "hello_world".

File keluaran disetel sebagai "hello_world_% j.out" di mana% j diganti untuk ID Pekerjaan menurut Pola Nama Berkas Slurm . File keluaran ini ditulis ke direktori tempat skrip sbatch dijalankan. Dalam contoh kami, ini adalah folder pengguna / rumah, yang merupakan sistem file bersama berbasis NFS. Ini memungkinkan node komputasi untuk berbagi data input dan output jika diinginkan. Dalam lingkungan produksi, penyimpanan kerja harus terpisah dari penyimpanan / rumah untuk menghindari dampak kinerja pada operasi cluster.

Terakhir, jumlah node yang harus dijalankan skrip ini didefinisikan sebagai 2.

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

Kemudian jalankan skrip sbatch menggunakan baris perintah sbatch:

sbatch helloworld_batch

Menjalankan sbatch akan mengembalikan ID Pekerjaan untuk pekerjaan yang dijadwalkan, misalnya:

Submitted batch job 3

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

Karena kami telah menyediakan 2 node, tugas ini akan berjalan dengan cepat.

Pantau antrean hingga pekerjaan selesai dan tidak lagi terdaftar:

squeue

Setelah selesai, buka atau cat file hello_world-3.out dan konfirmasikan 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 menganggur selama 5 menit (dapat dikonfigurasi dengan bidang suspend_time YAML, atau bidang SuspendTime slurm.conf), node komputasi yang disediakan secara dinamis akan dibatalkan alokasi untuk sumber daya rilis. 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 putar lebih banyak instance, hingga Kuota Anda diizinkan di wilayah tempat Anda menerapkan cluster, dan menjalankan aplikasi MPI yang berbeda.

Selamat, Anda telah membuat cluster Slurm di Google Cloud Platform dan menggunakan fitur terbarunya untuk menskalakan cluster Anda secara otomatis untuk memenuhi permintaan beban kerja! Anda dapat menggunakan model ini untuk menjalankan berbagai macam pekerjaan, dan model ini menskalakan hingga ratusan instance dalam beberapa menit hanya dengan meminta node di Slurm.

Jika Anda ingin terus belajar menggunakan Slurm di GCP, pastikan untuk melanjutkan dengan codelab " Membangun Kelompok HPC Federasi dengan Slurm ". Codelab ini akan memandu Anda dalam menyiapkan dua cluster Slurm federasi di cloud, untuk menunjukkan bagaimana Anda dapat mencapai federasi multi-cluster, baik di lokasi maupun di cloud.

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

Bersihkan Penerapan Terraform

Keluar dari node slurm:

exit

Biarkan node skala otomatis turun sebelum menghapus penerapan. Anda juga dapat menghapus node ini secara manual dengan menjalankan "gcloud compute instance delete <Instance Name>" untuk setiap instance, atau dengan menggunakan GUI Konsol untuk memilih beberapa node dan mengklik "Hapus".

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

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

Saat diminta, ketik ya untuk melanjutkan. Operasi ini bisa memakan waktu beberapa menit, harap bersabar.

Hapus Proyek

Untuk membersihkan, kami cukup menghapus proyek kami.

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

Apa yang telah kami bahas

  • Cara menggunakan penerapan Slurm di GCP menggunakan Terraform.
  • Cara menjalankan pekerjaan menggunakan Slurm di GCP.
  • Cara menanyakan informasi cluster dan memantau pekerjaan yang sedang berjalan di Slurm.
  • Cara melakukan penskalaan otomatis pada node dengan Slurm di GCP untuk mengakomodasi parameter dan persyaratan tugas tertentu.
  • Cara mengompilasi dan menjalankan aplikasi MPI di Slurm di GCP.

Temukan Dukungan Slurm

Jika Anda memerlukan dukungan menggunakan integrasi ini dalam lingkungan pengujian atau produksi, harap 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:

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

Belajarlah lagi

Umpan balik

Silakan kirimkan umpan balik tentang codelab ini menggunakan tautan ini . Masukan membutuhkan waktu kurang dari 5 menit untuk diselesaikan. Terima kasih!