Chapter 52
GPU অপ্টিমাইজেশন
GPU Optimization
🏎️ GPU-কে ঘুমাতে দেবেন না
Training/inference-এ GPU utilization ৩০–৪০% হলে অপচয় হচ্ছে। Mixed precision, batching, data pipeline, kernel fusion — কয়েকটি tweak-এই ২–৫x boost।
Monitoring
nvidia-smi -l 1 # 1s interval
nvtop # interactive (top-এর GPU version)
nsys profile python train.py # NVIDIA Nsight SystemsMixed Precision (AMP)
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
for x, y in loader:
opt.zero_grad()
with autocast(dtype=torch.bfloat16):
out = model(x.cuda(non_blocking=True))
loss = criterion(out, y.cuda(non_blocking=True))
scaler.scale(loss).backward()
scaler.step(opt); scaler.update()Data Pipeline
num_workers= CPU core সংখ্যা।pin_memory=True+non_blocking=True।persistent_workers=True— epoch-গুলোতে worker রিইউজ।- Prefetch, augmentation GPU-তে (DALI, Kornia)।
Batch Size & Gradient Accumulation
ACC = 4
for i, (x,y) in enumerate(loader):
loss = model(x).loss / ACC
loss.backward()
if (i+1) % ACC == 0:
opt.step(); opt.zero_grad()Memory Saving Tricks
- Gradient checkpointing: recompute activations।
- 8-bit/4-bit optimizer: bitsandbytes।
- FlashAttention: attention দ্রুত + কম VRAM।
- torch.compile(): kernel fusion (PyTorch 2+)।
- Channels-last: conv-এ
memory_format=torch.channels_last।
Multi-GPU
- DDP: data parallel — সবচেয়ে কমন।
- FSDP / DeepSpeed ZeRO: model shard, বড় LLM-এ।
- Tensor/Pipeline parallel: Megatron-LM style।
Inference Speed
- FP16/INT8 quantization।
- TensorRT / ONNX Runtime / TorchScript।
- Dynamic batching (Triton, vLLM)।
- KV-cache, speculative decoding (LLM)।
💡 আগে মাপুন, পরে অপ্টিমাইজ
Profile না করেই অপ্টিমাইজ করা bug-source। আগে
torch.profiler বা Nsight দিয়ে bottleneck খুঁজুন — data loading না GPU compute?সারসংক্ষেপ
✨ এই অধ্যায়ে যা শিখলাম
- AMP, data pipeline, batching — quick wins।
- Gradient checkpoint, FlashAttention, torch.compile।
- DDP/FSDP — multi-GPU scaling।