Transformers documentation
Assistant unifié Gemma 4
Ce modèle a été contribué à Hugging Face Transformers le 2026-06-03.
Assistant unifié Gemma 4
Aperçu
Gemma 4 Unified Assistant est un petit modèle text-only qui permet le décodage spéculatif pour les modèles Gemma 4 Unified à 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 du modèle Gemma 4 12B.
Pour plus d’informations, veuillez consulter Gemma4 Assistant. Sur le plan architectural et conceptuel, ils partagent le même concept et les mêmes différences par rapport à leur modèle de base :
- 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.
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-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
classe 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 )
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 3840) — Taille cachée du modèle unifié cible avec lequel cet assistant a été entraîné. - use_ordered_embeddings (
bool, par défautFalse) — SiTrue, utilise une table d'embeddings ordonnée de manière optimale qui nécessite un réordonnancement. - num_centroids (
int, par défaut 2048) — Nombre total de centroïdes pour l'encodeur masqué basé sur les centroïdes. - centroid_intermediate_top_k (
int, par défaut 32) — Nombre de centroïdes actifs sélectionnés lors de l'inférence. - 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 modèle Gemma4 Unified Assistant. Elle est utilisée pour instancier un modèle Gemma4 Unified 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-12b-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 (
... 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
classe transformers.Gemma4UnifiedAssistantForCausalLM
< source >( config: Gemma4UnifiedAssistantConfig )
Paramètres
- config (Gemma4UnifiedAssistantConfig) — 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 Gemma4UnifiedAssistantForCausalLM 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, 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?"