PyTorch-এ মডেল এবং ডেটা কে GPU তে স্থানান্তর করার জন্য cuda ডিভাইস ব্যবহার করা হয়। এটি মডেল ট্রেনিং এবং ইনফারেন্সের পারফর্ম্যান্স উল্লেখযোগ্যভাবে বাড়াতে পারে। নিচে GPU তে মডেল এবং ডেটা স্থানান্তরের পদ্ধতি এবং একটি উদাহরণ দেখানো হলো।
1. GPU তে মডেল স্থানান্তর করা
PyTorch-এ GPU তে মডেল স্থানান্তর করতে হলে, মডেলের ইনস্ট্যান্সকে .to(device) অথবা .cuda() দিয়ে GPU ডিভাইসে স্থানান্তর করতে হয়।
# ডিভাইস চেক করা
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# মডেল তৈরি করা
model = SimpleNN(input_size=2, hidden_size=5, output_size=1)
# মডেলকে GPU তে স্থানান্তর করা
model = model.to(device)
2. GPU তে ডেটা স্থানান্তর করা
মডেলের মতোই, ইনপুট ডেটাকেও GPU তে স্থানান্তর করতে হবে যাতে মডেল ট্রেনিং বা ইনফারেন্সের সময় ডেটা এবং মডেল একই ডিভাইসে থাকে।
# ইনপুট ডেটা তৈরি করা
input_data = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
# ডেটাকে GPU তে স্থানান্তর করা
input_data = input_data.to(device)
3. পূর্ণাঙ্গ উদাহরণ
এখানে একটি সম্পূর্ণ উদাহরণ দেখানো হলো যেখানে মডেল এবং ডেটা দুটোই GPU তে স্থানান্তর করা হয়েছে এবং মডেল ট্রেনিং করা হয়েছে।
import torch
import torch.nn as nn
import torch.optim as optim
# একটি সাধারণ নিউরাল নেটওয়ার্ক তৈরি
class SimpleNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleNN, self).__init__()
self.hidden = nn.Linear(input_size, hidden_size)
self.output = nn.Linear(hidden_size, output_size)
def forward(self, x):
x = torch.relu(self.hidden(x))
x = self.output(x)
return x
# ডিভাইস চেক করা
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# মডেল তৈরি এবং GPU তে স্থানান্তর করা
model = SimpleNN(input_size=2, hidden_size=5, output_size=1).to(device)
# Criterion এবং Optimizer ইনিশিয়ালাইজ
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# ডেটাসেট উদাহরণ এবং GPU তে স্থানান্তর করা
train_data = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]]).to(device)
train_target = torch.tensor([[0.5], [1.5], [2.5], [3.5]]).to(device)
# মডেল ট্রেনিং লুপ
for epoch in range(100):
model.train() # মডেলকে ট্রেন মোডে সেট করা
optimizer.zero_grad() # গ্রেডিয়েন্ট রিসেট করা
output = model(train_data) # Forward Pass
loss = criterion(output, train_target) # Loss Calculation
loss.backward() # Backward Pass
optimizer.step() # Optimizer Step
# প্রতিটি ১০ এপক পর পর লস প্রিন্ট করা
if (epoch + 1) % 10 == 0:
print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')
4. গুরুত্বপূর্ণ টিপস:
- GPU Compatibility: মডেল এবং ডেটা GPU তে স্থানান্তর করতে হলে নিশ্চিত করতে হবে যে GPU ডিভাইস পাওয়া যাচ্ছে (
torch.cuda.is_available()দিয়ে চেক করা যায়)। - Consistency: মডেল এবং ইনপুট ডেটা একই ডিভাইসে (CPU/GPU) রাখতে হবে। যদি মডেল GPU তে থাকে, তবে ইনপুট ডেটাও GPU তে স্থানান্তর করতে হবে।
- .to(device): এটি একটি সাধারণ পদ্ধতি যেখানে আপনি
deviceনামক ভ্যারিয়েবল ব্যবহার করেন যাতে CPU এবং GPU এর মধ্যে সহজে সুইচ করা যায়। উদাহরণ:model.to(device),input_data.to(device)।
এভাবে PyTorch-এ GPU তে মডেল এবং ডেটা স্থানান্তর করা হয় এবং পারফর্ম্যান্স উন্নত করা যায়।
Read more