# Gemma 4 Asistan

## Genel Bakış

Gemma 4 Assistant, Gemma 4 modelleri için Multi-Token Prediction (MTP) yöntemi ve ilişkili aday üreticiyi kullanarak spekülatif çözümlendirmeyi (speculative decoding) mümkün kılan küçük, yalnızca metin tabanlı bir modeldir. Gemma 4 E2B, E4B, 31B ve 26B-A4B (MoE) modellerinin IT varyantları için ön eğitilmiş modeller sağlanmaktadır.

Mimari olarak Gemma 4 Assistant, diğer Gemma 4 modelleriyle aynı [Gemma4TextModel](/docs/transformers/v5.23.0/tr/model_doc/gemma4#transformers.Gemma4TextModel) omurgasını paylaşır ancak birkaç önemli noktada farklılık gösterir:

*   **Tüm model KV paylaşımı kullanır**. [Gemma 3n](./gemma3n) ile birlikte ilk kez tanıtılan bu teknik, modelin asistanın desteklediği hedef model tarafından doldurulan KV önbelleğini yeniden kullanılmasını sağlar; bu sayede asistan pre-fille aşamasını tamamen atlayabilir ve ileri geçiş sırasında dikkat hesaplama maliyeti önemli ölçüde azalır.
*   **`position_ids` değerleri sabittir**. KV önbelleği paylaşıldığından ve asistanın önbelleği güncellemek için bir yolu olmadığından, asistan tüm jetonları aynı konum kimliğinden tahmin eder.
*   **Girdiler, gömme ve gizli durumların birleştirilmesidir**. Statik KV önbelleğine ve `position_ids` parametresine uyum sağlamak için model, hedef modelin son görülen token'ına ait `embedding` ve `hidden_states` değerlerini birleştirilmiş olarak alır ve bunları `nn.Linear` dönüşümüyle asistan model uzayına yansıtır. Son görülen token'ın tanımı, destekli çözümleme döngüsü boyunca değişir. Ön doldurma sonrası taslaklanan ilk token için son görülen token, istemdeki son token olacaktır. Ardından gelen taslaklama adımlarında son görülen token, asistanın ürettiği son token (bir taslaklama turu içinde) veya hedef modelin kabul ettiği son token (taslaklama turları arasında) olacaktır.
*   **Cross-attention, hedef modelin bağlamından en iyi şekilde yararlanmak için kullanılır**. Cross-attention, asistan tarafından üretilen sorgu durumlarının, hedef modelden gelen paylaşımlı KV önbellek değerlerine odaklanmasını sağlayarak asistanın her taslak turunda daha fazla taslak token'ı doğru bir şekilde tahmin etmesine olanak tanır.

Tüm orijinal Gemma 4 Assistant kontrol noktalarını [Gemma 4](https://huggingface.co/collections/google/gemma-4) sürümünde bulabilirsiniz.

## Kullanım örnekleri

Aşağıdaki örnek, [Pipeline](/docs/transformers/v5.23.0/tr/main_classes/pipelines#transformers.Pipeline) veya [AutoModel](/docs/transformers/v5.23.0/tr/model_doc/auto#transformers.AutoModel) sınıfı kullanılarak bir görüntüye dayalı metin üretmenin nasıl yapılacağını göstermektedir.

```py
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?"
)
```

```py
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[[transformers.Gemma4AssistantConfig]]

#### transformers.Gemma4AssistantConfig[[transformers.Gemma4AssistantConfig]]

```python
transformers.Gemma4AssistantConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, text_config: transformers.configuration_utils.PreTrainedConfig | dict[str, typing.Any] | None = None, backbone_hidden_size: int = 1536, use_ordered_embeddings: bool = False, num_centroids: int = 2048, centroid_intermediate_top_k: int = 32, tie_word_embeddings: bool = True)
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/gemma4_assistant/configuration_gemma4_assistant.py#L29)

**Parametreler:**

text_config (`Union[~configuration_utils.PreTrainedConfig, dict[str, Any]]`, *isteğe bağlı*) : Metin omurgasının config nesnesi veya sözlüğü.

backbone_hidden_size (`int`, varsayılan 1536) : Bu asistanın eğitiminde kullanılan hedef modelin gizli boyutu.

use_ordered_embeddings (`bool`, varsayılan değeri False) : True ise, asistan modelinin en iyi performans için sıralanmış gömme tablosunu kullanır; bu tablo, ana modelle hizalanmak için yeniden sıralanmalıdır.

num_centroids (`int`, varsayılan 2048) : Toplam küme merkezi sayısı.

centroid_intermediate_top_k (`int`, varsayılan 32) : Aktif küme merkezlerinin sayısı.

tie_word_embeddings (`bool`, *isteğe bağlı*, varsayılan `True`) : Ağırlık gömme bağlamalarının, modelin `tied_weights_keys` eşlemesine göre yapılıp yapılmayacağını belirtir.

Bu, bir Gemma4 AssistantModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Gemma4 Assistant modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılan değerlerle bir yapılandırma örneği oluşturmak, [google/gemma-4-e2b-it](https://huggingface.co/google/gemma-4-e2b-it) modelinin yapılandırmasına benzer bir yapılandırma üretir.

Yapılandırma nesneleri [PreTrainedConfig](/docs/transformers/v5.23.0/tr/main_classes/configuration#transformers.PreTrainedConfig) sınıfından türetilir ve model çıktılarını kontrol etmek için kullanılabilir. Daha fazla bilgi için [PreTrainedConfig](/docs/transformers/v5.23.0/tr/main_classes/configuration#transformers.PreTrainedConfig) belgesini okuyun.

Örnek:

```python
>>> 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.config
```

## Gemma4AssistantForCausalLM[[transformers.Gemma4AssistantForCausalLM]]

#### transformers.Gemma4AssistantForCausalLM[[transformers.Gemma4AssistantForCausalLM]]

```python
transformers.Gemma4AssistantForCausalLM(config: Gemma4AssistantConfig)
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/gemma4_assistant/modeling_gemma4_assistant.py#L109)

**Parametreler:**

config ([Gemma4AssistantConfig](/docs/transformers/v5.23.0/tr/model_doc/gemma4_assistant#transformers.Gemma4AssistantConfig)) : Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için [from_pretrained()](/docs/transformers/v5.23.0/tr/main_classes/model#transformers.PreTrainedModel.from_pretrained) yöntemine göz atın.

Gemma 4 ile çoklu jeton tahminine dayalı destekli çözümleme için bir model.

Bu model [PreTrainedModel](/docs/transformers/v5.23.0/tr/main_classes/model#transformers.PreTrainedModel) sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden ayarlama, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

#### create_attention_masks[[transformers.Gemma4AssistantForCausalLM.create_attention_masks]]

```python
create_attention_masks(inputs_embeds, attention_mask, shared_kv_states)
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/gemma4_assistant/modeling_gemma4_assistant.py#L204)

Desteklenen model için dikkat maskelerini hazırlayın; bu durumda `shared_kv_states` geçmiş önbellek olarak görev yapar.

Nedensellik (causality) için çift yönlü maskeler kullanıyoruz
- `q_len == 1` kenar durumu için bir fark yoktur; her durumda tam dikkat gibi davranır.
- SWA, `q_idx=1` ve `kv>=1` olduğunda pencereyi ileriye dönük (gelecek) olarak yorumlar
  - kv eksenini ters çevirerek gelecek perspektifinden geçmiş perspektifine geçeriz
  - Konumdan bağımsız dolgu (padding) durumunu hesaba katmak için, temel dikkat maskesini (attention mask) ilk oluşturulmadan önce de ters çeviriyoruz.

#### forward[[transformers.Gemma4AssistantForCausalLM.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, attention_mask: dict[str, torch.Tensor] | None = None, shared_kv_states: dict[str, tuple[torch.Tensor, torch.Tensor]] | None = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/gemma4_assistant/modeling_gemma4_assistant.py#L133)

**Parametreler:**

input_ids (`torch.Tensor`, şekli `(batch_size, sequence_length)`, *isteğe bağlı*) : Sözlükteki girdi dizisi token'larının indeksleri. Dolgu (padding) varsayılan olarak yok sayılır. İndeksler [AutoTokenizer](/docs/transformers/v5.23.0/tr/model_doc/auto#transformers.AutoTokenizer) kullanılarak elde edilebilir. Ayrıntılar için [PreTrainedTokenizer.encode()](/docs/transformers/v5.23.0/tr/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) ve [PreTrainedTokenizer.__call__()](/docs/transformers/v5.23.0/tr/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) yöntemlerine bakın. [Girdi ID'leri nelerdir?](../glossary#input-ids)

inputs_embeds (`torch.Tensor`, şekli `(batch_size, sequence_length, hidden_size)`, *isteğe bağlı*) : `input_ids` parametresini iletmek yerine, gömülü bir temsil doğrudan iletmeyi tercih edebilirsiniz. Bu, `input_ids` indekslerini ilgili vektörlere dönüştürme biçimi üzerinde modelin dahili gömme arama matrisine kıyasla daha fazla kontrol sahibi olmak istiyorsanız faydalıdır.

position_ids (`torch.LongTensor`, şekli `(batch_size, sequence_length)`, *isteğe bağlı*) : Girdi dizisi token'larının konum gömme (position embeddings) içindeki konum indeksleri. `[0, config.n_positions - 1]` aralığında seçilir.  [Konum kimlikleri (position IDs) nedir?](../glossary#position-ids)

attention_mask (`dict[str, torch.Tensor]` biçimi `(batch_size, sequence_length)`, *isteğe bağlı*) : Dolgu (padding) token indekslerinde dikkat (attention) işleminin uygulanmamasını sağlayan maske. `[0, 1]` aralığında seçilen maske değerleri:  - **maske uygulanmamış** tokenlar için 1, - **maske uygulanmış** tokenlar için 0.  [Dikkat maskeleri nelerdir?](../glossary#attention-mask)

shared_kv_states (`dict[str, torch.Tensor` şekli `(batch_size, 1, q_len, kv_len)`, *isteğe bağlı*) : Bu modeldeki her `layer_type` için son katmanın hesaplanan KV değerlerini içeren bir sözlük.

use_cache (`bool`, *isteğe bağlı*) : `True` olarak ayarlanırsa, `past_key_values` anahtar değer durumları döndürülür ve çözümlemeyi hızlandırmak için kullanılabilir (bkz. `past_key_values`).

**Dönüş:**

`tuple[torch.Tensor, torch.Tensor]`

[Gemma4AssistantForCausalLM](/docs/transformers/v5.23.0/tr/model_doc/gemma4_assistant#transformers.Gemma4AssistantForCausalLM) forward metodu, `__call__` özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine `Module` örneğini çağırmak gerekir; çünkü ilki ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

Örnek:

```python
>>> 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?"
```

