Views
No views yet
Catatan Penting: Ini adalah model encoder-decoder (Seq2Seq), bukan decoder-only. Model ini dilengkapi dengan chat template khusus yang dirancang untuk arsitektur encoder-decoder T5Gemma-2.

chat_template.jinja) yang mendukung tokenizer.apply_chat_template() out-of-the-box.apply_chat_template (Direkomendasikan)1import torch
2from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
3
4model_id = "daruokta/t5gemma-2-4b-4b-instruct-chat-indo-v3-unsloth"
5
6tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
7model = AutoModelForSeq2SeqLM.from_pretrained(
8 model_id,
9 trust_remote_code=True,
10 torch_dtype=torch.bfloat16,
11 device_map="auto"
12)
13
14# Siapkan pesan percakapan
15messages = [
16 {"role": "system", "content": "Kamu adalah asisten AI yang helpful, santai, dan ramah. Gunakan Bahasa Indonesia sebagai bahasa utama."},
17 {"role": "user", "content": "Jelaskan secara singkat apa itu fotosintesis."}
18]
19
20# Gunakan chat template bawaan
21prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
22inputs = tokenizer(prompt, return_tensors="pt", add_special_tokens=False).to(model.device)
23
24with torch.no_grad():
25 outputs = model.generate(
26 **inputs,
27 max_new_tokens=256,
28 temperature=0.7,
29 do_sample=True,
30 eos_token_id=[
31 tokenizer.convert_tokens_to_ids("<end_of_turn>"),
32 tokenizer.eos_token_id
33 ]
34 )
35
36response = tokenizer.decode(outputs[0], skip_special_tokens=True)
37print(response.strip())1messages = [
2 {"role": "system", "content": "Kamu adalah asisten AI yang helpful dan ramah."},
3 {"role": "user", "content": "Apa itu machine learning?"},
4 {"role": "assistant", "content": "Machine learning adalah cabang AI di mana komputer belajar dari data tanpa diprogram secara eksplisit."},
5 {"role": "user", "content": "Bisa kasih contoh penerapannya?"}
6]
7
8prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
9# ... (lanjutkan dengan generate seperti di atas)1import torch
2from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
3
4model_id = "daruokta/t5gemma-2-4b-4b-instruct-chat-indo-v3-unsloth"
5
6tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
7model = AutoModelForSeq2SeqLM.from_pretrained(
8 model_id,
9 trust_remote_code=True,
10 torch_dtype=torch.bfloat16,
11 device_map="auto"
12)
13
14# Logit Masking untuk memblokir unused & vision tokens
15vocab_size = model.config.vocab_size
16suppress_block1 = list(range(6, 105)) # <unused0>–<unused98>
17suppress_block2 = list(range(256002, 262144)) # <unused100>–<unused6241>
18suppress_vision = [255999, 256000, 256001] # <end_of_image>, <image_soft_token>
19suppress_ids = [i for i in (suppress_block1 + suppress_block2 + suppress_vision) if i < vocab_size]
20
21mask = torch.zeros(vocab_size, dtype=torch.bfloat16)
22mask[suppress_ids] = -10000.0
23
24def forward_hook(module, inputs, outputs):
25 if isinstance(outputs, torch.Tensor):
26 return outputs + mask.to(outputs.device)
27 elif hasattr(outputs, "logits"):
28 outputs.logits = outputs.logits + mask.to(outputs.logits.device)
29 return outputs
30 return outputs
31
32# Pasang hook di lm_head
33if hasattr(model, "lm_head"):
34 model.lm_head.register_forward_hook(forward_hook)
35else:
36 model.register_forward_hook(forward_hook)
37
38# Sekarang generate seperti biasa
39messages = [
40 {"role": "system", "content": "Kamu adalah asisten AI yang helpful."},
41 {"role": "user", "content": "Buatkan ringkasan tentang sejarah Indonesia."}
42]
43
44prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
45inputs = tokenizer(prompt, return_tensors="pt", add_special_tokens=False).to(model.device)
46
47with torch.no_grad():
48 outputs = model.generate(
49 **inputs,
50 max_new_tokens=256,
51 temperature=0.7,
52 do_sample=True,
53 repetition_penalty=1.2,
54 no_repeat_ngram_size=3,
55 eos_token_id=[
56 tokenizer.convert_tokens_to_ids("<end_of_turn>"),
57 tokenizer.eos_token_id
58 ]
59 )
60
61response = tokenizer.decode(outputs[0], skip_special_tokens=True)
62print(response.strip())<bos><start_of_turn>user
{system_prompt}
{user_message}<end_of_turn>
<start_of_turn>model
{model_response}<end_of_turn>
<start_of_turn>user
{next_user_message}<end_of_turn>
<start_of_turn>modelassistant otomatis di-map ke model untuk kompatibilitas format OpenAI| Parameter | Nilai |
|---|---|
| Base Model | google/t5gemma-2-4b-4b |
| Framework | Unsloth + Transformers |
| Dataset | daruokta/t5gemma2-indonesia-chat-formatted |
| Konfigurasi | chat_sft + indoqa_sft (multi-task) |
| LoRA Rank (r) | 256 |
| LoRA Alpha (α) | 512 |
| Target Modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| LoRA Dropout | 0.2 |
| Epochs | 5 |
| Optimizer | GrokAdEMAMix (grok_alpha=2.0, grok_lamb=0.98) |
| Learning Rate | 1e-5 (Cosine decay, 100 warmup steps) |
| Batch Size | 4 per device × 32 gradient accumulation |
| Precision | Mixed bfloat16 |
| Context Length | Source: 2048 / Target: 512 |
| Label Smoothing | 0.1 |
| NEFTune Noise Alpha | 5.0 |
| Weight Decay | 0.1 |
┌─────────────────────┐ ┌─────────────────────┐
│ ENCODER │ │ DECODER │
│ │ │ │
│ Conversation │───▶│ Response │
│ Context + System │ │ Generation │
│ Prompt │ │ (Autoregressive) │
│ │ │ │
│ (Bidirectional │ │ (Causal │
│ Attention) │ │ Attention) │
└─────────────────────┘ └─────────────────────┘1@article{zhang2025t5gemma2,
2 title={T5Gemma 2: Seeing, Reading, and Understanding Longer},
3 author={Zhang, Biao and others},
4 journal={arXiv preprint arXiv:2512.14856},
5 year={2025}
6}
7
8@article{elfeki2025return,
9 title={Return of the Encoder: Maximizing Parameter Efficiency for SLMs},
10 author={Elfeki, Mohamed and others},
11 journal={arXiv preprint arXiv:2501.16273},
12 year={2025}
13}
14
15@article{pagliardini2024ademamix,
16 title={The AdEMAMix Optimizer: Better, Faster, Older},
17 author={Pagliardini, Matteo and Ablin, Pierre and Grangier, David},
18 journal={arXiv preprint arXiv:2409.03137},
19 year={2024}
20}
21
22@article{gemma3report,
23 title={Gemma 3 Technical Report},
24 author={DeepMind, Google},
25 journal={arXiv preprint arXiv:2503.19786},
26 year={2025}
27}
28
29@article{koto2024cendol,
30 title={Cendol: Open Instruction-tuned Generative Large Language Models for Indonesian Languages},
31 author={Koto, Fajri and others},
32 journal={arXiv preprint arXiv:2404.06138},
33 year={2024}
34}