GPU (Graphics Processing Unit)
وحدة معالجة الرسومات (GPU) معالج يضم آلاف الأنوية ومصمم لإجراء العمليات الحسابية بالتوازي، ما يجعله العتاد الأساسي لتدريب نماذج التعلم العميق وتشغيلها.
وحدة معالجة الرسومات (GPU) معالج يضم آلاف الأنوية البسيطة التي تنفذ العملية نفسها على أجزاء كثيرة من البيانات في آن واحد. صُممت وحدات GPU لعرض الرسوميات ثلاثية الأبعاد، ما يتطلب حساب ملايين البكسلات والرؤوس بالتوازي، وأصبحت العتاد الرئيسي في التعلّم العميق لأن تدريب الشبكات العصبية واستدلالها يعتمدان أساسًا على ضرب المصفوفات، وهي عملية قابلة للتوازي بالطريقة نفسها. أتاحت منصة CUDA من NVIDIA، التي صدرت عام 2007، برمجة وحدات GPU الخاصة بها لأغراض الحوسبة العامة؛ وفي 2012 فازت شبكة AlexNet، التي دُرّبت مدة خمسة إلى ستة أيام على وحدتي NVIDIA GTX 580، بتحدي ImageNet بنسبة خطأ ضمن أفضل 5 بلغت 15.3%، مقابل 26.2% للوصيف. واليوم تعمل PyTorch وTensorFlow وJAX على وحدات NVIDIA GPU عبر CUDA، وعلى وحدات AMD GPU عبر ROCm، وعلى شرائح Apple عبر Metal، فيما تدرّب مجموعات تضم آلاف وحدات GPU أكبر النماذج التأسيسية.
كيف تسرّع وحدات GPU التعلّم العميق#
تخصص وحدة CPU معظم مساحة الشريحة لذاكرات التخزين المؤقت ومنطق التحكم، كي تنفذ بضعة أنوية الشيفرة المتفرعة بسرعة. أما وحدة GPU فتخصص تلك المساحة للحساب: إذ تُقسّم وحدة NVIDIA GPU إلى وحدات معالجة متعددة التدفقات، تنفذ كل منها مجموعات من 32 خيطًا، تُسمى مجموعات الخيوط، وتنفذ التعليمة نفسها على بيانات مختلفة. وبينما تنتظر بعض مجموعات الخيوط الذاكرة، تحسب مجموعات أخرى، فتظل الشريحة مشغولة ما دام العمل المتوازي كافيًا. ومنذ جيل Volta في 2017، تضم وحدات NVIDIA GPU أيضًا أنوية Tensor، وهي وحدات تضرب مصفوفات صغيرة في خطوة واحدة بدقة مخفضة، وتشمل الآن FP8 وFP4 منذ جيل Blackwell. تبلغ ذروة NVIDIA A100 مقدار 19.5 TFLOPS في حساب FP32 القياسي و312 TFLOPS في BF16 على أنوية Tensor؛ ولهذا يستخدم معظم التدريب على وحدات GPU الدقة المختلطة. يقيس هذا الرمز زمن عملية ضرب المصفوفات نفسها على CPU وGPU:
import time
import torch
gpu = torch.accelerator.current_accelerator() # cuda, mps, or xpu device on this machine
a = torch.randn(4096, 4096)
b = torch.randn(4096, 4096)
for device in (torch.device("cpu"), gpu):
x, y = a.to(device), b.to(device)
x @ y # warm-up run
torch.accelerator.synchronize()
start = time.perf_counter()
for _ in range(10):
x @ y
torch.accelerator.synchronize() # GPU calls return immediately, so wait for them to finish
seconds = (time.perf_counter() - start) / 10
print(f"{device.type}: {seconds * 1000:.1f} ms per multiply, {2 * 4096**3 / seconds / 1e12:.1f} TFLOPS")على حاسوب محمول بمعالج Apple M5 Pro، يطبع الرمز cpu: 80.0 ms per multiply, 1.7 TFLOPS وmps: 18.3 ms per multiply, 7.5 TFLOPS، ما يعني أن وحدة GPU المدمجة في الحاسوب المحمول أسرع بنحو 4.4 مرات في FP32. وتزيد وحدات GPU في مراكز البيانات هذا الفارق، عبر زيادة عدد الأنوية واستخدام ذاكرة عالية النطاق الترددي (HBM) تنقل عدة تيرابايتات في الثانية، بما يكفي لتزويد الأنوية بالأوزان والتنشيطات. كما تحدد ذاكرة GPU، التي تُسمى غالبًا VRAM، حجم النموذج وحجم الدفعة اللذين يلائمان جهازًا واحدًا، وتُستخدم تقنيات مثل نقاط تحقق التدرج والتدريب الموزع لتجاوز هذا الحد.
تدريب النماذج ونشرها على وحدات GPU#
لا تظل وحدة GPU مشغولة أثناء مهمة التدريب إلا إذا واكبها باقي مسار العمل: يجب أن تفكّ عمال CPU ترميز الصور وتزيد بياناتها بسرعة كافية، وأن تكون الدُفعات كبيرة بما يكفي لشغل الأنوية، وأن تُنفّذ العمليات الحسابية بدقة منخفضة على أنوية Tensor. ويشير انخفاض استخدام GPU عادةً إلى وجود مشكلة في إحدى هذه الخطوات:
يدرّب يدرّب Ultralytics YOLO افتراضيًا على أول GPU متوافق مع CUDA عند توفره، ويقبل الوسيطة device=[0, 1] للتدريب باستخدام عدة وحدات GPU، ويشغّل AutoBatch عند تمرير الوسيطة batch=-1، إذ يقيس الذاكرة الحرة في GPU ويختار حجم دفعة يستهلك نحو 60% منها. ويمكن للفرق التي لا تملك عتادًا محليًا اختيار وحدة GPU سحابية على Ultralytics Platform لكل تشغيل تدريبي. وللاستدلال، يعالج نموذج YOLO26n المُصدّر إلى TensorRT صورةً بدقة 640 بكسل في 1.7 مللي ثانية على وحدة GPU من نوع NVIDIA T4، مقارنةً بـ38.9 مللي ثانية عند استخدام ONNX على CPU. يدرّب هذا المقطع البرمجي YOLO26 على أول GPU باستخدام AutoBatch:
from ultralytics import YOLO
# حمّل أصغر نموذج لكشف الكائنات من YOLO26
model = YOLO("yolo26n.pt")
# درّب على GPU 0، ودع AutoBatch يضبط حجم الدفعة ليناسب ذاكرة GPU
results = model.train(data="coco8.yaml", epochs=3, imgsz=640, device=0, batch=-1)GPU وCPU وTPU وNPU#
- CPU: بضعة أنوية قوية للشيفرة العامة المتفرعة. تتولى وحدات CPU تحميل البيانات ومعالجتها مسبقًا في معظم مسارات التدريب، كما تتولى الاستدلال عند عدم توفر مسرّع.
- GPU: آلاف الأنوية القابلة للبرمجة، إلى جانب أنوية Tensor. تشغّل وحدات GPU معظم النماذج وأطر العمل، وتتوفر من عدة مورّدين وفي جميع خدمات الحوسبة السحابية الكبرى.
- TPU: شريحة متخصصة من Google مبنية حول وحدات كبيرة لضرب المصفوفات. تضحّي وحدات TPU بمرونة GPU لتحسين الكفاءة في أعباء عمل المصفوفات الكثيفة الكبيرة، وتتوفر عبر Google Cloud.
- NPU: مسرّع للشبكات العصبية منخفض الطاقة في الهواتف والحواسيب المحمولة والأجهزة الطرفية، يُستخدم للاستدلال بدلًا من التدريب.
تطبيقات عملية#
- تدريب النماذج الكبيرة: تُدرّب نماذج اللغة والرؤية التي تضم مليارات المعلمات على مجموعات من آلاف وحدات GPU في مراكز البيانات، تتصل عبر روابط عالية السرعة مثل NVLink وInfiniBand.
- تحليلات الفيديو في الزمن الحقيقي: تستطيع وحدة GPU واحدة تشغيل كشف الكائنات وتتبعها في تدفقات كاميرات كثيرة في آن واحد لمراقبة حركة المرور وتحليلات البيع بالتجزئة وفحص المصانع.
- الروبوتات والمركبات ذاتية القيادة: تشغّل وحدات GPU المدمجة، مثل NVIDIA Jetson، نماذج الإدراك على متن المركبة، إذ يؤدي إرسال بيانات الكاميرا إلى خادم إلى تأخير مفرط.
- التصوير الطبي: تعالج وحدات GPU أحجام التصوير المقطعي المحوسب والرنين المغناطيسي ثلاثية الأبعاد الكبيرة لتقسيم الأعضاء والأورام في ثوانٍ بدلًا من دقائق.










