Skill

উদাহরণসহ GPU ব্যবহার করে মডেল ট্রেনিং

GPU এবং CUDA ব্যবহার Torch এর সাথে - টর্চ (Torch) - Latest Technologies

181

PyTorch-এ GPU ব্যবহার করে মডেল ট্রেনিং করার জন্য NVIDIA-এর CUDA সমর্থিত GPU এবং PyTorch-এ CUDA ইন্টিগ্রেশন থাকা দরকার। GPU ব্যবহার করে মডেল ট্রেনিং করলে মডেলের পারফরমেন্স এবং ট্রেনিং স্পিড অনেক উন্নত হয়। নিচে উদাহরণসহ ব্যাখ্যা করা হয়েছে কীভাবে PyTorch-এ GPU ব্যবহার করে মডেল ট্রেনিং করা যায়।

ধাপ ১: প্যাকেজ ইমপোর্ট করা

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms

ধাপ ২: CUDA ডিভাইস চেক করা

GPU উপলব্ধ আছে কিনা তা যাচাই করতে:

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f'Using device: {device}')

এখানে, torch.cuda.is_available() চেক করে GPU উপলব্ধ কিনা। যদি উপলব্ধ হয়, আমরা CUDA ডিভাইস ব্যবহার করবো, অন্যথায় CPU ব্যবহার করবো।

ধাপ ৩: ডেটাসেট লোড করা

আমরা MNIST ডাটাসেট ব্যবহার করবো, এবং ট্রান্সফর্মেশন অ্যাপ্লাই করবো।

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transform, download=True)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)

ধাপ ৪: মডেল তৈরি করা এবং GPU তে স্থানান্তর করা

class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 128)
        self.fc2 = nn.Linear(128, 64)
        self.fc3 = nn.Linear(64, 10)

    def forward(self, x):
        x = x.view(-1, 28 * 28)  # ইনপুট ফ্ল্যাট করা
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        return x

# মডেল ইনস্ট্যান্স তৈরি এবং GPU তে স্থানান্তর করা
model = SimpleNN().to(device)

ধাপ ৫: লস ফাংশন এবং অপ্টিমাইজার সেট করা

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

ধাপ ৬: GPU ব্যবহার করে মডেল ট্রেনিং

def train_model(model, train_loader, criterion, optimizer, device):
    model.train()  # মডেলকে ট্রেনিং মোডে সেট করা
    for images, labels in train_loader:
        # ইমেজ এবং লেবেলকে GPU তে স্থানান্তর করা
        images, labels = images.to(device), labels.to(device)
        
        # ফোরওয়ার্ড পাস
        outputs = model(images)
        loss = criterion(outputs, labels)
        
        # ব্যাকওয়ার্ড পাস এবং অপ্টিমাইজেশন
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
    print(f'Training completed for one epoch with loss: {loss.item():.4f}')

# ট্রেনিং চালানো
train_model(model, train_loader, criterion, optimizer, device)

ধাপ ৭: মডেল সেভ করা

torch.save(model.state_dict(), 'simple_nn_model_gpu.pth')

ধাপ ৮: মডেল লোড এবং ইনফারেন্স

লোড করা মডেলটি GPU তে ব্যবহার করবো:

# মডেলের নতুন ইনস্ট্যান্স তৈরি এবং GPU তে স্থানান্তর করা
loaded_model = SimpleNN().to(device)
loaded_model.load_state_dict(torch.load('simple_nn_model_gpu.pth'))
loaded_model.eval()

# একটি ব্যাচ থেকে একটি ইমেজ এবং লেবেল নেওয়া
images, labels = next(iter(train_loader))
image = images[0].unsqueeze(0).to(device)  # একটি ইমেজ নিয়ে এক্সট্রা ব্যাচ ডাইমেনশন যোগ করা

# মডেল দিয়ে প্রেডিকশন করা
with torch.no_grad():
    output = loaded_model(image)
    _, predicted = torch.max(output, 1)
    print(f'Predicted: {predicted.item()}, Actual: {labels[0].item()}')

কোডের ব্যাখ্যা

  1. ডিভাইস চেক করা: আমরা চেক করেছি GPU উপলব্ধ আছে কিনা, এবং সে অনুযায়ী ডিভাইস সিলেক্ট করেছি।
  2. ডেটাসেট লোড করা: ডেটাসেট ট্রান্সফর্ম এবং ডেটালোডার ব্যবহার করে লোড করা হয়েছে।
  3. মডেল তৈরি: মডেল তৈরি করে to(device) দিয়ে GPU তে স্থানান্তর করা হয়েছে।
  4. ট্রেনিং লুপ: প্রতিটি ব্যাচের ডেটা এবং লেবেল GPU তে স্থানান্তর করে মডেল ট্রেনিং করা হয়েছে।
  5. মডেল সেভ এবং লোড: GPU তে সংরক্ষিত মডেল পুনরায় লোড করে ইনফারেন্স করা হয়েছে।

এভাবে, GPU ব্যবহার করে PyTorch-এ মডেল ট্রেনিং করা হয়, যা মডেলের পারফরমেন্স এবং ট্রেনিং টাইম অনেক উন্নত করে।

Promotion

Are you sure to start over?

Loading...