Skill

GPU এবং CUDA ব্যবহার Torch এর সাথে

Latest Technologies - টর্চ (Torch)
75
75

PyTorch-এ GPU এবং CUDA ব্যবহার করে মডেলের প্রশিক্ষণ এবং ইনফারেন্স আরও দ্রুত করা যায়। NVIDIA GPU থাকলে এবং CUDA সাপোর্ট ইন্সটল করা থাকলে PyTorch খুব সহজে GPU-তে কাজ করতে পারে। নিচে ধাপে ধাপে GPU এবং CUDA PyTorch-এ ব্যবহার করার উপায় দেখানো হলো।

ধাপ ১: CUDA এবং GPU সাপোর্ট চেক করা

প্রথমে, আপনার সিস্টেমে CUDA এবং GPU সাপোর্ট আছে কিনা তা চেক করা জরুরি। এটি PyTorch-এ খুব সহজে চেক করা যায়:

import torch

# CUDA উপলব্ধ কিনা চেক করা
print("CUDA Available:", torch.cuda.is_available())

# যদি GPU উপলব্ধ থাকে তবে তার নাম চেক করা
if torch.cuda.is_available():
    print("GPU Name:", torch.cuda.get_device_name(0))

ধাপ ২: মডেল এবং টেনসর GPU তে স্থানান্তর করা

PyTorch-এ মডেল এবং টেনসরকে GPU তে স্থানান্তর করতে .to('cuda') বা .cuda() ব্যবহার করা হয়। মডেল এবং ইনপুট ডেটা দুটোই GPU তে পাঠানো জরুরি, না হলে তারা CPU তে থেকেই যাবে।

# একটি সাধারণ মডেল ডিফাইন করা
class SimpleLinearModel(nn.Module):
    def __init__(self):
        super(SimpleLinearModel, self).__init__()
        self.linear = nn.Linear(1, 1)

    def forward(self, x):
        return self.linear(x)

# মডেল তৈরি এবং GPU তে স্থানান্তর করা
model = SimpleLinearModel().to('cuda')

# ইনপুট ডেটাও GPU তে স্থানান্তর করা
X = torch.tensor([[1.0], [2.0], [3.0], [4.0]]).to('cuda')
Y = torch.tensor([[2.0], [4.0], [6.0], [8.0]]).to('cuda')

ধাপ ৩: লস ফাংশন এবং অপটিমাইজার সেট করা (GPU-তে)

import torch.nn as nn
import torch.optim as optim

criterion = nn.MSELoss()  # লস ফাংশন
optimizer = optim.SGD(model.parameters(), lr=0.01)  # অপটিমাইজার

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

মডেল ট্রেনিংয়ের সময় ইনপুট, আউটপুট, এবং মডেল সকলকে GPU তে রাখতে হবে। নীচে GPU ব্যবহার করে মডেল ট্রেনিংয়ের একটি উদাহরণ দেওয়া হল:

epochs = 1000
for epoch in range(epochs):
    # ইনপুট এবং আউটপুট ডেটা GPU তে স্থানান্তরিত
    optimizer.zero_grad()  # গ্রেডিয়েন্ট রিসেট
    outputs = model(X)     # ফরোয়ার্ড পাস (GPU তে)
    loss = criterion(outputs, Y)  # লস ক্যালকুলেশন
    loss.backward()        # ব্যাকপ্রোপাগেশন
    optimizer.step()       # প্যারামিটার আপডেট

    if (epoch+1) % 100 == 0:
        print(f'Epoch {epoch+1}/{epochs}, Loss: {loss.item():.4f}')

ধাপ ৫: মডেল ইভ্যালুয়েশন এবং টেস্টিং (GPU তে)

মডেল ইভ্যালুয়েশন এবং টেস্টিংয়ের জন্যও ইনপুট ডেটা GPU তে থাকতে হবে। উদাহরণস্বরূপ:

# মডেল ইভ্যালুয়েশন
model.eval()

# টেস্ট ডেটা GPU তে পাঠানো
test_input = torch.tensor([[5.0]]).to('cuda')

# মডেল ইনফারেন্স
with torch.no_grad():  # গ্রেডিয়েন্ট ক্যালকুলেশন বন্ধ
    test_output = model(test_input)
    print(f'Prediction for input 5.0: {test_output.item()}')

GPU থেকে CPU তে ডেটা স্থানান্তর

যখন GPU তে মডেল প্রেডিকশন বা লস ক্যালকুলেশন করা হয়, তখন যদি ফলাফল প্রিন্ট করতে চান বা অন্য কাজে ব্যবহার করতে চান, তবে সেটিকে CPU তে স্থানান্তর করা লাগে।

# মডেল আউটপুটকে CPU তে স্থানান্তর করা
cpu_output = test_output.to('cpu')
print(f'Output on CPU: {cpu_output.item()}')

সংক্ষিপ্তসার

  1. CUDA উপলব্ধ কিনা চেক করুন: torch.cuda.is_available()
  2. মডেল এবং টেনসর GPU তে স্থানান্তর করুন: .to('cuda') বা .cuda()
  3. GPU তে ট্রেনিং এবং ইনফারেন্স পরিচালনা করুন: সকল ইনপুট এবং মডেল GPU তে থাকতে হবে।
  4. CPU তে ফলাফল স্থানান্তর করুন: .to('cpu') ব্যবহার করে।

PyTorch-এ CUDA এবং GPU সাপোর্ট ব্যবহার করে মডেল ট্রেনিং এবং ইনফারেন্স অনেক দ্রুত করা যায়, যা বড় ডেটাসেট এবং জটিল মডেল প্রশিক্ষণের জন্য বিশেষভাবে কার্যকর।

GPU কীভাবে মডেল ট্রেনিং দ্রুত করে

89
89

GPU (Graphics Processing Unit) মডেল ট্রেনিংকে দ্রুত করার ক্ষেত্রে অত্যন্ত কার্যকর, বিশেষ করে ডিপ লার্নিং মডেল ট্রেনিংয়ের জন্য। GPU মূলত একই ধরনের গণনা একযোগে অনেকবার করতে সক্ষম, যা মডেল ট্রেনিংয়ের পারফরম্যান্স বাড়িয়ে দেয়। নিচে GPU কীভাবে মডেল ট্রেনিং দ্রুত করে, তার কারণ এবং প্রক্রিয়া ব্যাখ্যা করা হলো:

GPU এবং CPU এর পার্থক্য

Parallelism (প্যারালেল প্রসেসিং):

  • CPU: CPU সাধারণত সিরিয়াল প্রসেসিংয়ে ভালো, অর্থাৎ এটি একই সময়ে কিছু সংখ্যক (সাধারণত ৪-১৬) থ্রেড চালাতে পারে। এটি সাধারণ কম্পিউটিং টাস্কে ভালো পারফরম্যান্স দেয়।
  • GPU: GPU অনেক বেশি সংখ্যক থ্রেড (হাজার হাজার) সমান্তরালে চালাতে পারে। এটি বিশেষ করে ম্যাট্রিক্স মাল্টিপ্লিকেশন, ভেক্টর অপারেশন, এবং অন্যান্য প্যারালেলাইজড কাজগুলোতে খুব কার্যকর, যা ডিপ লার্নিং মডেল ট্রেনিংয়ের জন্য গুরুত্বপূর্ণ।

Memory Bandwidth (মেমোরি ব্যান্ডউইথ):

  • GPU-এর মেমোরি ব্যান্ডউইথ অনেক বেশি থাকে, যা উচ্চগতির ডেটা ট্রান্সফার সম্ভব করে। মডেল ট্রেনিংয়ের সময় বড় ডেটাসেট এবং ওজনের (weights) পরিবর্তন দ্রুত সঞ্চালন করতে সাহায্য করে।

GPU কীভাবে মডেল ট্রেনিং দ্রুত করে

প্যারালেলাইজড ম্যাট্রিক্স অপারেশন:

  • নিউরাল নেটওয়ার্কের ট্রেনিংয়ের সময় ম্যাট্রিক্স মাল্টিপ্লিকেশন এবং ভেক্টরাইজড অপারেশন বারবার করা হয়। GPU এর মধ্যে শত শত বা হাজার হাজার কোর (Core) থাকে, যেগুলি একযোগে এই গণনাগুলি করতে পারে।
  • উদাহরণস্বরূপ, ব্যাকপ্রোপাগেশনের সময় বড় আকারের ম্যাট্রিক্স মাল্টিপ্লিকেশন করতে হয়, যা GPU অত্যন্ত দ্রুততার সাথে করতে পারে।

মডেল প্যারামিটার আপডেট:

  • মডেলের ওজন এবং বায়াস আপডেট করার সময় GPU একাধিক প্যারামিটার একই সময়ে আপডেট করতে পারে। CPU-তে এই কাজটি সিরিয়ালভাবে হয়, যা ধীর গতি তৈরি করে।
  • GPU-তে অপ্টিমাইজেশনের কাজ (যেমন: গ্রেডিয়েন্ট আপডেট) দ্রুততর হয় কারণ এটি প্যারালেল প্রসেসিংয়ের সুবিধা ব্যবহার করে।

Batch Processing:

  • GPU বড় ব্যাচ সাইজে ডেটা প্রসেস করতে পারে। মডেল ট্রেনিংয়ের সময় ডেটাসেট থেকে একটি ব্যাচ ডেটা নেয়া হয় এবং তার উপর ভিত্তি করে ওজন আপডেট করা হয়। GPU একসঙ্গে অনেক ডেটা পয়েন্ট প্রসেস করতে সক্ষম, যা মডেল ট্রেনিংকে দ্রুত করে।
  • বড় ব্যাচ সাইজে ট্রেনিং করলে মডেল ট্রেনিং এর স্থিতিশীলতা বাড়ে এবং সময় কম লাগে।

PyTorch ব্যবহার করে GPU তে মডেল ট্রেনিং করার পদ্ধতি

PyTorch-এ GPU ব্যবহার করে মডেল ট্রেনিং করা খুবই সহজ। আপনি একটি মডেল এবং ডেটা টেন্সরকে .to(device) কমান্ড ব্যবহার করে GPU তে সরাতে পারেন।

১. GPU চেক করা

প্রথমে GPU আছে কিনা এবং PyTorch GPU সাপোর্ট করছে কিনা তা চেক করতে হবে:

import torch

# GPU পাওয়া যাচ্ছে কিনা চেক করা
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print("Using device:", device)

২. মডেল এবং ডেটা GPU তে সরানো

# মডেল তৈরি করা
model = SimpleNN()

# মডেল এবং ডেটা GPU তে সরানো
model = model.to(device)
inputs = inputs.to(device)
targets = targets.to(device)

৩. GPU-তে মডেল ট্রেনিং করা

for epoch in range(num_epochs):
    for inputs, targets in train_loader:
        inputs, targets = inputs.to(device), targets.to(device)
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        loss.backward()
        optimizer.step()

GPU ব্যবহার করার কিছু Best Practices

Batch Size বাড়ানো:

  • GPU-তে মডেল ট্রেনিংয়ের সময় বড় ব্যাচ সাইজ ব্যবহার করতে পারেন। GPU বড় ব্যাচ সাইজে দ্রুত প্রসেস করতে পারে এবং এর ফলে ট্রেনিং টাইম কমে।

মডেল আর্কিটেকচার অপটিমাইজ করা:

  • বড় মডেল আর্কিটেকচার, যেমন: কনভোলিউশনাল নিউরাল নেটওয়ার্ক (CNN) বা ট্রান্সফর্মার, GPU এর সাথে আরও কার্যকরভাবে ট্রেনিং করা যায়।

মেমোরি ম্যানেজমেন্ট:

  • GPU এর মেমোরি সীমিত থাকে, তাই ডেটাসেট লোড করার সময় এবং মডেল ডিজাইন করার সময় মেমোরি ম্যানেজমেন্ট ঠিকমতো করতে হবে।

মিক্সড-প্রিসিশন ট্রেনিং:

  • PyTorch এর torch.cuda.amp মডিউল ব্যবহার করে মিক্সড-প্রিসিশন ট্রেনিং করতে পারেন, যা GPU মেমোরি ব্যবহার অপ্টিমাইজ করে এবং মডেল ট্রেনিং দ্রুত করে।

উপসংহার

GPU মডেল ট্রেনিং দ্রুত করার মূল কারণ হলো প্যারালেল প্রসেসিং এবং উচ্চ মেমোরি ব্যান্ডউইথ, যা ম্যাট্রিক্স অপারেশন এবং ব্যাকপ্রোপাগেশনের মতো ভারী গণনাগুলি দ্রুত করতে সাহায্য করে। GPU সঠিকভাবে ব্যবহার করলে এবং ট্রেনিং কোড অপ্টিমাইজ করলে মডেলের পারফরম্যান্স উল্লেখযোগ্যভাবে বাড়ানো যায়।

CUDA এবং Torch এর Integration

83
83

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

১. CUDA ডিভাইস চেক করা

প্রথমে, আপনার সিস্টেমে CUDA ডিভাইস (GPU) আছে কিনা তা চেক করা উচিৎ।

import torch

# CUDA ডিভাইস আছে কিনা তা চেক করা
cuda_available = torch.cuda.is_available()
print(f"CUDA available: {cuda_available}")
  • torch.cuda.is_available(): যদি GPU এবং CUDA সাপোর্টেড ড্রাইভার ইনস্টল থাকে, তাহলে এটি True রিটার্ন করে।

২. মডেল এবং টেন্সরকে GPU তে মুভ করা

GPU তে মডেল এবং ডেটা মুভ করতে .to(device) বা .cuda() ব্যবহার করা হয়।

# ডিভাইস সেট করা (CUDA থাকলে GPU, নাহলে CPU)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# মডেল ইনস্ট্যানশিয়েট করা এবং GPU তে মুভ করা
model = CustomModel().to(device)

# ইনপুট টেন্সর তৈরি করা এবং GPU তে মুভ করা
dummy_input = torch.randn(1, 1, 28, 28).to(device)

# মডেলের মাধ্যমে আউটপুট পাওয়া
output = model(dummy_input)
print(output)
  • torch.device(): এটি ডিভাইস (CPU বা GPU) সিলেক্ট করার জন্য ব্যবহার করা হয়।
  • .to(device): মডেল এবং টেন্সরকে নির্দিষ্ট ডিভাইসে (GPU বা CPU) মুভ করে।
  • .cuda() একই কাজ করে, কিন্তু .to(device) ব্যবহার করা ভালো কারণ এটি ডিভাইস ডাইনামিকভাবে সিলেক্ট করতে দেয়।

৩. ট্রেনিং লুপে CUDA ব্যবহার করা

GPU তে মডেল ট্রেনিং করার জন্য ট্রেনিং লুপেও ডিভাইস সেট করা প্রয়োজন। নিচে একটি উদাহরণ দেওয়া হলো:

# ট্রেনিং লুপ
for epoch in range(num_epochs):
    for images, labels in train_loader:
        # ইমেজ এবং লেবেলকে ডিভাইসে মুভ করা
        images = images.to(device)
        labels = labels.to(device)
        
        # ফরওয়ার্ড পাস
        outputs = model(images)
        loss = criterion(outputs, labels)
        
        # গ্রেডিয়েন্ট রিসেট করা
        optimizer.zero_grad()
        
        # ব্যাকওয়ার্ড পাস এবং অপ্টিমাইজেশন
        loss.backward()
        optimizer.step()
        
    print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}")

ব্যাখ্যা:

ডিভাইস সেট করা:

  • device = torch.device("cuda" if torch.cuda.is_available() else "cpu") দ্বারা ডিভাইস সিলেক্ট করা হয়েছে। যদি GPU উপস্থিত থাকে, তাহলে এটি cuda, নাহলে cpu সিলেক্ট হবে।

ডেটা এবং মডেল মুভ করা:

  • images.to(device) এবং labels.to(device) দ্বারা ডেটা মুভ করা হয়েছে।
  • মডেলও model.to(device) দ্বারা GPU তে মুভ করা হয়েছে।

ফরওয়ার্ড এবং ব্যাকওয়ার্ড পাস:

  • GPU তে ট্রেনিং করার সময় সমস্ত টেন্সর এবং মডেলকে GPU তে স্থানান্তর করা হয় যাতে কম্পিউটেশন দ্রুত হয়।

টিপস:

  • GPU তে ডেটা লোডিং প্যারালালাইজ করতে PyTorch এর DataLoader-এ num_workers প্যারামিটার ব্যবহার করতে পারেন।
  • কোডের শুরুতে torch.backends.cudnn.benchmark = True ব্যবহার করলে CUDA অপ্টিমাইজেশন সক্ষম হয়, যা ট্রেনিং পারফরম্যান্স বাড়াতে পারে।

এভাবে CUDA এবং Torch ইন্টিগ্রেশন করে GPU তে মডেল ট্রেনিং ও ইনফারেন্স করা যায়, যা মডেল ট্রেনিংকে দ্রুত এবং ইফিশিয়েন্ট করে তোলে।

Model এবং Data কে GPU তে স্থানান্তর করা

96
96

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 তে মডেল এবং ডেটা স্থানান্তর করা হয় এবং পারফর্ম্যান্স উন্নত করা যায়।

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

49
49

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