Transformers documentation
Gemma 4 Trợ lý
Mô hình này đã được đóng góp cho Hugging Face Transformers vào ngày 2026-05-05.
Gemma 4 Trợ lý
Tổng quan
Gemma 4 Assistant là một mô hình nhỏ, chỉ xử lý văn bản, cho phép giải mã suy đoán (speculative decoding) cho các mô hình Gemma 4 bằng phương pháp Dự đoán Nhiều Token (Multi-Token Prediction - MTP) và bộ sinh ứng viên liên quan. Các mô hình được huấn luyện trước được cung cấp cho các biến thể IT của các mô hình Gemma 4 E2B, E4B, 31B và 26B-A4B (MoE).
Về mặt kiến trúc, Gemma 4 Assistant chia sẻ cùng backbone Gemma4TextModel với các mô hình Gemma 4 khác, nhưng khác biệt ở một số điểm chính:
- Toàn bộ mô hình sử dụng chia sẻ KV. Kỹ thuật này, ban đầu được giới thiệu cùng với Gemma 3n, cho phép mô hình tái sử dụng bộ nhớ đệm KV do mô hình đích mà trợ lý hỗ trợ tạo ra, nhờ đó trợ lý có thể bỏ qua hoàn toàn giai đoạn pre-fille và giảm đáng kể lượng tính toán attention trong quá trình truyền thẳng.
- Giá trị của
position_idslà hằng số. Vì bộ nhớ đệm KV được dùng chung và trợ lý không có cách nào để cập nhật bộ nhớ đệm, trợ lý dự đoán tất cả các token từ cùng một ID vị trí. - Inputs là sự nối tiếp của embeddings và hidden states. Để thích ứng với static KV cache và
position_ids, model nhận inputs dưới dạng sự nối tiếp củaembeddingvàhidden_statescủa token cuối cùng được nhìn thấy từ target model, sau đó chiếu chúng vào không gian của assistant model bằng phép biến đổinn.Linear. Định nghĩa của token cuối cùng được nhìn thấy thay đổi trong suốt vòng lặp assisted decoding. Đối với token đầu tiên được draft sau pre-fill, token cuối cùng được nhìn thấy sẽ là token cuối cùng từ prompt. Đối với các bước draft tiếp theo, token cuối cùng được nhìn thấy sẽ là token cuối cùng do assistant tạo ra (trong một vòng draft) hoặc token cuối cùng được target model chấp nhận (giữa các vòng draft). - Cross-attention được sử dụng để khai thác tối đa ngữ cảnh của mô hình đích. Cross-attention cho phép các trạng thái truy vấn do trợ lý tạo ra chú ý đến các giá trị bộ nhớ đệm KV chung từ mô hình đích, giúp trợ lý dự đoán chính xác hơn số lượng token được phác thảo trong mỗi vòng phác thảo.
Bạn có thể tìm thấy tất cả các checkpoint gốc của Gemma 4 Assistant dưới bản phát hành Gemma 4.
Ví dụ sử dụng
Ví dụ dưới đây minh họa cách tạo văn bản dựa trên hình ảnh bằng Pipeline hoặc lớp 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
lớp 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 )
Tham số
- text_config (
Union[~configuration_utils.PreTrainedConfig, dict[str, Any]], tùy chọn) — Đối tượng config hoặc từ điển của text backbone. - backbone_hidden_size (
int, mặc định là 1536) — Kích thước ẩn của mô hình đích mà trợ lý này được huấn luyện với. - use_ordered_embeddings (
bool, mặc định là False) — Nếu là True, sử dụng bảng embedding được sắp xếp theo thứ tự tối ưu cho hiệu suất của mô hình trợ lý, cần được sắp xếp lại để khớp với mô hình chính. - num_centroids (
int, mặc định là 2048) — Tổng số centroid. - centroid_intermediate_top_k (
int, mặc định là 32) — Số lượng centroid hoạt động. - tie_word_embeddings (
bool, tùy chọn, mặc định làTrue) — Có nên gắn kết các trọng số nhúng theo ánh xạtied_weights_keyscủa mô hình hay không.
Đây là lớp cấu hình để lưu trữ cấu hình của một Gemma4 AssistantModel. Nó được sử dụng để khởi tạo một mô hình Gemma4 Assistant theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như cấu hình của google/gemma-4-e2b-it
Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.
Ví dụ:
>>> 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
lớp transformers.Gemma4AssistantForCausalLM
< source >( config: Gemma4AssistantConfig )
Tham số
- config (Gemma4AssistantConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình sẽ không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số của mô hình.
Một mô hình cho giải mã hỗ trợ dựa trên dự đoán đa token với Gemma 4.
Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)
Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.
Chuẩn bị các attention mask cho mô hình được hỗ trợ; shared_kv_states đóng vai trò là bộ nhớ đệm quá khứ trong trường hợp này.
Chúng tôi sử dụng các mặt nạ hai chiều để tính đến tính nhân quả
- Không có sự khác biệt cho trường hợp biên
q_len == 1vì nó hoạt động như chú ý đầy đủ trong mọi trường hợp - SWA diễn giải cửa sổ theo hướng nhìn về phía trước (tương lai) khi
q_idx=1vàkv>=1- Chúng ta chuyển từ góc nhìn tương lai sang góc nhìn quá khứ bằng cách lật theo trục kv
- Để xử lý padding không phụ thuộc vào vị trí, chúng ta cũng đảo ngược mặt nạ chú ý cơ bản trước khi tạo ban đầu
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'> )
Tham số
- input_ids (
torch.Tensorcó dạng(batch_size, sequence_length), tùy chọn) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Mặc định, padding sẽ bị bỏ qua.Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.
- inputs_embeds (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyềninput_ids, bạn có thể chọn truyền trực tiếp một biểu diễn nhúng. Điều này hữu ích nếu bạn muốn kiểm soát nhiều hơn cách chuyển đổi các chỉ sốinput_idsthành các vector liên quan so với ma trận tra cứu nhúng nội bộ của mô hình. - position_ids (
torch.LongTensorcó hình dạng(batch_size, sequence_length), tùy chọn) — Chỉ số vị trí của các token trong mỗi chuỗi đầu vào trong các position embeddings. Được chọn trong khoảng[0, config.n_positions - 1]. - attention_mask (
dict[str, torch.Tensor]có hình dạng(batch_size, sequence_length), tùy chọn) — Mặt nạ để tránh thực hiện chú ý trên các chỉ số token đệm. Các giá trị mặt nạ được chọn trong[0, 1]:- 1 cho các token không bị che,
- 0 cho các token bị che.
- shared_kv_states (
dict[str, torch.Tensorcó hình dạng(batch_size, 1, q_len, kv_len), tùy chọn) — Một từ điển chứa các giá trị KV đã được tính toán cho lớp cuối cùng của mỗilayer_typetrong mô hình này. - use_cache (
bool, tùy chọn) — Nếu đặt thànhTrue, các trạng thái key value củapast_key_valuessẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xempast_key_values).
Phương thức forward của Gemma4AssistantForCausalLM ghi đè lên phương thức đặc biệt __call__.
Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.
Ví dụ:
>>> 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?"