| | Ekzekuto në Google Colab | | | Shiko burimin në GitHub |
Për të përmirësuar shpejtësinë e nxjerrjes së përfundimeve të modeleve Gemma 4, një seri e re modelesh "hartuese" autoregresive është publikuar së bashku me linjën kryesore. Në vend që të mbështetet vetëm në modelet kryesore Gemma 4 (të referuara si modelet "objektive"), modeli i draftit parashikon disa tokena në mënyrë autoregresive në kohën që i duhet modelit të synuar për të përpunuar vetëm një. Kjo teknikë njihet edhe si dekodim spekulativ.
Pasi hartuesi të ketë parashikuar shumë tokena drafti, modeli i synuar tani duhet vetëm të verifikojë ato tokena drafti të sugjeruara. Verifikimi bëhet paralelisht, duke përshpejtuar në mënyrë drastike përfundimet. Kjo zvogëlon numrin e kalimeve përpara që modeli i synuar duhet të bëjë për secilin token. Meqenëse hartuesi ynë gjeneron një sekuencë tokenash për verifikim, ne e quajmë atë kokë Parashikimi me Shumë Tokena (MTP).

Modelet draft të publikuara për familjen Gemma 4 janë të vogla dhe prezantojnë disa përmirësime për të përmirësuar cilësinë e tokenëve të draftuar dhe për të përshpejtuar më tej nxjerrjen e përfundimeve, si përdorimi i aktivizimeve të modelit të synuar dhe KV-cache për të marrë parashikime më të mira.
Këto përmirësime rezultojnë në shpejtësi të konsiderueshme të dekodimit, ndërkohë që garantojnë cilësi të ngjashme, duke i bërë këto pika kontrolli perfekte për aplikacione me vonesë të ulët dhe në pajisje.
Instaloni paketat Python
Instaloni bibliotekat Hugging Face të nevojshme për të ekzekutuar modelin Gemma 4 dhe asistentin Gemma 4.
# Install PyTorch & other librariespip install torch accelerate# Install the transformers librarypip install transformers
Ngarko Modelet
Për secilin model të synuar (një nga modelet kryesore në modelin Gemma 4), ekziston një asistent që ndihmon në përshpejtimin e nxjerrjes së përfundimeve. Si i tillë, do të ngarkoni dy modele:
- Target (p.sh.,
google/gemma-4-E2B-it): Modeli i plotë i targetit Gemma 4 - Hartues (p.sh.,
google/gemma-4-E2B-it-assistant): Hartuesi i lehtë MTP me 4 shtresa që propozon tokena kandidatë
Vini re se hartuesi shpesh quhet asistent, pasi modeli ndihmon modelin më të madh në zgjedhjen e tokenëve që duhet të parashikojë.
Përdorni bibliotekat transformers për të krijuar një instancë të një processor dhe model duke përdorur klasat AutoProcessor dhe AutoModelForCausalLM siç tregohet në shembullin e mëposhtëm të kodit:
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 me Asistentin
Përdorimi i një asistenti në transformers është për fat të mirë mjaft i thjeshtë dhe kërkon që ju të kaloni modelin e asistentit në funksionin 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 kapuç, procesi është si më poshtë:
- Hartuesi propozon N tokena të gjeneruara në mënyrë autoregresive
- Modeli i synuar verifikon të gjitha N tokenët në një kalim përpara
- Pranohen tokena të hartuara me probabilitet të lartë
- Tokenët e hartuar me probabilitet të ulët refuzohen
- Meqenëse modeli i synuar bën një kalim përpara, ai gjithmonë do të gjenerojë 1 token vetë, pavarësisht se sa tokena të hartuar u pranuan ose u refuzuan.
Tokenat e Draftit
Hartuesi mund të gjenerojë çdo sasi tokenësh që modeli i synuar të verifikojë. Megjithatë, modeli i synuar mund të zgjedhë ende të refuzojë tokena të caktuar. Kur e bën këtë, të gjitha tokenat pas kësaj injorohen.

Si e tillë, është e rëndësishme të dihet kompromisi kur përdoren vlera të ndryshme për numrin e tokenëve të draftuar.
Më shumë tokena drafti
Kur hartoni shumë tokena (për shembull 15), atëherë ka shumë mundësi që jo të gjitha tokenat të pranohen. Si i tillë, ekziston një potencial më i lartë për humbje të llogaritjes. Në të kundërt, ka tendencë të përshpejtojë nxjerrjen e përfundimeve kur shkalla e pranimit është e lartë.

Më pak tokena drafti
Kur hartoni më pak tokena, shkalla e pranimit tenton të jetë më e lartë, pasi tokenat që janë më afër në pozicion me kërkesën fillestare janë më të sakta. Megjithatë, meqenëse hartohen vetëm disa tokena, shpejtësia që do të merrnit nga një model hartuesi më i shpejtë zvogëlohet.

Për fat të mirë, nuk keni pse të eksperimentoni me vlerat më të mira për rastin tuaj të përdorimit në transformers pasi mund ta vendosni num_assistant_tokens_schedule në "heuristik", i cili do të përshtasë automatikisht numrin e tokenëve të hartuar në kohën e ekzekutimit:
- Të gjitha tokenat pranohen -- Rritni numrin e tokenave për t'u hartuar me 2, meqenëse hartuesi është mjaft i saktë për kërkesën. Rritja e numrit të tokenave të hartuar mund të rezultojë në një përshpejtim nëse edhe ato tokena pranohen.
- Çdo token i refuzuar -- Nëse ndonjë token refuzohet, zvogëloni sasinë e tokenëve për t'u hartuar me 1. Ulja e numrit të tokenëve bën që të mos shkojnë dëm shumë tokena të hartuar nëse modeli i synuar vazhdon të refuzojë shumicën e tokenëve.
Po kështu, mund të përditësoni numrin e tokenëve të draftit duke përditësuar num_assistant_tokens në hartues si kjo:
# 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.
Ekzekuto në Google Colab
Shiko burimin në GitHub