Tensor Parallelism
تعرف على كيفية قيام توازي الموتر (tensor parallelism) بتقسيم مصفوفات الأوزان عبر وحدات معالجة الرسومات (GPUs) لتدريب نماذج ضخمة. اكتشف مدى اختلافه عن توازي البيانات مع Ultralytics.
توازي الموتر (Tensor Parallelism) هو تقنية متقدمة في التدريب الموزع تُستخدم في التعلم الآلي لتقسيم الهياكل الرياضية الفردية الكبيرة، أو الموترات (tensors)، عبر مسرعات أجهزة متعددة مثل GPUs أو TPUs. عند تدريب نماذج تعلم عميق ضخمة، يمكن أن يتجاوز عدد المعلمات بسهولة سعة الذاكرة لجهاز واحد. فبدلاً من وضع طبقة كاملة من شبكة عصبية على GPU واحد، يقوم توازي الموتر بتجزئة مصفوفات الأوزان وتقسيم العمليات الرياضية (مثل ضرب المصفوفات) عبر أجهزة متعددة في عنقود (cluster). يسمح هذا للنموذج بالاستفادة من الذاكرة المجمعة وقوة الحوسبة للبنية التحتية للأجهزة بالكامل، وتنفيذ عمليات حسابية متوازية وفق نموذج برنامج واحد بيانات متعددة (SPMD) مع مزامنة النتائج عبر وصلات بينية عالية السرعة مثل NVIDIA NVLink.
Link to this sectionكيف يعمل توازي الموتر#
تعتبر ضرب المصفوفات جوهر الشبكة العصبية. يوزع توازي الموتر هذه العمليات عن طريق تقسيم المصفوفات إما صفياً أو عمودياً. على سبيل المثال، في طبقة متصلة بالكامل أو آلية انتباه Transformer، قد يقوم GPU بحساب النصف الأيسر من المصفوفة بينما يحسب الآخر النصف الأيمن. بعد انتهاء الحسابات المتوازية، تتواصل الأجهزة—غالباً باستخدام عمليات التجميع All-Reduce السريعة—لتجميع النتائج الجزئية قبل تمرير الموتر الكامل إلى الطبقة التالية. تعمل التطورات الأكاديمية الأخيرة في عام 2025 على تحسين هذه العملية بشكل أكبر من خلال إدخال تنشيطات متزامنة جزئياً لتقليل حمل الاتصال الذي يمثل عادةً عنق الزجاجة في العناقيد الحوسبية الكبيرة.
Link to this sectionالتمييز بين تقنيات التوازي ذات الصلة#
يتطلب فهم كيفية توافق توازي الموتر مع المشهد الأوسع للحوسبة الموزعة تمييزه عن الاستراتيجيات الشائعة الأخرى:
- توازي الموتر مقابل توازي النموذج: توازي الموتر هو فئة فرعية محددة جداً من توازي النموذج. في حين يشير توازي النموذج العام إلى تقسيم نموذج عبر الأجهزة بأي طريقة كانت، يشير توازي الموتر بدقة إلى تجزئة الموترات الفردية داخل طبقة واحدة.
- توازي الموتر مقابل توازي المسار (Pipeline Parallelism): توازي المسار هو شكل آخر من أشكال توازي النموذج الذي يقوم بتقسيم الشبكة حسب العمق—بوضع الطبقات القليلة الأولى على GPU 0، والطبقات التالية على GPU 1، وهكذا. هذا يخلق تبعيات تسلسلية تعرف بـ "فقاعات المسار" (pipeline bubbles). يقوم توازي الموتر بتقسيم الطبقات نفسها، وتنفيذها في وقت واحد دون تأخير تسلسلي، لكنه يتطلب نطاقاً تردداً للشبكة أعلى بكثير.
- توازي الموتر مقابل توازي البيانات: في توازي البيانات، يتم نسخ النموذج بالكامل على كل GPU، ويتم تقسيم مجموعة بيانات التدريب فقط عبر الأجهزة. بالنسبة للهياكل المحسنة للغاية مثل Ultralytics YOLO26، التي تتناسب بسهولة مع GPUs الحديثة، فإن توازي البيانات عبر
DistributedDataParallelالخاص بـ PyTorch هو الطريقة الافتراضية. عادة ما يكون توازي الموتر ضرورياً فقط عندما تتجاوز معلمات طبقة واحدة ذاكرة VRAM الخاصة بالجهاز، مما يتسبب في أخطاء نفاد الذاكرة (OOM).
Link to this sectionتطبيقات العالم الحقيقي#
يعد توازي الموتر أمراً لا غنى عنه في بنيات الذكاء الاصطناعي الحديثة، خاصة للهياكل المتطورة التي تتطلب نطاقاً حسابياً هائلاً:
- تدريب نماذج اللغات الكبيرة (LLMs): تستخدم النماذج الأساسية الضخمة مثل Llama 3 من Meta وDeepSeek V3 أطر عمل مثل NVIDIA Megatron-LM لتنفيذ توازي الموتر. نظراً لأن الأبعاد المخفية ورؤوس الانتباه في هذه النماذج كبيرة جداً، فإن تقسيمها عبر عقدة مكونة من 8 GPUs يعد أمراً إلزامياً للتدريب بكفاءة والحفاظ على زمن انتقال منخفض أثناء الاستدلال في الوقت الفعلي.
- نماذج الرؤية الكبيرة (LVMs) وتوليد ثلاثي الأبعاد: مع توسع رؤية الكمبيوتر نحو أنظمة استنتاج متعددة الوسائط ضخمة، يستخدم الباحثون توازي الموتر مدمجاً مع توازي المسار على خدمات مثل AWS SageMaker لتدريب محولات الرؤية العملاقة (ViTs). تسمح هذه التقنية بمعالجة الصور عالية الدقة وتوليد الفيديو التي تتطلب كتل ذاكرة متجاورة هائلة.
Link to this sectionتنفيذ توازي الموتر في PyTorch#
تاريخياً، كان على المهندسين كتابة منطق موزع مخصص ومعقد لتجزئة الموترات. مؤخراً، قدم PyTorch ميزة DTensor (الموتر الموزع)، لتبسيط سير العمل هذا أصلياً. فيما يلي مثال على إنشاء موتر مجزأ صفياً باستخدام واجهة برمجة تطبيقات الموتر الموزع الرسمية لـ 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 البسيطة فور تثبيتها. يضمن هذا أقصى إنتاجية من خلال الاستفادة بسلاسة من تقنيات توازي البيانات الأصلية إلى جانب نصائح تدريب النموذج القوية.






