Transformers documentation
Gemma 4 Assistant
Эта модель была добавлена в Hugging Face Transformers 05.05.2026.
Gemma 4 Assistant
Обзор
Gemma 4 Assistant — это небольшая текстовая модель, которая обеспечивает спекулятивное декодирование для моделей Gemma 4 с использованием метода Multi-Token Prediction (MTP) и соответствующего генератора кандидатов. Предоставлены предобученные модели для IT-вариантов моделей Gemma 4 E2B, E4B, 31B и 26B-A4B (MoE).
С архитектурной точки зрения Gemma 4 Assistant использует тот же базовый блок Gemma4TextModel, что и другие модели Gemma 4, но отличается в нескольких ключевых аспектах:
- Вся модель использует общий KV-кэш. Эта техника, впервые представленная в Gemma 3n, позволяет модели повторно использовать KV-кэш, заполненный целевой моделью, которую поддерживает ассистент. Благодаря этому ассистент может полностью пропустить фазу pre-fille, что значительно снижает вычислительные затраты на внимание (attention) при прямом проходе.
- Значения
position_idsостаются постоянными. Поскольку кэш KV используется совместно, а ассистент не имеет способа обновлять кэш, он предсказывает все токены из одного и того же идентификатора позиции. - Входные данные представляют собой конкатенацию эмбеддингов и скрытых состояний. Для адаптации к статическому KV-кэшу и
position_idsмодель принимает на вход конкатенациюembeddingиhidden_statesпоследнего просмотренного токена целевой модели и проецирует их в пространство ассистентской модели с помощью преобразованияnn.Linear. Определение последнего просмотренного токена меняется в ходе цикла assisted decoding. Для первого токена, сгенерированного после pre-fill, последним просмотренным токеном будет последний токен из промпта. Для последующих шагов генерации последним просмотренным токеном будет последний токен, сгенерированный ассистентом (в рамках раунда генерации) или последний токен, принятый целевой моделью (между раундами генерации). - Кросс-внимание используется для максимального использования контекста целевой модели. Кросс-внимание позволяет состояниям запросов, сгенерированным ассистентом, обращать внимание на общие значения кэша KV целевой модели, что позволяет ассистенту точно предсказывать больше токенов за каждый раунд черновика.
Все исходные контрольные точки Gemma 4 Assistant можно найти в релизе Gemma 4.
Примеры использования
Приведённый ниже пример показывает, как генерировать текст на основе изображения с помощью Pipeline или класса AutoModel.
<hfoptions id="usage"> <hfoption id="Pipeline">import torch
from transformers import pipeline
pipeline = pipeline(
task="image-text-to-text",
model="google/gemma-4-E2B-it",
assistant_model="google/gemma-4-E2B-it-assistant",
)
pipeline(
images="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg",
text="<|image|>\n\nWhat is shown in this image?"
)import torch
from transformers import AutoProcessor, AutoModelForImageTextToText
model = AutoModelForImageTextToText.from_pretrained(
"google/gemma-4-E2B-it",
dtype=torch.bfloat16,
device_map="auto",
)
assistant_model = AutoModelForCausalLM.from_pretrained(
"google/gemma-4-E2B-it-assistant",
dtype=torch.bfloat16,
device_map="auto",
)
processor = AutoProcessor.from_pretrained(
"google/gemma-4-E2B-it",
padding_side="left"
)
messages = [
{
"role": "user", "content": [
{"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"},
{"type": "text", "text": "What is shown in this image?"},
]
},
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
output = model.generate(**inputs, max_new_tokens=50, assistant_model=assistant_model)
print(processor.decode(output[0][input_len:], skip_special_tokens=True))Gemma4AssistantConfig
класс transformers.Gemma4AssistantConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonetext_config: transformers.configuration_utils.PreTrainedConfig | dict[str, typing.Any] | None = Nonebackbone_hidden_size: int = 1536use_ordered_embeddings: bool = Falsenum_centroids: int = 2048centroid_intermediate_top_k: int = 32tie_word_embeddings: bool = True )
Параметры
- text_config (
Union[~configuration_utils.PreTrainedConfig, dict[str, Any]], необязательный) — Объект конфигурации или словарь конфигурации текстового бэкбона. - backbone_hidden_size (
int, по умолчанию 1536) — Размер скрытого слоя целевой модели, с которой обучался этот ассистент. - use_ordered_embeddings (
bool, по умолчанию False) — Если True, используется таблица эмбеддингов, упорядоченная для оптимальной работы модели ассистента, которую необходимо переупорядочить для согласования с основной моделью. - num_centroids (
int, по умолчанию 2048) — Общее количество центроидов. - centroid_intermediate_top_k (
int, по умолчанию 32) — Количество активных центроидов. - tie_word_embeddings (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли связывать веса эмбеддингов согласно маппингуtied_weights_keysмодели.
Это класс конфигурации для хранения настроек модели Gemma4 AssistantModel. Он используется для создания модели Gemma4 Assistant в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации google/gemma-4-e2b-it
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import (
>>> Gemma4AssistantConfig,
>>> Gemma4AssistantForCausalLM,
>>> Gemma4TextConfig,
>>> )
>>> # Initializing a Gemma 4 Text config similar to google/gemma-4-e2b-it-assistant.
>>> text_config = Gemma4TextConfig(...)
>>> # Initializing a Gemma 4 Assistant config similar to google/gemma-4-e2b-it-assistant.
>>> configuration = Gemma4AssistantConfig(text_config)
>>> # Initializing a model from the google/gemma-4-e2b-it-assistant configuration.
>>> model = Gemma4AssistantForCausalLM(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configGemma4AssistantForCausalLM
класс transformers.Gemma4AssistantForCausalLM
< source >( config: Gemma4AssistantConfig )
Параметры
- config (Gemma4AssistantConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель для вспомогательного декодирования на основе предсказания нескольких токенов с Gemma 4.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
Подготовьте маски внимания для модели-ассистента; в данном случае shared_kv_states выполняет роль кэша прошлых значений.
Мы используем двунаправленные маски для учёта причинно-следственных связей
- Для граничного случая
q_len == 1разницы нет, так как он работает как полное внимание в любом случае. - SWA интерпретирует окно как направленное в будущее, если
q_idx=1и. Мы переключаемся с перспективы будущего на перспективу прошлого, инвертируя ось kv. Чтобы учесть позиционно-инвариантную отсечку, мы также инвертируем базовую маску внимания перед её первоначальным созданием.kv>=1- Мы меняем перспективу с будущей на прошедшую, инвертируя ось kv
- Чтобы учесть позиционно-инвариантную отсечку, мы также инвертируем базовую маску внимания перед её первоначальным созданием
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: dict[str, torch.Tensor] | None = Noneshared_kv_states: dict[str, tuple[torch.Tensor, torch.Tensor]] | None = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> )
Параметры
- input_ids (
torch.Tensorформы(batch_size, sequence_length), необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию padding игнорируется.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - position_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона[0, config.n_positions - 1]. - attention_mask (
dict[str, torch.Tensor]формы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из вычислений внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- shared_kv_states (
dict[str, torch.Tensorформы(batch_size, 1, q_len, kv_len), необязательный) — Словарь, содержащий вычисленные значения KV для последнего слоя каждогоlayer_typeв этой модели. - use_cache (
bool, необязательный) — Если установлено вTrue, возвращаются состояния ключей и значенийpast_key_values, которые можно использовать для ускорения декодирования (см.past_key_values).
Метод forward класса Gemma4AssistantForCausalLM переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
Пример:
>>> from transformers import AutoTokenizer, Gemma4AssistantForCausalLM, Gemma4ForCausalLM
>>> model = Gemma4ForCausalLM.from_pretrained("google/gemma-4-e2b-it")
>>> assistant_model = Gemma4AssistantForCausalLM.from_pretrained("google/gemma-4-e2b-it-assistant")
>>> tokenizer = AutoTokenizer.from_pretrained("google/gemma-4-e2b-it")
>>> prompt = "What is your favorite condiment?"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, assistant_model=assistant_model, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True)[0]
"What is your favorite condiment?"