অধ্যায়Phase 7 · প্রোডাকশন ও ডিপ্লয়মেন্ট
7.5 10 মিনিট পড়া

GPU Acceleration

CUDA ও cuDNN basics।

🎬 গল্প দিয়ে শুরু
CPU-তে training সারা রাত, GPU-তে ১০ মিনিট। কেন? — parallelism। GPU হাজার হাজার core একসাথে চালায়। কিন্তু GPU efficiently ব্যবহার করতে কিছু rule জানা চাই।

GPU stack

text
Application (PyTorch / TF / ONNX RT)
        ↓
cuDNN  (Conv, RNN primitives)
cuBLAS (Matrix multiply)
        ↓
CUDA Toolkit (nvcc, runtime)
        ↓
NVIDIA Driver
        ↓
GPU hardware (SM, Tensor Cores, VRAM)

Setup verify

bash
nvidia-smi                # driver + GPU + VRAM
nvcc --version            # CUDA compiler version
python
import torch
print(torch.cuda.is_available())          # True
print(torch.cuda.get_device_name(0))
print(torch.backends.cudnn.version())

Tensor Cores ও mixed precision

  • Volta+ GPU-তে Tensor Core — FP16/BF16 matmul হাজারগুণ দ্রুত।
  • Auto Mixed Precision (AMP) — accuracy বজায় রেখে 2× speedup, 50% VRAM সাশ্রয়।
python
AMP training
from torch.amp import autocast, GradScaler
scaler = GradScaler("cuda")

for x, y in loader:
    x, y = x.cuda(non_blocking=True), y.cuda(non_blocking=True)
    opt.zero_grad()
    with autocast("cuda", dtype=torch.float16):
        loss = criterion(model(x), y)
    scaler.scale(loss).backward()
    scaler.step(opt)
    scaler.update()

DataLoader bottleneck দূর করা

  • num_workers = 4–8 (CPU core অনুযায়ী)।
  • pin_memory=True — host→device dma দ্রুত।
  • persistent_workers=True — epoch-এ worker recycle না।
  • Image decode GPU-তে: NVIDIA DALI, torchvision.io।
python
loader = DataLoader(ds, batch_size=64, shuffle=True,
                    num_workers=8, pin_memory=True,
                    persistent_workers=True, prefetch_factor=4)

Inference-এ GPU best practice

  • torch.no_grad() বা torch.inference_mode() — গ্রাফ ও memory সাশ্রয়।
  • Half precision: model.half(); input.half()।
  • torch.compile(model) — PyTorch 2.x kernel fusion।
  • CUDA Graphs — repeated workflow-এ launch overhead শূন্য।
  • Pinned memory + async transfer।
python
model = torch.compile(model.eval().cuda().half())
with torch.inference_mode():
    out = model(x.cuda().half())

Multi-GPU

  • DataParallel — সহজ কিন্তু পুরনো, GIL bottleneck।
  • DistributedDataParallel (DDP) — production standard, 1 process / GPU।
  • FSDP / DeepSpeed — বড় model (>10 B param) shard করে।
bash
torchrun --nproc_per_node=4 train_ddp.py

Monitoring tools

  • nvidia-smi dmon — real-time util/mem/power।
  • nvtop — htop-এর মতো interactive।
  • Nsight Systems — timeline profiling (CPU↔GPU gap)।
  • PyTorch Profiler — operator-wise breakdown।
প্র্যাকটিস টাস্ক
  1. ResNet50 training-এ AMP on/off করে speedup ও VRAM measure করুন।
  2. DataLoader num_workers 0/4/8 — epoch time graph করুন।
  3. torch.compile YOLOv8 inference-এ speedup verify করুন।