# Switch Transformers

[Switch Transformers](https://huggingface.co/papers/2101.03961) adalah model T5 sparse di mana lapisan MLP diganti dengan Mixture-of-Experts (MoE). Mekanisme routing mengaitkan setiap token dengan satu expert, dan setiap expert merupakan MLP dense. Sparsity memungkinkan scaling yang lebih baik, dan mekanisme routing memungkinkan model memilih bobot yang relevan secara on-the-fly, sehingga meningkatkan kapasitas model.

Anda dapat menemukan semua checkpoint Switch Transformers asli di bawah koleksi [Switch Transformer](https://huggingface.co/collections/google/switch-transformers-release-6548c35c6507968374b56d1f).

> [!TIP]
> Model ini disumbangkan oleh [ybelkada](https://huggingface.co/ybelkada) dan [ArthurZ](https://huggingface.co/ArthurZ).
>
> Klik pada model Switch Transformers di bilah sisi kanan untuk melihat lebih banyak contoh cara menerapkan Switch Transformers ke berbagai tugas bahasa alami yang berbeda.

Contoh di bawah ini menunjukkan cara memprediksi token yang tersembunyi menggunakan [Pipeline](/docs/transformers/main/id/main_classes/pipelines#transformers.Pipeline), [AutoModel](/docs/transformers/main/id/model_doc/auto#transformers.AutoModel), dan dari baris perintah.

```python
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/switch-base-8")
model = AutoModelForSeq2SeqLM.from_pretrained("google/switch-base-8", device_map="auto")

input_text = "The capital of France is <extra_id_0>."
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to(0)

outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
```

Quantization mengurangi beban memori model besar dengan merepresentasikan bobot dalam presisi yang lebih rendah. Lihat ringkasan [Quantization](../quantization/overview) untuk backend quantization lain yang tersedia.

Contoh di bawah menggunakan [bitsandbytes](../quantization/bitsandbytes) untuk hanya mengkuantisasi bobot menjadi 8-bit.

```python
# pip install bitsandbytes
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, BitsAndBytesConfig

tokenizer = AutoTokenizer.from_pretrained("google/switch-base-8")
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForSeq2SeqLM.from_pretrained("google/switch-base-8", device_map="auto", quantization_config=quantization_config)

input_text = "The capital of France is <extra_id_0>."
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to(0)

outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
```

## SwitchTransformersConfig[[transformers.SwitchTransformersConfig]]

#### transformers.SwitchTransformersConfig[[transformers.SwitchTransformersConfig]]

```python
transformers.SwitchTransformersConfig(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, 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, is_encoder_decoder: bool = True, vocab_size: int = 32128, d_model: int = 768, d_kv: int = 64, d_ff: int = 2048, expert_capacity: int = 64, num_layers: int = 12, num_sparse_encoder_layers: int = 3, num_decoder_layers: int | None = 12, num_sparse_decoder_layers: int = 3, num_heads: int = 12, num_experts: int = 8, router_bias: bool = False, router_jitter_noise: int | float = 0.01, router_dtype: typing.Literal['float32', 'float16', 'bfloat16'] = 'float32', router_ignore_padding_tokens: bool = False, relative_attention_num_buckets: int = 32, relative_attention_max_distance: int = 128, dropout_rate: float | int = 0.1, layer_norm_epsilon: float = 1e-06, router_z_loss_coef: float = 0.001, router_aux_loss_coef: float = 0.001, initializer_factor: float = 1.0, dense_act_fn: str = 'relu', add_router_probs: bool = False, use_cache: bool = True, pad_token_id: int | None = 0, eos_token_id: int | list[int] | None = 1, bos_token_id: int | None = None, tie_word_embeddings: bool = True, is_decoder: bool = False, add_cross_attention: bool = False)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/configuration_switch_transformers.py#L26)

**Parameter:**

is_encoder_decoder (`bool`, *opsional*, defaultnya `True`) : Apakah model digunakan sebagai encoder/decoder atau tidak.

vocab_size (`int`, *opsional*, defaultnya `32128`) : Ukuran kosakata model. Menentukan jumlah token berbeda yang dapat direpresentasikan oleh `input_ids`.

d_model (`int`, *opsional*, defaultnya `768`) : Ukuran lapisan encoder dan lapisan pooler.

d_kv (`int`, *opsional*, defaultnya `64`) : Ukuran proyeksi kunci, kueri, dan nilai per kepala perhatian. `inner_dim` dari lapisan proyeksi akan didefinisikan sebagai `num_heads * d_kv`.

d_ff (`int`, *opsional*, defaultnya `2048`) : Dimensi dari representasi MLP.

expert_capacity (`int`, *opsional*, defaultnya `64`) : Jumlah token yang dapat diproses oleh setiap ahli. Jika `None`, `expert_capacity` akan diatur ke `(sequence_length / num_experts) * capacity_factor`.

num_layers (`int`, *opsional*, defaultnya `12`) : Jumlah lapisan tersembunyi dalam decoder Transformer.

num_sparse_encoder_layers (`int`, *opsional*, default 3) : Jumlah lapisan tersembunyi padat (dense) dari sparse (MoE) pada lapisan encoder Transformer. Catatan: Ketika diatur ke 0 dengan `num_layers=1`, implementasi saat ini mungkin masih membuat lapisan sparse karena perhitungan langkah sparse. Kasus tepi ini tidak ditemui pada checkpoint yang ada.

num_decoder_layers (`int`, *opsional*, defaultnya `12`) : Jumlah lapisan tersembunyi dalam decoder Transformer. Akan menggunakan nilai yang sama dengan `num_layers` jika tidak diatur.

num_sparse_decoder_layers (`int`, *opsional*, default 3) : Jumlah lapisan tersembunyi padat (dense) dari sparse (MoE) pada lapisan decoder Transformer. Catatan: Ketika diatur ke 0 dengan `num_decoder_layers=1`, implementasi saat ini mungkin masih membuat lapisan sparse karena perhitungan langkah sparse. Kasus tepi ini tidak ditemui pada checkpoint yang ada.

num_heads (`int`, *opsional*, defaultnya `12`) : Jumlah kepala perhatian untuk setiap lapisan perhatian dalam decoder Transformer.

num_experts (`int`, *opsional*, defaultnya `8`) : Jumlah pakar yang dirutekan di lapisan MoE.

router_bias (`bool`, *opsional*, defaultnya `False`) : Apakah akan menambahkan bias ke router.

router_jitter_noise (`Union[int, float]`, *opsional*, defaultnya `0.01`) : Jumlah noise yang ditambahkan ke logits router selama pelatihan untuk load balancing yang lebih baik.

router_dtype (`str`, *opsional*, default ke `"float32"`) : `dtype` yang digunakan untuk router. Disarankan untuk mempertahankan `dtype` sebagai `"float32"` sesuai dengan diskusi *presisi selektif* dalam [makalah tersebut](https://huggingface.co/papers/2101.03961).

router_ignore_padding_tokens (`bool`, *opsional*, defaultnya `False`) : Apakah akan mengabaikan token padding saat routing.

relative_attention_num_buckets (`int`, *opsional*, defaultnya 32) : Jumlah bucket yang digunakan untuk setiap lapisan perhatian.

relative_attention_max_distance (`int`, *opsional*, default 128) : Jarak maksimum dari urutan yang lebih panjang untuk pemisahan bucket.

dropout_rate (`Union[float, int]`, *opsional*, defaultnya `0.1`) : Rasio untuk semua lapisan dropout.

layer_norm_epsilon (`float`, *opsional*, defaultnya `1e-06`) : Epsilon yang digunakan oleh lapisan normalisasi lapisan.

router_z_loss_coef (`float`, *opsional*, default `0.001`) : Koefisien untuk z-loss router, yang menghukum logits router yang besar untuk meningkatkan stabilitas pelatihan.

router_aux_loss_coef (`float`, *opsional*, default `0.001`) : Koefisien loss penyeimbangan beban bantu. Digunakan untuk menghukum perutean pakar yang tidak merata pada model MoE.

initializer_factor (`float`, *opsional*, default `1.0`) : Faktor untuk menginisialisasi semua matriks bobot (sebaiknya tetap 1, digunakan secara internal untuk pengujian inisialisasi).

dense_act_fn (`string`, *opsional*, defaultnya `"relu"`) : Jenis lapisan feed forward yang akan digunakan. Harus salah satu dari `"relu"` atau `"gated-gelu"`. SwitchTransformersv1.1 menggunakan proyeksi feed forward `"gated-gelu"`. SwitchTransformers asli menggunakan `"relu"`.

add_router_probs (`bool`, *opsional*, defaultnya `False`) : Apakah akan mengoutputkan probabilitas router untuk menghitung kerugian bantu router.

use_cache (`bool`, *opsional*, defaultnya `True`) : Apakah model harus mengembalikan perhatian kunci/nilai terakhir (tidak digunakan oleh semua model). Hanya relevan jika `config.is_decoder=True` atau ketika model adalah model generatif yang hanya decoder.

pad_token_id (`int`, *opsional*, defaultnya `0`) : ID token yang digunakan untuk padding dalam kosakata.

eos_token_id (`Union[int, list[int]]`, *opsional*, defaultnya `1`) : Token id yang digunakan untuk end-of-stream dalam kosakata.

bos_token_id (`int`, *opsional*) : ID token yang digunakan untuk awal aliran dalam kosakata.

tie_word_embeddings (`bool`, *opsional*, defaultnya `True`) : Apakah mengikat embedding bobot sesuai dengan pemetaan `tied_weights_keys` model.

is_decoder (`bool`, *opsional*, defaultnya `False`) : Apakah model digunakan sebagai decoder atau tidak. Jika `False`, model digunakan sebagai encoder.

add_cross_attention (`bool`, *opsional*, defaultnya `False`) : Apakah lapisan cross-attention harus ditambahkan ke model.

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari SwitchTransformersModel. Kelas ini digunakan untuk membuat instans model Switch Transformers sesuai dengan argumen yang ditentukan, yang mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari [google/switch-base-8](https://huggingface.co/google/switch-base-8)

Objek konfigurasi mewarisi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) dan dapat digunakan untuk mengontrol keluaran model. Baca dokumentasi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) untuk informasi lebih lanjut.

## SwitchTransformersTop1Router[[transformers.SwitchTransformersTop1Router]]

#### transformers.SwitchTransformersTop1Router[[transformers.SwitchTransformersTop1Router]]

```python
transformers.SwitchTransformersTop1Router(config: SwitchTransformersConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L53)

Router yang menggunakan token memilih penugasan ahli top-1.

Router ini menggunakan mekanisme yang sama dengan di Switch Transformer (https://huggingface.co/papers/2101.03961) dan V-MoE (https://huggingface.co/papers/2106.05974): token memilih para ahli teratas mereka. Item diurutkan berdasarkan router_probs dan kemudian diarahkan ke pilihan ahli mereka hingga expert_capacity ahli tersebut tercapai. **Tidak ada jaminan bahwa setiap token diproses oleh seorang ahli**, atau bahwa setiap ahli menerima setidaknya satu token.

#### forward[[transformers.SwitchTransformersTop1Router.forward]]

```python
forward(hidden_states: Tensor)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L73)

**Parameter:**

hidden_states (`torch.Tensor`) : (batch_size, sequence_length, hidden_dim) yang digunakan untuk menghitung probabilitas router.

**Mengembalikan:** expert_index (`torch.Tensor`)

Mask dispatch one-hot dengan bentuk (batch_size, sequence_length, num_experts) di mana token yang dirutekan ke ahli melampaui kapasitasnya akan dimask. router_probs (`torch.Tensor`): Tensor dengan bentuk (batch_size, sequence_length, 1) yang berisi probabilitas ahli yang dipilih untuk setiap token. Digunakan untuk menskalakan output ahli. router_logits (`torch.Tensor`): Tensor logits dengan bentuk (batch_size, sequence_length, num_experts) yang sesuai dengan logits router mentah. Ini digunakan kemudian untuk menghitung z-loss router.

Menghitung probabilitas router dari hidden states input.

## SwitchTransformersSparseMLP[[transformers.SwitchTransformersSparseMLP]]

#### transformers.SwitchTransformersSparseMLP[[transformers.SwitchTransformersSparseMLP]]

```python
transformers.SwitchTransformersSparseMLP(config: SwitchTransformersConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L183)

#### forward[[transformers.SwitchTransformersSparseMLP.forward]]

```python
forward(hidden_states: Tensor)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L189)

## SwitchTransformersModel[[transformers.SwitchTransformersModel]]

#### transformers.SwitchTransformersModel[[transformers.SwitchTransformersModel]]

```python
transformers.SwitchTransformersModel(config: SwitchTransformersConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L806)

**Parameter:**

config ([SwitchTransformersConfig](/docs/transformers/main/id/model_doc/switch_transformers#transformers.SwitchTransformersConfig)) : Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode [from_pretrained()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Model Switch Transformers polos yang menghasilkan hidden-states mentah tanpa head spesifik di atasnya.

Model ini mewarisi dari [PreTrainedModel](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.

#### forward[[transformers.SwitchTransformersModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, decoder_input_ids: typing.Optional[torch.LongTensor] = None, decoder_attention_mask: typing.Optional[torch.BoolTensor] = None, encoder_outputs: tuple[tuple[torch.Tensor]] | None = None, cache: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, decoder_inputs_embeds: typing.Optional[torch.Tensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L834)

**Parameter:**

input_ids (`torch.LongTensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Indeks token dari urutan input dalam kosakata. Padding akan diabaikan secara default. Indeks dapat diperoleh menggunakan [AutoTokenizer](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu input IDs?](../glossary#input-ids)

attention_mask (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan attention pada indeks token padding. Nilai mask dipilih dalam `[0, 1]`:  - 1 untuk token yang **tidak di-mask**, - 0 untuk token yang **di-mask**.  [Apa itu attention masks?](../glossary#attention-mask)

decoder_input_ids (`torch.LongTensor` dengan bentuk `(batch_size, target_sequence_length)`, *opsional*) : Indeks token dari urutan input decoder dalam kosakata. Indeks dapat diperoleh menggunakan [AutoTokenizer](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu ID input decoder?](../glossary#decoder-input-ids)

decoder_attention_mask (`torch.BoolTensor` dengan bentuk `(batch_size, target_sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan perhatian pada indeks token tertentu. Secara default, mask kausal akan digunakan, untuk memastikan model hanya dapat melihat input sebelumnya guna memprediksi masa depan.

encoder_outputs (`tuple[tuple[torch.Tensor]]`, *opsional*) : Tuple terdiri dari (`last_hidden_state`, *opsional*: `hidden_states`, *opsional*: `attentions`) `last_hidden_state` dengan bentuk `(batch_size, sequence_length, hidden_size)`, *opsional*) adalah urutan hidden-states pada keluaran lapisan terakhir encoder. Digunakan dalam cross-attention decoder.

cache (`~cache_utils.Cache`, *opsional*) : Hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan untuk mempercepat decoding berurutan. Ini biasanya terdiri dari `cache` yang dikembalikan oleh model pada tahap decoding sebelumnya, ketika `use_cache=True` atau `config.use_cache=True`. Hanya instance [Cache](/docs/transformers/main/id/internal/generation_utils#transformers.Cache) yang diizinkan sebagai input, lihat [panduan kv cache](https://huggingface.co/docs/transformers/en/kv_cache) kami. Jika tidak ada `cache` yang diteruskan, [DynamicCache](/docs/transformers/main/id/internal/generation_utils#transformers.DynamicCache) akan diinisialisasi secara default. Model akan mengoutput format cache yang sama dengan yang diberikan sebagai input. Jika `cache` digunakan, pengguna diharapkan untuk hanya menginput `input_ids` yang belum diproses (yang tidak memiliki state key value masa lalunya diberikan ke model ini) dengan bentuk `(batch_size, unprocessed_length)` alih-alih semua `input_ids` dengan bentuk `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` dengan bentuk `(batch_size, sequence_length, hidden_size)`, *opsional*) : Secara opsional, alih-alih meneruskan `input_ids`, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model.

decoder_inputs_embeds (`torch.Tensor` dengan bentuk `(batch_size, target_sequence_length, hidden_size)`, *opsional*) : Secara opsional, alih-alih meneruskan `decoder_input_ids`, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Jika `cache` digunakan, secara opsional hanya `decoder_inputs_embeds` terakhir yang perlu diinput (lihat `cache`). Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `decoder_input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model. Jika `decoder_input_ids` dan `decoder_inputs_embeds` keduanya tidak disetel, `decoder_inputs_embeds` mengambil nilai dari `inputs_embeds`.

**Mengembalikan:** `Seq2SeqMoEModelOutput` atau `tuple(torch.Tensor)`

Sebuah `Seq2SeqMoEModelOutput` atau tuple dari `torch.Tensor` (jika `return_dict=False` diteruskan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi (`None`) dan input.

Metode forward dari [SwitchTransformersModel](/docs/transformers/main/id/model_doc/switch_transformers#transformers.SwitchTransformersModel) menimpa metode khusus `__call__`.

Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance `Module` setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

- **last_hidden_state** (`torch.Tensor` dengan bentuk `(batch_size, sequence_length, hidden_size)`) -- Urutan hidden-state pada keluaran lapisan terakhir dari decoder model.

  Jika `cache` digunakan, hanya hidden-state terakhir dari sekuens dengan bentuk `(batch_size, 1, hidden_size)` yang dioutput.
- **cache** (`EncoderDecoderCache`, *opsional*, dikembalikan ketika `use_cache=True` dilewatkan atau ketika `config.use_cache=True`) -- Ini adalah instance [EncoderDecoderCache](/docs/transformers/main/id/internal/generation_utils#transformers.EncoderDecoderCache). Untuk detail lebih lanjut, lihat [panduan kv cache](https://huggingface.co/docs/transformers/en/kv_cache) kami.

  Berisi hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan (lihat input `cache`) untuk mempercepat decoding berurutan.
- **decoder_hidden_states** (`tuple(torch.Tensor)`, *opsional*, dikembalikan saat `output_hidden_states=True` dilewatkan atau saat `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states dari decoder pada output setiap layer ditambah output embedding awal yang opsional.
- **decoder_attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` diteruskan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian dari decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
- **decoder_router_logits** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_router_logits=True` dilewatkan atau ketika `config.add_router_probs=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, sequence_length, num_experts)`.

  Logit router dari model decoder, berguna untuk menghitung loss tambahan untuk model Mixture of Experts.
- **cross_attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian dari lapisan cross-attention decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala cross-attention.
- **encoder_last_hidden_state** (`torch.Tensor` dengan bentuk `(batch_size, sequence_length, hidden_size)`, *opsional*) -- Urutan hidden-states pada keluaran lapisan terakhir dari encoder model.
- **encoder_hidden_states** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_hidden_states=True` diteruskan atau ketika `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states dari encoder pada output setiap layer ditambah output embedding awal yang opsional.
- **encoder_attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian dari encoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
- **encoder_router_logits** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_router_logits=True` diteruskan atau ketika `config.add_router_probs=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, sequence_length, num_experts)`.

  Logit router dari model encoder, berguna untuk menghitung auxiliary loss dan z_loss untuk modul sparse.

## SwitchTransformersForConditionalGeneration[[transformers.SwitchTransformersForConditionalGeneration]]

#### transformers.SwitchTransformersForConditionalGeneration[[transformers.SwitchTransformersForConditionalGeneration]]

```python
transformers.SwitchTransformersForConditionalGeneration(config: SwitchTransformersConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L949)

**Parameter:**

config ([SwitchTransformersConfig](/docs/transformers/main/id/model_doc/switch_transformers#transformers.SwitchTransformersConfig)) : Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode [from_pretrained()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Model SWITCH_TRANSFORMERS dengan head `language modeling` di atasnya.

Model ini mewarisi dari [PreTrainedModel](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.

#### forward[[transformers.SwitchTransformersForConditionalGeneration.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, decoder_input_ids: typing.Optional[torch.LongTensor] = None, decoder_attention_mask: typing.Optional[torch.BoolTensor] = None, encoder_outputs: tuple[tuple[torch.Tensor]] | None = None, cache: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, decoder_inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, output_router_logits: bool | None = False, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L986)

**Parameter:**

input_ids (`torch.LongTensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Indeks token dari urutan input dalam kosakata. Padding akan diabaikan secara default. Indeks dapat diperoleh menggunakan [AutoTokenizer](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu input IDs?](../glossary#input-ids)

attention_mask (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan attention pada indeks token padding. Nilai mask dipilih dalam `[0, 1]`:  - 1 untuk token yang **tidak di-mask**, - 0 untuk token yang **di-mask**.  [Apa itu attention masks?](../glossary#attention-mask)

decoder_input_ids (`torch.LongTensor` dengan bentuk `(batch_size, target_sequence_length)`, *opsional*) : Indeks token dari urutan input decoder dalam kosakata. Indeks dapat diperoleh menggunakan [AutoTokenizer](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu ID input decoder?](../glossary#decoder-input-ids)

decoder_attention_mask (`torch.BoolTensor` dengan bentuk `(batch_size, target_sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan perhatian pada indeks token tertentu. Secara default, mask kausal akan digunakan, untuk memastikan model hanya dapat melihat input sebelumnya guna memprediksi masa depan.

encoder_outputs (`tuple[tuple[torch.Tensor]]`, *opsional*) : Tuple terdiri dari (`last_hidden_state`, *opsional*: `hidden_states`, *opsional*: `attentions`) `last_hidden_state` dengan bentuk `(batch_size, sequence_length, hidden_size)`, *opsional*) adalah urutan hidden-states pada keluaran lapisan terakhir encoder. Digunakan dalam cross-attention decoder.

cache (`~cache_utils.Cache`, *opsional*) : Hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan untuk mempercepat decoding berurutan. Ini biasanya terdiri dari `cache` yang dikembalikan oleh model pada tahap decoding sebelumnya, ketika `use_cache=True` atau `config.use_cache=True`. Hanya instance [Cache](/docs/transformers/main/id/internal/generation_utils#transformers.Cache) yang diizinkan sebagai input, lihat [panduan kv cache](https://huggingface.co/docs/transformers/en/kv_cache) kami. Jika tidak ada `cache` yang diteruskan, [DynamicCache](/docs/transformers/main/id/internal/generation_utils#transformers.DynamicCache) akan diinisialisasi secara default. Model akan mengoutput format cache yang sama dengan yang diberikan sebagai input. Jika `cache` digunakan, pengguna diharapkan untuk hanya menginput `input_ids` yang belum diproses (yang tidak memiliki state key value masa lalunya diberikan ke model ini) dengan bentuk `(batch_size, unprocessed_length)` alih-alih semua `input_ids` dengan bentuk `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` dengan bentuk `(batch_size, sequence_length, hidden_size)`, *opsional*) : Secara opsional, alih-alih meneruskan `input_ids`, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model.

decoder_inputs_embeds (`torch.Tensor` dengan bentuk `(batch_size, target_sequence_length, hidden_size)`, *opsional*) : Secara opsional, alih-alih meneruskan `decoder_input_ids`, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Jika `cache` digunakan, secara opsional hanya `decoder_inputs_embeds` terakhir yang perlu diinput (lihat `cache`). Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `decoder_input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model. Jika `decoder_input_ids` dan `decoder_inputs_embeds` keduanya tidak disetel, `decoder_inputs_embeds` mengambil nilai dari `inputs_embeds`.

labels (`torch.LongTensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Label untuk menghitung kerugian pemodelan bahasa yang disamarkan. Indeks harus berada di `[0, ..., config.vocab_size]` atau -100 (lihat docstring `input_ids`). Token dengan indeks yang disetel ke `-100` diabaikan (disamarkan), kerugian hanya dihitung untuk token dengan label di `[0, ..., config.vocab_size]`.

output_router_logits (`bool`, *opsional*, defaultnya `False`) : Apakah logits dari semua router akan dikembalikan atau tidak. Hal ini berguna untuk menghitung kerugian router, dan tidak seharusnya dikembalikan selama inferensi.

**Mengembalikan:** `Seq2SeqMoEOutput` atau `tuple(torch.Tensor)`

A `Seq2SeqMoEOutput` atau tuple dari `torch.Tensor` (jika `return_dict=False` dilewatkan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi (`None`) dan input.

Metode forward dari [SwitchTransformersForConditionalGeneration](/docs/transformers/main/id/model_doc/switch_transformers#transformers.SwitchTransformersForConditionalGeneration) menimpa metode khusus `__call__`.

Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance `Module` setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

- **loss** (`torch.Tensor` dengan bentuk `(1,)`, *opsional*, dikembalikan ketika `labels` disediakan) -- Loss pemodelan bahasa.
- **logits** (`torch.Tensor` dengan bentuk `(batch_size, sequence_length, config.vocab_size)`) -- Skor prediksi dari kepala pemodelan bahasa (skor untuk setiap token kosakata sebelum SoftMax).
- **cache** (`EncoderDecoderCache`, *opsional*, dikembalikan ketika `use_cache=True` dilewatkan atau ketika `config.use_cache=True`) -- Ini adalah instance [EncoderDecoderCache](/docs/transformers/main/id/internal/generation_utils#transformers.EncoderDecoderCache). Untuk detail lebih lanjut, lihat [panduan kv cache](https://huggingface.co/docs/transformers/en/kv_cache) kami.

  Berisi hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan (lihat input `cache`) untuk mempercepat decoding berurutan.
- **decoder_hidden_states** (`tuple(torch.Tensor)`, *opsional*, dikembalikan saat `output_hidden_states=True` dilewatkan atau saat `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states dari decoder pada output setiap layer ditambah output embedding awal.
- **decoder_attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` diteruskan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian dari decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
- **decoder_router_logits** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_router_logits=True` dilewatkan atau ketika `config.add_router_probs=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, sequence_length, num_experts)`.

  Logit router dari model decoder, berguna untuk menghitung loss tambahan untuk model Mixture of Experts.
- **cross_attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian dari lapisan cross-attention decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala cross-attention.
- **encoder_last_hidden_state** (`torch.Tensor` dengan bentuk `(batch_size, sequence_length, hidden_size)`, *opsional*) -- Urutan hidden-states pada keluaran lapisan terakhir dari encoder model.
- **encoder_hidden_states** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_hidden_states=True` diteruskan atau ketika `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states dari encoder pada output setiap layer ditambah output embedding awal.
- **encoder_attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian dari encoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
- **encoder_router_logits** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_router_logits=True` diteruskan atau ketika `config.add_router_probs=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, sequence_length, num_experts)`.

  Logit router dari model encoder, berguna untuk menghitung auxiliary loss dan z_loss untuk model Mixture of Experts.

## SwitchTransformersEncoderModel[[transformers.SwitchTransformersEncoderModel]]

#### transformers.SwitchTransformersEncoderModel[[transformers.SwitchTransformersEncoderModel]]

```python
transformers.SwitchTransformersEncoderModel(config: SwitchTransformersConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L1104)

#### forward[[transformers.SwitchTransformersEncoderModel.forward]]

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

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/switch_transformers/modeling_switch_transformers.py#L1126)

**Parameter:**

input_ids (`torch.LongTensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Indeks token dari urutan input dalam kosakata. Padding akan diabaikan secara default. Indeks dapat diperoleh menggunakan [AutoTokenizer](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu input IDs?](../glossary#input-ids)

attention_mask (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan attention pada indeks token padding. Nilai mask dipilih dalam `[0, 1]`:  - 1 untuk token yang **tidak di-mask**, - 0 untuk token yang **di-mask**.  [Apa itu attention masks?](../glossary#attention-mask)

inputs_embeds (`torch.Tensor` dengan bentuk `(batch_size, sequence_length, hidden_size)`, *opsional*) : Secara opsional, alih-alih meneruskan `input_ids`, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model.

use_cache (`bool`, *opsional*) : Jika diatur ke `True`, nilai status `cache` kunci akan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihat `cache`).

**Mengembalikan:** `MoEModelOutput` atau `tuple(torch.Tensor)`

`MoEModelOutput` atau tuple dari `torch.Tensor` (jika `return_dict=False` dilewatkan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi (`None`) dan input.

Metode forward dari [SwitchTransformersEncoderModel](/docs/transformers/main/id/model_doc/switch_transformers#transformers.SwitchTransformersEncoderModel) menimpa metode khusus `__call__`.

Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance `Module` setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

- **last_hidden_state** (`torch.Tensor` dengan bentuk `(batch_size, sequence_length, hidden_size)`) -- Urutan hidden-states pada keluaran lapisan terakhir model.
- **hidden_states** (`tuple(torch.Tensor)`, *opsional*, dikembalikan saat `output_hidden_states=True` dilewatkan atau saat `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
- **attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
- **router_probs** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_router_probs=True` dan `config.add_router_probs=True` diteruskan atau ketika `config.output_router_probs=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, sequence_length, num_experts)`.

  Probabilitas router mentah yang dihitung oleh router MoE; istilah-istilah ini digunakan untuk menghitung auxiliary loss dan z_loss untuk model Mixture of Experts.

