Tensor Parallelism
يقسم التوازي الموتر مصفوفات أوزان الطبقة بين وحدات GPU، بحيث تحسب كل وحدة جزءًا من كل عملية. يتناول هذا الموضوع الأساليب ذات الصلة والاستخدامات وPyTorch.
التوازي على مستوى الموترات تقنية متقدمة في التدريب الموزع تُستخدم في تعلّم الآلة لتقسيم البنى الرياضية الفردية الكبيرة، أو الموترات، عبر عدة مسرّعات للأجهزة مثل وحدات معالجة الرسومات (GPUs) أو وحدات TPU. عند تدريب نماذج التعلّم العميق الضخمة، قد يتجاوز عدد المعلمات بسهولة سعة ذاكرة جهاز واحد. وبدلًا من وضع طبقة كاملة من الشبكة العصبية على وحدة GPU واحدة، يقسّم التوازي على مستوى الموترات مصفوفات الأوزان ويوزّع العمليات الرياضية (مثل ضرب المصفوفات) عبر عدة أجهزة في مجموعة. ويتيح ذلك للنموذج الاستفادة من الذاكرة وقوة المعالجة المجمعتين في كامل إعداد الأجهزة، وتنفيذ الحسابات المتوازية وفق نموذج برنامج واحد وبيانات متعددة (SPMD)، مع مزامنة النتائج عبر وصلات عالية السرعة مثل NVIDIA NVLink.
آلية عمل التوازي على مستوى الموترات#
في صميم الشبكة العصبية عمليات ضرب المصفوفات. يوزع التوازي الموترّي هذه العمليات بتقسيم المصفوفات إما حسب الصفوف أو الأعمدة. فعلى سبيل المثال، في طبقة متصلة بالكامل أو آلية انتباه ضمن Transformer، قد تحسب إحدى وحدات GPU النصف الأيسر من المصفوفة، بينما تحسب أخرى النصف الأيمن. وبعد انتهاء الحسابات المتوازية، تتواصل الأجهزة، غالباً باستخدام عمليات التجميع الجماعي All-Reduce السريعة، لتجميع النتائج الجزئية قبل تمرير الموتر الكامل إلى الطبقة التالية. وتعمل تطورات أكاديمية حديثة في عام 2025 على تحسين هذه العملية أكثر عبر إدخال تنشيطات متزامنة جزئياً لتقليل عبء الاتصال الذي يشكل عادةً عنق زجاجة لمجموعات الحوسبة الكبيرة.
التمييز بين تقنيات التوازي ذات الصلة#
يتطلب فهم موضع التوازي على مستوى الموترات ضمن المشهد الأوسع للحوسبة الموزعة تمييزه عن الاستراتيجيات الشائعة الأخرى:
- التوازي على مستوى الموترات مقابل التوازي على مستوى النموذج: يُعد التوازي على مستوى الموترات فئة فرعية محددة للغاية من التوازي على مستوى النموذج. فبينما يشير التوازي العام على مستوى النموذج إلى تقسيم النموذج بين الأجهزة بأي طريقة، يقتصر التوازي على مستوى الموترات تحديدًا على تقسيم الموترات الفردية داخل طبقة واحدة.
- التوازي الموترّي مقابل التوازي عبر خطوط الأنابيب: يُعد التوازي عبر خطوط الأنابيب شكلاً آخر من توازي النماذج، إذ يقسم الشبكة حسب العمق؛ فتُوضع الطبقات الأولى على GPU 0، والطبقات التالية على GPU 1، وهكذا. وينشئ ذلك تبعيات متسلسلة تُعرف بفقاعات خط الأنابيب. أما التوازي الموترّي فيقسم الطبقات نفسها وينفذها في الوقت ذاته دون تأخير متسلسل، لكنه يتطلب نطاقاً ترددياً أعلى بكثير للشبكة.
- التوازي على مستوى الموترات مقابل توازي البيانات: في توازي البيانات، يُنسخ النموذج بأكمله بالكامل على كل وحدة GPU، ولا يُقسّم بين الأجهزة سوى مجموعة بيانات التدريب. وبالنسبة إلى البنى المحسّنة بكفاءة مثل Ultralytics YOLO26، التي تلائم وحدات GPU الحديثة بسهولة، تكون طريقة توازي البيانات عبر
DistributedDataParallelفي PyTorch هي الافتراضية. ولا تكون هناك حاجة عادةً إلى التوازي على مستوى الموترات إلا عندما تتجاوز معلمات طبقة واحدة ذاكرة VRAM للأجهزة، ما يؤدي إلى أخطاء نفاد الذاكرة (OOM).
تطبيقات عملية#
لا غنى عن التوازي على مستوى الموترات في البنى التحتية الحديثة للذكاء الاصطناعي، ولا سيما للبنى المتطورة التي تتطلب نطاقًا حاسوبيًا هائلًا:
- تدريب نماذج اللغة الكبيرة (LLMs): تعتمد النماذج الأساسية الضخمة مثل Llama 3 من Meta على التوازي الموترّي، الذي يُنفذ غالباً باستخدام أطر مثل NVIDIA Megatron-LM، رغم أن DeepSeek V3 تدرّب، على نحو ملحوظ، من دونه بالاعتماد على التوازي عبر خطوط الأنابيب وتوازي الخبراء. وبما أن الأبعاد المخفية ورؤوس الانتباه في هذه النماذج ضخمة للغاية، فإن تقسيمها على عقدة تضم 8 وحدات GPU ضروري للتدريب بكفاءة والحفاظ على زمن استجابة منخفض أثناء الاستدلال في الوقت الفعلي.
- نماذج الرؤية الكبيرة (LVMs) والتوليد ثلاثي الأبعاد: مع توسع الرؤية الحاسوبية نحو أنظمة استدلال متعددة الوسائط ضخمة، يستخدم الباحثون التوازي الموترّي مع التوازي عبر خطوط الأنابيب على خدمات مثل AWS SageMaker لتدريب محولات رؤية عملاقة (ViTs). وتتيح هذه التقنية معالجة صور عالية الدقة وتوليد فيديو يتطلبان كتل ذاكرة متصلة هائلة.
تنفيذ التوازي على مستوى الموترات في PyTorch#
كان على المهندسين تاريخيًا كتابة منطق موزع مخصص ومعقد لتقسيم الموترات. وقد قدّم PyTorch مؤخرًا DTensor (الموتر الموزع)، ما بسّط سير العمل هذا بطبيعته. فيما يلي مثال على إنشاء موتر مقسّم حسب الصفوف باستخدام واجهة API الرسمية للموتر الموزع في PyTorch:
import torch
from torch.distributed.device_mesh import init_device_mesh
from torch.distributed.tensor import Shard, distribute_tensor
# Initialize a 1D device mesh across 2 GPUs
mesh = init_device_mesh("cuda", (2,))
# Create a standard PyTorch tensor (e.g., representing a layer's weights)
local_tensor = torch.randn(1024, 1024)
# Distribute the tensor across the GPUs by sharding along the first dimension (row-wise)
# Each GPU now holds a (512, 1024) chunk of the original tensor
distributed_tensor = distribute_tensor(local_tensor, mesh, [Shard(0)])
print(f"Global shape: {distributed_tensor.shape}, Local shape: {distributed_tensor.to_local().shape}")في مهام الرؤية المحسنة للأجهزة الطرفية ونشر النماذج بسرعة، يعتمد المطورون عادةً على منصة Ultralytics للتعامل تلقائياً مع الاستخدام الأمثل للعتاد. وبينما تتطلب النماذج الأساسية ذات المليارات من المعلمات إعدادات يدوية للتوازي الموترّي، يمكنك توسيع نطاق تدريب نماذج مثل YOLO26 بكفاءة باستخدام أوامر CLI بسيطة وجاهزة للاستخدام. ويضمن ذلك أقصى معدل نقل من خلال استخدام تقنيات توازي البيانات الأصلية بسلاسة إلى جانب نصائح قوية لتدريب النماذج.










