PyTorch
PyTorch إطار عمل مفتوح المصدر بلغة Python لبناء الشبكات العصبية وتدريبها باستخدام موترات GPU والتدرّج التلقائي. تعرّف إلى مفاهيمه الأساسية ومسار نشره.
PyTorch إطار عمل مفتوح المصدر لبناء الشبكات العصبية وتدريبها ونشرها باستخدام Python. ويوفر موترات مسرّعة بواسطة GPU، والاشتقاق التلقائي، ومكتبة من الطبقات والمحسّنات ودوال الخسارة. كما ينفّذ التعليمات البرمجية بشغف، سطرًا تلو الآخر، بحيث تُكتب النماذج وتُصحّح أخطاؤها كما في برامج Python العادية. أُنشئ PyTorch في Facebook AI Research، المعروفة الآن باسم Meta AI، وتخضع إدارته منذ عام 2022 لمؤسسة PyTorch المحايدة تجاه مورّدي التقنية، التابعة لمؤسسة Linux Foundation. ويُستخدم على نطاق واسع في أبحاث التعلم العميق ونماذج الإنتاج في الرؤية الحاسوبية ومعالجة اللغة.
المفاهيم الأساسية#
- الموترات: مصفوفات متعددة الأبعاد، تشبه مصفوفات NumPy، ويمكن أن تكون على CPU أو على مسرّع. يدعم PyTorch وحدات GPU من NVIDIA عبر CUDA، ووحدات GPU من AMD عبر ROCm، وشرائح Apple عبر Metal (MPS)، ويستغرق نقل البيانات بينها استدعاءً واحدًا لـ
.to(device). - Autograd: يسجّل PyTorch عمليات الموترات في رسم بياني للحسابات أثناء تنفيذها. ويجتاز استدعاء
.backward()هذا الرسم البياني بالعكس، ويحسب تدرج الناتج بالنسبة إلى كل موتر يحتاج إليه، وهي خطوة الانتشار العكسي في التدريب. - التنفيذ الشغوف: يُعاد بناء الرسم البياني في كل تمريرة أمامية، لذا يمكن للنماذج استخدام حلقات Python والشروط وعبارات الطباعة، وتشير الأخطاء إلى السطر المحدد الذي تعذّر تنفيذه.
- الوحدات والمحسّنات: توفّر
torch.nnطبقات مثل الالتفاف والانتباه والتطبيع، بينما توفّرtorch.optimمحسّنات مثل SGD وAdam تحدّث الأوزان انطلاقًا من التدرجات المحسوبة. - torch.compile: أُضيفت هذه الميزة في PyTorch 2.0، وهي تلتقط البرنامج الشغوف في صورة رسم بياني وتولّد نوى مدمجة، ما يسرّع التدريب والاستدلال في كثير من الأحيان دون تغيير شيفرة النموذج.
يشغّل المثال أدناه عملية حسابية صغيرة على GPU إن توفرت، ويتيح لـ autograd حساب تدرجها:
import torch
# Use a GPU when PyTorch can see one, otherwise fall back to the CPU
device = "cuda" if torch.cuda.is_available() else "cpu"
# Tensors record the operations applied to them when requires_grad=True
w = torch.tensor([2.0, -1.0], device=device, requires_grad=True)
x = torch.tensor([3.0, 4.0], device=device)
# Ordinary Python runs eagerly: each line executes immediately
loss = (w * x).sum() ** 2
# Autograd walks the recorded graph backward to get d(loss)/dw
loss.backward()
print(f"device={device}, loss={loss.item()}, grad={w.grad.tolist()}")على جهاز لا يحتوي على GPU، يطبع البرنامج device=cpu, loss=4.0, grad=[12.0, 16.0]. قيمة الخسارة هي (2·3 − 1·4)² = 4، ويعيد autograd مشتقتها 2·(w·x)·x = [12, 16] من دون أي حساب تفاضل مكتوب يدويًا؛ وهي الآلية نفسها التي تدرّب الشبكات ذات مليارات الأوزان.
مقارنة PyTorch بالأدوات الأخرى#
- TensorFlow: إطار عمل Google، الذي كان ينشئ رسومًا بيانية ثابتة قبل تشغيلها إلى أن جعل TensorFlow 2 التنفيذ الشغوف هو الخيار الافتراضي. ولا يزال شائعًا في أنظمة الإنتاج المبنية على Keras وأدوات النشر من Google.
- JAX: مكتبة Google العددية التي تحوّل دوال Python النقية باستخدام عمليات
gradوjitوvmapالقابلة للتركيب، وتُصرَّف عبر XLA، وتحظى بشعبية في الأبحاث واسعة النطاق على وحدات TPU. - OpenCV: مكتبة للرؤية الحاسوبية لقراءة الصور وتحويلها وتحليلها باستخدام الخوارزميات التقليدية. غالبًا ما تستخدم مسارات المعالجة OpenCV لتحميل الإطارات ومعالجتها مسبقًا قبل أن يعالجها نموذج PyTorch.
- Hugging Face: منصة ومجموعة مكتبات مبنية إلى حد كبير على PyTorch، وتوفّر مكتبة Transformers التابعة لها نماذج لغوية وبصرية مدرّبة مسبقًا في صورة وحدات PyTorch.
من البحث إلى النشر#
يُحفَظ نموذج PyTorch المدرّب كنقطة تحقق، عادةً في ملف .pt أو .pth يحتوي على أوزانه. ويمكن تشغيله كما هو في خدمة Python، لكن الأجهزة الطرفية والخوادم المحسّنة تحتاج عادةً إلى تحويله إلى بيئة تشغيل مصممة لأجهزتها:
كُتب Ultralytics YOLO26 باستخدام PyTorch: إذ إن yolo26n.pt نقطة تحقق لـ PyTorch، ويجري التدريب باستخدام autograd ومحسّنات PyTorch، وتحول model.export() النموذج إلى تنسيقات النشر هذه، ومنها ONNX وTensorRT وOpenVINO وCore ML وLiteRT.










