كيف قمنا ببناء الجيل التالي من نماذج اللغة الكبيرة (LLM) الخاصة بـ DeepL باستخدام FP8 للتدريب والاستدلال

عندما قامت DeepL بنشر NVIDIA DGX SuperPOD الحالي الخاص بنا المزود بـ 544 وحدة معالجة رسومات NVIDIA H100 Tensor Core، لم نحصل فقط على زيادة كبيرة في قوة الحوسبة. كما يقدم H100 دعمًا أصليًا لأنواع البيانات ذات النقاط العائمة 8 بت (FP8)، من خلال جيل جديد من Tensor Cores، التي تمكّن وحدة معالجة الرسومات (GPU) من إجراء عمليات ضرب المصفوفات وغيرها من عمليات التوتر بدقة FP8. من خلال حساب مضاعفات المصفوفات في FP8، يمكننا زيادة الإنتاجية عند التدريب ونشر نماذج اللغة الكبيرة (LLMs) الخاصة بنا، نظرًا لأن معظم العمليات الحسابية المستخدمة في نماذج اللغة الكبيرة الحديثة تأخذ شكل مضاعفات المصفوفات.
كان لنقل الحسابات من دقة 16 بت إلى 8 بت تأثير كبير في تطوير الجيل التالي من نماذج اللغة الكبيرة (LLM) الخاصة بـ DeepL. إنه يمكّننا من بناء نماذج حلول لغوية قائمة على الذكاء الاصطناعي أكبر بكثير، مع معلمات أكثر بكثير توفر تحسينات كبيرة في الجودة عند تقييمها من قبل خبراء اللغة، ولكن ضمن نفس نافذة التأخير للاستدلال الإنتاجي. وهذا يعني أن الترجمات تتفوق على نماذجنا السابقة بمقدار 1.4 مرة بالنسبة للغات الأوروبية و1.7 مرة بالنسبة للأزواج اللغوية الأكثر تعقيدًا مثل الإنجليزية واليابانية، ولكنها تقدم نتائج فعالة بنفس السرعة. وهذا يعني أيضًا أن نماذجنا يمكنها التعامل مع عدد أكبر من الطلبات عبر المزيد من الميزات والوظائف، دون المساس بتجربة المستخدم.
بعبارة أخرى، لعب التدريب والاستدلال FP8 دورًا محوريًا في توسيع نطاق الحلول اللغوية القائمة على الذكاء الاصطناعي لـ DeepL.
في هذا المنشور، نود أن نوضح المسار الذي سلكناه من أجل تطبيق FP8 للتدريب والاستدلال، ومشاركة بعض الأدوات والتقنيات التي تدعم هذا النجاح، وإعطائكم فكرة عن النتائج التي ننشئها من حيث أداء التدريب والاستدلال على طول الطريق.
ما الفرق بين تنسيقي BF16 و FP8؟
التفسير البسيط للفرق بين BFloat16 (BF16) و FP8 هو أن الأخير يستخدم نصف عدد البتات للتعبير عن القيم. بشكل فعال، يستخدم BF16 المواقع الـ 16 المتاحة في بايتين من 8 بتات لكل منهما. يستخدم FP8 بايت واحد فقط.
يحدد عدد البتات المتاحة لديك الدقة التي يمكنك بها نشر عناصر المانتيسا والأس من الأرقام العائمة في الترميز العلمي. يحتوي BF16 على بت واحد للإشارة، و 8 بتات للأسي و 7 بتات للمانتيسا. FP8 لديه نصف عدد البتات المتاحة للاستخدام، مع بت واحد للإشارة و 7 بتات مقسمة بين الأس والمانتيسا. وبسبب ذلك، فإن نطاقه أصغر ودقته أقل من BF16. يمكن أن يمثل نطاقًا أضيق وأرقامًا أقل ضمن هذا النطاق.
على سبيل المثال، لنفترض أننا نريد تمثيل عمر الأرض بمليارات السنين (حوالي 4.543). في BF16، يمكننا تمثيل هذا بدقة على النحو التالي: 0100000010010001.
ماذا عن تمثيل هذا الرقم في FP8؟ هناك في الواقع تنسيقان FP8 للاختيار من بينهما: E4M3 و E5M2. تمثل الأحرف والأرقام هنا طريقة توزيع البتات بين الأس (E) والمانتيسا (M). كلما زاد عدد البتات المخصصة للأس، زاد نطاق الأرقام التي يمكنك وصفها، وكلما زاد عدد البتات المخصصة للمانتيسا، زاد عدد الأرقام التي يمكنك وصفها ضمن هذا النطاق.
أيًا كان تنسيق FP8 الذي تختاره، فمن غير الممكن في الواقع تمثيل 4.543 بدقة. إذا اخترت E4M3 بدقة أكبر نسبيًا، يمكنك الحصول على أقرب نتيجة (4.5). في E5M2، أقرب ما يمكنك الحصول عليه هو 5.
على الجانب الآخر من هذا النقص في النطاق والدقة، يتيح FP8 حسابًا أسرع ويتطلب ذاكرة أقل بكثير مقارنة بـ BF16. هذا أمر بالغ الأهمية بالنسبة للاستدلال، وباستخدام النهج الصحيح، يمكن أن يكون ذا قيمة كبيرة لتسريع التدريب أيضًا. الأمر يتعلق بمدى أهمية النطاق والدقة اللذين يحتاجهما تدريب LLM بالفعل. هل تحتاج إلى تمثيل عمر الأرض بدقة؟ أم أن الوصول إلى 43 مليون سنة هو قريب بما فيه الكفاية؟ إذا كنت مهتمًا بالكون ككل، فمن المحتمل أنك ستكون سعيدًا بهذا المستوى الثاني من الدقة. فخطأ التقريب لا يمثل سوى حوالي 0.3٪ من عمر الكون، بعد كل شيء.
تثبت رحلة DeepL أن FP8 يمكنها توفير ما هو مطلوب للتدريب على LLM عالي الجودة، وقد فتح ذلك آفاقًا جديدة لما نُدرِب نماذجنا على القيام به، وكيف نُنشِرها في الممارسة العملية.
التدريب المسبق لـ DeepL LLMs
تبدأ رحلتنا مع تدريب واستدلال FP8 بالتدريب المسبق لنماذج اللغة الكبيرة (LLM) الخاصة بنا. بعد التدريب المسبق، نقوم بضبط نماذجنا على مهام معينة، وتحويل النماذج الكبيرة إلى نماذج أصغر، وإجراء التعلم المعزز، ونشر إعداد/ضبط من استراتيجيات التوازي حتى نتمكن من الاستفادة من العدد الهائل من وحدات معالجة الرسومات (GPU) التي لدينا.
تطبيق تنسيق FP8 للتدريب بالدقة المختلطة
قمنا بتحويل كود التدريب الحالي من BF16 إلى FP8 باستخدام NVIDIA Transformer Engine: مكتبة التدريب المقدمة من NVIDIA تعمل على تسريع نماذج المحولات، وتشمل مساعدة FP8. يوفر محرك Transformer Engine المكونات الأساسية التي تسهل التدريب المختلط الدقة، حيث يدير بسلاسة التحويل بين تنسيقات FP8 و BF16 ويتعامل مع عوامل القياس.
نستخدم الإعداد الافتراضي لمحرك Transformer، كما أوصت به NVIDIA، باستخدام E4M3 في التمرير الأمامي للتدريب، ثم استخدام E5M2 في التمرير الخلفي. وهذا يعني فعليًا أننا نستخدم التنسيق ذي الدقة الأعلى لتوقع توزيع احتمالات الرمز التالي، ثم نستخدم التنسيق ذي الدقة الأقل، ولكن النطاق الأعلى، لحساب التدرجات اللازمة لتحديث النموذج، عندما تكون الدقة أقل أهمية. نستخدم كل من هذين التنسيقين في المهام التي يناسبها بشكل أفضل.
في الرسم البياني أدناه، قمنا برسم جميع الأرقام التي يمكن تمثيلها بتنسيق E4M3. كما سترى، تتركز هذه الأرقام حول الصفر، مع قيمة قصوى أقل من 500. في الواقع، يمكن طباعة عدد القيم القابلة للتمثيل لتنسيقات FP8 في جدول قصير جدًا. الحيلة التي تجعل هذا النموذج فعالاً في التدريب هي إدراك توزيع تلك القيم والعمل في إطارها.
وهذا يتضمن تخزين عوامل قياس إضافية إلى جانب موترات الوزن FP8 للتغلب على النطاق المحدود ومنع التجاوز والتدفق. عند إجراء الحسابات باستخدام متجهاتك منخفضة الدقة، يجب عليك أيضًا مراعاة عوامل القياس. على سبيل المثال، عند ضرب متجهين، تستخدم الصيغة: (A_fp8 * A_scale) x (B_fp8 * B_scale)، حيث A_fp8 و B_fp8 هما متجهات 8 بت والمقاييس هي قيم عددية 32 بت. هناك مساعدة محددة للأجهزة لهذه العمليات.

FP8 مقابل BF16 لأداء التدريب
عندما نتحدث عن أداء التدريب، فإننا نشير إلى السرعة التي يمكن بها تدريب النموذج بالنظر إلى قوة الحوسبة المتاحة له. لمقارنة أداء التدريب بين FP8 و BF16، ننظر إلى استخدام FLOPS للنموذج (MFU)، وهو عدد عمليات النقطة العائمة في الثانية (FLOPS) التي يؤديها النموذج، كنسبة مئوية من FLOPS التي يمكن تحقيقها تقنيًا باستخدام الأجهزة المتاحة لديك.
لأغراض المقارنة، استخدمنا عدد FLOPS الممكن مع تنسيق BF16 كقاسم مشترك للمقارنة، على الرغم من أنه من الناحية الفنية، يصبح من الممكن الحصول على المزيد من FLOPS عند الانتقال إلى FP8. وقد مكننا ذلك من قياس المكاسب الإضافية في استخدام قوة المعالجة المتاحة التي تصبح ممكنة عند الانتقال من BF16 إلى FP8.
كما هو موضح في الرسم البياني أدناه، زادت كفاءة استخدام نموذج التدريب لدينا للقدرة الحاسوبية المتاحة من 44.6٪ MFU إلى 67٪ MFU مع FP8، مما أدى إلى تسريع تدريب النموذج لدينا بنسبة 50٪.

هذا في حد ذاته تحسن مذهل في الأداء. للوصول إلى ذلك، عملنا مع NVIDIA لتحسين استخدامنا لميزات Transformer Engine. بناءً على إعداد التدريب الآخر، تمكنا من زيادة أداء التدريب تدريجياً بنسبة 25٪ على مدار 15 شهراً، مما رفعنا إلى 80٪ من MFU.

FP8 مقابل BF16 لجودة تدريب LLM
وبالتالي، فإن المكاسب التي حققها FP8 من حيث أداء التدريب مثيرة للإعجاب بالفعل. ومع ذلك، فإن النتيجة التي نهتم بها حقًا في DeepL هي جودة التدريب. كيف يمكن مقارنة ذلك بجودة التدريب بدقة BF16؟
من أجل التحقق من الجودة التي يقدمها FP8، قمنا باختبار التدريب أحد نماذجنا في كلا التنسيقين. وقد مكننا ذلك من مقارنة خسائر التدريب والجودة النهائية.
قمنا بالتدريب على نموذج 1.5B على ثلاثة تريليونات من الرموز، ثم قارنا جودة التدريب FP8 مقابل BF16. كان المقياس الرئيسي هنا هو خسارة التدريب، والتي تشير إلى قدرة النموذج على توقع الرمز التالي.
كما ترى من الرسم البياني أدناه، يمكننا ملاحظة تفوق طفيف لـ BF16 على FP8، كما يتضح من خط FP8 الذي يعلو قليلاً خط BF16. ومع ذلك، فإن هذا الاختلاف يطغى عليه التقلبات الأوسع نطاقًا في خسارة التدريب من خطوة إلى أخرى التي تحدث لكلا التنسيقين، وفي كلتا الحالتين، نرى نفس التحسين الملموس في تقليل خسارة التدريب بمرور الوقت.

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

النتيجة النهائية للانتقال من BF16 إلى FP8 هي أننا أصبحنا قادرين على التدريب بشكل أسرع، مع تقليل الطلب على الذاكرة، وتحقيق نفس جودة التدريب، مع الحد الأدنى من التدهور من حيث خسارة التدريب والتحقق من الصحة المماثلة. وهذا يعني في الواقع أن DeepL قادرة على بناء نماذج أكثر تطوراً، ومواجهة مهام أكثر تعقيداً، من خلال تعظيم الاستفادة من قوة المعالجة. إنه يوسع نطاق ما يمكننا القيام به باستخدام تدريب LLM بشكل كبير.
من التدريب على FP8 إلى الاستدلال
تتضمن المرحلة التالية من الرحلة إعداد نماذج اللغة الكبيرة (LLM) للاستدلال الإنتاجي. هنا يتم تنفيذ المهام الثقيلة المتعلقة بالدعم بواسطة NVIDIA TensorRT-LLM، وهو حل NVIDIA للاستدلال LLM القابل للتوسع، والذي يوفر مساعدة FP8. يأخذ أوزان نموذجك من التدريب ويبني محركًا لتحسين عمليات النموذج ليكون فعالًا في الحوسبة قدر الإمكان، باستخدام تقنيات التحسين مثل اندماج النواة، ورمز C++/CUDA المحسّن، وتخزين KV المؤقت، والتجميع المستمر أثناء التشغيل.
فوائد FP8 في الاستدلال
يتضمن الاستدلال في LLMs دائمًا التفاعل بين الإنتاجية (عدد الرموز التي يمكن معالجتها في إطار زمني) والكمون. وغني عن القول أن تقديم أفضل تجربة ممكنة للعملاء يتطلب التحكم في زمن الاستجابة. ومع ذلك، فإن معدل الإنتاجية مهم أيضًا بشكل كبير بالنسبة إلى DeepL لأنه يحدد عدد الطلبات التي يمكننا معالجتها في وقت معين، وبالتالي نطاق ما يمكن أن يفعله نموذجنا في الممارسة العملية.
من المحتم أن يزداد زمن الاستجابة مع زيادة الإنتاجية. يتيح تجميع الطلبات المتعددة إنتاجية أكبر، ولكن على حساب زيادة زمن الاستجابة لكل طلب فردي/مخصص للأفراد. قد يؤثر ذلك على تجربة العميل. ومع ذلك، فإن أداء الاستدلال لـ FP8 مقابل BF16 يقوم بعمل تغيير كبير في هذا التوازن لصالحنا.
كما يوضح الرسم البياني أدناه، بالنسبة لمعظم أحجام الدُفعات، يمكن لـ FP8 معالجة ضعف الإنتاجية لنفس درجة التأخير مثل BF16. إذا قمنا بإعداد ميزانية زمن انتقال محددة تعادل التجربة المثلى لمستخدمينا، يمكننا أن نرى ذلك في الممارسة العملية. في الواقع، نجح FP8 في مضاعفة السعة الفعالة لنماذج اللغة الكبيرة (LLM) الخاصة بنا بمصطلحات الإنتاجية.

بعبارة أخرى، لم تسمح لنا الرحلة من BF16 إلى FP8 ببناء نماذج لغة كبيرة (LLM) أكثر قوة وتطوراً لـ DeepL فحسب. كما أنه يضمن قدرتنا على تطبيق نماذج اللغة الكبيرة (LLM) بفعالية، لتقديم تجارب عملاء مثالية وتوسيع نطاق تأثير الحلول اللغوية القائمة على الذكاء الاصطناعي لدينا في الواقع. نحصل على التدريب الأسرع لنماذج أكبر حجماً، والتي يمكنها بعد ذلك العمل ضمن نفس معايير زمن الاستجابة، مع معالجة ضعف عدد الطلبات.
ماذا بعد؟ لقد قمنا مؤخرًا بنشر NVIDIA DGX SuperPOD الجديد مع أنظمة NVIDIA DGX GB200، مما يوفر زيادة أخرى شبه أسية في قوة الحوسبة. ما يثير اهتمامنا حقًا هو أن هذه الآلة ستقدم جيلًا جديدًا من Tensor Cores التي يمكنها مساعدة عمليات FP4 tensor مثل عمليات ضرب المصفوفات بشكل أصلي. عندها تبدأ رحلتنا من جديد. لقد كان من المثير أن نرى ما يمكننا فعله ببايت واحد عندما يتعلق الأمر بالتدريب والاستدلال. تابعوا هذا المكان لتروا ما يمكن تحقيقه بنصف بايت.
عن المؤلفين
ماركوس شنوس، مهندس أبحاث HPC
ماركوس شنوس هو مهندس أبحاث HPC في DeepL، حيث يركز على توسيع نطاق تدريب LLM والاستدلال. لديه اهتمام خاص بالتدريب الموزع والحساب العائم منخفض الدقة.
www.linkedin.com/in/markus-schnoes-349300185
فابيان جوسويغ، مهندس أبحاث HPC
فابيان جوسويغ هو مهندس أبحاث في DeepL، ولديه خبرة في مجال التعلم الآلي والحوسبة عالية الأداء وفيزياء الجسيمات النظرية. وهو يركز على توسيع نطاق نماذج الذكاء الاصطناعي والبنية التحتية لأدق المُترجم في العالم.