Transformers documentation
Assistant Gemma 4
Ce modèle a été contribué à Hugging Face Transformers le 2026-05-05.
Assistant Gemma 4
Aperçu
Gemma 4 Assistant est un petit modèle text-only qui permet le décodage spéculatif pour les modèles Gemma 4 à l'aide de la méthode Multi-Token Prediction (MTP) et du générateur de candidats associé. Des modèles pré-entraînés sont fournis pour les variantes IT des modèles Gemma 4 E2B, E4B, 31B et 26B-A4B (MoE).
Sur le plan architectural, l'Assistant Gemma 4 partage le même backbone Gemma4TextModel que les autres modèles Gemma 4, mais il diffère à quelques égards clés :
- Le modèle entier utilise le partage de KV. Cette technique, introduite à l’origine avec Gemma 3n, permet au modèle de réutiliser le cache KV rempli par le modèle cible pris en charge par l’assistant, ce qui permet à l’assistant de sauter entièrement la phase de pré-remplissage et de réduire considérablement le calcul d’attention lors du passage avant.
- Les valeurs de
position_idssont constantes. Comme le cache KV est partagé et que l'assistant ne dispose d'aucun moyen de mettre à jour le cache, il prédit tous les jetons à partir du même identifiant de position. - Les entrées sont la concaténation des embeddings et des états cachés. Pour s'adapter à la cache KV statique et à
position_ids, le modèle reçoit ses entrées sous forme de la concaténation de l'embeddinget deshidden_statesdu dernier jeton vu par le modèle cible, puis les projette dans l'espace du modèle assistant via une transformationnn.Linear. La définition du dernier jeton vu évolue au fil de la boucle de décodage assisté. Pour le premier jeton rédigé après la pré-remplissage, le dernier jeton vu sera le dernier jeton du prompt. Pour les étapes de rédaction suivantes, le dernier jeton vu sera le dernier jeton généré par l'assistant (au sein d'un cycle de rédaction) ou le dernier jeton accepté par le modèle cible (entre les cycles de rédaction). - L’attention croisée est utilisée pour tirer le meilleur parti du contexte du modèle cible. L’attention croisée permet aux états de requête générés par l’assistant de prendre en compte les valeurs du cache KV partagé du modèle cible, ce qui permet à l’assistant de prédire avec précision davantage de jetons rédigés par tour de rédaction.
Vous pouvez trouver tous les points de contrôle originaux de Gemma 4 Assistant sous la release Gemma 4.
Exemples d'utilisation
L'exemple ci-dessous montre comment générer du texte à partir d'une image avec Pipeline ou la classe 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
classe 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 )
Paramètres
- text_config (
Union[~configuration_utils.PreTrainedConfig, dict[str, Any]], facultatif) — L’objet de configuration ou le dictionnaire du backbone de texte. - backbone_hidden_size (
int, par défaut 1536) — Taille cachée du modèle cible avec lequel cet assistant a été entraîné. - use_ordered_embeddings (
bool, par défaut False) — Si True, utilise une table d’embeddings ordonnée pour une performance optimale du modèle assistant, qui doit être réordonnée pour s’aligner avec le modèle principal. - num_centroids (
int, par défaut 2048) — Le nombre total de centroïdes. - centroid_intermediate_top_k (
int, par défaut 32) — Le nombre de centroïdes actifs. - tie_word_embeddings (
bool, facultatif, par défautTrue) — Indique s'il faut lier les embeddings de poids selon la correspondancetied_weights_keysdu modèle.
Ceci est la classe de configuration destinée à stocker la configuration d'un Gemma4 AssistantModel. Elle est utilisée pour instancier un modèle Gemma4 Assistant en fonction des arguments spécifiés, définissant ainsi l'architecture du modèle. L'instanciation d'une configuration avec les valeurs par défaut produira une configuration similaire à celle de google/gemma-4-e2b-it
Les objets de configuration héritent de PreTrainedConfig et peuvent être utilisés pour contrôler les sorties du modèle. Consultez la documentation de PreTrainedConfig pour plus d’informations.
Exemple :
>>> 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
classe transformers.Gemma4AssistantForCausalLM
< source >( config: Gemma4AssistantConfig )
Paramètres
- config (Gemma4AssistantConfig) — Classe de configuration du modèle contenant tous les paramètres du modèle. L’initialisation à partir d’un fichier de configuration ne charge pas les poids associés au modèle, uniquement la configuration. Consultez la méthode from_pretrained() pour charger les poids du modèle.
Un modèle pour le décodage assisté basé sur la prédiction multi-jetons avec Gemma 4.
Ce modèle hérite de PreTrainedModel. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous ses modèles (tels que le téléchargement ou l'enregistrement, le redimensionnement des embeddings d'entrée, la taille des têtes, etc.)
Ce modèle est également une sous-classe de torch.nn.Module de PyTorch. Utilisez-le comme un module PyTorch standard et consultez la documentation de PyTorch pour tout ce qui concerne l'utilisation et le comportement généraux.
Préparez les masques d'attention pour le modèle assisté ; dans ce cas, shared_kv_states agit comme cache passé.
Nous utilisons des masques bidirectionnels pour prendre en compte la causalité
- Il n'y a aucune différence pour le cas limite
q_len == 1, car il se comporte comme une attention complète dans tous les cas. - SWA interprète la fenêtre comme tournée vers l'avenir (future) lorsque
q_idx=1etkv>=1- Nous passons d'une perspective future à une perspective passée en inversant sur l'axe kv
- Pour prendre en compte le padding invariant par rapport à la position, nous inversons également le masque d'attention de base avant sa création initiale
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'> )
Paramètres
- input_ids (
torch.Tensorde forme(batch_size, sequence_length), facultatif) — Indices des jetons de la séquence d'entrée dans le vocabulaire. Le bourrage (padding) sera ignoré par défaut.Les indices peuvent être obtenus à l'aide de AutoTokenizer. Consultez PreTrainedTokenizer.encode() et PreTrainedTokenizer.call() pour plus de détails.
- inputs_embeds (
torch.Tensorde forme(batch_size, sequence_length, hidden_size), facultatif) — Facultativement, au lieu de passerinput_ids, vous pouvez choisir de passer directement une représentation intégrée. Cela est utile si vous souhaitez un meilleur contrôle sur la manière de convertir les indicesinput_idsen vecteurs associés que la matrice de recherche d’intégration interne du modèle. - position_ids (
torch.LongTensorde forme(batch_size, sequence_length), facultatif) — Indices des positions des jetons de chaque séquence d'entrée dans les embeddings de position. Sélectionnés dans l'intervalle[0, config.n_positions - 1]. - attention_mask (
dict[str, torch.Tensor]de forme(batch_size, sequence_length), facultatif) — Masque pour éviter d'appliquer l'attention aux indices des jetons de bourrage. Les valeurs du masque sont choisies dans[0, 1]:- 1 pour les jetons qui ne sont pas masqués,
- 0 pour les jetons masqués.
- shared_kv_states (
dict[str, torch.Tensorde forme(batch_size, 1, q_len, kv_len), facultatif) — Un dictionnaire contenant les valeurs KV calculées pour la dernière couche de chaquelayer_typede ce modèle. - use_cache (
bool, facultatif) — Si défini surTrue, les états clé-valeurpast_key_valuessont renvoyés et peuvent être utilisés pour accélérer le décodage (voirpast_key_values).
La méthode forward de Gemma4AssistantForCausalLM redéfinit la méthode spéciale __call__.
Bien que la recette de la passe avant doive être définie dans cette fonction, il faut ensuite appeler l'instance
Moduleplutôt que celle-ci, car la première gère l'exécution des étapes de prétraitement et de post-traitement, tandis que la seconde les ignore silencieusement.
Exemple :
>>> 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?"