Transformers documentation
Gemma 4 Unified Assistant
Эта модель была добавлена в Hugging Face Transformers 03.06.2026.
Gemma 4 Unified Assistant
Обзор
Gemma 4 Unified Assistant — это небольшая текстовая модель, которая обеспечивает спекулятивное декодирование для моделей Gemma 4 Unified с использованием метода Multi-Token Prediction (MTP) и соответствующего генератора кандидатов. Предоставляются предобученные модели для IT-вариантов модели Gemma 4 12B.
Для получения дополнительной информации см. Gemma4 Assistant. Архитектурно и концептуально они делят одну и ту же концепцию и отличаются от своей базовой модели следующим образом:
- Вся модель использует общий KV-кэш. Эта техника, впервые представленная в Gemma 3n, позволяет модели повторно использовать KV-кэш, заполненный целевой моделью, которую поддерживает ассистент. Благодаря этому ассистент может полностью пропустить фазу pre-fille, что значительно снижает вычислительные затраты на внимание (attention) при прямом проходе.
- Значения
position_idsостаются постоянными. Поскольку кэш KV используется совместно, а ассистент не имеет способа обновлять кэш, он предсказывает все токены из одного и того же идентификатора позиции. - Входные данные представляют собой конкатенацию эмбеддингов и скрытых состояний. Для адаптации к статическому KV-кэшу и
position_idsмодель принимает на вход конкатенациюembeddingиhidden_statesпоследнего просмотренного токена целевой модели и проецирует их в пространство ассистентской модели с помощью преобразованияnn.Linear. Определение последнего просмотренного токена меняется в ходе цикла assisted decoding. Для первого токена, сгенерированного после pre-fill, последним просмотренным токеном будет последний токен из промпта. Для последующих шагов генерации последним просмотренным токеном будет последний токен, сгенерированный ассистентом (в рамках раунда генерации) или последний токен, принятый целевой моделью (между раундами генерации). - Кросс-внимание используется для максимального использования контекста целевой модели. Кросс-внимание позволяет состояниям запросов, сгенерированным ассистентом, обращать внимание на общие значения кэша KV целевой модели, что позволяет ассистенту точно предсказывать больше токенов за каждый раунд черновика.
Примеры использования
Приведённый ниже пример показывает, как генерировать текст на основе изображения с помощью 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-12B-it",
assistant_model="google/gemma-4-12B-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-12B-it",
dtype=torch.bfloat16,
device_map="auto",
)
assistant_model = AutoModelForCausalLM.from_pretrained(
"google/gemma-4-12B-it-assistant",
dtype=torch.bfloat16,
device_map="auto",
)
processor = AutoProcessor.from_pretrained(
"google/gemma-4-12B-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))Gemma4UnifiedAssistantConfig
класс transformers.Gemma4UnifiedAssistantConfig
< 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 = 3840use_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, по умолчанию 3840) — Размер скрытого слоя целевой унифицированной модели, с которой обучался этот ассистент. - 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 Unified Assistant. Он используется для создания модели Gemma4 Unified Assistant в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации google/gemma-4-12b-it
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import (
... Gemma4UnifiedAssistantConfig,
... Gemma4UnifiedAssistantForCausalLM,
... Gemma4UnifiedTextConfig,
... )
>>> # Initializing a Gemma 4 Unified Text config for the assistant.
>>> text_config = Gemma4UnifiedTextConfig(...)
>>> # Initializing a Gemma 4 Unified Assistant config.
>>> configuration = Gemma4UnifiedAssistantConfig(text_config=text_config)
>>> # Initializing a model from the configuration.
>>> model = Gemma4UnifiedAssistantForCausalLM(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configGemma4UnifiedAssistantForCausalLM
класс transformers.Gemma4UnifiedAssistantForCausalLM
< source >( config: Gemma4UnifiedAssistantConfig )
Параметры
- config (Gemma4UnifiedAssistantConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод 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 класса Gemma4UnifiedAssistantForCausalLM переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
Пример:
>>> from transformers import AutoTokenizer, Gemma4UnifiedAssistantForCausalLM, Gemma4UnifiedForConditionalGeneration
>>> model = Gemma4UnifiedForConditionalGeneration.from_pretrained("google/gemma-4-e2b-it")
>>> assistant_model = Gemma4UnifiedAssistantForCausalLM.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?"