GKE এবং Managed Lustre ব্যবহার করে রিইনফোর্সমেন্ট লার্নিং স্কেল করুন

১. ভূমিকা

আপনি যদি ধাপে ধাপে টিউটোরিয়ালটি ছাড়াই সরাসরি প্যাকেজ করা স্ক্রিপ্টগুলো চালাতে চান, তাহলে সেগুলো GoogleCloudPlatform/devrel-demos রিপোজিটরিতে খুঁজে পাবেন।

এই কোডল্যাবে, আপনি শিখবেন কিভাবে গুগল কুবারনেটিস ইঞ্জিন (GKE) এবং ম্যানেজড লাস্টার ব্যবহার করে রিইনফোর্সমেন্ট লার্নিং (RL)-এর জন্য একটি উচ্চ-পারফরম্যান্স প্রশিক্ষণ পাইপলাইন স্থাপন করতে হয়।

রিইনফোর্সমেন্ট লার্নিং ওয়ার্কলোড, বিশেষ করে যেগুলো গ্রুপ রিলেটিভ পলিসি অপটিমাইজেশন (GRPO)-এর মতো অ্যালগরিদম ব্যবহার করে, সেগুলো "এক্সপেরিয়েন্স জেনারেশন" চলাকালীন বিপুল পরিমাণ ডেটা তৈরি করে এবং ঘন ঘন চেকপয়েন্টিংয়ের প্রয়োজন হয়। এই I/O প্রবাহের সময় স্ট্যান্ডার্ড অবজেক্ট স্টোরেজ প্রতিবন্ধকতা সৃষ্টি করতে পারে, যার ফলে ব্যয়বহুল অ্যাক্সিলারেটরগুলো নিষ্ক্রিয় হয়ে পড়ে।

এই প্রতিবন্ধকতাগুলো দূর করতে এবং প্রশিক্ষণের উচ্চতর থ্রুপুট অর্জন করতে আপনি ম্যানেজড লাস্টার (Managed Lustre) নামক একটি প্যারালাল ফাইল সিস্টেম ব্যবহার করবেন।

আপনি যা করবেন

  • GPU-ভিত্তিক Ray ক্লাস্টারের জন্য এনভায়রনমেন্ট ভেরিয়েবল কনফিগার করুন।
  • ক্লাস্টার টুলকিট ব্যবহার করে GKE-তে একটি স্পট জিপিইউ ক্লাস্টার এবং একটি ম্যানেজড লাস্টার ইনস্ট্যান্স প্রোভিশন করুন।
  • একটি KubeRay ক্লাস্টার স্থাপন করুন এবং Lustre ফাইলসিস্টেমটি মাউন্ট করুন।
  • একটি NeMo-RL প্রশিক্ষণ ওয়ার্কলোড জমা দিন।
  • ক্লাউড মনিটরিং ব্যবহার করে উচ্চ থ্রুপুট এবং কম চেকপয়েন্ট ল্যাটেন্সি পর্যবেক্ষণ করুন ।

GKE, KubeRay, এবং Managed Lustre-এর আর্কিটেকচার ডায়াগ্রাম

আপনার যা যা লাগবে

  • ক্রোমের মতো একটি ওয়েব ব্রাউজার।
  • বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট।

এই কোডল্যাবটি উন্নত প্রযুক্তি ব্যবহারকারী, প্ল্যাটফর্ম ইঞ্জিনিয়ার এবং এআই গবেষকদের জন্য, যারা GKE এবং স্টোরেজ ধারণাগুলির সাথে পরিচিত।

আনুমানিক মোট সময়কাল: ৪৫ থেকে ৬০ মিনিট এবং এর সাথে ২ ঘণ্টার প্রশিক্ষণের সময়

২. শুরু করার আগে

একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন

  1. গুগল ক্লাউড কনসোলে , একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন ।
  2. আপনার ক্লাউড প্রজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন।

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

ক্লাউড শেল হলো গুগল ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ, যা প্রয়োজনীয় টুলস সহ আগে থেকেই লোড করা থাকে।

  1. Google Cloud কনসোলের শীর্ষে থাকা Activate Cloud Shell-এ ক্লিক করুন।
  2. ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনার প্রমাণীকরণ যাচাই করুন:
    gcloud auth list
    
  3. আপনার প্রজেক্টটি কনফিগার করা হয়েছে কিনা তা নিশ্চিত করুন:
    gcloud config get project
    
  4. আপনার প্রজেক্টটি প্রত্যাশা অনুযায়ী সেট করা না থাকলে, এটি সেট করুন:
    export PROJECT_ID=<YOUR_PROJECT_ID>
    gcloud config set project $PROJECT_ID
    

ক্লাস্টার টুলকিট ইনস্টল করুন

এই কোডল্যাবে GKE ক্লাস্টার ডেপ্লয় করার জন্য ক্লাস্টার টুলকিট ( gcluster ) ব্যবহার করা হয়েছে। ক্লাস্টার টুলকিট কীভাবে সেট আপ করতে হয়, তার নির্দেশাবলীর জন্য ক্লাস্টার টুলকিট সেটআপ গাইডটি দেখুন।

এপিআই সক্ষম করুন

প্রয়োজনীয় সকল API সক্রিয় করতে ক্লাউড শেলে এই কমান্ডটি চালান:

gcloud services enable \
  container.googleapis.com \
  lustre.googleapis.com \
  compute.googleapis.com \
  servicenetworking.googleapis.com

৩. পরিবেশ ভেরিয়েবল কনফিগার করুন

এই কোডল্যাবের কমান্ডগুলো সামঞ্জস্যপূর্ণ রাখতে কয়েকটি এনভায়রনমেন্ট ভেরিয়েবল সেট করুন।

env.sh নামে একটি ফাইল তৈরি করুন এবং আপনার কনফিগারেশন দিয়ে তা পূরণ করুন। আপনি নিম্নলিখিত টেমপ্লেটটি ব্যবহার করতে পারেন:

# Environment Variables for the RL Demo execution
export PROJECT_ID="{{'<var>'}}PROJECT_ID{{'</var>'}}"
export ZONE="us-east1-b"
export REGION="us-east1"
export CLUSTER_NAME="ray-a4-gpu-spot"
export HF_TOKEN="{{'<var>'}}YOUR_HF_TOKEN{{'</var>'}}" # Required for downloading models
export WANDB_API_KEY="{{'<var>'}}YOUR_WANDB_API_KEY{{'</var>'}}" # Optional

# Topology defaults
export NUM_NODES="8"
export GPUS_PER_NODE="8" # Fixed for A4/B200 architecture

<YOUR_PROJECT_ID> এবং <YOUR_HF_TOKEN>-এর জায়গায় আপনার প্রকৃত মানগুলো বসান।

আপনার বর্তমান সেশনে ভেরিয়েবলগুলো লোড করতে ফাইলটি সোর্স করুন:

source env.sh

৪. ক্লাস্টার টুলকিট ব্যবহার করে GKE ক্লাস্টার এবং ম্যানেজড লাস্টার স্থাপন করুন

এই ধাপে, আপনি ক্লাস্টার টুলকিট ( gcluster ) ব্যবহার করে স্পট জিপিইউ (Spot GPU) সহ একটি জিকেই (GKE) ক্লাস্টার স্থাপন করেন এবং লাস্টার সিএসআই (Lustre CSI) ড্রাইভার ও পূর্ব-কনফিগার করা পারসিস্টেন্ট ভলিউম ক্লেইম ( lustre-pvc ) সহ ম্যানেজড লাস্টার স্টোরেজ স্বয়ংক্রিয়ভাবে প্রোভিশন করেন।

ব্লুপ্রিন্ট প্রস্তুত করুন

স্থাপন করার আগে, examples/gke-a4/gke-a4.yaml ব্লুপ্রিন্টটি পর্যালোচনা করুন (বিস্তারিত জানার জন্য, Create an A4 cluster দেখুন):

  1. ম্যানেজড লাস্টার সক্রিয় করুন : gke-a4.yaml ফাইলে managed-lustre এবং lustre-pvc মডিউল সেকশনগুলো আনকমেন্ট করুন।
  2. RayOperator অ্যাড-অন সক্রিয় করুন : gke-a4.yaml ফাইলে gke_cluster মডিউল সেটিংসে enable_ray_operator: true সেট করুন।

পরিকাঠামো স্থাপন করুন

ক্লাউড শেল অ্যাক্সেসের জন্য আপনার অনুমোদিত CIDR সেট করুন এবং gcluster deploy ব্যবহার করে ডিপ্লয় করুন:

export AUTHORIZED_CIDR="$(curl -s ifconfig.me)/32"

gcluster deploy examples/gke-a4/gke-a4.yaml \
  --vars project_id=${PROJECT_ID},deployment_name=${CLUSTER_NAME},region=${REGION},zone=${ZONE},static_node_count=${NUM_NODES},authorized_cidr=${AUTHORIZED_CIDR},spot=true

ডেপ্লয়মেন্ট সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন। ক্লাস্টার টুলকিট একটি সমন্বিত ডেপ্লয়মেন্টের মাধ্যমে স্বয়ংক্রিয়ভাবে ভিপিসি নেটওয়ার্ক, প্রাইভেট সার্ভিস অ্যাক্সেস (পিএসএ) পিয়ারিং, ম্যানেজড লাস্টার ফাইলসিস্টেম, লাস্টার সিএসআই ড্রাইভার, রেঅপারেটর অ্যাড-অন এবং কুবারনেটিস স্টোরেজ ক্লেইম ( lustre-pvc ) প্রোভিশন করে।

৫. GKE-তে রে ক্লাস্টার স্থাপন করুন

এই ধাপে, আপনি আপনার GKE নোডগুলিতে একটি KubeRay ক্লাস্টার স্থাপন করবেন এবং ক্লাস্টার টুলকিট দ্বারা স্বয়ংক্রিয়ভাবে সরবরাহ করা PersistentVolumeClaim ( lustre-pvc ) ব্যবহার করে Lustre ফাইলসিস্টেম মাউন্ট করবেন।

রেক্লাস্টার কনফিগারেশন তৈরি করুন

ray-cluster.yaml নামে একটি ফাইল তৈরি করুন। এটি KubeRay হেড এবং ওয়ার্কার নোডগুলিকে নির্দিষ্ট করে, যেখানে nvidia-b200 অ্যাক্সিলারেটর টাইপ ব্যবহৃত হয় এবং Lustre ভলিউমটি /lustre এ মাউন্ট করা হয়।

cat << EOF > ray-cluster.yaml
apiVersion: ray.io/v1
kind: RayCluster
metadata:
  name: ${CLUSTER_NAME}
  namespace: default
spec:
  rayVersion: '2.54.0'
  headGroupSpec:
    rayStartParams:
      dashboard-host: '0.0.0.0'
    template:
      spec:
        nodeSelector:
          cloud.google.com/gke-accelerator: nvidia-b200
        tolerations:
        - key: "nvidia.com/gpu"
          operator: "Exists"
          effect: "NoSchedule"
        containers:
        - name: ray-head
          image: nvcr.io/nvidia/nemo-rl:v0.4.0
          ports:
          - containerPort: 6379
            name: gcs-server
          - containerPort: 8265
            name: dashboard
          - containerPort: 10001
            name: client
          resources:
            limits:
              cpu: "32"
              memory: "1000Gi"
            requests:
              cpu: "8"
              memory: "64Gi"
          volumeMounts:
          - mountPath: /lustre
            name: lustre-storage
        volumes:
        - name: lustre-storage
          persistentVolumeClaim:
            claimName: lustre-pvc
  workerGroupSpecs:
  - groupName: gpu-worker-group
    replicas: ${NUM_NODES}
    minReplicas: ${NUM_NODES}
    maxReplicas: ${NUM_NODES}
    rayStartParams: {}
    template:
      spec:
        nodeSelector:
          cloud.google.com/gke-accelerator: nvidia-b200
        tolerations:
        - key: "nvidia.com/gpu"
          operator: "Exists"
          effect: "NoSchedule"
        containers:
        - name: ray-worker
          image: nvcr.io/nvidia/nemo-rl:v0.4.0
          resources:
            limits:
              nvidia.com/gpu: "8"
              cpu: "100"
              memory: "1000Gi"
            requests:
              nvidia.com/gpu: "8"
              cpu: "100"
              memory: "1000Gi"
          volumeMounts:
          - mountPath: /lustre
            name: lustre-storage
          - mountPath: /dev/shm
            name: dshm
        volumes:
        - name: lustre-storage
          persistentVolumeClaim:
            claimName: lustre-pvc
        - name: dshm
          emptyDir:
            medium: Memory
EOF

ক্লাস্টারের সাথে সংযোগ করুন

আপনার ক্লাউড শেল সেশনটি আপনার GKE ক্লাস্টারে প্রমাণীকৃত আছে কিনা তা নিশ্চিত করুন:

gcloud container clusters get-credentials ${CLUSTER_NAME} \
  --region ${REGION} \
  --project ${PROJECT_ID}

রেক্লাস্টার কনফিগারেশন প্রয়োগ করুন

রে ক্লাস্টার কনফিগারেশন প্রয়োগ করুন:

kubectl apply -f ray-cluster.yaml

ক্লাস্টারের অবস্থা যাচাই করুন

পডগুলো তৈরি হওয়া পর্যবেক্ষণ করুন:

kubectl get pods -w

হেড এবং ওয়ার্কার পডগুলো Running হওয়া পর্যন্ত অপেক্ষা করুন।

৬. রিইনফোর্সমেন্ট লার্নিং ওয়ার্কলোড জমা দিন

এই ধাপে, আপনি আপনার Ray ক্লাস্টারে NeMo-RL GRPO ট্রেনিং জবটি সাবমিট করবেন।

রে ড্যাশবোর্ডে সংযোগ করুন

জব জমা দিতে এবং মেট্রিক্স দেখতে, আপনাকে রে ড্যাশবোর্ডে সংযোগ করতে হবে। যেহেতু ড্যাশবোর্ডটি GKE-তে রয়েছে, ক্লাউড শেল থেকে এটি অ্যাক্সেস করার জন্য পোর্ট-ফরওয়ার্ডিং ব্যবহার করুন:

# Run this in a separate Cloud Shell tab or in the background
kubectl port-forward service/${CLUSTER_NAME}-head-svc 8265:8265 &

এক্সিকিউশন স্ক্রিপ্ট তৈরি করুন

run_nemo_rl.sh নামে একটি ফাইল তৈরি করুন। এই স্ক্রিপ্টটি Ray ক্লাস্টারের ওয়ার্কারদের উপর চালানো হবে। আপনার আগে সেট করা এনভায়রনমেন্ট ভেরিয়েবলগুলো পূরণ করার জন্য আমরা cat << EOF ব্যবহার করি।

cat << EOF > run_nemo_rl.sh
#!/bin/bash
set -ex

# Override job runtime conflicts (NeMo-RL passes os.environ to ray.init)
export RAY_OVERRIDE_JOB_RUNTIME_ENV=1

echo "--- Running on Ray Cluster ---"
cd /opt/nemo-rl

# Ensure directories exist on the high-speed Lustre drive
mkdir -p /lustre/huggingface_cache
mkdir -p /lustre/nemo_rl_qwen_72b_ds_cp

echo "Launching NeMo-RL GRPO training..."
uv run python examples/run_grpo_math.py \
  --config examples/configs/grpo_math_70B_megatron.yaml \
  policy.model_name='Qwen/Qwen2.5-72B-Instruct' \
  policy.megatron_cfg.converter_type='Qwen2ForCausalLM' \
  logger.wandb_enabled=False \
  cluster.num_nodes=${NUM_NODES} \
  cluster.gpus_per_node=${GPUS_PER_NODE} \
  logger.wandb.name='nemo-rl-grpo-test1' \
  grpo.max_num_steps=20 \
  grpo.num_generations_per_prompt=8 \
  grpo.num_prompts_per_step=32 \
  policy.train_global_batch_size=256 \
  checkpointing.enabled=True \
  checkpointing.save_period=2 \
  checkpointing.keep_top_k=2 \
  checkpointing.metric_name=null \
  checkpointing.checkpoint_dir=/lustre/nemo_rl_qwen_72b_ds_cp/nemo-rl-grpo-test1 \
  data.dataset_name='DeepScaler'
EOF
chmod +x run_nemo_rl.sh

রে ইগনোর ফাইল তৈরি করুন

রে-কে বড় বা অপ্রয়োজনীয় ডিরেক্টরি আপলোড করা থেকে বিরত রাখতে একটি .rayignore ফাইল তৈরি করুন:

cat << EOF > .rayignore
cluster-toolkit/
.git/
*.sh.log
EOF

রানটাইম এনভায়রনমেন্ট কনফিগারেশন তৈরি করুন

Ray জবে এনভায়রনমেন্ট ভেরিয়েবল পাস করার জন্য একটি JSON ফাইল তৈরি করুন:

cat << EOF > ray_runtime_env_nemo.json
{
  "env_vars": {
    "HF_TOKEN": "${HF_TOKEN}",
    "WANDB_API_KEY": "${WANDB_API_KEY}",
    "HF_HOME": "/lustre/huggingface_cache",
    "GLOO_SOCKET_IFNAME": "eth0",
    "NCCL_SOCKET_IFNAME": "eth0"
  }
}
EOF

চাকরিটি জমা দিন

ড্যাশবোর্ড এন্ডপয়েন্টে জবটি জমা দিতে Ray CLI ব্যবহার করুন। যদি ক্লাউড শেলে ray কমান্ডটি খুঁজে না পাওয়া যায়, তাহলে আপনি pip install ray মাধ্যমে এটি ইনস্টল করতে পারেন।

ray job submit \
    --address="http://localhost:8265" \
    --working-dir . \
    --runtime-env ray_runtime_env_nemo.json \
    -- bash run_nemo_rl.sh

আপনি আপনার ক্লাউড শেল টার্মিনালে লগগুলো চলতে দেখবেন। জবটি মডেলটি লোড করবে, রে ওয়ার্কারগুলোকে ইনিশিয়ালাইজ করবে এবং জিআরপিও ট্রেনিং লুপ শুরু করবে।

৭. প্রশিক্ষণের কার্যকারিতা পর্যবেক্ষণ করুন

এই ধাপে, আপনি ট্রেনিং এবং চেকপয়েন্টিং চলাকালীন লাস্টার ফাইলসিস্টেমের পারফরম্যান্স পর্যবেক্ষণ করবেন।

প্রশিক্ষণ লগ পরীক্ষা করুন

প্রশিক্ষণ চলাকালীন, আপনি লগ দেখতে পাবেন যা নির্দেশ করে যে চেকপয়েন্টগুলি /lustre/nemo_rl_qwen_72b_ds_cp/nemo-rl-grpo-test1 এ সংরক্ষিত হচ্ছে। লক্ষ্য করুন যে চেকপয়েন্টিং অ্যাসিঙ্ক্রোনাসভাবে ঘটে এবং এটি রে ওয়ার্কারদের খুব বেশি সময়ের জন্য ব্লক করে না।

চেকপয়েন্টিংয়ের গতি দেখতে, সংরক্ষিত চেকপয়েন্ট নির্দেশকারী লগ লাইনগুলো দেখুন।

ক্লাউড কনসোলে লাস্টার মেট্রিক্স দেখুন

আপনার Lustre ইনস্ট্যান্সের মেট্রিক্স দেখতে:

  1. গুগল ক্লাউড কনসোলে , Lustre-এর জন্য Managed Service অনুসন্ধান করুন।
  2. আপনার ইনস্ট্যান্সের নামে ক্লিক করুন (উদাহরণস্বরূপ, ${CLUSTER_NAME}-lustre অথবা rl-demo-gpu-lustre )।
  3. মনিটরিং ট্যাবে ক্লিক করুন।

এখানে আপনি পর্যবেক্ষণ করতে পারেন:

  • থ্রুপুট (বাইট/সেকেন্ড) : চেকপয়েন্টিং চলাকালীন আকস্মিক বৃদ্ধি দেখুন।
  • ধারণক্ষমতা : চেকপয়েন্টগুলো কী পরিমাণ জায়গা ব্যবহার করছে তা পর্যবেক্ষণ করুন।

লাস্টার পারফরম্যান্স চার্ট লাস্টার অত্যন্ত দ্রুত গতিতে লিখতে সক্ষম এবং ন্যূনতম সময়ে চেকপয়েন্ট তৈরি করে।

৮. সম্পদ পরিষ্কার করুন

এক ধাপে সমস্ত প্রোভিশন করা ইনফ্রাস্ট্রাকচার (GKE ক্লাস্টার, GPU নোড পুল, ম্যানেজড লাস্টার ইনস্ট্যান্স, এবং VPC নেটওয়ার্ক) ধ্বংস করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:

gcluster destroy "${CLUSTER_NAME}"

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

৯. অভিনন্দন

আপনি সফলভাবে 'Scale Reinforcement Learning with GKE and Managed Lustre' কোডল্যাবটি সম্পন্ন করেছেন!

আপনি যা শিখেছেন

  • স্পট ইনস্ট্যান্স এবং ম্যানেজড লাস্টার স্টোরেজ সহ একটি GKE GPU ক্লাস্টার প্রভিশন করতে ক্লাস্টার টুলকিট কীভাবে ব্যবহার করবেন
  • কিভাবে একটি KubeRay ক্লাস্টার স্থাপন করতে হয় এবং Lustre স্টোরেজ মাউন্ট করতে হয়।
  • NeMo-RL GRPO প্রশিক্ষণের ওয়ার্কলোড কীভাবে জমা দিতে হয়।
  • ট্রেনিং চলাকালীন স্টোরেজ পারফরম্যান্স কীভাবে পর্যবেক্ষণ করবেন।

পরবর্তী পদক্ষেপ