স্লার্মের সাথে একটি অটো-স্কেলিং HPC ক্লাস্টার স্থাপন করুন

1. ওভারভিউ

Google ক্লাউড প্ল্যাটফর্মে স্লার্ম ক্লাস্টার চালানোর জন্য Google Codelab-এ স্বাগতম! এই কোডল্যাবের শেষের মধ্যে আপনার একটি স্বয়ংক্রিয়-স্কেলিং স্লার্ম ক্লাস্টার প্রভিশনিং এবং পরিচালনার সহজতা সম্পর্কে একটি দৃঢ় ধারণা থাকা উচিত।

c16fa310c142ac6f.png

Google ক্লাউড কম্পিউট ইঞ্জিনে স্লার্ম ওয়ার্কলোড ম্যানেজার চালু করতে এবং আপনার অতিরিক্ত সংস্থানগুলির প্রয়োজন হলে আপনার বিদ্যমান ক্লাস্টারকে গতিশীলভাবে প্রসারিত করতে সহজতর সরঞ্জামগুলির একটি সেট প্রকাশ করতে SchedMD- এর সাথে যৌথভাবে কাজ করেছে৷ এই ইন্টিগ্রেশন Slurm সেরা অনুশীলন অনুযায়ী SchedMD- এর বিশেষজ্ঞরা তৈরি করেছিলেন।

আপনি যদি Google ক্লাউড প্ল্যাটফর্ম ইন্টিগ্রেশনে Slurm ব্যবহার করার পরিকল্পনা করছেন, অথবা আপনার যদি কোনো প্রশ্ন থাকে, তাহলে অনুগ্রহ করে আমাদের Google Cloud & Slurm কমিউনিটি আলোচনা গোষ্ঠীতে যোগদানের কথা বিবেচনা করুন!

স্লার্ম সম্পর্কে

a739730a41acff0a.png

Google ক্লাউড প্ল্যাটফর্মে একটি স্বতন্ত্র স্লার্ম ক্লাস্টারের মৌলিক স্থাপত্য চিত্র।

Slurm হল সারা বিশ্বের HPC ক্লাস্টারগুলির জন্য নেতৃস্থানীয় ওয়ার্কলোড ম্যানেজারগুলির মধ্যে একটি৷ Slurm ছোট এবং বড় লিনাক্স ক্লাস্টারগুলির জন্য একটি ওপেন-সোর্স, ত্রুটি-সহনশীল, এবং উচ্চ-স্কেলযোগ্য ওয়ার্কলোড ম্যানেজমেন্ট এবং কাজের সময় নির্ধারণের সিস্টেম সরবরাহ করে। Slurm এর অপারেশনের জন্য কোন কার্নেল পরিবর্তনের প্রয়োজন নেই এবং এটি তুলনামূলকভাবে স্বয়ংসম্পূর্ণ। ক্লাস্টার ওয়ার্কলোড ম্যানেজার হিসাবে, স্লার্মের তিনটি মূল ফাংশন রয়েছে:

  1. এটি ব্যবহারকারীদের জন্য কিছু সময়ের জন্য সংস্থানগুলিতে একচেটিয়া বা অ-এক্সক্লুসিভ অ্যাক্সেস (কম্পিউট নোড) বরাদ্দ করে যাতে তারা কাজ সম্পাদন করতে পারে।
  2. এটি বরাদ্দকৃত নোডের সেটে কাজ শুরু, সম্পাদন এবং পর্যবেক্ষণের জন্য একটি কাঠামো প্রদান করে (সাধারণত একটি সমান্তরাল কাজ)।
  3. এটি মুলতুবি কাজের একটি সারি পরিচালনা করে সম্পদের জন্য বিরোধের মধ্যস্থতা করে।

আপনি কি শিখবেন

  • টেরাফর্ম ব্যবহার করে কীভাবে স্লার্ম ক্লাস্টার সেট আপ করবেন
  • কিভাবে SLURM ব্যবহার করে চাকরি চালাবেন
  • কীভাবে ক্লাস্টারের তথ্য জিজ্ঞাসা করবেন এবং SLURM-এ চলমান কাজগুলি নিরীক্ষণ করবেন
  • নির্দিষ্ট কাজের পরামিতি এবং প্রয়োজনীয়তাগুলি মিটমাট করার জন্য কীভাবে নোডগুলি অটোস্কেল করবেন
  • Slurm এর সাহায্য কোথায় পাবেন

পূর্বশর্ত

  • Google ক্লাউড প্ল্যাটফর্ম অ্যাকাউন্ট এবং বিলিং সহ একটি প্রকল্প
  • মৌলিক লিনাক্স অভিজ্ঞতা

2. সেটআপ

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

একটি প্রকল্প তৈরি করুন

আপনার যদি ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে (Gmail বা G Suite), তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে। Google ক্লাউড প্ল্যাটফর্ম কনসোলে সাইন-ইন করুন ( console.cloud.google.com ) এবং সংস্থান পরিচালনা পৃষ্ঠাটি খুলুন:

359c06e07e6d699f.png

প্রকল্প তৈরি করুন ক্লিক করুন।

25c23d651abb837b.png

একটি প্রকল্পের নাম লিখুন । প্রজেক্ট আইডিটি মনে রাখুন (উপরের স্ক্রিনশটে লাল রঙে হাইলাইট করা হয়েছে)। সমস্ত Google ক্লাউড প্রজেক্ট জুড়ে প্রোজেক্ট আইডি একটি অনন্য নাম হতে হবে। আপনার প্রকল্পের নাম অনন্য না হলে Google ক্লাউড প্রকল্পের নামের উপর ভিত্তি করে একটি এলোমেলো প্রকল্প আইডি তৈরি করবে।

এর পরে, Google ক্লাউড সংস্থানগুলি ব্যবহার করার জন্য আপনাকে বিকাশকারী কনসোলে বিলিং সক্ষম করতে হবে৷

এই কোডল্যাবের মাধ্যমে চালানোর জন্য আপনার কয়েক ডলারের বেশি খরচ করা উচিত নয়, তবে আপনি যদি আরও সংস্থান ব্যবহার করার সিদ্ধান্ত নেন বা আপনি সেগুলিকে চলমান রেখে দেন তবে এটি আরও বেশি হতে পারে (এই নথির শেষে "উপসংহার" বিভাগটি দেখুন)। Google ক্লাউড প্ল্যাটফর্ম মূল্য নির্ধারণ ক্যালকুলেটর এখানে উপলব্ধ।

Google ক্লাউড প্ল্যাটফর্মের নতুন ব্যবহারকারীরা $300 বিনামূল্যের ট্রায়ালের জন্য যোগ্য৷

গুগল ক্লাউড শেল

যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আমরা Google ক্লাউড শেল ব্যবহার করব, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

গুগল ক্লাউড শেল চালু করুন

GCP কনসোল থেকে উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:

dbad104cef962719.png

তারপর স্টার্ট ক্লাউড শেল ক্লিক করুন:

4e50db320508ac88.png

পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে:

20b0aa80492144d.png

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, নেটওয়ার্ক কর্মক্ষমতাকে ব্যাপকভাবে উন্নত করে এবং প্রমাণীকরণ সহজ করে। এই ল্যাবে আপনার অনেক কাজ, যদি না হয়, তবে অনেক কিছুই করা যেতে পারে শুধু একটি ওয়েব ব্রাউজার বা একটি Google Chromebook দিয়ে৷

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকরণ করেছেন এবং প্রকল্পটি ইতিমধ্যেই আপনার PROJECT_ID এ সেট করা আছে:

$ gcloud auth list

কমান্ড আউটপুট:

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

কমান্ড আউটপুট:

[core]
project = <PROJECT_ID>

যদি প্রজেক্ট আইডি সঠিকভাবে সেট করা না থাকে তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

$ gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট:

Updated property [core/project].

3. স্লার্ম টেরাফর্ম কনফিগারেশন প্রস্তুত এবং পর্যালোচনা করুন

Slurm Terraform কনফিগারেশন ডাউনলোড করুন

ক্লাউড শেল সেশনে, Google ক্লাউড প্ল্যাটফর্ম টেরাফর্ম ফাইলগুলির জন্য স্লার্ম ধারণ করে গিট রিপোজিটরি ক্লোন (ডাউনলোড) করতে নিম্নলিখিত কমান্ডটি চালান:

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

নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে স্লার্ম স্থাপনার কনফিগারেশন ডিরেক্টরিতে স্যুইচ করুন:

cd slurm-gcp

Slurm Terraform tfvars কনফিগার করুন

basic.tfvars.example ফাইলটি স্থাপনার কনফিগারেশনের বিবরণ দেয়, যার মধ্যে নেটওয়ার্ক, দৃষ্টান্ত এবং স্থাপন করার জন্য সঞ্চয়স্থান রয়েছে। এটি একটি নতুন ফাইলে অনুলিপি করুন, যাকে আমরা "tfvars ফাইল" বলব, তারপর প্রয়োজন অনুসারে সম্পাদনা করুন।

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

ক্লাউড শেল সেশনে, tfvars ফাইলটি খুলুন basic.tfvars । আপনি হয় আপনার পছন্দের কমান্ড লাইন সম্পাদক (vi, nano, emacs, ইত্যাদি) ব্যবহার করতে পারেন অথবা ফাইলের বিষয়বস্তু দেখতে ক্লাউড কনসোল কোড এডিটর ব্যবহার করতে পারেন:

214f43bba6c917aa.png

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

এই tfvars ফাইলের মধ্যে কনফিগার করার জন্য বেশ কয়েকটি ক্ষেত্র রয়েছে। একমাত্র ক্ষেত্র যা কনফিগার করা আবশ্যক তা হল প্রকল্প । উদাহরণের অন্যান্য সমস্ত কনফিগারেশন যেমন ব্যবহার করা যেতে পারে, তবে আপনার পরিস্থিতির জন্য প্রয়োজন অনুসারে সেগুলি পরিবর্তন করুন। কনফিগারেশন বিকল্পগুলির আরও বিশদ বিবরণের জন্য, এখানে দেখুন।

  • cluster_name: স্লার্ম ক্লাস্টারের নাম
  • প্রকল্প: Google ক্লাউড প্রকল্প আইডি যেখানে সংস্থান স্থাপন করা হবে
  • জোন: Google ক্লাউড জোন যাতে এই ক্লাস্টারের কন্ট্রোলার এবং লগইন ইনস্ট্যান্স থাকবে - আরও তথ্য
  • network_name: ভার্চুয়াল প্রাইভেট ক্লাউড নেটওয়ার্ক যাতে স্লার্ম ক্লাস্টার স্থাপন করা যায়
  • subnetwork_name: ভার্চুয়াল প্রাইভেট ক্লাউড সাবনেটওয়ার্ক যাতে স্লার্ম ক্লাস্টার স্থাপন করে
  • shared_vpc_host_project: Slurm ক্লাস্টার স্থাপন করতে শেয়ার করা VPC নেটওয়ার্ক
  • disable_controller_public_ips: Slurm কন্ট্রোলারে বাহ্যিক আইপি বরাদ্দ করবেন?
  • disable_login_public_ips: Slurm লগইন নোডে বহিরাগত আইপি বরাদ্দ করবেন?
  • disable_compute_login_ips: Slurm লগইন নোডে বহিরাগত আইপি বরাদ্দ করবেন?
  • suspend_time: নোড সাসপেন্ড করার আগে একটি নোড নিষ্ক্রিয় হওয়ার পরে অপেক্ষা করার সময়
  • controller_machine_type: কন্ট্রোলার নোড ইনস্ট্যান্স টাইপ
  • controller_image: GCP ইমেজ Slurm কন্ট্রোলার ইনস্ট্যান্স তৈরি করতে ব্যবহৃত হয়
  • controller_disk_type: কন্ট্রোলার ইনস্ট্যান্স বুট ডিস্কের ধরন
  • controller_disk_size_gb: একটি কন্ট্রোলার ইনস্ট্যান্স বুট ডিস্কের আকার
  • controller_labels: কন্ট্রোলার ইনস্ট্যান্সের সাথে সংযুক্ত করার জন্য লেবেল(গুলি)
  • controller_service_account: কন্ট্রোলার ইনস্ট্যান্সে পরিষেবা অ্যাকাউন্ট ব্যবহার করা হবে
  • controller_scopes: কন্ট্রোলার ইনস্ট্যান্সের অ্যাক্সেসের সুযোগ
  • ক্লাউডএসকিউএল: কন্ট্রোলার ইনস্ট্যান্সে ডাটাবেস হোস্ট করার পরিবর্তে স্লার্ম ডাটাবেস হিসাবে ব্যবহার করার জন্য গুগল ক্লাউডএসকিউএল সার্ভার
  • server_ip: CloudSQL সার্ভার আইপি
  • ব্যবহারকারী: CloudSQL ব্যবহারকারীর নাম
  • পাসওয়ার্ড: CloudSQL পাসওয়ার্ড
  • db_name: CloudSQL ডাটাবেসের নাম
  • controller_secondary_disk: NFS সার্ভার স্টোরেজের জন্য একটি সেকেন্ডারি ডিস্ক যোগ করবেন?
  • controller_secondary_disk_type: কন্ট্রোলার সেকেন্ডারি ডিস্কের ধরন
  • controller_secondary_disk_size_gb: কন্ট্রোলার সেকেন্ডারি ডিস্কের আকার
  • controller_instance_template: GCP ইনস্ট্যান্স টেমপ্লেটটি কন্ট্রোলার ইনস্ট্যান্সের জন্য ব্যবহার করা হবে। নির্দিষ্ট করা যেকোনো গণনা ক্ষেত্র টেমপ্লেট বৈশিষ্ট্যগুলিকে ওভাররাইড করবে। যেমন কন্ট্রোলার_ইমেজ নির্দিষ্ট করা থাকলে, এটি ইনস্ট্যান্স টেমপ্লেটে ইমেজটিকে ওভাররাইট করবে।
  • login_machine_type: লগইন (SSH- অ্যাক্সেসযোগ্য) নোড ইনস্ট্যান্স টাইপ
  • login_image: GCP ইমেজ Slurm লগইন ইনস্ট্যান্স তৈরি করতে ব্যবহৃত হয়
  • login_disk_type: লগইন ইনস্ট্যান্স বুট ডিস্কের ধরন
  • login_disk_size_gb: লগইন ইনস্ট্যান্স বুট ডিস্কের আকার
  • লগইন_লেবেল: লগইন ইনস্ট্যান্সের সাথে সংযুক্ত করার জন্য লেবেল(গুলি)
  • login_node_count: তৈরি করতে লগইন নোডের সংখ্যা
  • login_node_service_account: লগইন ইনস্ট্যান্সে ব্যবহার করা পরিষেবা অ্যাকাউন্ট
  • login_node_scopes: লগইন ইনস্ট্যান্সের অ্যাক্সেসের সুযোগ
  • login_instance_template: লগইন ইনস্ট্যান্সের জন্য ব্যবহার করার জন্য GCP ইনস্ট্যান্স টেমপ্লেট । নির্দিষ্ট করা যেকোনো গণনা ক্ষেত্র টেমপ্লেট বৈশিষ্ট্যগুলিকে ওভাররাইড করবে। যেমন লগইন_ইমেজ নির্দিষ্ট করা থাকলে, এটি ইনস্ট্যান্স টেমপ্লেটে ইমেজটিকে ওভাররাইট করবে।
  • network_storage: সমস্ত নোডে মাউন্ট করার জন্য নেটওয়ার্ক স্টোরেজ। ক্ষেত্রগুলি সরাসরি fstab-এ যোগ করা হবে। অতিরিক্ত মাউন্ট জন্য পুনরাবৃত্তি করা যেতে পারে.
  • server_ip: স্টোরেজ সার্ভার আইপি
  • remote_mount: স্টোরেজ মাউন্ট নাম (ফাইল সিস্টেমের নাম)
  • local_mount: স্থানীয় মাউন্ট ডিরেক্টরি
  • fs_type: ফাইল সিস্টেমের ধরন (NFS, CIFS, Lustre, GCSFuse স্বয়ংক্রিয়ভাবে ইনস্টল করা)
  • mount_options: মাউন্ট বিকল্প (যেমন ডিফল্ট,_netdev)
  • login_network_storage: লগইন এবং কন্ট্রোলার নোডগুলিতে মাউন্ট করার জন্য নেটওয়ার্ক স্টোরেজ। NFS, CIFS, Lustre, এবং GCSFuse স্বয়ংক্রিয়ভাবে ইনস্টল হবে। অতিরিক্ত মাউন্ট জন্য পুনরাবৃত্তি করা যেতে পারে.
  • server_ip: স্টোরেজ সার্ভার আইপি
  • remote_mount: স্টোরেজ মাউন্ট নাম (ফাইল সিস্টেমের নাম)
  • local_mount: স্থানীয় মাউন্ট ডিরেক্টরি
  • fs_type: ফাইল সিস্টেমের ধরন (NFS, CIFS, Lustre, GCSFuse স্বয়ংক্রিয়ভাবে ইনস্টল করা)
  • mount_options: মাউন্ট বিকল্প (যেমন ডিফল্ট,_netdev)
  • compute_node_service_account: কম্পিউট ইনস্ট্যান্স (গুলি) এ ব্যবহার করা পরিষেবা অ্যাকাউন্ট
  • compute_node_scopes: কম্পিউট দৃষ্টান্তগুলির অ্যাক্সেসের সুযোগ
  • পার্টিশন: স্লার্ম পার্টিশন কনফিগারেশন। অতিরিক্ত পার্টিশনের জন্য পুনরাবৃত্তি করা যেতে পারে।
  • নাম: পার্টিশনের নাম
  • machine_type: গণনা নোড(গুলি) উদাহরণ টাইপ
  • static_node_count: সর্বদা চালু থাকা কম্পিউট নোডের সংখ্যা
  • max_node_count: অনুমোদিত মোট গণনা নোডের সর্বাধিক সংখ্যা - 64K সর্বোচ্চ
  • জোন: Google ক্লাউড জোন যেখানে এই পার্টিশনের সংস্থান থাকবে - আরও তথ্য
  • ইমেজ: কম্পিউট ইমেজ নোড মেশিন টাইপ
  • image_hyperthreads: উদাহরণে হাইপারথ্রেডিং চালু বা বন্ধ করুন
  • compute_disk_type : একটি কম্পিউট ইনস্ট্যান্স বুট ডিস্কের প্রকার (pd-standard, pd-ssd)
  • compute_disk_size_gb: একটি কম্পিউট ইনস্ট্যান্স বুট ডিস্কের আকার
  • compute_labels: কম্পিউট ইনস্ট্যান্সের সাথে সংযুক্ত করার জন্য লেবেল(গুলি)
  • cpu_platform: সমস্ত কম্পিউট নোডের জন্য ন্যূনতম CPU প্ল্যাটফর্ম প্রয়োজন
  • gpu_count: পার্টিশনের প্রতিটি দৃষ্টান্তের সাথে সংযুক্ত করার জন্য GPU-এর সংখ্যা
  • gpu_type: পার্টিশনের দৃষ্টান্তের সাথে সংযুক্ত করার জন্য GPU টাইপ
  • network_storage: পার্টিশনের সমস্ত কম্পিউট নোডে মাউন্ট করার জন্য নেটওয়ার্ক স্টোরেজ। ক্ষেত্রগুলি সরাসরি fstab-এ যোগ করা হবে। অতিরিক্ত মাউন্ট জন্য পুনরাবৃত্তি করা যেতে পারে.
  • server_ip: স্টোরেজ সার্ভার আইপি
  • remote_mount: স্টোরেজ মাউন্ট নাম (ফাইল সিস্টেমের নাম)
  • local_mount: স্থানীয় মাউন্ট ডিরেক্টরি
  • fs_type: ফাইল সিস্টেমের ধরন (NFS, CIFS, Lustre, GCSFuse স্বয়ংক্রিয়ভাবে ইনস্টল করা)
  • mount_options: মাউন্ট বিকল্প
  • preemptible_bursting: দৃষ্টান্তগুলি কি প্রিম্পটিবল উদাহরণ হবে?
  • vpc_subnet: ভার্চুয়াল প্রাইভেট ক্লাউড সাবনেটওয়ার্ক যাতে স্লার্ম পার্টিশন স্থাপন করা যায়
  • একচেটিয়া: কাজের জন্য সম্পূর্ণ নোড বরাদ্দ করতে Slurm সক্ষম করুন
  • enable_placement: অবস্থানের নীতিগুলি সক্রিয় করুন যেখানে দৃষ্টান্তগুলির মধ্যে কম নেটওয়ার্ক লেটেন্সির জন্য দৃষ্টান্তগুলি একে অপরের কাছাকাছি অবস্থিত হবে৷
  • আঞ্চলিক_ক্ষমতা: প্রাপ্যতার উপর ভিত্তি করে অঞ্চলের যেকোনো জোনে একটি উদাহরণ স্থাপন করার অনুমতি দিন
  • আঞ্চলিক_নীতি: যদি আঞ্চলিক_ক্ষমতা সত্য হয় তবে এই নীতিটি কোন অঞ্চল ব্যবহার করবে এবং সেই অঞ্চলের কোন অঞ্চল ব্যবহার করবে না তা নির্ধারণ করা
  • Instance_template: GCP ইনস্ট্যান্স টেমপ্লেট যা কম্পিউট দৃষ্টান্তের জন্য ব্যবহার করা হয়। নির্দিষ্ট করা যেকোনো গণনা ক্ষেত্র টেমপ্লেট বৈশিষ্ট্যগুলিকে ওভাররাইড করবে। যেমন যদি ইমেজ নির্দিষ্ট করা থাকে, তাহলে এটি ইনস্ট্যান্স টেমপ্লেটে ইমেজটিকে ওভাররাইট করবে।

উন্নত কনফিগারেশন

যদি ইচ্ছা হয় আপনি ক্লাস্টার স্থাপন প্রক্রিয়ার অংশ হিসাবে অতিরিক্ত প্যাকেজ এবং সফ্টওয়্যার ইনস্টল করতে পারেন। আপনি আপনার স্লার্ম ক্লাস্টারে আমাদের "কম্পিউট ইঞ্জিনে স্লার্ম ক্লাস্টারে অ্যাপ্লিকেশন ইনস্টল করা" বা স্লার্ম দ্বারা স্থাপন করা চিত্রটি কাস্টমাইজ করার মাধ্যমে বর্ণিত একাধিক উপায়ে সফ্টওয়্যার ইনস্টল করতে পারেন৷ বর্তমানে Slurm একটি SchedMD-প্রদত্ত VM চিত্র স্থাপন করেছে যা Google Cloud HPC VM চিত্রের উপর ভিত্তি করে, এর উপরে Slurm ইনস্টল করা আছে।

আপনার নিজের ইমেজ ব্যবহার করার জন্য, tfvars ফাইলে তালিকাভুক্ত পাবলিক SchedMD VM ইমেজের উপর ভিত্তি করে আপনার নিজস্ব কনফিগারেশনের সাথে একটি ইমেজ তৈরি করুন। এরপরে, tfvars ফাইলে নির্দিষ্ট করা URI-কে আপনার নিজের ইমেজ দিয়ে প্রতিস্থাপন করুন এবং পরিবর্তনটি পরীক্ষা করুন।

সমস্যা সমাধান

এই কোডল্যাব জুড়ে, অনুগ্রহ করে Slurm-GCP সংগ্রহস্থলের ReadMe-এর সমস্যা সমাধান বিভাগটি পড়ুন।

দেখা সবচেয়ে সাধারণ সমস্যা হল tfvars ফাইল কনফিগার করার সময় ভুল করা, এবং কোটা সীমাবদ্ধতা। এই কোডল্যাবটি একটি নতুন ব্যবহারকারীর স্ট্যান্ডার্ড কোটা বরাদ্দের মধ্যে এবং একজন নতুন ব্যবহারকারী প্রাপ্ত $300 বিনামূল্যের ক্রেডিট এর মধ্যে চালানোর জন্য ডিজাইন করা হয়েছে। VM তৈরির প্রচেষ্টা ব্যর্থ হলে, API ত্রুটিগুলি পরীক্ষা করতে কন্ট্রোলার নোডে /var/log/slurm/resume.log ফাইলটি পরীক্ষা করুন।

4. কনফিগারেশন স্থাপন এবং যাচাই করা

কনফিগারেশন স্থাপন করুন

ক্লাউড শেল সেশনে, slurm-gcp/tf/example ফোল্ডার থেকে নিম্নলিখিত কমান্ডটি চালান :

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

আপনাকে সেট করা কনফিগারেশনের উপর ভিত্তি করে বর্ণিত ক্রিয়াগুলি গ্রহণ করার জন্য অনুরোধ করা হবে। স্থাপনা শুরু করতে " হ্যাঁ " লিখুন। আপনি "টেরাফর্ম প্ল্যান" চালিয়ে মোতায়েন করা কনফিগারেশনটিও দেখতে পারেন।

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

অপারেশন সম্পূর্ণ হতে কয়েক মিনিট সময় লাগতে পারে, তাই ধৈর্য ধরুন

একবার স্থাপনা সম্পন্ন হলে আপনি অনুরূপ আউটপুট দেখতে পাবেন:

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

Outputs:

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

VM দৃষ্টান্ত নির্মাণ যাচাই করুন

নেভিগেশন মেনু খুলুন এবং কম্পিউট ইঞ্জিন > ভিএম ইনস্ট্যান্স নির্বাচন করুন।

d5832bdd527794ed.png

আপনি তালিকাভুক্ত একটি নিয়ামক এবং একটি লগইন VM উদাহরণ দেখতে হবে:

7a1fc9603758d58d.png

VM দৃষ্টান্তের অধীনে টেরাফর্ম দ্বারা তৈরি দুটি ভার্চুয়াল মেশিনের উদাহরণ পর্যালোচনা করুন।

আপনি যদি ক্লাস্টার_নাম ক্ষেত্রটি পরিবর্তন করেন তবে নামগুলি আলাদা হবে।

  • g1-নিয়ন্ত্রক
  • g1-লগইন0

5. স্লার্ম ক্লাস্টারে লগইন করুন

স্লার্ম ক্লাস্টার অ্যাক্সেস করুন

আপনার কোড এডিটর/ক্লাউড শেল ট্যাবে ফিরে যান। আপনার উদাহরণে লগইন করতে নিম্নলিখিত কমান্ডটি চালান, g1-login0 নোডের জোনের জন্য <ZONE> প্রতিস্থাপন করুন ( us-central1-b হওয়া উচিত):

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

এই কমান্ডটি আপনাকে g1-login0 ভার্চুয়াল মেশিনে লগ ইন করবে।

লগইন নোড সহজে অ্যাক্সেস করার আরেকটি পদ্ধতি হল একটি SSH সংযোগ সহ একটি নতুন ট্যাব খুলতে VM ইনস্ট্যান্স পৃষ্ঠাতে g1-login0 VM-এর পাশে "SSH" বোতামে ক্লিক করা।

8c373a87d13620f7.png

আপনি যদি প্রথমবার ক্লাউড শেল ব্যবহার করেন তবে আপনি নীচের মত একটি বার্তা দেখতে পাবেন যা আপনাকে একটি 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)?

যদি তাই হয়, Y লিখুন। যদি একটি পাসফ্রেজ নির্বাচন করার অনুরোধ করা হয়, দুবার এন্টার টিপে এটি ফাঁকা রেখে দিন।

লগইন করার সময় নিম্নলিখিত বার্তাটি উপস্থিত হলে:

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

অপেক্ষা করুন এবং ল্যাবের সাথে এগিয়ে যাবেন না যতক্ষণ না আপনি এই বার্তাটি দেখতে পাচ্ছেন (প্রায় 5 মিনিট):

*** Slurm login setup complete ***

একবার আপনি উপরের বার্তাটি দেখতে পেলে, আপনাকে লগ আউট করতে হবে এবং ল্যাব চালিয়ে যেতে g1-login0 এ আবার লগ ইন করতে হবে। এটি করতে, কাজটি শেষ করতে CTRL + C টিপুন।

তারপরে আপনার উদাহরণের লগআউট কমান্ডটি চালান:

exit

এখন, আপনার লগইন VM-এ পুনরায় সংযোগ করুন। g1-login0 নোডের জোনের জন্য <ZONE> প্রতিস্থাপন করে আপনার উদাহরণে লগইন করতে নিম্নলিখিত কমান্ডটি চালান:

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

উপরের মত, আপনি সংযোগ করতে সক্ষম হওয়ার আগে এবং সেটআপের সমস্ত দিক সম্পূর্ণ হওয়ার আগে আপনাকে এক বা দুই মিনিট অপেক্ষা করতে হতে পারে।

স্লার্ম সিএলআই টুলস ভ্রমণ

আপনি এখন আপনার ক্লাস্টারের স্লার্ম লগইন নোডে লগ ইন করেছেন। এটি সেই নোড যা ব্যবহারকারী/প্রশাসক মিথস্ক্রিয়া, স্লার্ম কাজের সময় নির্ধারণ এবং প্রশাসনিক কার্যকলাপের জন্য নিবেদিত।

Slurm কমান্ড লাইনের সাথে আপনাকে পরিচয় করিয়ে দিতে কয়েকটি কমান্ড চালাই।

আমাদের ক্লাস্টারের সংস্থানগুলির অবস্থা দেখতে sinfo কমান্ডটি চালান:

sinfo

sinfo এর নমুনা আউটপুট নীচে প্রদর্শিত হবে. sinfo ক্লাস্টারে উপলব্ধ নোডগুলি, সেই নোডগুলির অবস্থা এবং অন্যান্য তথ্য যেমন পার্টিশন, প্রাপ্যতা এবং সেই নোডগুলিতে আরোপিত যে কোনও সময়ের সীমাবদ্ধতা রিপোর্ট করে।

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

আপনি দেখতে পাচ্ছেন আমাদের 10টি নোড, ডিবাগ পার্টিশনের 10-এর "max_node_count" দ্বারা নির্দেশিত, "নিষ্ক্রিয়~" হিসাবে চিহ্নিত করা হয়েছে (নোডটি একটি নিষ্ক্রিয় এবং অ-বরাদ্দ মোডে রয়েছে, যা কাটার জন্য প্রস্তুত)।

এরপরে, আমাদের ক্লাস্টারের সারির অবস্থা দেখতে squeue কমান্ডটি চালান:

squeue

স্ক্যুয়ের প্রত্যাশিত আউটপুট নীচে প্রদর্শিত হবে। squeue একটি ক্লাস্টারের জন্য সারির অবস্থা রিপোর্ট করে। এর মধ্যে রয়েছে ক্লাস্টারে নির্ধারিত প্রতিটি কাজের প্রতিটি কাজের আইডি, কাজটি যে পার্টিশনে নিয়োগ করা হয়েছে, কাজের নাম, যে ব্যবহারকারী কাজটি চালু করেছেন, কাজের অবস্থা, কাজটি চলার সময় দেওয়াল ঘড়ি। , এবং নোড যে কাজ বরাদ্দ করা হয়. আমাদের কোনো কাজ চলছে না, তাই এই কমান্ডের বিষয়বস্তু খালি।

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

Slurm কমান্ড "srun" এবং "sbatch" সারিতে রাখা কাজগুলি চালানোর জন্য ব্যবহৃত হয়। "srun" সমান্তরাল কাজ চালায়, এবং mpirun এর জন্য একটি মোড়ক হিসাবে ব্যবহার করা যেতে পারে। "sbatch" স্লর্মে একটি ব্যাচের কাজ জমা দিতে ব্যবহৃত হয় এবং বিভিন্ন কনফিগারেশনে একবার বা বহুবার srun কল করতে পারে। "sbatch" ব্যাচ স্ক্রিপ্ট নিতে পারে, অথবা কমান্ড লাইন থেকে পুরো কাজ চালানোর জন্য –wrap বিকল্পের সাথে ব্যবহার করা যেতে পারে।

আসুন একটি কাজ চালাই যাতে আমরা স্লার্মকে কাজ করে দেখতে পারি এবং আমাদের সারিতে একটি চাকরি পেতে পারি!

6. একটি স্লার্ম কাজ চালান এবং ক্লাস্টার স্কেল করুন

একটি স্লার্ম কাজ চালান এবং ক্লাস্টার স্কেল করুন

এখন যেহেতু আমাদের স্লার্ম ক্লাস্টার চলছে, আসুন একটি কাজ চালাই এবং আমাদের ক্লাস্টারকে স্কেল করি।

"sbatch" কমান্ডটি Slurm ব্যাচ কমান্ড এবং স্ক্রিপ্ট চালানোর জন্য ব্যবহৃত হয়। আসুন একটি সাধারণ sbatch স্ক্রিপ্ট রান করি যা আমাদের স্বয়ংক্রিয়-স্কেল করা VM-এ "হোস্টনাম" চালাবে।

g1-login0 এ লগ ইন করার সময়, নিম্নলিখিত কমান্ডটি চালান:

sbatch -N2 --wrap="srun hostname"

এই কমান্ডটি Slurm ব্যাচ কমান্ড চালায়। এটি নির্দিষ্ট করে যে sbatch "-N" বিকল্পের সাথে 2টি নোড চালাবে। এটি আরও নির্দিষ্ট করে যে এই নোডগুলির প্রতিটি "–wrap" বিকল্পে একটি "srun hostname" কমান্ড চালাবে।

ডিফল্টরূপে, sbatch এটির আউটপুট "slurm-%j.out"-এ লিখবে ওয়ার্কিং ডিরেক্টরীতে যে কমান্ডটি থেকে চালানো হয়, যেখানে Slurm ফাইলের নাম প্যাটার্ন অনুসারে %j-কে জব আইডির জন্য প্রতিস্থাপিত করা হয়। আমাদের উদাহরণে sbatch ব্যবহারকারীর /home ফোল্ডার থেকে চালানো হচ্ছে, যা ডিফল্টরূপে কন্ট্রোলারে হোস্ট করা একটি NFS-ভিত্তিক শেয়ার্ড ফাইল সিস্টেম। এটি কম্পিউট নোডকে ইনপুট এবং আউটপুট ডেটা ভাগ করার অনুমতি দেয় যদি ইচ্ছা হয়। একটি উত্পাদন পরিবেশে, ক্লাস্টার অপারেশনে কর্মক্ষমতা প্রভাব এড়াতে কাজের স্টোরেজ /হোম স্টোরেজ থেকে আলাদা হওয়া উচিত। পৃথক স্টোরেজ মাউন্টগুলি "network_storage" বিকল্পগুলির মধ্যে tfvars ফাইলে নির্দিষ্ট করা যেতে পারে।

sbatch কমান্ড লাইন ব্যবহার করে sbatch স্ক্রিপ্ট চালানোর পরে এটি নির্ধারিত কাজের জন্য একটি কাজের আইডি ফেরত দেবে, উদাহরণস্বরূপ:

Submitted batch job 2

আমরা কাজ সম্পাদন এবং সংস্থানগুলি ট্র্যাক এবং পরিচালনা করতে sbatch কমান্ড দ্বারা ফিরে আসা জব আইডি ব্যবহার করতে পারি। Slurm কাজের সারি দেখতে নিম্নলিখিত কমান্ডটি চালান :

squeue

আপনি সম্ভবত নীচের মত তালিকাভুক্ত কাজ আপনি সম্পাদিত কাজ দেখতে পাবেন:

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]

যেহেতু আমাদের কোনো কম্পিউট নোডের ব্যবস্থা করা হয়নি, তাই Slurm স্বয়ংক্রিয়ভাবে কাজের প্রয়োজনীয়তা অনুযায়ী কম্পিউট দৃষ্টান্ত তৈরি করবে। এই প্রক্রিয়ার স্বয়ংক্রিয় প্রকৃতির দুটি সুবিধা রয়েছে। প্রথমত, এটি ম্যানুয়ালি প্রভিশনিং নোড, সফ্টওয়্যার কনফিগার করা, নোডকে ক্লাস্টারে একীভূত করা এবং তারপর কাজটি স্থাপন করার জন্য HPC ক্লাস্টারে প্রয়োজনীয় কাজগুলিকে সরিয়ে দেয়। দ্বিতীয়ত, এটি ব্যবহারকারীদের অর্থ সঞ্চয় করতে দেয় কারণ নিষ্ক্রিয়, অব্যবহৃত নোডগুলি ন্যূনতম সংখ্যক নোড চালু না হওয়া পর্যন্ত ছোট করা হয়।

স্লার্ম ক্লাস্টার স্পিনিং আপ দেখতে আপনি sinfo কমান্ডটি চালাতে পারেন:

sinfo

এটি "alloc#" অবস্থায় সারিতে তালিকাভুক্ত নোডগুলি দেখাবে, যার অর্থ নোডগুলি বরাদ্দ করা হচ্ছে:

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]

নতুন প্রভিশন করা নোডগুলি দেখতে আপনি Google ক্লাউড কনসোলে VM দৃষ্টান্ত বিভাগটিও পরীক্ষা করতে পারেন। নতুন বরাদ্দকৃত নোডগুলিতে কাজ বরাদ্দ হওয়ার আগে নোডগুলিকে ঘুরতে এবং স্লার্ম চালু করতে কয়েক মিনিট সময় লাগবে। আপনার VM দৃষ্টান্ত তালিকা শীঘ্রই নিম্নলিখিত অনুরূপ হবে:

9997efff595f1e.png

একবার নোডগুলি কাজ চালালে উদাহরণগুলি একটি "অ্যালোক" অবস্থায় চলে যাবে, যার অর্থ চাকরিগুলি একটি কাজের জন্য বরাদ্দ করা হয়েছে:

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]

একবার একটি কাজ সম্পূর্ণ হলে, এটি আর সারিতে তালিকাভুক্ত হবে না, এবং sinfo-এর "অ্যালোক" নোডগুলি "নিষ্ক্রিয়" অবস্থায় ফিরে আসবে। কাজটি শেষ না হওয়া পর্যন্ত, এক বা দুই মিনিট পর পর্যায়ক্রমে "স্ক্যু" চালান।

আউটপুট ফাইল slurm-%j.out আপনার NFS-shared /home ফোল্ডারে লেখা হবে, এবং হোস্টনাম থাকবে। আউটপুট ফাইলটি খুলুন বা বিড়াল করুন (সাধারণত slurm-2.out), এতে আউটপুট ফাইলের বিষয়বস্তু থাকবে:

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

দুর্দান্ত কাজ, আপনি একটি কাজ চালিয়েছেন এবং আপনার স্লার্ম ক্লাস্টারকে স্কেল করেছেন!

7. একটি MPI কাজ চালান

এখন আমাদের নোড জুড়ে একটি MPI কাজ চালানো যাক. g1-login0 এ লগ ইন করার সময়, সি প্রোগ্রামিং ভাষায় লেখা একটি MPI প্রোগ্রাম ডাউনলোড করতে wget ব্যবহার করুন:

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

OpenMPI টুলগুলি ব্যবহার করার জন্য আপনাকে এই কমান্ডটি চালিয়ে OpenMPI মডিউলগুলি লোড করতে হবে:

module load openmpi

আমরা MPI C কোড কম্পাইল করতে "mpicc" টুল ব্যবহার করব। নিম্নলিখিত কমান্ডটি চালান:

mpicc mpi_hello_world.c -o mpi_hello_world

এটি আমাদের C কোডকে মেশিন কোডে কম্পাইল করে যাতে আমরা Slurm এর মাধ্যমে আমাদের ক্লাস্টার জুড়ে কোড চালাতে পারি।

এরপর, " helloworld_batch " নামে একটি sbatch স্ক্রিপ্ট তৈরি করতে আপনার পছন্দের পাঠ্য সম্পাদক ব্যবহার করুন:

vi helloworld_batch

vi সন্নিবেশ মোডে প্রবেশ করতে i টাইপ করুন।

একটি সাধারণ sbatch স্ক্রিপ্ট তৈরি করতে ফাইলটিতে নিম্নলিখিত পাঠ্যটি অনুলিপি করুন এবং আটকান :

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

srun mpi_hello_world

এস্কেপ টিপে এবং উদ্ধৃতি ছাড়াই ":wq" টাইপ করে কোড এডিটর সংরক্ষণ করুন এবং প্রস্থান করুন।

এই স্ক্রিপ্টটি স্লার্ম ব্যাচ কার্যকর করার পরিবেশ এবং কাজগুলিকে সংজ্ঞায়িত করে। প্রথমত, মৃত্যুদন্ড পরিবেশন ব্যাশ হিসাবে সংজ্ঞায়িত করা হয়। এরপরে, স্ক্রিপ্টটি প্রথমে "#SBATCH" লাইন দিয়ে স্লার্ম বিকল্পগুলিকে সংজ্ঞায়িত করে৷ কাজের নামটি "হ্যালো_ওয়ার্ল্ড" হিসাবে সংজ্ঞায়িত করা হয়েছে।

আউটপুট ফাইলটি "hello_world_%j.out" হিসাবে সেট করা হয়েছে যেখানে Slurm ফাইলের নাম প্যাটার্নস অনুসারে কাজের আইডির জন্য %j প্রতিস্থাপিত হয়েছে। এই আউটপুট ফাইলটি ডাইরেক্টরিতে লেখা হয় যেটি থেকে sbatch স্ক্রিপ্ট চালানো হয়। আমাদের উদাহরণে এটি ব্যবহারকারীর /home ফোল্ডার, যা একটি NFS-ভিত্তিক শেয়ার্ড ফাইল সিস্টেম। এটি কম্পিউট নোডকে ইনপুট এবং আউটপুট ডেটা ভাগ করার অনুমতি দেয় যদি ইচ্ছা হয়। একটি উত্পাদন পরিবেশে, ক্লাস্টার অপারেশনে কর্মক্ষমতা প্রভাব এড়াতে কাজের স্টোরেজ /হোম স্টোরেজ থেকে আলাদা হওয়া উচিত।

অবশেষে, এই স্ক্রিপ্টটি চালানো উচিত নোডের সংখ্যা 2 হিসাবে সংজ্ঞায়িত করা হয়।

বিকল্পগুলি সংজ্ঞায়িত করার পরে এক্সিকিউটেবল কমান্ডগুলি প্রদান করা হয়। এই স্ক্রিপ্টটি srun কমান্ড ব্যবহার করে সমান্তরালভাবে mpi_hello_world কোড চালাবে, যা mpirun কমান্ডের ড্রপ-ইন প্রতিস্থাপন।

তারপর sbatch কমান্ড লাইন ব্যবহার করে sbatch স্ক্রিপ্টটি চালান:

sbatch helloworld_batch

চলমান sbatch নির্ধারিত কাজের জন্য একটি কাজের আইডি ফেরত দেবে, উদাহরণস্বরূপ:

Submitted batch job 3

এটি 2টি নোড জুড়ে হোস্টনেম কমান্ড চালাবে, প্রতি নোডের একটি কাজ সহ, সেইসাথে hello_world-3.out ফাইলে আউটপুট প্রিন্ট করা হবে।

যেহেতু আমাদের 2টি নোড ইতিমধ্যেই প্রভিশন করা হয়েছে এই কাজটি দ্রুত চলবে।

কাজটি সম্পূর্ণ না হওয়া পর্যন্ত এবং তালিকাভুক্ত না হওয়া পর্যন্ত স্ক্যুই পর্যবেক্ষণ করুন:

squeue

একবার সম্পূর্ণ হয়ে গেলে hello_world-3.out ফাইলটি খুলুন বা ক্যাট করুন এবং নিশ্চিত করুন যে এটি 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

5 মিনিট নিষ্ক্রিয় থাকার পরে (YAML এর suspend_time ক্ষেত্র বা slurm.conf এর সাসপেন্ডটাইম ক্ষেত্রের সাথে কনফিগারযোগ্য) গতিশীলভাবে প্রবিধান করা কম্পিউট নোডগুলি রিলিজ রিলিজ করার জন্য ডি-অ্যালোকেট করা হবে। আপনি পর্যায়ক্রমে sinfo চালনা করে এবং ক্লাস্টারের আকার 0-এ ফিরে যাওয়া পর্যবেক্ষণ করে এটি যাচাই করতে পারেন:

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

আপনি যে অঞ্চলে ক্লাস্টার স্থাপন করেছেন সেখানে আপনার অনুমোদিত কোটা পর্যন্ত, এবং বিভিন্ন MPI অ্যাপ্লিকেশন চালানোর চেষ্টা করুন।

8. উপসংহার

অভিনন্দন, আপনি Google ক্লাউড প্ল্যাটফর্মে একটি স্লর্ম ক্লাস্টার তৈরি করেছেন এবং কাজের চাপের চাহিদা মেটাতে আপনার ক্লাস্টারকে স্বতঃ-স্কেল করতে এর সর্বশেষ বৈশিষ্ট্যগুলি ব্যবহার করেছেন! আপনি যেকোন ধরণের কাজ চালানোর জন্য এই মডেলটি ব্যবহার করতে পারেন এবং এটি স্লার্মে নোডগুলিকে অনুরোধ করার মাধ্যমে কয়েক মিনিটের মধ্যে স্কেল করে।

আপনি যদি GCP-তে Slurm ব্যবহার করা শেখা চালিয়ে যেতে চান, তাহলে " Building Federated HPC Clusters with Slurm " কোডল্যাব চালিয়ে যেতে ভুলবেন না। এই কোডল্যাবটি আপনাকে ক্লাউডে দুটি ফেডারেটেড স্লার্ম ক্লাস্টার সেট আপ করার মাধ্যমে গাইড করবে, আপনি কীভাবে একটি মাল্টি-ক্লাস্টার ফেডারেশন অর্জন করতে পারেন তা উপস্থাপন করতে, প্রিমাইজে বা ক্লাউডে।

আপনি কি স্লর্মের নতুন জিসিপি-নেটিভ কার্যকারিতা ব্যবহার করে দুর্দান্ত কিছু তৈরি করছেন? প্রশ্ন আছে? একটি বৈশিষ্ট্য পরামর্শ আছে? Google ক্লাউডের হাই পারফরম্যান্স কম্পিউটিং সলিউশন ওয়েবসাইটের মাধ্যমে আজই Google ক্লাউড টিমের সাথে যোগাযোগ করুন, অথবা Google ক্লাউড এবং স্লার্ম আলোচনা গোষ্ঠীতে আমাদের সাথে চ্যাট করুন!

টেরাফর্ম স্থাপনা পরিষ্কার করুন

স্লার্ম নোড থেকে লগআউট:

exit

স্থাপনা মুছে ফেলার আগে যেকোনো স্বয়ংক্রিয়-স্কেল করা নোডকে স্কেল করতে দিন। আপনি প্রতিটি উদাহরণের জন্য "gcloud compute instances delete <Instance Name>" চালানোর মাধ্যমে অথবা একাধিক নোড নির্বাচন করতে এবং "মুছুন" এ ক্লিক করে কনসোল GUI ব্যবহার করে নিজেও এই নোডগুলি মুছতে পারেন।

আমরা আপনার Google ক্লাউড শেল থেকে নিম্নোক্ত কমান্ডটি কার্যকর করার পরে, g1-login0 থেকে লগ আউট করার পরে আপনি সহজেই Terraform স্থাপনা পরিষ্কার করতে পারেন:

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

অনুরোধ করা হলে, চালিয়ে যেতে হ্যাঁ টাইপ করুন। এই অপারেশনটি কয়েক মিনিট সময় নিতে পারে, দয়া করে ধৈর্য ধরুন।

প্রকল্পটি মুছুন

পরিষ্কার করতে, আমরা কেবল আমাদের প্রকল্প মুছে ফেলি।

  • নেভিগেশন মেনুতে IAM এবং অ্যাডমিন নির্বাচন করুন
  • তারপর সাবমেনুতে সেটিংসে ক্লিক করুন
  • "প্রজেক্ট মুছুন" পাঠ্য সহ ট্র্যাশক্যান আইকনে ক্লিক করুন
  • প্রম্পট নির্দেশাবলী অনুসরণ করুন

আমরা কভার করেছি কি

  • টেরাফর্ম ব্যবহার করে জিসিপিতে কীভাবে স্লার্ম স্থাপন করবেন।
  • জিসিপিতে স্লার্ম ব্যবহার করে কীভাবে চাকরি চালানো যায়।
  • কীভাবে ক্লাস্টারের তথ্য জিজ্ঞাসা করবেন এবং স্লার্মে চলমান কাজগুলি নিরীক্ষণ করবেন।
  • নির্দিষ্ট কাজের পরামিতি এবং প্রয়োজনীয়তা মিটমাট করার জন্য GCP-তে Slurm সহ নোডগুলি কীভাবে অটোস্কেল করবেন।
  • GCP-তে Slurm-এ MPI অ্যাপ্লিকেশনগুলি কীভাবে কম্পাইল এবং চালানো যায়।

Slurm সমর্থন খুঁজুন

আপনার যদি পরীক্ষা বা উৎপাদন পরিবেশে এই ইন্টিগ্রেশনগুলি ব্যবহার করে সহায়তার প্রয়োজন হয় তাহলে অনুগ্রহ করে সরাসরি SchedMD-এর সাথে যোগাযোগ করুন তাদের যোগাযোগ পৃষ্ঠাটি ব্যবহার করে এখানে: https://www.schedmd.com/contact.php

আপনি উপলব্ধ ট্রাবলশুটিং গাইডগুলিও ব্যবহার করতে পারেন:

অবশেষে, আপনি এখানে পাওয়া Google ক্লাউড এবং স্লার্ম আলোচনা গোষ্ঠীতে আপনার প্রশ্ন পোস্ট করতে পারেন: https://groups.google.com/g/google-cloud-slurm-discuss

আরও জানুন

প্রতিক্রিয়া

এই লিঙ্কটি ব্যবহার করে এই কোডল্যাব সম্পর্কে প্রতিক্রিয়া জমা দিন। প্রতিক্রিয়া সম্পূর্ণ হতে 5 মিনিটেরও কম সময় নেয়। ধন্যবাদ!