Mixed Precision Training একটি টেকনিক যা ডিপ লার্নিং মডেলের Training-এর সময় FP16 (Float16) এবং FP32 (Float32) প্রেসিশন ব্যবহার করে। এই পদ্ধতি Training স্পিড বাড়াতে এবং মেমোরি ব্যবস্থাপনা উন্নত করতে সহায়ক। নিচে PyTorch ব্যবহার করে Mixed Precision Training প্রয়োগের একটি উদাহরণ দেয়া হলো।
Mixed Precision Training উদাহরণ
এখানে আমরা একটি সাধারণ নিউরাল নেটওয়ার্ক তৈরি করব এবং Mixed Precision Training কিভাবে ব্যবহার করতে হয় তা দেখাব।
১. প্রয়োজনীয় লাইব্রেরি ইমপোর্ট করা
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
from torch.cuda.amp import autocast, GradScaler
২. সিম্পল নিউরাল নেটওয়ার্ক তৈরি করা
# সিম্পল নিউরাল নেটওয়ার্ক মডেল তৈরি
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(10, 50)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(50, 2)
def forward(self, x):
x = self.relu(self.fc1(x))
return self.fc2(x)
৩. ডেটা তৈরি এবং ডেটা লোডার তৈরি করা
# উদাহরণ ডেটা তৈরি
data = torch.randn(1000, 10) # 1000 উদাহরণ, 10 ফিচার
labels = torch.randint(0, 2, (1000,)) # 0 অথবা 1 লেবেল
# ডেটাসেট এবং ডেটা লোডার তৈরি
train_dataset = TensorDataset(data, labels)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
৪. মডেল এবং অপ্টিমাইজার প্রস্তুত করা
# মডেল তৈরি
model = SimpleNN().to('cuda') # GPU তে মডেল স্থানান্তর
# অপ্টিমাইজার তৈরি
optimizer = optim.Adam(model.parameters(), lr=0.001)
# গ্রেডিয়েন্ট স্কেলার তৈরি
scaler = GradScaler()
৫. Training Loop বাস্তবায়ন করা
# Training Loop
for epoch in range(10): # 10 Epochs
for batch_data, batch_labels in train_loader:
batch_data = batch_data.to('cuda') # GPU তে পাঠানো
batch_labels = batch_labels.to('cuda')
optimizer.zero_grad() # গ্রেডিয়েন্ট শূন্য করা
with autocast(): # Mixed Precision Context
outputs = model(batch_data) # মডেলের পূর্বাভাস
loss = nn.CrossEntropyLoss()(outputs, batch_labels) # লস গণনা
scaler.scale(loss).backward() # গ্রেডিয়েন্ট স্কেল করা
scaler.step(optimizer) # অপ্টিমাইজারের স্টেপ
scaler.update() # স্কেলার আপডেট
print(f'Epoch {epoch+1}, Loss: {loss.item():.4f}')
কোডের ব্যাখ্যা
- মডেল তৈরি:
SimpleNNক্লাস দিয়ে একটি সিম্পল নিউরাল নেটওয়ার্ক তৈরি করা হয়েছে। - ডেটা প্রস্তুতি: উদাহরণস্বরূপ সিম্পল ডেটাসেট তৈরি করা হয়েছে এবং DataLoader তৈরি করা হয়েছে।
- Mixed Precision Context:
autocast()ফাংশনের মাধ্যমে FP16 এবং FP32 মিশ্রণে Training করা হয়। এটি Training সময় স্বয়ংক্রিয়ভাবে FP16-এ গ্রেডিয়েন্ট এবং লসের হিসাব করে। - গ্রেডিয়েন্ট স্কেলিং:
GradScalerক্লাস গ্রেডিয়েন্টের স্কেলিং নিশ্চিত করে, যাতে FP16-এ Training করার সময় স্থিতিশীলতা বজায় থাকে।
Mixed Precision Training এর সুবিধা
- মেমোরি সাশ্রয়: FP16 প্রেসিশন ব্যবহার করে মেমোরি খরচ উল্লেখযোগ্যভাবে কমে যায়।
- গতি বৃদ্ধি: FP16 ব্যবহার Training স্পিড বাড়াতে সাহায্য করে।
- GPU কার্যকারিতা: আধুনিক GPUs FP16-এর সাথে অপ্টিমাইজ করা, যা Training কার্যকরী করে।
সারসংক্ষেপ
Mixed Precision Training একটি কার্যকর টেকনিক যা ডিপ লার্নিং মডেল Training-এর সময় FP16 এবং FP32 প্রেসিশন ব্যবহার করে। এটি Training স্পিড এবং মেমোরি ব্যবস্থাপনা উন্নত করে। PyTorch এবং DeepSpeed ব্যবহার করে Mixed Precision Training বাস্তবায়ন করা সহজ এবং ফলপ্রসূ।
Read more