اجرای کدهای مقدماتی یادگیری ماشین روی CPU معمولاً بدون مشکل پیش میرود، اما بهمحض ورود به دنیای شبکههای عصبی پیچشی یا مدلهای زبانی، زمان پردازش پردازندههای معمولی ساعتها یا روزها طول میکشد. برای کارهای جدی یادگیری عمیق، استفاده از شتابدهندههای گرافیکی (GPU) انتخابی اجتنابناپذیر است تا فرآیندهای طولانی در چند دقیقه به سرانجام برسند.
اگر کارت گرافیک اختصاصی NVIDIA روی سیستم شخصی ندارید، سرویسهای ابری مانند Google Colab امکان دسترسی رایگان به پردازندههای گرافیکی را فراهم میکنند. البته در نظر داشته باشید که برخی ارائهدهندگان ابری خارجی دسترسی مستقیم از IP ایران را مسدود یا محدود کردهاند؛ بنابراین بررسی پایداری دسترسی پیش از آغاز کار ضروری است. همچنین به دلیل عدم پشتیبانی کارتهای بانکی ایرانی در سرویسهای پرداختی بینالمللی، گزینههای رایگان مانند Colab یا اجرای مرحلهبهمرحله روی سختافزار محلی اهمیت دوچندانی پیدا میکنند.
در این درس یاد میگیرید چطور پیکربندی CUDA و شناسایی کارت گرافیک را در PyTorch بررسی کنید، پروژههای خود را روی Google Colab اجرا کنید و با سنجش سرعت ضرب ماتریسی، تفاوت کارایی CPU و GPU را بهصورت عملی ببینید.
آموزش مدل روی CPU برای یادگیری کافی است؛ اما برای کارهای واقعی، حتماً به GPU نیاز دارید.
اهداف یادگیری
- بررسی در دسترس بودن GPU محلی با
nvidia-smiو API مربوط به CUDA در PyTorch - تنظیم Google Colab با GPU مدل T4 برای اجرای رایگان آزمایشها در فضای ابری
- بنچمارک ضرب ماتریسی روی CPU در مقایسه با GPU و اندازهگیری میزان افزایش سرعت
- تخمین بزرگترین مدلی که در VRAM شما جا میشود، با استفاده از قانون سرانگشتی fp16
صورت مسئله
بیشتر درسهای فازهای 1 تا 3 بهخوبی روی CPU اجرا میشوند. اما بهمحض شروع آموزش شبکههای عصبی پیچشی (CNN)، ترنسفورمرها یا مدلهای زبانی بزرگ (LLMها) در فازهای 4 به بعد، به شتابدهندهی GPU نیاز پیدا خواهید کرد. فرآیند آموزشی که روی CPU نزدیک به 8 ساعت طول میکشد، روی GPU ظرف 10 دقیقه تمام میشود.
برای دسترسی به GPU سه راه پیش رو دارید: GPU محلی، GPU ابری، یا Google Colab (رایگان).
مفاهیم پایه
Your options:
1. Local NVIDIA GPU
Cost: $0 (you already have it)
Setup: Install CUDA + cuDNN
Best for: Regular use, large datasets
2. Google Colab (free tier)
Cost: $0
Setup: None
Best for: Quick experiments, no GPU at home
3. Cloud GPU (Lambda, RunPod, Vast.ai)
Cost: $0.20-2.00/hr
Setup: SSH + install
Best for: Serious training, large models
پیادهسازی گامبهگام
گزینهی 1: GPU محلی NVIDIA
ابتدا بررسی کنید که آیا سیستم شما GPU دارد یا نه:
nvidia-smi
سپس PyTorch را همراه با CUDA نصب کنید. در لینوکس، پکیج پیشفرض (Wheel) همراه با CUDA عرضه میشود. در ویندوز، دستور متناسب با CUDA را از بخش انتخابگر وبسایت pytorch.org کپی کنید.
pip install torch torchvision torchaudio
در مرحلهی بعد، مطمئن شوید PyTorch پردازندهی گرافیکی شما را میشناسد:
import torch
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA version: {torch.version.cuda}")
if torch.cuda.is_available():
print(f"GPU: {torch.cuda.get_device_name(0)}")
print(f"Memory: {torch.cuda.get_device_properties(0).total_memory / 1e9:.1f} GB")
گزینهی 2: Google Colab
- به نشانی colab.research.google.com بروید.
- مسیر Runtime > Change runtime type > T4 GPU را دنبال کنید.
- دستور
!nvidia-smiرا اجرا کنید تا اتصال تأیید شود.
دفترچههای (Notebooks) این دوره را مستقیماً در Colab بارگذاری کنید.
گزینهی 3: GPU ابری
برای کار با سرویسهایی مثل Lambda Labs، RunPod یا Vast.ai:
ssh user@your-gpu-instance
pip install torch torchvision torchaudio
python -c "import torch; print(torch.cuda.get_device_name(0))"
به GPU دسترسی ندارید؟ اصلاً جای نگرانی نیست.
بیشتر درسها روی CPU کار میکنند. مواردی هم که به GPU نیاز دارند، مشخص شدهاند و لینک Colab برای اجرای آنها قرار داده شده است.
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using: {device}")
پیادهسازی: مقایسهی سرعت GPU و CPU
import torch
import time
size = 5000
a_cpu = torch.randn(size, size)
b_cpu = torch.randn(size, size)
start = time.time()
c_cpu = a_cpu @ b_cpu
cpu_time = time.time() - start
print(f"CPU: {cpu_time:.3f}s")
if torch.cuda.is_available():
a_gpu = a_cpu.to("cuda")
b_gpu = b_cpu.to("cuda")
torch.cuda.synchronize()
start = time.time()
c_gpu = a_gpu @ b_gpu
torch.cuda.synchronize()
gpu_time = time.time() - start
print(f"GPU: {gpu_time:.3f}s")
print(f"Speedup: {cpu_time / gpu_time:.0f}x")
تمرینها
- بنچمارک بالا را اجرا کرده و زمان پردازش روی CPU را با GPU مقایسه کنید.
- اگر GPU ندارید، کد را روی Google Colab اجرا کرده و نتایج را بسنجید.
- مقدار حافظهی GPU خود را بررسی کرده و حداکثر اندازهی مدلی را که در این حافظه جا میشود تخمین بزنید (قانون سرانگشتی: 2 بایت به ازای هر پارامتر در دقت fp16).
راهنماییها
تمرین 1. کد بخش پیادهسازی را همانطور که هست اجرا کنید؛ سپس زمان CPU، زمان GPU و خط مربوط به افزایش سرعت را یادداشت کنید. کد را یک بار دیگر هم اجرا کنید؛ چون اجرای اول روی GPU شامل هزینهی اولیهی راهاندازی است، بنابراین اعداد دور دوم ملاک اصلی مقایسه هستند.
تمرین 2. در Colab مسیر Runtime > Change runtime type > GPU را انتخاب کرده و کد بنچمارک را داخل یک سلول قرار دهید. ابتدا در سلول دیگری دستور !nvidia-smi را اجرا کنید؛ نتیجهی بنچمارک تنها زمانی معنا دارد که نام GPU در خروجی این دستور دیده شود.
تمرین 3. مقدار کل حافظه را مطابق با فایل code/gpu_check.py با دستور torch.cuda.get_device_properties(0).total_memory / 1e9 بخوانید. حافظه بر حسب بایت را بر 2 تقسیم کنید تا تعداد پارامترها در حالت fp16 به دست آید؛ سپس مقداری حاشیهی خالی هم در نظر بگیرید، چون اکتیویشنها (Activations) و بافت اجرایی CUDA (یا همان CUDA Context) نیز حافظه مصرف میکنند.
اصطلاحات کلیدی
| اصطلاح | در گفتگوهای عامیانه | معنای دقیق فنی |
|---|---|---|
| CUDA | «برنامهنویسی GPU» | پلتفرم رایانش موازی شرکت NVIDIA که امکان اجرای کد روی GPU را فراهم میکند |
| VRAM | «حافظهی GPU» | حافظهی ویدیویی (VRAM) روی GPU، مجزا از رم سیستم که اندازهی مدل را محدود میکند |
| fp16 | «دقت نیمه (Half Precision)» | ممیز شناور 16 بیتی که با کمترین افت دقت، نصف fp32 حافظه مصرف میکند |
| Tensor Core | «سختافزار اختصاصی ماتریس» | هستههای پردازشی اختصاصی در GPU برای ضرب ماتریسها که بین 4 تا 8 برابر سریعتر از هستههای معمولی هستند |
