Latest Technologies PyTorch এবং DeepSpeed এর সংযোগ গাইড ও নোট

345

PyTorch এবং DeepSpeed একসাথে ব্যবহার করা যেতে পারে বড় মডেলগুলোকে দ্রুত, দক্ষ এবং সাশ্রয়ীভাবে প্রশিক্ষণ দেওয়ার জন্য। DeepSpeed একটি ওপেন-সোর্স লাইব্রেরি যা বড় মডেল প্রশিক্ষণের জন্য বিভিন্ন অপ্টিমাইজেশন প্রযুক্তি সরবরাহ করে, যেমন ZeRO (Zero Redundancy Optimizer), Mixed Precision Training, এবং Activation Checkpointing। PyTorch ব্যবহার করে DeepSpeed এর ক্ষমতা অর্জন করতে হলে কিছু ধাপ অনুসরণ করতে হবে।

PyTorch এবং DeepSpeed সংযোগের প্রক্রিয়া

নিচে PyTorch এবং DeepSpeed সংযোগের ধাপগুলো আলোচনা করা হলো:

ধাপ ১: ইনস্টলেশন

প্রথমে আপনাকে PyTorch এবং DeepSpeed ইনস্টল করতে হবে। PyTorch ইনস্টল করার জন্য আপনার সিস্টেমের CUDA ভার্সন অনুযায়ী নির্দেশনা অনুসরণ করতে হবে।

# PyTorch ইনস্টলেশন উদাহরণ (CUDA 11.3)
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113

# DeepSpeed ইনস্টল করা
pip install deepspeed

ধাপ ২: মডেল এবং ডেটাসেট তৈরি করা

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

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# সিম্পল ডেটাসেট তৈরি
X = torch.randn(1000, 10)  # 1000 নমুনা, 10 বৈশিষ্ট্য
y = torch.randint(0, 2, (1000,))  # 0 বা 1 এর লেবেল

dataset = TensorDataset(X, y)
train_loader = DataLoader(dataset, batch_size=32, shuffle=True)

# কাস্টম মডেল তৈরি
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(10, 64)
        self.fc2 = nn.Linear(64, 32)
        self.fc3 = nn.Linear(32, 2)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        return self.fc3(x)

model = SimpleNN()

ধাপ ৩: DeepSpeed কনফিগারেশন তৈরি করা

একটি DeepSpeed কনফিগারেশন ফাইল তৈরি করুন যেখানে ZeRO অপ্টিমাইজার এবং অন্যান্য প্যারামিটারগুলো নির্ধারণ করা হবে।

{
    "train_batch_size": 32,
    "gradient_accumulation_steps": 2,
    "fp16": {
        "enabled": true  # FP16 Mixed Precision Training
    },
    "zero_optimization": {
        "stage": 2  # ZeRO Stage 2
    },
    "optimizer": {
        "type": "AdamW",
        "params": {
            "lr": 0.001
        }
    }
}

ধাপ ৪: DeepSpeed ব্যবহার করে মডেল ইনিশিয়ালাইজ করা

DeepSpeed ব্যবহার করে মডেল এবং অপ্টিমাইজার ইনিশিয়ালাইজ করুন।

import deepspeed

# DeepSpeed কনফিগারেশন লোড করা
deepspeed_config = "deepspeed_config.json"

# DeepSpeed ইনিশিয়ালাইজ করা
model_engine, optimizer, _, _ = deepspeed.initialize(
    config=deepspeed_config,
    model=model,
    model_parameters=model.parameters()
)

ধাপ ৫: কাস্টম ট্রেইনিং লুপ তৈরি করা

এখন, আমরা কাস্টম ট্রেইনিং লুপ তৈরি করবো যেখানে DeepSpeed এর সুবিধাগুলো অন্তর্ভুক্ত থাকবে।

# Training Loop
num_epochs = 10
for epoch in range(num_epochs):
    model_engine.train()  # Training মোডে মডেল সেট করা
    running_loss = 0.0

    for inputs, labels in train_loader:
        inputs, labels = inputs.to(model_engine.local_rank), labels.to(model_engine.local_rank)

        # Optimizer গ্র্যাডিয়েন্ট রিসেট করা
        optimizer.zero_grad()

        # Forward pass
        outputs = model_engine(inputs)
        loss = nn.CrossEntropyLoss()(outputs, labels)

        # Backward pass
        model_engine.backward(loss)
        model_engine.step()  # Optimizer স্টেপ

        running_loss += loss.item()

    epoch_loss = running_loss / len(train_loader)
    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {epoch_loss:.4f}')

ধাপ ৬: মডেল মূল্যায়ন করা

Training সম্পন্ন হলে, মডেলটি একটি validation dataset এ মূল্যায়ন করুন।

def evaluate_model(model_engine, dataloader):
    model_engine.eval()  # Evaluation মোডে মডেল সেট করা
    total_loss = 0.0
    total_correct = 0

    with torch.no_grad():
        for inputs, labels in dataloader:
            inputs, labels = inputs.to(model_engine.local_rank), labels.to(model_engine.local_rank)
            outputs = model_engine(inputs)
            loss = nn.CrossEntropyLoss()(outputs, labels)
            total_loss += loss.item()
            total_correct += (outputs.argmax(dim=1) == labels).sum().item()

    avg_loss = total_loss / len(dataloader)
    accuracy = total_correct / len(dataloader.dataset)
    print(f'Validation Loss: {avg_loss:.4f}, Accuracy: {accuracy:.4f}')

# Validation ডেটাসেট তৈরি করা (ডামি)
val_dataset = TensorDataset(X, y)  # একই ডেটাসেট ব্যবহার করা
val_loader = DataLoader(val_dataset, batch_size=32)

evaluate_model(model_engine, val_loader)

উপসংহার

PyTorch এবং DeepSpeed একসঙ্গে ব্যবহৃত হলে বড় মডেল প্রশিক্ষণের জন্য অত্যন্ত কার্যকরী। DeepSpeed এর মাধ্যমে ZeRO optimization, mixed precision training এবং অন্যান্য memory optimization techniques ব্যবহার করে training efficiency এবং scalability বৃদ্ধি করা যায়। উপরিউক্ত উদাহরণটি PyTorch এবং DeepSpeed এর সাথে একটি সিম্পল নিউরাল নেটওয়ার্ক প্রশিক্ষণের পুরো প্রক্রিয়া দেখায়।

Content added By
Promotion

Are you sure to start over?

Loading...