أنت في مقابلة مهندس تعلم آلي في جوجل. المحاور: نحتاج إلى تدريب نموذج اللغة الكبيرة عبر 1000 وحدة معالجة رسوميات. كيف ستتأكد من مشاركة جميع وحدات معالجة الرسوميات ما تتعلمه؟ أنت: استخدم خادم معلمات مركزي لتجميع وإعادة توزيع الأوزان. انتهت المقابلة. إليك ما فاتك:
يحدث عنق الزجاجة الرئيسي في وقت التشغيل في التدريب متعدد وحدات معالجة الرسومات أثناء مزامنة وحدة معالجة الرسومات. على سبيل المثال ، في التدريب متعدد GPU عبر توازي البيانات: - يتم توزيع نفس النموذج على وحدات معالجة الرسومات المختلفة. - تعالج كل وحدة معالجة رسومات مجموعة فرعية مختلفة من مجموعة البيانات بأكملها. تحقق من هذا 👇
وهذا يؤدي إلى تدرجات مختلفة عبر أجهزة مختلفة. لذا، قبل تحديث معلمات النموذج على كل جهاز GPU، يجب علينا نقل التدرجات إلى جميع الأجهزة الأخرى لمزامنتها. دعونا نفهم استراتيجيتين شائعتين بعد ذلك!
خوارزمية 1) التقليل الكامل طريقة واضحة هي إرسال التدرجات من جهاز إلى جميع الأجهزة الأخرى لمزامنتها. لكن هذا يستهلك عرض نطاق ترددي عالي. إذا كان لكل وحدة معالجة رسومات "N" عنصر وهناك وحدات معالجة رسومات "G"، ينتج عنه نقل إجمالي ل G*(G-1)*N عنصر 👇
يمكننا تحسين ذلك بنقل جميع العناصر إلى وحدة معالجة رسومات واحدة، وحساب القيمة النهائية، وإرسالها مرة أخرى إلى جميع وحدات معالجة الرسوميات الأخرى. هذا تحسن كبير. لكن الآن يجب على وحدة معالجة رسومات واحدة أن تستقبل وتحسب وتتواصل مع التدرجات مرة أخرى، لذا هذا لا يتوسع.
خوارزمية 2) تقليل الحلقات المرحلة #1) تقليل الحصة أولا، تقسم التدرجات إلى مقاطع G على كل وحدة معالجة رسومات (G = إجمالي عدد وحدات معالجة الرسوميات). انظر إلى هذا 👇
في التكرار، ترسل كل وحدة معالجة رسومات جزءا إلى وحدة معالجة الرسومات التالية: - GPU1 يرسل a₁ إلى GPU2، حيث يضاف إلى b₁ - GPU2 يرسل b₂ إلى GPU3، حيث يضاف إلى c₂ - GPU3 يرسل c₃ إلى GPU4، حيث يضاف إلى d₃ - GPU4 يرسل d₄ إلى GPU1، حيث يضاف إلى a₄ انظر إلى هذا 👇
تتم هذه العملية مرة أخرى: - ترسل وحدة معالجة الرسومات (d₄+a₄) إلى وحدة معالجة الرسومات (GPU2)، حيث تتم إضافتها إلى b₄. - ترسل وحدة معالجة الرسومات (GPU2) (a₁+b₁) إلى وحدة معالجة الرسومات (GPU3)، حيث تتم إضافتها إلى c₁. - ترسل وحدة معالجة الرسومات (GPU3) (b₂+c₂) إلى وحدة معالجة الرسومات (GPU4)، حيث تتم إضافتها إلى d₂. - ترسل وحدة معالجة الرسومات (GPU4) (c₃+d₃) إلى وحدة معالجة الرسومات (GPU1)، حيث تتم إضافتها إلى a₃. تحقق من هذا 👇
في التكرار النهائي ، يتم نقل المقاطع التالية إلى وحدة معالجة الرسومات التالية. يؤدي هذا إلى حالة تحتوي فيها كل وحدة معالجة رسومات على جزء كامل واحد ، ويمكننا نقل هذه المقاطع الكاملة إلى جميع وحدات معالجة الرسومات الأخرى. تحقق من هذا 👇
المرحلة #2) المشاركة فقط الآن بعد أن أصبح لكل وحدة معالجة رسومات مقطع كامل واحد، يمكننا نقل هذه المقاطع الكاملة إلى جميع وحدات معالجة الرسومات الأخرى. العملية تتم بطريقة مشابهة لما ناقشناه أعلاه، لذلك لن ندخل في التفاصيل الكاملة. التكرار 1 موضح أدناه👇
بعد ذلك ، نقوم بإجراء التكرارات 2 و 3. يتم تنفيذها بشكل مشابه لما تعلمناه في المرحلة 1. تحقق من هذا 👇
وهكذا أنت ذا! تمت مزامنة أوزان النماذج عبر وحدات معالجة الرسومات. بينما لا تزال العناصر المنقولة كما كانت في نهج "المعالج الرئيسي الواحد"، فإن هذا النهج الحلقي أكثر قابلية للتوسع لأنه لا يضع الحمل الكامل على وحدة معالجة رسومات واحدة. انظر إلى هذا 👇
افتراضيا، تستخدم نماذج التعلم العميق وحدة معالجة رسومات واحدة فقط للتدريب، حتى لو كانت هناك عدة وحدات معالجة رسومات متاحة. طريقة مثالية لتدريب النماذج هي توزيع عبء التدريب على عدة وحدات معالجة رسوميات. يوضح الرسم البياني أربع استراتيجيات للتدريب👇 على عدة وحدات معالجة رسومات
‏‎362.5‏K