wader-100m-base 🐟
[English Version: README.en.md]
Model bahasa Indonesia ringan berukuran ~110 Juta parameter yang mengimplementasikan arsitektur DeepSeek-V4 (MLA, MoE, Hyper-Connections), dilatih dari nol menggunakan korpus percakapan bahasa Indonesia berskala besar. Ini adalah model dasar (pretrained base model) — untuk versi Chat/SFT, silakan gunakan neosantara/wader-100m.
Arsitektur
Model ini mengimplementasikan inovasi kunci DeepSeek-V4 pada skala miniatur:
| Komponen | Detail |
|---|---|
| Parameter | ~110M total (41M embedding, 69M non-embedding) |
| Hidden size | 320 |
| Layer | 8 |
| Attention heads | 8 (1 KV head — gaya MQA) |
| Head dim | 96 (32 RoPE + 64 NoPE) |
| MLA | q_lora_rank=160, o_groups=2, o_lora_rank=80 |
| MoE | 4 routed experts + 1 shared, top-2 routing |
| Expert FFN | SwiGLU, intermediate_size=640 |
| Routing | sqrtsoftplus scoring, noaux_tc method |
| Hyper-Connections | hc_mult=4, Sinkhorn routing (2 iters) |
| Vocab | 128.000 (Tokenizer DeepSeek-V4) |
| Konteks | 2.048 token |
Fitur DeepSeek-V4 yang Diimplementasikan
- Multi-head Latent Attention (MLA): Kompresi KV cache menggunakan proyeksi laten.
- Mixture of Experts (MoE): Aktivasi jarang (sparse) — hanya 2 dari 4 expert yang aktif per token.
- Hyper-Connections: Status tersembunyi (hidden states) salinan ganda dengan rute Sinkhorn yang dapat dipelajari (menggantikan koneksi residual standar).
- SwiGLU FFN: Blok feed-forward berkapasitas tinggi.
- Grouped output projection: Rute keluaran yang terstruktur dan efisien.
Pelatihan (Training)
- Dataset: neosantara/IndoTalk (396k baris penjelasan mendalam, penalaran, dan obrolan kasual berbahasa Indonesia)
- Langkah (Steps): 5.000 langkah
- Ukuran Batch: 8 × 4 gradient accumulation = 32 efektif
- Panjang Sekuens: 2.048 token
- Learning rate: 6e-4 (Cosine decay dengan warmup)
- Optimizer: AdamW (β1=0.9, β2=0.95, weight_decay=0.1)
- Presisi: bf16 mixed precision
- Perangkat Keras (Hardware): NVIDIA GeForce RTX 5090 Blackwell (Daytona Cloud) via PyTorch Nightly cu128
Metrik Pelatihan
| Metrik | Nilai |
|---|---|
| Final Train Loss | ~2.83 (Cross-Entropy pada Step 5000) |
| Token Accuracy | ~49.38% (Prediksi kata berikutnya dari awal) |
Penggunaan (Usage)
import torch
from transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
# PENTING: Model ini mewajibkan penggunaan GPU modern (Ampere/Ada/Hopper) yang mendukung bfloat16.
# Jika dijalankan di CPU atau GPU tua (seperti T4), akan terjadi error NaN.
device = "cuda" if torch.cuda.is_available() else "cpu"
# 1. Load config and model
repo_id = "neosantara/wader-100m-base"
config = AutoConfig.from_pretrained(repo_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_config(config, trust_remote_code=True).to(torch.bfloat16).to(device)
# 2. Download and load weights
weights_path = hf_hub_download(repo_id, "model.safetensors")
state_dict = load_file(weights_path)
model.load_state_dict(state_dict, strict=True)
model.eval()
# 3. Load tokenizer
tokenizer = AutoTokenizer.from_pretrained(repo_id, trust_remote_code=True)
# 4. Generate Indonesian text completion
prompt = "Indonesia adalah negara kepulauan yang memiliki"
input_ids = tokenizer.encode(prompt, return_tensors="pt").to(device)
with torch.no_grad():
output = model.generate(
input_ids,
max_new_tokens=100,
temperature=0.7,
top_p=0.9,
repetition_penalty=1.1,
pad_token_id=tokenizer.eos_token_id,
)
print(tokenizer.decode(output[0], skip_special_tokens=True))
Keterbatasan (Limitations)
- Ukuran kecil: Hanya 110 Juta parameter, didesain untuk eksperimen kilat.
- Hanya Base Model: Ini adalah model dasar untuk meneruskan kalimat (text completion). Untuk interaksi chat/tanya-jawab, harap gunakan neosantara/wader-100m.
- Custom architecture: Membutuhkan
trust_remote_code=True. - Wajib GPU Modern: Komponen DeepSeek-V4 seperti MLA/MoE dan Hyper-Connections dikembangkan khusus untuk GPU dengan presisi
bfloat16. Berjalan di CPU murni (float32) atau GPU lama (T4) akan meluapkan limit kalkulasi (overflow) yang menyebabkanNaNerror.
Lisensi
Apache-2.0