```html المؤلفون: مايانك ميشرا⋆، IBM مات ستالون⋆، IBM جويوان تشانغ⋆، IBM يكانج شين، IBM أدitya براساد، IBM أدريانا ميسا سوريا، IBM ميشيل ميرلر، IBM باراميسواران سلفام، IBM سابثا سوريندران، IBM شيفديب سينغ، IBM مانيش سيثي، IBM شوان-هونج دانغ، IBM بينغ يوان لي، IBM كون-لونغ وو، IBM سيد زواد، IBM أندرو كولمان، IBM ماثيو وايت، IBM مارك لويس، IBM راجو بافولوري، IBM يان كوفمان، IBM بوريس لوبلينسكي، IBM ماكسيميليان دي بايزر، IBM إبراهيم عبد العزيز، IBM كينجال باسو، IBM مايانك أغاروال، IBM يي تشو، IBM كريس جونسون، IBM آنشال جويال، IBM هيما باتل، IBM يوسف شاه، IBM بتروس زيرفوس، IBM هايكو لودفيغ، IBM عاصم منور، IBM ماكسويل كروز، IBM بافان كابانيثي، IBM شويتا سالاريا، IBM بوب كاليو، IBM صوفيا وين، IBM سيثارامي سيلام، IBM برايان بيلغودير، IBM كارلوس فونسيكا، IBM أميث سينغي، IBM نيرميت ديساي، IBM ديفيد د. كوكس، IBM روتشير بوري†، IBM راميسوار باندا†، IBM ملخص نماذج اللغة الكبيرة (LLMs) المدربة على الأكواد تحدث ثورة في عملية تطوير البرمجيات. بشكل متزايد، يتم دمج نماذج LLMs للكود في بيئات تطوير البرمجيات لتحسين إنتاجية المبرمجين البشريين، وبدأت الوكلاء القائمة على LLMs في إظهار وعد بالتعامل مع المهام المعقدة بشكل مستقل. يتطلب تحقيق الإمكانات الكاملة لنماذج LLMs للكود مجموعة واسعة من القدرات، بما في ذلك إنشاء الكود، وإصلاح الأخطاء، وشرح وتوثيق الكود، وصيانة المستودعات، والمزيد. في هذا العمل، نقدم سلسلة Granite من نماذج الكود أحادية المفككة للمهام التوليدية للكود، المدربة على أكواد مكتوبة بـ 116 لغة برمجة. تتكون عائلة نماذج Granite Code من نماذج تتراوح أحجامها من 3 إلى 34 مليار معامل، وهي مناسبة للتطبيقات التي تتراوح من مهام تحديث التطبيقات المعقدة إلى حالات الاستخدام المقيدة بالذاكرة على الجهاز. يوضح التقييم على مجموعة شاملة من المهام أن نماذج Granite Code تحقق باستمرار أداءً متطورًا بين نماذج LLMs للكود مفتوحة المصدر المتاحة. تم تحسين عائلة نماذج Granite Code لتدفقات عمل تطوير البرمجيات للمؤسسات وتؤدي بشكل جيد عبر مجموعة من مهام الترميز (مثل إنشاء الكود، والإصلاح والشرح)، مما يجعلها نموذج كود متعدد الاستخدامات "متكامل". نطلق جميع نماذج Granite Code الخاصة بنا بموجب ترخيص Apache 2.0 للاستخدام البحثي والتجاري. https://github.com/ibm-granite/granite-code-models 1 مقدمة على مدى العقود العديدة الماضية، نسجت البرمجيات في نسيج كل جانب من جوانب مجتمعنا. مع تزايد الطلب على تطوير البرمجيات، أصبح من الضروري أكثر من أي وقت مضى زيادة إنتاجية تطوير البرمجيات، وتوفر نماذج LLMs مسارًا واعدًا لتعزيز المبرمجين البشريين. تشمل حالات الاستخدام البارزة للمؤسسات لنماذج LLMs في إنتاجية تطوير البرمجيات إنشاء الكود، وشرح الكود، وإصلاح الكود، وإنشاء اختبارات الوحدات والتوثيق، وتحديث التطبيقات، واكتشاف الثغرات، وترجمة الكود، والمزيد. شهدت السنوات الأخيرة تقدمًا سريعًا في قدرة نماذج LLMs على إنشاء ومعالجة الكود، ويتوفر اليوم مجموعة من النماذج ذات القدرات المذهلة في الترميز. تتراوح النماذج في الحجم من مليارات المعاملات بأرقام فردية (مثل Llama-7B (Touvron et al., 2023)، Gemma-7B (Gemma-Team et al., 2024)، إلخ) إلى مئات المليارات: DBRX (Databricks)، Arctic (Snowflake)، Grok، Mixtral 8x22B (MistralAI)، Command R+ (Cohere)، وتختلف في عمومية الاستخدام المقصود، حيث تهدف بعض النماذج إلى تغطية مجموعة من الاستخدامات خارج نطاق الكود، بينما تركز نماذج أخرى بشكل أساسي على المهام المتعلقة بالكود (مثل StarCoder (Li et al., 2023a; Lozhkov et al., 2024)، CodeGen (Nijkamp et al., 2023)، CodeLlama (Rozie`re et al., 2023)، و CodeGemma (CodeGemma Team et al., 2024)). ومع ذلك، لا تزال هناك فجوات هامة في المجال الحالي لنماذج LLMs للكود، خاصة في سياق تطوير البرمجيات للمؤسسات. أولاً، بينما يمكن لنماذج LLMs العامة والكبيرة جدًا تحقيق أداء ترميز ممتاز، فإن حجمها يجعل نشرها مكلفًا. يمكن لنماذج الكود الأصغر (Li et al.، 2023a؛ Lozhkov et al.، 2024؛ Nijkamp et al.، 2023؛ Rozie`re et al.، 2023؛ CodeGemma Team et al.، 2024) تحقيق أداء إنشاء كود ممتاز في حزمة أصغر وأكثر مرونة، ولكن الأداء في مهام الترميز بخلاف الإنشاء (مثل الإصلاح والشرح) يمكن أن يتخلف عن أداء إنشاء الكود. في العديد من سياقات المؤسسات، يمكن تعقيد تبني نماذج LLMs للكود بعوامل تتجاوز أداء النماذج. على سبيل المثال، غالبًا ما تعاني النماذج المفتوحة من نقص الشفافية حول مصادر البيانات وطرق معالجة البيانات التي دخلت في النموذج، مما قد يؤدي إلى تآكل الثقة في النماذج في السياقات الحرجة والمنظمة. علاوة على ذلك، يمكن لشروط الترخيص في نماذج LLMs المفتوحة الحالية أن تعيق وتعقد قدرة المؤسسة على استخدام نموذج. هنا، نقدم نماذج Granite Code، وهي سلسلة من نماذج LLMs للكود عالية القدرة، مصممة لدعم تطوير البرمجيات للمؤسسات عبر مجموعة واسعة من مهام الترميز. تمتلك نماذج Granite Code نوعين رئيسيين نطلقهما في أربعة أحجام مختلفة (3B، 8B، 20B، و 34B): نماذج أساسية تأسيسية لمهام متعلقة بالكود؛ Granite Code Base: نماذج اتباع التعليمات تم ضبطها باستخدام مزيج من التزامات Git المقترنة بالتعليمات البشرية ومجموعات بيانات تعليمات الكود الاصطناعية مفتوحة المصدر. Granite Code Instruct: تم تدريب النماذج الأساسية في السلسلة من الصفر باستخدام استراتيجية تدريب من مرحلتين. في المرحلة 1، يتم تدريب نموذجنا على 3 إلى 4 تريليون رمز مميز مصدرها 116 لغة برمجة، مما يضمن فهمًا شاملاً للغات البرمجة والصيغ. في المرحلة 2، يتم تدريب نموذجنا بشكل إضافي على 500 مليار رمز مميز بمزيج مصمم بعناية من بيانات عالية الجودة من مجالات الكود واللغة الطبيعية لتحسين قدرة النموذج على الاستدلال. نستخدم هدف نمذجة اللغة غير الخاضع للإشراف لتدريب النماذج الأساسية في كلتا مرحلتي التدريب. يتم اشتقاق نماذج التعليمات عن طريق ضبط إضافي للنماذج الأساسية المدربة المذكورة أعلاه على مزيج من متغير مصفى من CommitPack (Muennighoff et al., 2023)، ومجموعات بيانات اتباع التعليمات باللغة الطبيعية (OASST (Ko¨ pf et al., 2023)، HelpSteer (Wang et al., 2023)) ومجموعات بيانات الرياضيات مفتوحة المصدر (MathInstruct (Yue et al., 2023) و MetaMathQA (Yu et al., 2023))، بما في ذلك مجموعات بيانات الكود الاصطناعية لتعزيز اتباع التعليمات وقدرات الاستدلال. نجري تقييمات مكثفة لنماذج LLMs للكود الخاصة بنا على مجموعة شاملة من المعايير، بما في ذلك HumanEvalPack (Muennighoff et al., 2023)، MBPP(+) (Austin et al., 2021؛ Liu et al., 2023a)، RepoBench (Liu et al., 2023b)، ReCode (Wang et al., 2022)، والمزيد. تشمل هذه المجموعة من المعايير أنواعًا مختلفة من مهام الترميز بخلاف مجرد تخليق الكود في Python، مثل إصلاح الكود، وشرح الكود، وتحرير الكود، وترجمة الكود، وما إلى ذلك، عبر معظم لغات البرمجة الرئيسية (Python، JavaScript، Java، Go، C++، Rust، إلخ). تكشف نتائجنا أنه بين النماذج مفتوحة المصدر، تظهر نماذج Granite Code أداءً قويًا للغاية بشكل عام عبر جميع أحجام النماذج والمعايير (غالبًا ما تتفوق على نماذج الكود مفتوحة المصدر الأخرى التي تبلغ ضعف حجم Granite). على سبيل المثال، يوضح الشكل 1 (أعلى) مقارنة بين Granite-8B-Code-Base ونماذج LLMs أساسية أخرى مفتوحة المصدر للكود، بما في ذلك نماذج LLMs أساسية عامة عالية الأداء حديثة مثل Mistral (Jiang et al., 2023b) و LLama-3 (AI@Meta, 2024) على HumanEvalPack (Muennighoff et al., 2023). بينما يؤدي CodeGemma و StarCoder2 أداءً معقولًا في إنشاء الكود، إلا أنهما يؤديان بشكل أضعف بكثير في إصدارات إصلاح وشرح الكود من HumanEvalPack. في المتوسط، يتفوق Granite-8B-Code-Base على نموذج CodeGemma-8B الأكثر تنافسية بحوالي 12 نقطة على HumanEvalPack (33.2% مقابل 21.3%)، على الرغم من تدريبه على عدد أقل بكثير من الرموز المميزة (4.5T مقابل 7.5T رمز مميز). بالإضافة إلى النماذج الأساسية، تظهر الإصدارات المضبوطة بالتعليمات من نماذج Granite Code لدينا أيضًا أداءً قويًا على HumanEvalPack، متفوقة على نماذج التعليمات (الكود) مفتوحة المصدر الأخرى، مما يوضح فوائد لمجموعة أوسع من مهام الترميز مع التعليمات باللغة الطبيعية (انظر الشكل 1 (أسفل)). علاوة على ذلك، نظرًا لأن الاستدلال أمر بالغ الأهمية لحل الأسئلة والمهام المعقدة، فإننا نختبر أيضًا نموذج Granite-8B-Code-Base الخاص بنا على ستة معايير رياضية، بما في ذلك MATH (Cobbe et al., 2021)، GSM8K (Cobbe et al., 2021) وحل المشكلات بالوصول إلى أدوات حسابية، حيث يحقق نموذج Granite 8B أداءً أفضل مقارنة بمعظم نماذج LLMs المتطورة بحجم 7B أو 8B. على سبيل المثال، يتفوق Granite-8B-Code-Base على Llama-3-8B-Base بحوالي 12 نقطة على GSM8K وحوالي 6 نقاط على MATH (انظر الجدول 15). تشمل المزايا الرئيسية لنماذج Granite Code: : تحقق نماذج Granite Code أداءً تنافسيًا أو متطورًا في أنواع مختلفة من المهام المتعلقة بالكود، بما في ذلك إنشاء الكود، والشرح، والإصلاح، والتحرير، والترجمة، وما إلى ذلك، مما يوضح قدرتها على حل مهام الترميز المتنوعة؛ نموذج LLM متكامل للكود : تم تدريب جميع نماذجنا على بيانات قابلة للترخيص تم جمعها باتباع مبادئ أخلاقيات الذكاء الاصطناعي الخاصة بشركة IBM وتوجيه من فريق قانوني في شركة IBM للاستخدام المؤسسي الموثوق. يتم إصدار جميع نماذج Granite Code بموجب ترخيص Apache 2.0. نموذج LLM موثوق به من فئة المؤسسات 1 نصف خط أنابيب جمع البيانات والتصفية والمعالجة المسبقة بالكامل في القسم . يصف القسم تفاصيل بنية النموذج، تليها تفاصيل التدريب في القسم . يوفر القسم تفاصيل حول ضبط التعليمات، ويصف القسم التجارب والنتائج التي تقارن نماذج Granite Code مع نماذج LLMs مفتوحة المصدر الأخرى. 2 3 4 5 6 2 جمع البيانات في هذا القسم، نصف عملية الزحف والتصفية (القسم )، وإزالة التكرارات (القسم )، وتصفية HAP/PII (القسم ) المستخدمة لإعداد بيانات الكود لتدريب النموذج. كما نقدم نظرة عامة على بيانات اللغة الطبيعية عالية الجودة المستخدمة لتعزيز فهم النموذج للغة ومهارات الاستدلال الرياضي. 2.1 2.2 2.3 2.1 زحف البيانات وتصفيتها تم الحصول على بيانات ما قبل التدريب للكود من مزيج من مجموعات البيانات المتاحة للجمهور مثل Github Code Clean ، و StarCoderdata ، ومستودعات الكود العامة الإضافية ومشكلات GitHub. نقوم بتصفية البيانات الخام للاحتفاظ بقائمة من 116 لغة برمجة من أصل 300+ لغة، كما هو مدرج في الملحق . يتم تعيين البيانات للغات البرمجة بناءً على امتداد الملف فقط، على غرار StarCoder (Li et al., 2023a). بعد تصفية اللغة، نطبق أربع قواعد تصفية رئيسية لاستبعاد الكود منخفض الجودة (Li et al., 2023a): (1) إزالة الملفات التي تحتوي على أقل من 25٪ من الأحرف الأبجدية، (2) باستثناء لغة XSLT، استبعاد الملفات التي تظهر فيها السلسلة "<?xml version=" ضمن أول 100 حرف، (3) بالنسبة لملفات HTML، احتفظ فقط بالملفات التي تشكل فيها النص المرئي 20٪ على الأقل من كود HTML ولها طول أدنى يبلغ 100 حرف، (4) بالنسبة لملفات JSON و YAML، احتفظ فقط بالملفات التي يتراوح عدد أحرفها بين 50 و 5000 حرف. نقوم أيضًا بتصفية مشكلات GitHub باستخدام مجموعة من مقاييس الجودة التي تشمل إزالة النص الذي تم إنشاؤه تلقائيًا، واستبعاد المشكلات غير الإنجليزية، واستبعاد التعليقات من الروبوتات، واستخدام عدد المستخدمين المشاركين في المحادثة كمؤشر على الجودة. نقوم أيضًا بتسمية كل ملف كود بمعلومات الترخيص المرتبطة بالمستودع المعني، والتي تم العثور عليها عبر واجهات برمجة تطبيقات GitHub والاحتفاظ فقط بالملفات ذات التراخيص المتساهلة لتدريب النموذج. 2 3 A 2.2 إزالة التكرارات الدقيقة والتقريبية نعتمد استراتيجية إزالة تكرارات صارمة تشمل كل من إزالة التكرارات الدقيقة والتقريبية لإزالة المستندات التي تحتوي على محتوى كود (شبه) متطابق في مجموعة التدريب الخاصة بنا. بالنسبة لإزالة التكرارات الدقيقة، نقوم أولاً بحساب تجزئة SHA256 على محتوى المستند ونزيل السجلات ذات التجزئات المتطابقة. بعد إزالة التكرارات الدقيقة، نطبق إزالة التكرارات التقريبية بهدف إزالة ملفات الكود التي قد تحتوي على اختلافات طفيفة وبالتالي تحيز البيانات بشكل أكبر. نطبق طريقة من خطوتين لهذا: (1) حساب MinHashes لجميع المستندات ثم استخدام التجزئة الحساسة للموقع (LSH) لتجميع المستندات بناءً على بصمات MinHash الخاصة بها، (2) قياس تشابه Jaccard بين كل زوج من المستندات في نفس الدلو وتسمية المستندات باستثناء واحد كنسخ مكررة بناءً على عتبة تشابه تبلغ 0.7. نطبق هذه العملية التقريبية لإزالة التكرارات على جميع لغات البرمجة بما في ذلك مشكلات GitHub لتعزيز ثراء وتنوع مجموعة بيانات التدريب. 2.3 تصفية HAP، PII، البرمجيات الخبيثة لتقليل احتمالية توليد لغة بغيضة أو مسيئة أو بذيئة (HAP) من النماذج، نبذل جهودًا دؤوبة لتصفية محتوى HAP من مجموعة التدريب. نقوم أولاً بإنشاء قاموس لكلمات مفتاحية HAP ثم نقوم بتسمية كل مستند كود بعدد مرات ظهور مثل هذه الكلمات المفتاحية في المحتوى بما في ذلك التعليقات. نقوم بتصفية المستندات التي تتجاوز عتبة HAP، والتي يتم حسابها بناءً على تحليل توزيعي بالإضافة إلى الفحص اليدوي لملفات الكود. علاوة على ذلك، لحماية الخصوصية، نتبع StarCoder (Li et al., 2023a) ونبذل جهودًا دؤوبة لعدم الكشف عن المعلومات الشخصية التعريفية (PII) من مجموعة التدريب. على وجه التحديد، نستفيد من نموذج StarPII لاكتشاف عناوين IP والمفاتيح وعناوين البريد الإلكتروني والأسماء وأسماء المستخدمين وكلمات المرور الموجودة في المحتوى. تقوم خطوة عدم الكشف عن PII باستبدال نص PII بالرموز المقابلة NAME ، EMAIL ، KEY ، PASSWORD وتغيير عنوان IP بعنوان IP تم إنشاؤه اصطناعيًا، كما في Li et al. (2023a). نقوم أيضًا بفحص مجموعات البيانات الخاصة بنا باستخدام لتحديد وإزالة حالات البرمجيات الخبيثة في الكود المصدري. 4 2.4 مجموعات بيانات اللغة الطبيعية بالإضافة إلى جمع بيانات الكود لتدريب النموذج، نقوم بتنظيم العديد من مجموعات بيانات اللغة الطبيعية عالية الجودة المتاحة للجمهور لتحسين براعة النموذج في فهم اللغة والاستدلال الرياضي. تشمل مجموعات البيانات التمثيلية تحت هذه الفئة مستندات الويب (Stackexchange، CommonCrawl)، نصوص الويب الرياضية (OpenWeb-Math؛ Paster et al. (2023)، StackMathQA؛ Zhang (2024))، النصوص الأكاديمية (Arxiv، Wikipedia)، ومجموعات بيانات ضبط التعليمات (FLAN؛ Longpre et al. (2023)، HelpSteer (Wang et al., 2023)). لا نقوم بإزالة التكرارات من مجموعات بيانات اللغة الطبيعية التي تمت معالجتها مسبقًا. 3 بنية النموذج نقوم بتدريب سلسلة من نماذج الكود ذات الأحجام المختلفة بناءً على بنية المفكك المحول ( ، ). يتم إعطاء المعلمات الفائقة للنماذج في الجدول . لجميع هياكل النماذج، نستخدم التطبيع المسبق ( ، ): التطبيع المطبق على مدخلات كتل الانتباه و MLP. Vaswani et al. 2017 1 Xiong et al. 2020 : أصغر نموذج في عائلة نماذج Granite-code يتم تدريبه باستخدام تضمين RoPE ( ، ) والانتباه متعدد الرؤوس (Multi-Head Attention) ( ، ). يستخدم هذا النموذج وظيفة تنشيط swish ( ، ) مع GLU ( ، ) لوحدة MLP، والمعروفة أيضًا باسم swiglu. للتطبيع، نستخدم RMSNorm ( ، ) نظرًا لأنها أكثر كفاءة حسابيًا من LayerNorm ( ، ). يتم تدريب نموذج 3B بطول سياق يبلغ 2048 رمزًا مميزًا. 3B Su et al. 2023 Vaswani et al. 2017 Ramachandran et al. 2017 Shazeer 2020 Zhang & Sennrich 2019 Ba et al. 2016 : يحتوي نموذج 8B على بنية مشابهة لنموذج 3B مع استثناء استخدام الانتباه المجمع للاستعلامات (Grouped-Query Attention - GQA) ( ، ). يوفر استخدام GQA مقايضة أفضل بين أداء النموذج وكفاءة الاستدلال على هذا المقياس. نقوم بتدريب نموذج 8B بطول سياق يبلغ 4096 رمزًا مميزًا. 8B Ainslie et al. 2023 : يتم تدريب نموذج الكود 20B باستخدام تضمينات الموضع المطلقة المتعلمة. نستخدم الانتباه متعدد الاستعلامات (Multi-Query Attention) ( ، ) أثناء التدريب للاستدلال الفعال لاحقًا. بالنسبة لوحدة MLP، نستخدم وظيفة تنشيط GELU ( ، ). لتطبيع التنشيطات، نستخدم LayerNorm ( ، ). يتم تدريب هذا النموذج بطول سياق يبلغ 8192 رمزًا مميزًا. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : لتدريب نموذج 34B، نتبع نهج لزيادة العمق لنموذج 20B. على وجه التحديد، نقوم أولاً بتكرار نموذج الكود 20B ذي 52 طبقة ثم نزيل آخر 8 طبقات من النموذج الأصلي وأول 8 طبقات من نسخته المكررة لتشكيل نموذجين. 34B Kim et al. أخيرًا، نقوم بدمج كلا النموذجين لتشكيل نموذج Granite-34B-Code بـ 88 طبقة (انظر الشكل للتوضيح). بعد زيادة العمق، نلاحظ أن انخفاض الأداء مقارنة بنموذج 20B صغير جدًا على عكس ما لاحظه . يتم استعادة هذا الأداء بسرعة كبيرة بعد استمرارنا في التدريب المسبق للنموذج 34B الموسع. بشكل مشابه لنموذج 20B، نستخدم سياق 8192 رمزًا مميزًا أثناء التدريب المسبق. 2 Kim et al. 4 التدريب المسبق في هذا القسم، نقدم تفاصيل حول التدريب ذي المرحلتين (القسم )، وأهداف التدريب (القسم )، والتحسين (القسم )، والبنية التحتية (القسم ) المستخدمة في التدريب المسبق للنماذج. 4.1 4.2 4.3 4.4 4.1 التدريب ذو المرحلتين يتم تدريب نماذج Granite Code على 3.5T إلى 4.5T رمز مميز من بيانات الكود ومجموعات بيانات اللغة الطبيعية المتعلقة بالكود. يتم ترميز البيانات عبر ترميز زوج البايت (BPE، (Sennrich et al., 2015))، مع استخدام نفس الـ tokenizer مثل StarCoder (Li et al., 2023a). باتباع (Shen et al., 2024؛ Hu et al., 2024)، نستخدم بيانات عالية الجودة بمرحلتين من التدريب على النحو التالي. • : خلال المرحلة 1، يتم تدريب كلا النموذجين 3B و 8B لمدة 4 تريليون رمز مميز من بيانات الكود التي تشمل 116 لغة. يتم تدريب نموذج 20B معامل على 3 تريليون رمز مميز من الكود. يتم تدريب نموذج 34B على 1.4T رمز مميز بعد زيادة العمق التي تتم على نقطة التحقق 1.6T لنموذج 20B. المرحلة 1 (تدريب الكود فقط) • : في المرحلة 2، نقوم بتضمين بيانات إضافية عالية الجودة متاحة للجمهور من مجالات مختلفة، بما في ذلك الوثائق التقنية والرياضية والويب، لزيادة تحسين أداء النموذج في مهارات الاستدلال وحل المشكلات، وهي ضرورية لإنشاء الكود. نقوم بتدريب جميع نماذجنا على 500B رمز مميز (80% كود و 20% بيانات لغوية) في تدريب المرحلة 2. المرحلة 2 (تدريب الكود + اللغة) 4.2 هدف التدريب للتدريب على جميع نماذجنا، نستخدم هدف نمذجة اللغة السببية (causal language modeling) وهدف الملء في المنتصف (Fill-In-the-Middle - FIM) (Bavarian et al., 2022). يهدف هدف FIM إلى توقع الرموز المميزة المدخلة مع السياق المحدد والنص اللاحق. نقوم بتدريب نماذجنا للعمل مع كل من وضعي PSM (Prefix-Suffix-Middle) و SPM (Suffix-Prefix-Middle)، مع رموز تحكم التنسيق ذات الصلة، تمامًا مثل StarCoder (Li et al., 2023a). يتم حساب الخسارة الإجمالية كمزيج مرجح من الهدفين: نقوم تجريبيًا بتعيين = 0.5 أثناء التدريب ونجد أن هذا يعمل بشكل جيد في الممارسة العملية، مما يؤدي إلى أداء SOTA في كل من إكمال الكود ومهام ملء الكود. تجدر الإشارة إلى أن هدف FIM يستخدم فقط أثناء التدريب المسبق، ومع ذلك فإننا نتخلى عنه أثناء ضبط التعليمات، أي نضع = 1. α α 4.3 التحسين نستخدم محسن AdamW ([Kingma & Ba](#_bookmark80)، [2017](#_bookmark80)) مع β1 = 0.9، β2 = 0.95 وانحلال الوزن 0.1 لتدريب جميع نماذج Granite code الخاصة بنا. بالنسبة للتدريب المسبق للمرحلة 1، يتبع معدل التعلم جدولًا جيبيًا بدءًا من 3 × 10⁻⁴ ويتناقص إلى 3 × 10⁻⁵ مع خطوة إحماء خطية أولية تبلغ 2000 تكرار. بالنسبة للتدريب المسبق للمرحلة 2، نبدأ من 3 × 10⁻⁴ (1.5 × 10⁻⁴ لنماذج 20B و 34B) ونعتمد جدول اضمحلال أسي لتقليصه إلى 10% من معدل التعلم الأولي. نستخدم حجم دفعة يتراوح بين 4M-5M رمز مميز اعتمادًا على حجم النموذج أثناء كلتا مرحلتي التدريب المسبق. لتسريع التدريب، نستخدم FlashAttention 2 (Dao et al., 2022؛ Dao, 2023)، ونواة layernorm المستمرة، ونواة Fused RMSNorm (اعتمادًا على النموذج)، ونواة Fused Adam المتوفرة في . نستخدم نسخة مخصصة من Megatron-LM الخاص بـ NVIDIA (Shoeybi et al., 2019؛ Narayanan et al., 2021) للتدريب الموزع لجميع نماذجنا. نقوم بالتدريب باستخدام مزيج من التوازي ثلاثي الأبعاد: توازي الموتر، توازي خط الأنابيب، وتوازي البيانات. نستخدم أيضًا توازي التسلسل (Korthikanti et al., 2023) لتقليل استهلاك ذاكرة التنشيط للسياق الطويل أثناء التدريب. نستخدم محسن Megatron الموزع مع التدريب الدقيق المختلط (Micikevicius et al., 2018) في BF16 (Kalamkar et al., 2019) مع تقليل التدرج وتراكم التدرج في FP32 لاستقرار التدريب. مكتبة NVIDIA Apex 4.4 البنية التحتية نقوم بتدريب نماذج Granite Code باستخدام اثنين من مجموعات الحوسبة الفائقة الخاصة بـ IBM، وهما Vela و Blue Vela، والمزودتان بوحدات معالجة الرسومات NVIDIA A100 و H100 على التوالي. في مجموعة وحدات معالجة الرسومات Vela A100، يحتوي كل عقدة على 2 معالج Intel Xeon Scalable مع 8 وحدات معالجة رسومات A100 متصلة ببعضها البعض بواسطة NVLink و NVSwitch. تتب