Data Parallelism এবং Model Parallelism এর ব্যবহার
Data Parallelism এবং Model Parallelism বড় মডেল Training করার জন্য দুটি গুরুত্বপূর্ণ Distributed Training কৌশল। উভয়েরই ব্যবহার Training প্রসেসকে দ্রুত এবং মেমোরি দক্ষতা বাড়াতে সহায়ক। তবে, বড় মডেল Training-এর ধরন এবং মডেলের আকার অনুযায়ী এই দুটি পদ্ধতির ব্যবহার ভিন্ন হয়।
Data Parallelism এর ব্যবহার
Data Parallelism কৌশলে Training ডেটা বিভাজন করে একাধিক GPU বা মেশিনে মডেল Training করানো হয়। প্রতিটি ডিভাইসে মডেলের একটি করে কপি রাখা হয় এবং ডেটার বিভিন্ন অংশ Training করার জন্য সমান্তরালে পাঠানো হয়। Training শেষে প্রতিটি ডিভাইসে গণিত করা গ্রেডিয়েন্টগুলো একত্রিত করা হয় এবং মডেল আপডেট করা হয়।
ব্যবহার ক্ষেত্র
- বড় ডেটাসেটের ক্ষেত্রে: বড় ডেটাসেটকে বিভাজন করে বিভিন্ন GPU বা মেশিনে সমান্তরালে Training করানো যায়।
- স্ট্যান্ডার্ড CNN এবং RNN মডেল: যেখানে মডেল আকার বড় নয় এবং মডেল সহজে একাধিক GPU তে ফিট হয়।
- ক্লাউড বা মেশিন ক্লাস্টার: ক্লাউড বা বড় GPU ক্লাস্টার সিস্টেমে সহজেই Data Parallelism ব্যবহার করা যায়, যাতে GPU রিসোর্সের সম্পূর্ণ ব্যবহার নিশ্চিত হয়।
উদাহরণ
পাইথন এবং PyTorch এর মাধ্যমে Data Parallelism ব্যবহার করে সহজে মডেল Training করানো যায়:
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
# মডেল তৈরি
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.fc = nn.Linear(10, 2)
def forward(self, x):
return self.fc(x)
model = SimpleModel()
# Data Parallelism ব্যবহারের জন্য মডেল প্রস্তুত করা
model = nn.DataParallel(model) # একাধিক GPU তে মডেল কপি তৈরি
model = model.to('cuda')
# ডেটা তৈরি
data = torch.randn(100, 10).to('cuda')
labels = torch.randint(0, 2, (100,)).to('cuda')
# ডেটাসেট এবং ডেটা লোডার তৈরি
train_dataset = TensorDataset(data, labels)
train_loader = DataLoader(train_dataset, batch_size=8)
# Training লুপ
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
for batch_data, batch_labels in train_loader:
outputs = model(batch_data)
loss = criterion(outputs, batch_labels)
loss.backward()
optimizer.step()
optimizer.zero_grad()
Model Parallelism এর ব্যবহার
Model Parallelism ব্যবহার করা হয় বড় মডেল Training-এর ক্ষেত্রে, যেখানে মডেল একক GPU তে ফিট হয় না। মডেলের বিভিন্ন স্তর বা অংশ ভিন্ন GPU তে ভাগ করে Training করানো হয়। প্রতিটি GPU মডেলের একটি নির্দিষ্ট অংশে Training চালায় এবং একে অপরের সাথে তথ্য আদান-প্রদান করে Training সম্পন্ন করে।
ব্যবহার ক্ষেত্র
- বড় মডেলের Training: বড় ভাষা মডেল (GPT, BERT) বা বড় ইমেজ প্রসেসিং মডেল, যেমন Vision Transformer, যা একক GPU-তে ফিট হয় না।
- Memory-bound Model: বড় মেমোরি প্রয়োজন হয় এমন মডেল Training এর জন্য উপযোগী, যেমন গভীর লেয়ারের মডেল।
- Pipeline Parallelism: মডেলের লেয়ারগুলোকে বিভিন্ন GPU তে ভাগ করে Training করানো এবং প্রতিটি লেয়ার Sequentially Training করা হয়।
উদাহরণ
PyTorch দিয়ে সহজে Model Parallelism প্রয়োগ করা যায়। এখানে মডেলের বিভিন্ন স্তর বিভিন্ন GPU তে ভাগ করে Training করা হয়েছে:
import torch
import torch.nn as nn
import torch.optim as optim
# মডেল তৈরি
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.fc1 = nn.Linear(10, 100).to('cuda:0') # প্রথম লেয়ার GPU 0 তে
self.relu = nn.ReLU()
self.fc2 = nn.Linear(100, 2).to('cuda:1') # দ্বিতীয় লেয়ার GPU 1 তে
def forward(self, x):
x = x.to('cuda:0') # ইনপুট প্রথম GPU তে পাঠানো
x = self.relu(self.fc1(x))
x = x.to('cuda:1') # দ্বিতীয় GPU তে পাঠানো
return self.fc2(x)
model = SimpleModel()
# ডেটা তৈরি
data = torch.randn(100, 10)
labels = torch.randint(0, 2, (100,))
# Training লুপ
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
# মডেল Training
for i in range(100):
optimizer.zero_grad()
outputs = model(data)
loss = criterion(outputs, labels.to('cuda:1'))
loss.backward()
optimizer.step()
Data Parallelism এবং Model Parallelism এর সম্মিলিত ব্যবহার
বড় মডেল এবং বড় ডেটাসেট Training করার জন্য Data Parallelism এবং Model Parallelism এর সম্মিলিত ব্যবহার করা যায়। বড় মডেলের বিভিন্ন লেয়ার Model Parallelism-এর মাধ্যমে বিভিন্ন GPU তে বিভাজন করে এবং প্রতিটি GPU-তে Data Parallelism ব্যবহার করে Training করানো হয়।
এই সম্মিলিত কৌশল বড় মডেল Training এর সময় মেমোরি এবং কম্পিউটেশনাল রিসোর্সের সম্পূর্ণ ব্যবহার নিশ্চিত করে।
সারসংক্ষেপ
| বৈশিষ্ট্য | Data Parallelism | Model Parallelism |
|---|---|---|
| ব্যবহার ক্ষেত্রে | বড় ডেটাসেট Training-এর ক্ষেত্রে | বড় মডেল Training-এর ক্ষেত্রে |
| মডেল আকার | মডেলের পূর্ণ কপি প্রতিটি GPU তে রাখা হয় | মডেল ভাগ করে বিভিন্ন GPU তে বিভাজন করা হয় |
| প্রধান উপকারিতা | Training স্পিড দ্রুত হয় | মডেলের মেমোরি চাহিদা কমে আসে |
| উদাহরণ মডেল | ResNet, CNN, এবং RNN মডেল Training | GPT, BERT, Vision Transformer মডেল Training |
Data Parallelism এবং Model Parallelism-এর সম্মিলিত ব্যবহার বড় মডেল Training এর জন্য একটি কার্যকরী পদ্ধতি, যা মেমোরি এবং Training স্পিড উন্নত করতে সহায়ক।
Read more