Transformers documentation
Gemma 4 Asistente Unificado
Este modelo fue aportado a Hugging Face Transformers el 2026-06-03.
Gemma 4 Asistente Unificado
Resumen
Gemma 4 Unified Assistant es un modelo pequeño, solo de texto, que permite la decodificación especulativa para los modelos Gemma 4 Unified mediante el método de Predicción de Múltiples Tokens (MTP) y el generador de candidatos asociado. Se proporcionan modelos preentrenados para las variantes IT del modelo Gemma 4 12B.
Para obtener más información, consulte Gemma4 Assistant. En términos arquitectónicos y conceptuales, comparten el mismo concepto y las mismas diferencias con su modelo base:
- El modelo completo utiliza el intercambio de KV. Esta técnica, introducida originalmente con Gemma 3n, permite que el modelo reutilice la caché de KV poblada por el modelo objetivo que el asistente soporta, lo que permite al asistente omitir por completo la fase de pre-fille y reducir considerablemente el cálculo de atención durante la pasada hacia adelante.
- El valor de
position_idses constante. Dado que la caché KV se comparte y el asistente no tiene forma de actualizarla, el asistente predice todos los tokens desde el mismo ID de posición. - Las entradas son la concatenación de embeddings y estados ocultos. Para adaptarse a la caché KV estática y a
position_ids, el modelo toma sus entradas como la concatenación deembeddingyhidden_statesdel último token visto por el modelo objetivo y los proyecta al espacio del modelo asistente mediante una transformaciónnn.Linear. La definición de último token visto cambia a lo largo del bucle de decodificación asistida. Para el primer token redactado después del pre-llenado, el último token visto será el último token del prompt. Para los pasos de redacción posteriores, el último token visto será el último token generado por el asistente (dentro de una ronda de redacción) o el último token aceptado por el modelo objetivo (entre rondas de redacción). - La atención cruzada se utiliza para aprovechar al máximo el contexto del modelo objetivo. La atención cruzada permite que los estados de consulta generados por el asistente presten atención a los valores compartidos de la caché KV del modelo objetivo, lo que permite al asistente predecir con precisión más tokens redactados por ronda de redacción.
Ejemplos de uso
El siguiente ejemplo demuestra cómo generar texto a partir de una imagen con Pipeline o la clase 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
clase 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 )
Parámetros
- text_config (
Union[~configuration_utils.PreTrainedConfig, dict[str, Any]], opcional) — El objeto de configuración o el diccionario del backbone de texto. - backbone_hidden_size (
int, por defecto 3840) — Tamaño oculto del modelo unificado objetivo con el que se entrenó este asistente. - use_ordered_embeddings (
bool, por defectoFalse) — Si esTrue, utiliza una tabla de embeddings con un orden óptimo que requiere reordenamiento. - num_centroids (
int, por defecto 2048) — Número total de centroides para el incrustador enmascarado basado en centroides. - centroid_intermediate_top_k (
int, por defecto 32) — Número de centroides activos seleccionados durante la inferencia. - tie_word_embeddings (
bool, opcional, valor predeterminadoTrue) — Si se deben vincular las matrices de pesos de embeddings según el mapeotied_weights_keysdel modelo.
Esta es la clase de configuración para almacenar la configuración de un Gemma4 Unified AssistantModel. Se utiliza para instanciar un modelo Gemma4 Unified Assistant según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de google/gemma-4-12b-it
Los objetos de configuración heredan de PreTrainedConfig y se pueden usar para controlar las salidas del modelo. Lea la documentación de PreTrainedConfig para obtener más información.
Ejemplo:
>>> 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
clase transformers.Gemma4UnifiedAssistantForCausalLM
< source >( config: Gemma4UnifiedAssistantConfig )
Parámetros
- config (Gemma4UnifiedAssistantConfig) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
Un modelo para decodificación asistida basada en predicción de múltiples tokens con Gemma 4.
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
Prepara las máscaras de atención para el modelo asistido; en este caso, shared_kv_states actúa como caché pasado.
Utilizamos máscaras bidireccionales para tener en cuenta la causalidad
- No hay diferencia en el caso extremo de
q_len == 1, ya que actúa como atención completa sin importar nada. - SWA interpreta la ventana como orientada al futuro cuando
q_idx=1ykv>=1- Cambiamos de una perspectiva futura a una pasada invirtiendo en el eje kv
- Para tener en cuenta el relleno invariante a la posición, también invertimos la máscara de atención base antes de su creación inicial
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'> )
Parámetros
- input_ids (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Índices de los tokens de la secuencia de entrada en el vocabulario. El relleno se ignorará de forma predeterminada.Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, en lugar de pasarinput_ids, puedes elegir pasar directamente una representación incrustada. Esto es útil si deseas tener más control sobre cómo convertir los índices deinput_idsen los vectores asociados que en la matriz de búsqueda de incrustaciones interna del modelo. - position_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices de las posiciones de los tokens de cada secuencia de entrada en los embeddings de posición. Seleccionados en el rango[0, config.n_positions - 1]. - attention_mask (
dict[str, torch.Tensor]de forma(batch_size, sequence_length), opcional) — Máscara para evitar realizar atención en los índices de tokens de relleno. Valores de máscara seleccionados en[0, 1]:- 1 para los tokens que no están enmascarados,
- 0 para los tokens que están enmascarados.
- shared_kv_states (
dict[str, torch.Tensorde forma(batch_size, 1, q_len, kv_len), opcional) — Un diccionario que contiene los valores KV calculados para la última capa de cadalayer_typeen este modelo. - use_cache (
bool, opcional) — Si se establece enTrue, se devuelven los estados de clave-valor depast_key_valuesy pueden usarse para acelerar la decodificación (verpast_key_values).
El método forward de Gemma4UnifiedAssistantForCausalLM sobrescribe el método especial __call__.
Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de
Moduledespués en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.
Ejemplo:
>>> 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?"