فاز 0 · درس 3

راه‌اندازی GPU و سرویس‌های ابری برای یادگیری عمیق

نوع
ساختنی
زمان
حدود 45 دقیقه
زبان‌ها
Python
یک کارت گرافیک پردازش ابری در کنار ریزتراشه‌ها و پرتوهای نور متصل به ابر
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. مفاهیم پایه
  4. پیاده‌سازی گام‌به‌گام
  5. گزینه‌ی 1: GPU محلی NVIDIA
  6. گزینه‌ی 2: Google Colab
  7. گزینه‌ی 3: GPU ابری
  8. به GPU دسترسی ندارید؟ اصلاً جای نگرانی نیست.
  9. پیاده‌سازی: مقایسه‌ی سرعت GPU و CPU
  10. تمرین‌ها
  11. راهنمایی‌ها
  12. اصطلاحات کلیدی

اجرای کدهای مقدماتی یادگیری ماشین روی 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
ارسال پردازش به شتاب‌دهندهیک مسیر روی CPU کُند پیش می‌رود، مسیر دیگر در GPU جریان دارد
DISPATCH TO THE ACCELERATORThe GPU wins because matmuls are thousands of independent multiply-adds, exactly what its cores parallelize. The same batch trickles through the CPU one chunk at a time but streams through the GPU, which is why a training run that takes 8 hours on CPU takes about 10 minutes on a T4. Verify the lane exists first: nvidia-smi, then torch.cuda.is_available().matmulدسته (batch)CPUGPUیک دوره: حدود 8 ساعتحدود 10 دقیقه · 48 برابرکارهای یکسان، دو بستر پردازش
برتری GPU به این دلیل است که ضرب‌های ماتریسی شامل هزاران عملیات ضرب و جمع مستقل هستند؛ یعنی دقیقاً همان چیزی که هسته‌های آن موازی‌سازی می‌کنند. همان دسته داده روی CPU قطعه‌به‌قطعه و آرام حرکت می‌کند، اما در GPU به صورت جریانی و یکپارچه پردازش می‌شود؛ به همین دلیل است که یک دور آموزش که روی CPU حدود 8 ساعت طول می‌کشد، روی یک T4 تقریباً 10 دقیقه زمان می‌برد. ابتدا با nvidia-smi و سپس با torch.cuda.is_available() مطمئن شوید این مسیر مهیا است.

پیاده‌سازی گام‌به‌گام

گزینه‌ی 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

  1. به نشانی colab.research.google.com بروید.
  2. مسیر Runtime > Change runtime type > T4 GPU را دنبال کنید.
  3. دستور !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")

تمرین‌ها

  1. بنچمارک بالا را اجرا کرده و زمان پردازش روی CPU را با GPU مقایسه کنید.
  2. اگر GPU ندارید، کد را روی Google Colab اجرا کرده و نتایج را بسنجید.
  3. مقدار حافظه‌ی 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 برابر سریع‌تر از هسته‌های معمولی هستند

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسچرا GPU برای آموزش شبکه‌های عصبی سریع‌تر از CPU است؟
  2. پیش از درسمنظور از VRAM چیست؟
  3. پس از درسکدام دستور شناسایی GPU انویدیا را بررسی کرده و وضعیت فعلی آن را نشان می‌دهد؟
  4. پس از درسهنگام بنچمارک ضرب ماتریسی در GPU در برابر CPU، چرا باید پیش از اندازه‌گیری زمان GPU دستور torch.cuda.synchronize() را فراخوانی کرد؟
  5. پس از درسبر اساس قاعده سرانگشتی fp16، تقریباً چند پارامتر درون 24 گیگابایت VRAM جای می‌گیرد؟

سؤالات متداول

چگونه مطمئن شویم PyTorch به درستی به GPU متصل شده است؟

ابتدا دستور nvidia-smi را در ترمینال اجرا کنید تا کارت شناسایی شود، سپس در پایتون عبارت torch.cuda.is_available() را فراخوانی کنید که در صورت شناسایی صحیح، مقدار True را برمی‌گرداند.

آیا بدون داشتن کارت گرافیک گران‌قیمت هم می‌توان مدل‌های یادگیری عمیق را اجرا کرد؟

بله؛ بیشتر مفاهیم پایه روی CPU قابل اجرا هستند و برای پردازش‌های سنگین‌تر نیز می‌توانید از پردازنده‌های رایگان T4 در Google Colab استفاده کنید.

چطور حداکثر اندازه مدلی را که در حافظه کارت گرافیک جا می‌شود تخمین بزنیم؟

با قانون سرانگشتی دقت fp16، هر پارامتر مدل به 2 بایت حافظه نیاز دارد. حجم کل حافظه VRAM را بر 2 تقسیم کنید و مقداری فضا نیز برای داده‌های میانی (اکتیویشن‌ها) و بافت CUDA خالی بگذارید.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.