Python এবং PyTorch এর সাথে DeepSpeed এর ইন্টিগ্রেশন

DeepSpeed ইন্সটলেশন এবং সেটআপ - ডিপ স্পিড (DeepSpeed) - Latest Technologies

344

Python এবং PyTorch এর সাথে DeepSpeed ইন্টিগ্রেশন বড় মডেল Training এর জন্য সহজেই করা যায়, যা Training স্পিড বৃদ্ধি ও মেমোরি ব্যবস্থাপনা উন্নত করে। DeepSpeed-এর বিভিন্ন ফিচার যেমন ZeRO Optimization, Mixed Precision Training ইত্যাদি PyTorch মডেলের Training প্রক্রিয়ায় সরাসরি যুক্ত করা যায়।

নিচে PyTorch মডেলের সাথে DeepSpeed ইন্টিগ্রেশন করার ধাপগুলো বিস্তারিতভাবে দেখানো হলো।


ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইমপোর্ট করা

DeepSpeed এবং PyTorch লাইব্রেরি ইনস্টল এবং ইমপোর্ট করুন।

import torch
import torch.nn as nn
import deepspeed

ধাপ ২: PyTorch মডেল তৈরি করা

একটি সিম্পল মডেল তৈরি করা হয়েছে, যা DeepSpeed-এর সাথে Training করা হবে।

class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc1 = nn.Linear(10, 100)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(100, 2)

    def forward(self, x):
        x = self.relu(self.fc1(x))
        return self.fc2(x)

model = SimpleModel()

ধাপ ৩: DeepSpeed কনফিগারেশন ফাইল তৈরি করা

DeepSpeed Training চালানোর জন্য একটি কনফিগারেশন ফাইল প্রয়োজন, যা JSON ফরম্যাটে থাকবে। এই ফাইলের মাধ্যমে Training-এর বিভিন্ন সেটিংস ও অপ্টিমাইজেশন নির্ধারণ করা হয়।

{
  "train_batch_size": 16,
  "gradient_accumulation_steps": 2,
  "steps_per_print": 100,
  "fp16": {
    "enabled": true
  },
  "zero_optimization": {
    "stage": 2
  }
}

এই কনফিগারেশন ফাইলটির কিছু সেটিংস:

  • train_batch_size: Training-এর জন্য ব্যাচ সাইজ নির্ধারণ।
  • gradient_accumulation_steps: গ্রেডিয়েন্ট একিউমুলেশন স্টেপ সংখ্যা।
  • fp16: Mixed Precision Training সক্রিয় করার জন্য enabled: true
  • zero_optimization: ZeRO Optimization স্টেজ ২, যা মডেল Training এর মেমোরি খরচ কমায়।

ধাপ ৪: DeepSpeed দিয়ে PyTorch মডেল Training এর জন্য প্রস্তুত করা

DeepSpeed দিয়ে মডেল প্রস্তুত করতে deepspeed.initialize ফাংশন ব্যবহার করা হয়। এই ফাংশন মডেল, অপ্টিমাইজার, এবং কনফিগারেশন ফাইলকে একত্রিত করে Training চালানোর জন্য প্রস্তুত করে।

# DeepSpeed কনফিগারেশন ফাইলের পাথ
ds_config = "ds_config.json"

# অপ্টিমাইজার তৈরি করা
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)

# DeepSpeed দিয়ে মডেল এবং অপ্টিমাইজার প্রস্তুত করা
model_engine, optimizer, _, _ = deepspeed.initialize(model=model, optimizer=optimizer, config=ds_config)

ধাপ ৫: Training ডেটাসেট এবং ডেটা লোডার তৈরি করা

Training ডেটাসেট এবং ডেটা লোডার তৈরি করতে হবে, যাতে মডেল Training চালানো যায়।

from torch.utils.data import DataLoader, TensorDataset

# উদাহরণস্বরূপ Training ডেটা তৈরি
data = torch.randn(100, 10)
labels = torch.randint(0, 2, (100,))

# ডেটাসেট এবং ডেটা লোডার তৈরি
train_dataset = TensorDataset(data, labels)
train_loader = DataLoader(train_dataset, batch_size=8)

ধাপ ৬: Training লুপ তৈরি করা

Training লুপে মডেল ইনপুট, লস গণনা, এবং অপ্টিমাইজেশন প্রক্রিয়া যুক্ত করতে হবে।

# Training লুপ
for epoch in range(3):  # প্রতিটি ইপক-এ Training
    for step, (batch_data, batch_labels) in enumerate(train_loader):
        # ডেটা মডেলে পাঠানো
        batch_data = batch_data.to(model_engine.local_rank)  # GPU তে পাঠানো
        batch_labels = batch_labels.to(model_engine.local_rank)

        # মডেলের পূর্বাভাস
        outputs = model_engine(batch_data)
        
        # লস গণনা
        loss = nn.CrossEntropyLoss()(outputs, batch_labels)
        
        # গ্রেডিয়েন্ট ব্যাকপ্রোপাগেশন
        model_engine.backward(loss)
        
        # অপ্টিমাইজার আপডেট
        model_engine.step()
        
        # Training তথ্য প্রিন্ট করা
        if step % 10 == 0:
            print(f"Epoch {epoch+1}, Step {step}, Loss: {loss.item()}")

ধাপ ৭: Training চালানো

Training লুপ চালালে মডেল Training শুরু হবে এবং DeepSpeed-এর সাহায্যে Training প্রক্রিয়া দ্রুত ও মেমোরি-সাশ্রয়ী হবে।

সম্পূর্ণ কোড

import torch
import torch.nn as nn
import deepspeed
from torch.utils.data import DataLoader, TensorDataset

# মডেল তৈরি
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc1 = nn.Linear(10, 100)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(100, 2)

    def forward(self, x):
        x = self.relu(self.fc1(x))
        return self.fc2(x)

model = SimpleModel()

# DeepSpeed কনফিগারেশন ফাইলের পাথ
ds_config = "ds_config.json"

# অপ্টিমাইজার তৈরি
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)

# DeepSpeed দিয়ে মডেল এবং অপ্টিমাইজার প্রস্তুত করা
model_engine, optimizer, _, _ = deepspeed.initialize(model=model, optimizer=optimizer, config=ds_config)

# উদাহরণস্বরূপ Training ডেটা তৈরি
data = torch.randn(100, 10)
labels = torch.randint(0, 2, (100,))

# ডেটাসেট এবং ডেটা লোডার তৈরি
train_dataset = TensorDataset(data, labels)
train_loader = DataLoader(train_dataset, batch_size=8)

# Training লুপ
for epoch in range(3):  # প্রতিটি ইপক-এ Training
    for step, (batch_data, batch_labels) in enumerate(train_loader):
        # ডেটা মডেলে পাঠানো
        batch_data = batch_data.to(model_engine.local_rank)
        batch_labels = batch_labels.to(model_engine.local_rank)

        # মডেলের পূর্বাভাস
        outputs = model_engine(batch_data)
        
        # লস গণনা
        loss = nn.CrossEntropyLoss()(outputs, batch_labels)
        
        # গ্রেডিয়েন্ট ব্যাকপ্রোপাগেশন
        model_engine.backward(loss)
        
        # অপ্টিমাইজার আপডেট
        model_engine.step()
        
        # Training তথ্য প্রিন্ট করা
        if step % 10 == 0:
            print(f"Epoch {epoch+1}, Step {step}, Loss: {loss.item()}")

সারসংক্ষেপ

DeepSpeed-এর সাহায্যে PyTorch মডেল Training চালানো খুব সহজ। উপরের উদাহরণে DeepSpeed এর সাথে PyTorch এর ইন্টিগ্রেশন দেখানো হয়েছে:

  1. মডেল ও অপ্টিমাইজার তৈরি করা
  2. DeepSpeed কনফিগারেশন ফাইল ব্যবহার করে Training-এর জন্য DeepSpeed ইন্টিগ্রেট করা
  3. Training লুপে মডেল Training চালানো

DeepSpeed এর সাহায্যে বড় মডেল Training এর সময় কমে যায় এবং মেমোরি ব্যবহারের দক্ষতা বৃদ্ধি পায়।

Content added By
Promotion

Are you sure to start over?

Loading...