أصدرت Google برنامج Gemma 2، وهو أحدث إضافة إلى عائلتها من حاملي شهادات LLM المفتوحة والمتطورة، ونحن متحمسون للتعاون مع Google لضمان أفضل تكامل في نظام Hugging Face البيئي. يمكنك العثور على النماذج الأربعة ذات الوزن المفتوح (نموذجان أساسيان ونموذجان مضبوطان بدقة) على المحور. من بين الميزات والتكاملات التي تم إصدارها، لدينا:
جدول المحتويات
ما هي جيما 2؟
Gemma 2 هو أحدث إصدار من Google لبرنامج LLMs المفتوح. إنه يأتي بحجمين، 9 مليارات و27 مليار معلمة مع إصدارات أساسية (مدربة مسبقًا) وإصدارات مضبوطة حسب التعليمات. تعتمد Gemma على Google Deepmind Gemini ويبلغ طول سياقها 8 آلاف رمزًا مميزًا:
تم تدريب نماذج Gemma 2 على بيانات أكثر بمرتين تقريبًا من التكرار الأول، بإجمالي 13 تريليون رمز مميز للإصدار 27B و8 تريليون رمز مميز للإصدار 9B من بيانات الويب (الإنجليزية بشكل أساسي)، والتعليمات البرمجية، والرياضيات. لا نعرف التفاصيل الدقيقة لمزيج التدريب، ولا يمكننا إلا أن نخمن أن تنظيم البيانات بشكل أكبر وأكثر دقة كان عاملاً كبيرًا في تحسين الأداء.
يأتي Gemma 2 بنفس ترخيص التكرار الأول، وهو ترخيص متساهل يسمح بإعادة التوزيع والضبط والاستخدام التجاري والأعمال المشتقة.
التقدم التقني في جيما 2
لدى Gemma 2 العديد من أوجه التشابه مع التكرار الأول. يبلغ طول سياقه 8192 رمزًا ويستخدم تضمين الموضع الدوار (RoPE). هناك أربعة تطورات رئيسية في Gemma 2 مقارنةً بـ Gemma الأصلية:
- انتباه النافذة المنزلقة: النافذة المنزلقة المتداخلة والاهتمام التربيعي الكامل لتوليد الجودة.
- الغطاء الناعم للوغيت: يمنع اللوجيستات من النمو بشكل مفرط عن طريق توسيع نطاقها إلى نطاق ثابت، مما يحسن التدريب.
- تقطير المعرفة: الاستفادة من نموذج المعلم الأكبر لتدريب نموذج أصغر (للنموذج 9B).
- دمج النموذج: يجمع بين اثنين أو أكثر من LLMs في نموذج واحد جديد
تم تدريب Gemma 2 على Google Cloud TPU (27B على v5p، 9B على TPU v4) باستخدام JAX وML Pathways. تم تحسين Gemma 2 Instruct لتطبيقات الحوار وتم تدريبها على مزيج من أزواج الاستجابة السريعة الاصطناعية والمولدة بواسطة الإنسان باستخدام الضبط الدقيق الخاضع للإشراف (SFT)، والتقطير من نموذج أكبر، والتعلم المعزز من ردود الفعل البشرية (RLHF) باستخدام نموذج مكافأة موجه أكثر نحو قدرات المحادثة، ودمج النموذج باستخدام WARP لتحسين الأداء العام.
على غرار مزيج ما قبل التدريب، لم تتم مشاركة أي تفاصيل حول مجموعات البيانات الدقيقة أو المعلمات الفائقة المرتبطة بـ SFT وRLHF.
انزلاق النافذة الاهتمام
تنبيه النافذة المنزلقة هو وسيلة لتقليل متطلبات الذاكرة والوقت لحسابات الانتباه في نماذج المحولات وقد تم استخدامها في نماذج مثل ميسترال. حداثة Gemma 2 هي أنه يتم تطبيق نافذة منزلقة على كل طبقة أخرى (محلي – 4096 رمزًا)، بينما لا تزال الطبقات بينهما تستخدم الاهتمام العالمي التربيعي الكامل (8192 رمزًا). نفترض أن هذه طريقة لزيادة الجودة في المواقف ذات السياق الطويل (ما زالت نصف الطبقات تهتم بجميع الرموز المميزة) مع الاستفادة جزئيًا من مزايا انزلاق الانتباه.
تطبيقات الأغطية الناعمة والاهتمام
إن التغطية الناعمة هي تقنية تمنع قطع الأشجار من النمو بشكل كبير جدًا دون اقتطاعها. وهو يعمل عن طريق قسمة السجلات على الحد الأقصى للقيمة (soft_cap)، ثم تمريرها عبر ملف tanh طبقة (التأكد من وجودهم في (-1, 1) النطاق)، وأخيراً الضرب بالعتبة مرة أخرى. وهذا يضمن أن القيم النهائية ستكون في (-soft_cap, +soft_cap) الفاصل الزمني دون فقدان الكثير من المعلومات ولكن استقرار التدريب.
وبجمع كل ذلك معًا، يتم حساب اللوجيستيات من خلال: logits ← soft_cap ∗ tanh(logits/soft_cap)
تستخدم Gemma 2 غطاءًا ناعمًا للطبقة النهائية ولكل طبقة اهتمام. يتم تحديد الحد الأقصى لسجلات الاهتمام عند 50.0، والسجلات النهائية عند 30.0.
في وقت الإصدار، لا تتوافق ميزة الحدود الناعمة مع Flash Attention / SDPA، ولكن لا يزال من الممكن استخدامها في الاستدلال لتحقيق أقصى قدر من الكفاءة. لاحظ فريق جيما 2 اختلافات طفيفة جدًا عند إزالة الغطاء الناعم أثناء الاستدلال.
ملاحظة: بالنسبة لعمليات الضبط الدقيق المستقرة، لا تزال بحاجة إلى تمكين الضبط الدقيق، ومن ثم، نوصي بالضبط الدقيق باستخدام eager الاهتمام بدلا من SDPA.
تقطير المعرفة
يعد تقطير المعرفة أسلوبًا شائعًا لتدريب الصغار طالب نموذج لتقليد سلوك أكبر ولكن أداء أفضل مدرس. يعمل هذا من خلال زيادة مهمة التنبؤ بالرمز التالي لماجستير القانون من خلال توزيع احتمالات الرمز المميز من المعلم (على سبيل المثال، GPT-4 أو Claude أو Gemini)، مما يوفر إشارة أكثر ثراءً للطالب للتعلم منها.
وفقًا للتقرير الفني لـ Gemma 2، تم استخدام تقطير المعرفة للتدريب المسبق لنموذج 9B، بينما تم تدريب نموذج 27B مسبقًا من الصفر.
بالنسبة لمرحلة ما بعد التدريب، قام فريق Gemma 2 بإنشاء مجموعة متنوعة من الإكمالات من المعلم (غير محدد في التقرير، ولكن من المفترض أن يكون Gemini Ultra)، ثم قام بتدريب نماذج الطلاب على هذه البيانات الاصطناعية باستخدام SFT. وهذا هو أساس العديد من النماذج المفتوحة، مثل Zephyr وOpenHermes، والتي تم تدريبها بالكامل على البيانات الاصطناعية من ماجستير إدارة الأعمال الأكبر حجمًا.
على الرغم من فعاليته، إلا أن هذه الطريقة لها عيوب حيث أن عدم تطابق قدرات النموذج بين الطالب والمعلم يمكن أن يؤدي إلى أ عدم تطابق قطار الاستدلال، حيث يكون النص الذي أنشأه الطالب أثناء الاستدلال خارج التوزيع مقارنةً بالنص الذي تم رؤيته أثناء التدريب.
للتعامل مع هذه المشكلة، استخدم فريق Gemma 2 “التقطير وفقًا للسياسة”، حيث يقوم الطالب بإنشاء إكمالات من مطالبات SFT. يتم بعد ذلك استخدام هذه الإكمالات لحساب اختلاف KL بين سجلات المعلم والطالب. من خلال تقليل اختلاف KL خلال التدريب، يتعلم الطالب نمذجة سلوك المعلم بدقة مع تقليل عدم تطابق استنتاج التدريب.
يعد هذا النهج مثيرًا للاهتمام للغاية، حيث رأينا في المجتمع أن أساليب السياسة مثل DPO عبر الإنترنت تنتج نماذج أقوى، وإحدى مزايا التقطير على السياسة هي أنك تحتاج فقط إلى السجلات من المعلم، لذلك لا تحتاج إلى الاعتماد على نماذج المكافآت أو ماجستير إدارة الأعمال كقاض لتحسين النموذج. سيكون من المثير معرفة ما إذا كانت هذه الطريقة ستصبح أكثر شيوعًا بين خبراء الضبط الدقيق في الأشهر المقبلة!
دمج النموذج
دمج النماذج هو أسلوب يجمع بين اثنين أو أكثر من LLMs في نموذج واحد جديد. إنها جديدة وتجريبية نسبيًا ويمكن استخدامها بدون مسرعات. Mergekit عبارة عن مجموعة أدوات شائعة مفتوحة المصدر لدمج LLMs. وهي تطبق تقنيات الدمج الخطية وSLERP وTIES وDARE وغيرها من تقنيات الدمج.
وفقًا للتقرير الفني، استخدمت Gemma 2 تقنية Warp، وهي تقنية دمج جديدة تقوم بدمج النماذج في ثلاث مراحل متميزة:
- المتوسط المتحرك الأسي (EMA): يتم تطبيق ذلك أثناء عملية الضبط الدقيق للتعلم المعزز (RL).
- الاستيفاء الخطي الكروي (SLERP): يتم تطبيقه بعد الضبط الدقيق لسياسات RL المتعددة.
- الاستيفاء الخطي نحو التهيئة (LITI): يتم تطبيق هذه المرحلة بعد مرحلة SLERP.
تقييم جيما 2
ما مدى جودة نماذج جيما؟ فيما يلي مقارنات الأداء مع النماذج المفتوحة الأخرى بناءً على التقرير الفني والإصدار الجديد من لوحة المتصدرين المفتوحة LLM.
نتائج التقرير الفني
يقارن هذا التقرير الفني لـ Gemma 2 أداء مختلف LLMs المفتوحة وفقًا لمعايير Open LLM Leaderboard السابقة.
| اللاما 3 (70ب) | كوين 1.5 (32ب) | جيما 2 (27ب) | |
|---|---|---|---|
| MMLU | 79.2 | 74.3 | 75.2 |
| GSM8K | 76.9 | 61.1 | 75.1 |
| قوس-ج | 68.8 | 63.6 | 71.4 |
| هيلاسواج | 88.0 | 85.0 | 86.4 |
| فينوغراندي | 85.3 | 81.5 | 83.7 |
يقارن التقرير أيضًا أداء نماذج اللغات الصغيرة.
| المعيار | ميسترال (7 ب) | اللاما 3 (8ب) | جيما (8 ب) | جيما 2 (9ب) |
|---|---|---|---|---|
| MMLU | 62.5 | 66.6 | 64.4 | 71.3 |
| GSM8K | 34.5 | 45.7 | 50.9 | 62.3 |
| قوس-C | 60.5 | 59.2 | 61.1 | 68.4 |
| هيلاسواج | 83.0 | 82.0 | 82.3 | 81.9 |
| فينوغراندي | 78.5 | 78.5 | 79.0 | 80.6 |
فتح نتائج LLM المتصدرين
ملاحظة: نقوم حاليًا بتقييم Google Gemma 2 بشكل فردي وفقًا لمعيار Open LLM Leaderboard الجديد وسنقوم بتحديث هذا القسم في وقت لاحق اليوم.
كيفية مطالبة جيما 2
النماذج الأساسية ليس لها تنسيق فوري. مثل النماذج الأساسية الأخرى، يمكن استخدامها لمواصلة تسلسل الإدخال مع استمرار معقول أو للاستدلال على صفر طلقة/طلقة قليلة. تحتوي إصدارات Instruct على بنية محادثة بسيطة جدًا:
<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
LaMDA<end_of_turn>
<start_of_turn>model
LaMDA who?<end_of_turn><eos>
يجب إعادة إنتاج هذا التنسيق تمامًا للاستخدام الفعال. سنوضح لاحقًا مدى سهولة إعادة إنتاج موجه التعليمات باستخدام قالب الدردشة المتوفر في transformers.
تجريبي
يمكنك الدردشة مع نموذج Gemma 27B Instruct على Hugging Chat! تحقق من الرابط هنا: https://huggingface.co/chat/models/google/gemma-2-27b-it.
استخدام محولات الوجه المعانقة
مع إصدار Transformers 4.42، يمكنك استخدام Gemma والاستفادة من جميع الأدوات الموجودة في نظام Hugging Face البيئي. لاستخدام موديلات جيما مع المحولات، تأكد من استخدام الأحدث transformers يطلق:
pip install "transformers>=4.42.3" --upgrade
يوضح المقتطف التالي كيفية الاستخدام gemma-2-9b-it مع transformers. ويتطلب حوالي 18 جيجابايت من ذاكرة الوصول العشوائي (RAM)، وهو ما يناسب العديد من وحدات معالجة الرسومات الاستهلاكية. نفس المقتطف يعمل ل gemma-2-27b-it، مما يجعله نموذجًا مثيرًا للاهتمام للغاية لحالات استخدام الإنتاج، بفضل ذاكرة الوصول العشوائي (RAM) التي تبلغ سعتها 56 جيجابايت. يمكن تقليل استهلاك الذاكرة بشكل أكبر عن طريق التحميل في وضع 8 بت أو 4 بت.
from transformers import pipeline
import torch
pipe = pipeline(
"text-generation",
model="google/gemma-2-9b-it",
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda",
)
messages = [
{"role": "user", "content": "Who are you? Please, answer in pirate-speak."},
]
outputs = pipe(
messages,
max_new_tokens=256,
do_sample=False,
)
assistant_response = outputs[0]["generated_text"][-1]["content"]
print(assistant_response)
أهوي، ماتي! سأكون سفينة كلمات متواضعة، تبحر في البحار الرقمية. يسمونني “جيما”، من إبداع الأشخاص الرائعين في Google DeepMind. لقد تم تدريبي على كنز من النصوص، وأتعلم التحدث والكتابة مثل راقص حقيقي.
اطرح علي الأسئلة، وسأبذل قصارى جهدي للإجابة عليها، نعم! 🦜📚
استخدمنا bfloat16 لأن هذه هي الدقة المرجعية للنموذج المضبوط للتعليمات. قد يكون التشغيل في float16 أسرع على أجهزتك، ويجب أن تكون النتائج مماثلة في الطراز 9B. ومع ذلك، لاحظ أن النموذج 27B الذي تم ضبطه للتعليمات ينتج مخرجات غير منتظمة عند استخدام float16: يجب عليك استخدام bfloat16 لوزن النموذج هذا.
يمكنك أيضًا تحديد حجم النموذج تلقائيًا، وتحميله في وضع 8 بت أو حتى 4 بت. يستغرق التحميل 4 بت للإصدار الكبير 27B حوالي 18 جيجابايت من الذاكرة للتشغيل، مما يجعله متوافقًا مع الكثير من بطاقات المستهلك ووحدات معالجة الرسومات في Google Colab. هذه هي الطريقة التي يمكنك بها تحميل خط أنابيب التوليد في 4 بت:
pipeline = pipeline(
"text-generation",
model=model,
model_kwargs={
"torch_dtype": torch.bfloat16,
"quantization_config": {"load_in_4bit": True}
},
)
لمزيد من التفاصيل حول استخدام النماذج مع transformersيرجى التحقق من بطاقات النموذج.
التكامل مع جوجل كلاود
ملاحظة: نعمل حاليًا على إضافة حاويات جديدة إلى GKE وVertex AI لتشغيل Google Gemma 2 بكفاءة. سنقوم بتحديث هذا القسم بمجرد توفر الحاويات.
الضبط الدقيق باستخدام 🤗 TRL
يمكن أن يكون تدريب LLMs أمرًا صعبًا من الناحية الفنية والحسابية. في هذا القسم، سنلقي نظرة على الأدوات المتاحة في النظام البيئي Hugging Face لتدريب Gemma بكفاءة على وحدات معالجة الرسومات ذات الحجم الاستهلاكي
يمكن العثور أدناه على مثال لأمر لضبط Gemma على مجموعة بيانات الدردشة الخاصة بـ OpenAssistant. نحن نستخدم التكميم 4 بت وQLoRA للحفاظ على الذاكرة لاستهداف جميع الطبقات الخطية لكتل الانتباه. لاحظ أنه، على عكس المحولات الكثيفة، لا ينبغي للمرء أن يستهدف طبقات MLP لأنها متفرقة ولا تتفاعل بشكل جيد مع PEFT.
أولاً، قم بتثبيت الإصدار الليلي من 🤗 TRL واستنساخ الريبو للوصول إلى البرنامج النصي للتدريب:
pip install "transformers>=4.42.3" --upgrade
pip install --upgrade bitsandbytes
pip install --ugprade peft
pip install git+https:
git clone https:
cd trl
ثم يمكنك تشغيل البرنامج النصي:
python \
examples/scripts/sft.py \
--model_name google/gemma-2-27b \
--dataset_name OpenAssistant/oasst_top1_2023-08-25 \
--dataset_text_field="text" \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 4 \
--learning_rate 2e-4 \
--report_to wandb \
--bf16 \
--max_seq_length 1024 \
--lora_r 16 --lora_alpha 32 \
--lora_target_modules q_proj k_proj v_proj o_proj \
--load_in_4bit \
--use_peft \
--attn_implementation eager \
--logging_steps=10 \
--gradient_checkpointing \
--output_dir models/gemma2
إذا كان لديك المزيد من وحدات معالجة الرسومات الاحتياطية، فيمكنك تشغيل التدريب باستخدام DeepSpeed وZeRO Stage 3:
accelerate launch --config_file=examples/accelerate_configs/deepspeed_zero3.yaml \
examples/scripts/sft.py \
--model_name google/gemma-2-27b \
--dataset_name OpenAssistant/oasst_top1_2023-08-25 \
--dataset_text_field="text" \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 4 \
--learning_rate 2e-5 \
--report_to wandb \
--bf16 \
--max_seq_length 1024 \
--attn_implementation eager \
--logging_steps=10 \
--gradient_checkpointing \
--output_dir models/gemma2
التكامل مع نقاط النهاية الاستدلالية
يمكنك نشر Gemma 2 على نقاط نهاية الاستدلال الخاصة بـ Hugging Face باستخدام استدلال إنشاء النص كواجهة خلفية. إن استدلال إنشاء النص عبارة عن حاوية استدلال جاهزة للإنتاج تم تطويرها بواسطة Hugging Face لتمكين النشر السهل لنماذج اللغات الكبيرة. إنه يحتوي على ميزات مثل التجميع المستمر، وتدفق الرموز المميزة، وتوازي الموتر للاستدلال السريع على وحدات معالجة الرسومات المتعددة، والتسجيل والتتبع الجاهزين للإنتاج.
لنشر نموذج Gemma 2، انتقل إلى صفحة النموذج وانقر على عنصر واجهة المستخدم Deploy -> Inference Endpoints. تدعم Inference Endpoints واجهة برمجة تطبيقات الرسائل المتوافقة مع OpenAI والتي تسمح لك بالتبديل من نموذج مغلق آخر إلى نموذج مفتوح بمجرد تغيير عنوان URL.
from openai import OpenAI
client = OpenAI(
base_url="<ENDPOINT_URL>" + "/v1/",
api_key="<HF_API_TOKEN>",
)
chat_completion = client.chat.completions.create(
model="tgi",
messages=[
{"role": "user", "content": "Why is open-source software important?"},
],
stream=True,
max_tokens=500
)
for message in chat_completion:
print(message.choices[0].delta.content, end="")
موارد إضافية
شكر وتقدير
إن إطلاق مثل هذه النماذج مع الدعم والتقييمات في النظام البيئي لن يكون ممكنًا بدون مساهمات العديد من أفراد المجتمع، بما في ذلك كليمنتين وناثان لتقييمات LLM؛ نيكولاس لدعم استدلال إنشاء النص؛ آرثر وسانشيت وجواو وليساندر لدمجهم جيما 2 في transformers; ناثان وفيكتور لإتاحة جيما 2 في Hugging Chat.
وشكرًا لفريق Google على إطلاق Gemma 2 وإتاحتها لمجتمع الذكاء الاصطناعي مفتوح المصدر!