تقنية

توازي النموذج: ما الذي يعبر بين جزأين؟

خمسة مواضع متتابعة تبين أن الجزء ب يستقبل القيمة الوسيطة 7 الناتجة من أ، فينتج 49، وليس مربع المدخل الخام 3
مخطط من إعداد بحر العلوم؛ جزآن لحساب افتراضي، دون تشغيل أجهزة.

توازي النموذج وتقسيم الطبقات يمكن أن يضعا أجزاء مختلفة من الحساب على أجهزة مختلفة. في تقسيم المراحل الموثق، تملك المرحلة جزءها ومعاملاته، وتتواصل المراحل لنقل القيم اللازمة. [1]

الخلاصة السريعة

حدد ما يحسبه كل جزء وما يستقبله؛ الجزء اللاحق يحتاج ناتج الجزء السابق في مثالنا، وليس نسخة أخرى من المدخل الخام.

  • تملك المرحلة الموثقة جزءًا من الوحدات ومعاملاتها وحساب المرور، ويعالج التنفيذ التواصل بين الأجزاء. [1]
  • نختار أ: اضرب المدخل في 2 ثم أضف 1؛ وب: ربّع الناتج الوسيط. المدخل 3 يعطي 7 ثم 49، تحت القاعدة والترتيب المعلنين.
  • إرسال 3 الخام إلى ب يعطي 9، فيغير الحساب؛ وتقسيم هذه القاعدة ليس وضع نسخة كاملة منها على كل جهاز.
  • واجهة المراحل التي نقرأها في PyTorch 2.14 تجريبية، وتطلب أشكالًا وأنواعًا ثابتة للقيم المتبادلة؛ لا يثبت الرسم توافق تنفيذ أو تسريعًا. [1]

وزع ملكية الحساب قبل توزيع المدخلات

تعرض وثائق المراحل إنشاء وحدة تمثل جزءًا من النموذج، بمواردها وحسابها، وربط حدود الأجزاء بعمليات إرسال واستقبال. [1]

نبني آلة حسابية صغيرة من تعريفنا: الجزء أ يطبق 2x + 1، والجزء ب يطبق مربع ما يستقبله. نفترض جهازًا لكل جزء. معامل 2 والإضافة 1 يخصان أ؛ قاعدة التربيع تخص ب. ليس المقصود أن الجهازين يعرفان القاعدة الكاملة ثم يعالجان مدخلين مستقلين.

هذه ملكية اخترناها للشرح، لا تقسيم آلي نفذناه على شبكة. قد تقسم بنية أخرى معاملات داخل طبقة أو ترتب أجزاء أكثر؛ المقال يشرح تقسيمًا متتابعًا بعينه، ولا يحصر كل توازي النموذج فيه.

احسب القيمة التي ينبغي عبورها

نقدم العدد 3 إلى أ. يحسب 2 × 3 + 1، فتكون القيمة الوسيطة 7. نستقبل 7 في ب، ونحسب 7 × 7، فيصبح الخرج 49. الرقم المرسل بين الجزأين له معنى محدد: خرج أ الحالي.

لو أرسلنا المدخل الخام 3 إلى ب بدل 7، لحصلنا على 9. ليس هذا فرقًا سببه عتاد بطيء أو خطأ تقريب؛ غيرنا المدخل الذي تعرف به المرحلة الثانية. حفظ اسم الجزء ب لا يكفي لتفسير ناتجه.

لا يحتاج الجزء أ إلى معرفة الناتج النهائي قبل أن ينتج 7، لكن ب في هذا المثال ينتظره. اتجاه السهم في الرسم يمثل اعتمادًا حسابيًا، ولا يثبت أن الجزأين يمكن أن ينفذا العملية نفسها للمدخل نفسه في اللحظة نفسها.

هل كل جهاز نسخة من النموذج كله؟

إذا وضعنا القاعدتين أ ثم ب كاملتين على كل جهاز، وقدمنا إلى أحدهما 3 وإلى الآخر 4، يكون لدينا ترتيب مختلف عن تقسيم المثال. الأول يعطي 49، والثاني يحسب 9 ثم 81. هنا يستطيع كل جهاز إكمال حساب مدخله بالقاعدة الكاملة.

أما في ترتيبنا المقسوم، فلا يكمل أ وحده حساب 3 النهائي، ولا يحسب ب ناتجه الصحيح من 3 وحده. لذلك نكتب حدود الأجزاء والبيانات العابرة قبل استعمال عبارة «جهازان». العدد نفسه من الأجهزة لا يصف توزيع العمل.

هذه مقارنة بين ترتيبين افتراضيين، وليست تشغيلًا لتوازي بيانات أو قياسًا للذاكرة. لا نستنتج أن ذاكرة كل جهاز أصبحت نصفًا؛ لم نحدد أحجام المخرجات المؤقتة أو الاتصالات أو أي حالة تدريب.

افحص العقد الذي يربط الحدود

تطلب PipelineStage الموثقة أشكال المدخلات والمخرجات ثابتة، وتعتمد مخازن التواصل على الشكل والنوع؛ تغير الشكل قد يسبب خطأ. الوثائق تصف الحزمة بأنها تجريبية. [1]

مثالنا عدد واحد في كل حد، ولم نحدد تمثيله الآلي. عند تحويل الفكرة إلى ملف تشغيل، نحتاج إلى التصريح بالشكل والنوع والجزء المسؤول عن النقل. لا يجعل تطابق القيمة الرياضية وحده كل جهازين أو مكتبتين متوافقين.

اقرأ الرسم كخطة حساب، لا وعدًا بسرعة أو نتيجة تدريب. لدينا ناتج يدوي صحيح تحت قواعد معلنة؛ لم ننقل بيانات بين أجهزة ولم نشغل واجهة المراحل أو نثبت كفاءة تقسيم لشبكة حقيقية.

المصادر ومتابعة القراءة

  1. PyTorch 2.14: PipelineStage and distributed pipelining (يفتح في نافذة جديدة)docs.pytorch.org

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.