ورق | ؟ مجموعة HuggingFace | صفحة المناقشات
نقدم سلسلة Granite من نماذج التعليمات البرمجية المخصصة لوحدة فك التشفير فقط لمهام إنشاء التعليمات البرمجية (على سبيل المثال، إصلاح الأخطاء، وشرح التعليمات البرمجية، وتوثيق التعليمات البرمجية)، والتي تم تدريبها باستخدام تعليمات برمجية مكتوبة بـ 116 لغة برمجة. يوضح التقييم الشامل لمجموعة نماذج Granite Code في مهام متنوعة أن نماذجنا تصل باستمرار إلى أحدث الأداء بين الحاصلين على شهادة LLM المتاحة في الأكواد مفتوحة المصدر.
تشمل المزايا الرئيسية لنماذج Granite Code ما يلي:
تأتي عائلة نماذج Granite Code في نوعين رئيسيين:
يتوفر كل من الطرازين الأساسي والتعليمي بأحجام معلمات 3B، و8B، و20B، و34B.
تتضمن عمليتنا لإعداد بيانات التدريب المسبق للكود عدة مراحل. أولاً، نقوم بجمع مجموعة من مجموعات البيانات المتاحة للعامة (على سبيل المثال، GitHub Code Clean، وبيانات Starcoder)، ومستودعات التعليمات البرمجية العامة، والإصدارات من GitHub. ثانيًا، نقوم بتصفية بيانات التعليمات البرمجية التي تم جمعها بناءً على لغة البرمجة التي تمت كتابة البيانات بها (والتي حددناها بناءً على امتداد الملف). وبعد ذلك، نقوم أيضًا بتصفية البيانات ذات جودة التعليمات البرمجية المنخفضة. ثالثًا، نحن نعتمد إستراتيجية صارمة لإلغاء البيانات المكررة تتضمن إلغاء البيانات المكررة بشكل دقيق وغامض لإزالة المستندات التي تحتوي على محتوى كود متطابق (تقريبًا). أخيرًا، نقوم بتطبيق مرشح محتوى HAP الذي يقلل من احتمال قيام العارضات بإنشاء لغة تحض على الكراهية أو المسيئة أو البذيئة. نتأكد أيضًا من تنقيح معلومات التعريف الشخصية (PII) عن طريق استبدال محتوى PII (على سبيل المثال، الأسماء وعناوين البريد الإلكتروني والمفاتيح وكلمات المرور) بالرموز المقابلة (على سبيل المثال، ⟨NAME⟩، ⟨EMAIL⟩، ⟨KEY⟩، ⟨PASSWORD⟩) . نقوم أيضًا بفحص جميع مجموعات البيانات باستخدام ClamAV لتحديد وإزالة حالات البرامج الضارة في كود المصدر. بالإضافة إلى جمع بيانات التعليمات البرمجية للتدريب على النماذج، فإننا ننظم العديد من مجموعات بيانات اللغة الطبيعية عالية الجودة المتاحة للجمهور لتحسين كفاءة النموذج في فهم اللغة والتفكير الرياضي.
يتم تدريب نماذج Granite Code Base على 3-4T من الرموز المميزة لبيانات التعليمات البرمجية ومجموعات بيانات اللغة الطبيعية المتعلقة بالرمز. يتم ترميز البيانات عبر تشفير زوج البايت (BPE)، باستخدام نفس أداة الترميز مثل StarCoder. نحن نستخدم بيانات عالية الجودة من خلال مرحلتين من التدريب على النحو التالي:
يتم ضبط نماذج Granite Code Instruct على الأنواع التالية من بيانات التعليمات: 1) عمليات تنفيذ التعليمات البرمجية مصدرها CommitPackFT، 2) مجموعات بيانات رياضية عالية الجودة، وعلى وجه التحديد استخدمنا MathInstruct وMetaMathQA، 3) مجموعات بيانات تعليمات التعليمات البرمجية مثل Glaive-Code-Assistant- v3، وSelf-OSS-Instruct-SC2، وGlaive-Function-Calling-v2، وNL2SQL11 ومجموعة صغيرة من مجموعات بيانات استدعاء واجهة برمجة التطبيقات الاصطناعية، و4) مجموعات بيانات تعليمات اللغة عالية الجودة مثل HelpSteer وإصدار مفتوح مفلتر بالترخيص من Platypus .
نحن نجري تقييمًا شاملاً لنماذج التعليمات البرمجية الخاصة بنا بناءً على قائمة شاملة من المعايير التي تتضمن، على سبيل المثال لا الحصر، HumanEvalPack وMBPP وMBPP+. تشمل هذه المجموعة من المعايير مهام ترميز مختلفة عبر لغات البرمجة شائعة الاستخدام (على سبيل المثال، Python، وJavaScript، وJava، وGo، وC++، وRust).
تكشف النتائج التي توصلنا إليها أن نماذج Granite Code تتفوق على النماذج القوية مفتوحة المصدر عبر أحجام النماذج. يوضح الشكل أدناه كيف يتفوق Granite-8B-Code-Base
Mistral-7B
و LLama-3-8B
وغيرها من النماذج مفتوحة المصدر في ثلاث مهام ترميز. نحن نقدم المزيد من نتائج التقييم في ورقتنا.
لاستخدام أي من نماذجنا، اختر model_path
المناسب من:
ibm-granite/granite-3b-code-base-2k
ibm-granite/granite-3b-code-instruct-2k
ibm-granite/granite-8b-code-base-4k
ibm-granite/granite-8b-code-instruct-4k
ibm-granite/granite-20b-code-base-8k
ibm-granite/granite-20b-code-instruct-8k
ibm-granite/granite-34b-code-base-8k
ibm-granite/granite-34b-code-instruct-8k
from transformers import AutoModelForCausalLM , AutoTokenizer
device = "cuda" # or "cpu"
model_path = "ibm-granite/granite-3b-code-base-2k" # pick anyone from above list
tokenizer = AutoTokenizer . from_pretrained ( model_path )
# drop device_map if running on CPU
model = AutoModelForCausalLM . from_pretrained ( model_path , device_map = device )
model . eval ()
# change input text as desired
input_text = "def generate():"
# tokenize the text
input_tokens = tokenizer ( input_text , return_tensors = "pt" )
# transfer tokenized inputs to the device
for i in input_tokens :
input_tokens [ i ] = input_tokens [ i ]. to ( device )
# generate output tokens
output = model . generate ( ** input_tokens )
# decode output tokens into text
output = tokenizer . batch_decode ( output )
# loop over the batch to print, in this example the batch size is 1
for i in output :
print ( i )
نحن نستخدم محرك الدولوميت لضبط (أو ضبط التعليمات) جميع موديلاتنا. نحن نقدم نماذج من البرامج النصية لضبط ibm-granite/granite-3b-code-base
. لضبط النماذج، ما عليك سوى اتباع الخطوات التالية:
git clone https://github.com/IBM/dolomite-engine/
cd dolomite-engine
# you might need to modify configs/granite-example/training.yml
sh scripts/finetune.sh configs/granite-example/training.yml
# once the model is trained, convert to HuggingFace-compatible safetensors
sh scripts/export.sh configs/granite-example/export.yml
نصيحة
إذا كنت ترغب في استخدام محولات خالية من الحشو لحفظ أثر الذاكرة وFLOPs أثناء التدريب، فاتبع الإرشادات الموجودة في الملف التمهيدي لمحرك Dolomite لمزيد من التفاصيل.
برجاء مراجعة إرشاداتنا ومدونة قواعد السلوك للمساهمة في مشروعنا.
تتوفر بطاقات النماذج لكل طراز في مستودع HuggingFace الخاص بها. يرجى زيارة مجموعتنا هنا.
يمكن استنساخ النموذج المفضل (قاعدة الكود الجرانيت 3 ب في هذا المثال) باستخدام:
git clone https://huggingface.co/ibm-granite/granite-3b-code-base-2k
يتم توزيع جميع نماذج Granite Code بموجب ترخيص Apache 2.0.
يرجى إعلامنا بتعليقاتك حول مجموعة نماذج الأكواد لدينا من خلال زيارة مجموعتنا. حدد مستودع النموذج الذي ترغب في تقديم تعليقات حوله. ثم انتقل إلى علامة التبويب "المجتمع" ، وانقر على "مناقشة جديدة" . وبدلاً من ذلك، يمكنك أيضًا نشر أي أسئلة/تعليقات على صفحة مناقشات جيثب الخاصة بنا.