توقّع رموز متعددة في Gemma 4 باستخدام مكتبة Transformers من Hugging Face

عرض على ai.google.dev التشغيل في Google Colab التشغيل في Kaggle الفتح في Vertex AI عرض المصدر على GitHub

لتحسين سرعة الاستنتاج في نماذج Gemma 4، تم إصدار سلسلة جديدة من نماذج "المسودة" التراجعية جنبًا إلى جنب مع التشكيلة الرئيسية. بدلاً من الاعتماد فقط على نماذج Gemma 4 الأساسية (المشار إليها باسم "النماذج المستهدَفة")، يتوقّع نموذج المسودة عدة رموز مميزة بشكل تراجعي في الوقت الذي يستغرقه النموذج المستهدَف لمعالجة رمز مميز واحد فقط. تُعرف هذه التقنية أيضًا باسم فك التشفير التخميني.

بعد أن يتوقّع نموذج المسودة رموزًا مميزة متعددة، ما على النموذج المستهدَف الآن سوى التحقّق من هذه الرموز المقترَحة. يتم التحقّق بالتوازي، ما يؤدي إلى تسريع عملية الاستنتاج بشكل كبير. ويقلّل ذلك من عدد عمليات التمرير الأمامي التي يجب أن يجريها النموذج المستهدَف لكل رمز مميز. بما أنّ نموذج المسودة ينشئ سلسلة من الرموز المميزة للتحقّق منها، نشير إليه باسم رأس توقّع الرموز المميزة المتعددة (MTP).

png

إنّ نماذج المسودة التي تم إصدارها لمجموعة Gemma 4 صغيرة وتتضمّن العديد من التحسينات لتحسين جودة الرموز المميزة التي تم وضع مسودتها ولتسريع عملية الاستنتاج بشكل أكبر، مثل استخدام عمليات التفعيل في النموذج المستهدَف وذاكرة التخزين المؤقت KV للحصول على توقّعات أفضل.

تؤدي هذه التحسينات إلى تسريع عملية فك التشفير بشكل كبير مع ضمان جودة مماثلة، ما يجعل نقاط التحقّق هذه مثالية للتطبيقات التي تتطلّب وقت استجابة منخفضًا والتطبيقات على الجهاز فقط.

تثبيت حِزم Python

ثبِّت مكتبات Hugging Face المطلوبة لتشغيل نموذج Gemma 4 ونموذج Gemma 4 Assistant.

# Install PyTorch & other libraries
pip install torch accelerate

# Install the transformers library
pip install transformers

تحميل النماذج

لكل نموذج مستهدَف (أحد النماذج الرئيسية في نموذج Gemma 4)، هناك مساعد يساعد في تسريع عملية الاستنتاج. وعليه، ستحمِّل نموذجَين:

  • النموذج المستهدَف (مثلاً google/gemma-4-E2B-it): نموذج Gemma 4 المستهدَف الكامل
  • نموذج المسودة (مثلاً google/gemma-4-E2B-it-assistant): نموذج المسودة الخفيف ذو 4 طبقات لتوقّع الرموز المميزة المتعددة (MTP) الذي يقترح الرموز المميزة المرشّحة

يُرجى العِلم أنّ نموذج المسودة يُشار إليه غالبًا باسم المساعد لأنّ النموذج يساعد النموذج الأكبر في اختيار الرموز المميزة التي يجب توقّعها.

استخدِم مكتبات transformers لإنشاء مثيل من processor وmodel باستخدام الفئتَين AutoProcessor وAutoModelForCausalLM كما هو موضّح في مثال الرمز البرمجي التالي:

TARGET_MODEL_ID = "google/gemma-4-E2B-it" # @param ["google/gemma-4-E2B-it","google/gemma-4-E4B-it", "google/gemma-4-31B-it", "google/gemma-4-26B-A4B-it"]
ASSISTANT_MODEL_ID = TARGET_MODEL_ID + "-assistant"
import torch
from transformers import AutoProcessor, AutoModelForCausalLM

# Target Model
processor = AutoProcessor.from_pretrained(TARGET_MODEL_ID)
target_model = AutoModelForCausalLM.from_pretrained(
    TARGET_MODEL_ID,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

# Assistant Model (the drafter)
assistant_model = AutoModelForCausalLM.from_pretrained(
    ASSISTANT_MODEL_ID,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)
[transformers] `torch_dtype` is deprecated! Use `dtype` instead!
Loading weights:   0%|          | 0/1951 [00:00<?, ?it/s]
Loading weights:   0%|          | 0/50 [00:00<?, ?it/s]

Gemma 4 مع المساعد

إنّ استخدام مساعد في transformers أمر بسيط جدًا لحسن الحظ، ويتطلّب منك تمرير نموذج المساعد إلى الدالة model.generate:

# Process inputs with the `target_model`
messages = [
    {
        "role": "user",
        "content": "Explain the concepts of speculative decoding and MTP in 3 sentences."
    }
]
input_text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(text=input_text, return_tensors="pt").to(target_model.device)

# `assistant_model=assistant_model` is all you need to enable MTP!
outputs = target_model.generate(
    **inputs,
    assistant_model=assistant_model,
    max_new_tokens=256,
    do_sample=False,
)

# Decode the response into text
response = processor.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(response)
**Speculative decoding** is a technique where a smaller, faster language model (the "draft model") generates several candidate tokens, which are then quickly verified by a larger, more accurate model to produce a final, high-quality output much faster than decoding the large model alone. **MTP (Multi-Task Prediction)** involves training a single model to perform multiple related tasks simultaneously, allowing it to leverage shared knowledge across different objectives. Together, these methods aim to significantly accelerate the inference speed of large language models while maintaining or improving output quality.

في الخلفية، تكون العملية على النحو التالي:

  • يقترح نموذج المسودة عدد N من الرموز المميزة التي تم إنشاؤها بشكل تراجعي
  • يتحقّق النموذج المستهدَف من جميع الرموز المميزة البالغ عددها N في عملية تمرير أمامي واحدة
  • يتم قبول الرموز المميزة التي تم وضع مسودتها والتي تكون احتمالاتها عالية
  • يتم رفض الرموز المميزة التي تم وضع مسودتها والتي تكون احتمالاتها منخفضة
  • بما أنّ النموذج المستهدَف يجري عملية تمرير أمامي، سيُنشئ دائمًا رمزًا مميزًا واحدًا بنفسه بغض النظر عن عدد الرموز المميزة التي تم وضع مسودتها والتي تم قبولها أو رفضها

وضع مسودة الرموز المميزة

يمكن لنموذج المسودة إنشاء أي عدد من الرموز المميزة ليتحقّق منها النموذج المستهدَف. ومع ذلك، لا يزال بإمكان النموذج المستهدَف اختيار رفض رموز مميزة معيّنة. وعندما يحدث ذلك، يتم تجاهل جميع الرموز المميزة بعد ذلك.

png

وعليه، من المهم معرفة المفاضلة عند استخدام قيم مختلفة لعدد الرموز المميزة التي تم وضع مسودتها.

المزيد من الرموز المميزة التي تم وضع مسودتها

عند وضع مسودة لعدد كبير من الرموز المميزة (مثلاً 15)، يكون هناك احتمال كبير بألا يتم قبول جميع الرموز المميزة. وعليه، هناك احتمال أكبر لتبديد عمليات الحوسبة. في المقابل، يميل ذلك إلى تسريع عملية الاستنتاج عندما يكون معدّل القبول مرتفعًا.

png

عدد أقل من الرموز المميزة التي تم وضع مسودتها

عند وضع مسودة لعدد أقل من الرموز المميزة، يميل معدّل القبول إلى أن يكون أعلى لأنّ الرموز المميزة الأقرب في الموضع إلى الطلب الأولي تكون أكثر دقة. ومع ذلك، بما أنّه يتم وضع مسودة لعدد قليل فقط من الرموز المميزة، يتم تقليل السرعة التي ستحصل عليها من نموذج مسودة أسرع.

png

لحسن الحظ، ليس عليك تجربة أفضل القيم لحالة الاستخدام في transformers لأنّه يمكنك ضبط num_assistant_tokens_schedule على "heuristic"، ما سيؤدي إلى تكييف عدد الرموز المميزة التي تم وضع مسودتها تلقائيًا في وقت التشغيل:

  • تم قبول جميع الرموز المميزة : يمكنك زيادة عدد الرموز المميزة التي يجب وضع مسودتها بمقدار 2 لأنّ نموذج المسودة دقيق جدًا للطلب. قد تؤدي زيادة عدد الرموز المميزة التي تم وضع مسودتها إلى تسريع العملية إذا تم قبول هذه الرموز المميزة أيضًا.
  • تم رفض أي رموز مميزة : إذا تم رفض أي رموز مميزة، يمكنك تقليل عدد الرموز المميزة التي يجب وضع مسودتها بمقدار 1. يؤدي تقليل عدد الرموز المميزة إلى عدم تبديد عدد كبير جدًا من الرموز المميزة التي تم وضع مسودتها إذا استمر النموذج المستهدَف في رفض معظم الرموز المميزة.

وبالمثل، يمكنك تعديل عدد الرموز المميزة التي تم وضع مسودتها من خلال تعديل num_assistant_tokens في نموذج المسودة على النحو التالي:

# Update how many draft tokens are generated at the start of inference
assistant_model.generation_config.num_assistant_tokens = 4

# Update how the number of draft tokens are updated ("heuristic" for a dynamic schedule and "constant" for a constant schedule)
assistant_model.generation_config.num_assistant_tokens_schedule = "heuristic"

# Run with MTP
outputs = target_model.generate(
    **inputs,
    assistant_model=assistant_model,
    max_new_tokens=256,
    do_sample=False,
)

# Decode the response into text
response = processor.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(response)
**Speculative decoding** is a technique where a smaller, faster language model (the "draft model") generates several candidate tokens, which are then verified by a larger, more accurate model to quickly produce a high-quality output. **MTP (Multi-Task Prediction)** involves training a single model to perform multiple related tasks simultaneously, allowing it to leverage shared knowledge across different objectives. Together, these methods aim to significantly speed up the inference process of large language models while maintaining or improving output quality.