TURKLM 443M (SFT v10.2 Champion)
🇹🇷 Sıfırdan Eğitilmiş Açık Kaynak Türkçe Dil Modeli
GitHub Kaynak Kodu • Tüm Dosyalar ve Quantized Modeller • Apache 2.0 Lisansı
📌 Model Özellikleri
TURKLM 443M, mevcut yabancı modellerin (Llama, Mistral vb.) Türkçe adapter/LoRA veya çeviri ile ince ayarlanmış hali değildir. Sıfırdan (from scratch), rastgele ağırlıklarla (random weights) tek bir NVIDIA A100 GPU üzerinde ön eğitim (pretraining) ve talimat ayarı (SFT) aşamalarından geçirilerek üretilmiştir.
- Özgün Türkçe BPE Tokenizer: 64.000 kelime dağarcığına sahip, Türkçe heceleme ve ek yapısına uygun BPE tokenizer.
- Modern LLaMA Mimarisi: Rotary Position Embedding (RoPE), RMSNorm, SwiGLU aktivasyonu ve Grouped Query Attention (GQA - 16 Query / 8 KV).
- Çoklu Quantization Desteği: Standart
bfloat16tam hassasiyetin yanında, 2GB VRAM'de çalışanINT4 (NF4),INT8ve CPU'da çalışanGGUF (Q4_K_M)formatları hazır sunulmuştur. - Şeffaf Metrikler: Uydurma benchmark verileri yerine, modelin gerçek konuşma başarıları ve küçük model kısıtları (halüsinasyonlar) açıkça belgelenmiştir.
📦 Model Formatları ve İndirme Tablosu
Kullanıcıların donanımına göre 4 farklı format hazır olarak bu repoda yer almaktadır:
| Format | Dosya / Konum | Boyut | Gereken Donanım | Kullanım Alanı |
|---|---|---|---|---|
| BF16 / FP16 | model.safetensors | 886 MB | ~2GB GPU VRAM | Standart Transformers, PyTorch, Fine-tuning |
| GGUF Q4_K_M | turklm-443m-sft-Q4_K_M.gguf | 283 MB | Sadece 500MB RAM (CPU) | Ollama, LM Studio, llama.cpp, mobil/edge |
| INT4 NF4 | int4-nf4/ klasörü | 326 MB | ~1GB GPU VRAM | bitsandbytes 4-bit, düşük bellekli ekran kartları |
| INT8 | int8/ klasörü | 510 MB | ~1.5GB GPU VRAM | bitsandbytes 8-bit inference |
🚀 Hızlı Başlangıç (Quickstart)
Modeli kendi projelerinizde dakikalar içinde çalıştırmak için aşağıdaki yöntemlerden birini seçebilirsiniz:
Yöntem 1: Standart Transformers (Hızlı & Kolay)
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
model_id = "ArdaAydogdu/turklm-443m-sft"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto"
)
model.eval()
prompt = "### Kullanıcı:\nTürkiye'nin başkenti neresi?\n### Asistan:\n"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
with torch.no_grad():
output = model.generate(
**inputs,
streamer=streamer,
max_new_tokens=128,
do_sample=True,
temperature=0.7,
top_p=0.9,
repetition_penalty=1.15
)
Yöntem 2: 4-Bit NF4 (Düşük VRAM / 2-4 GB Ekran Kartları İçin)
Eğer ekran kartınızın VRAM'i düşükse modeli 4-bit olarak yükleyip sadece ~500 MB VRAM ile çalıştırabilirsiniz:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
model_id = "ArdaAydogdu/turklm-443m-sft"
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4"
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=bnb_config,
device_map="auto"
)
prompt = "### Kullanıcı:\nGüneş Sistemi'nin en büyük gezegeni hangisidir?\n### Asistan:\n"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
tokens = model.generate(**inputs, max_new_tokens=100, temperature=0.7)
print(tokenizer.decode(tokens[0], skip_special_tokens=True))
Yöntem 3: GGUF & llama.cpp (Ekran Kartsız / Sadece CPU)
Modeli hiçbir GPU olmadan doğrudan işlemci (CPU) üzerinde saniyeler içinde çalıştırmak için:
pip install llama-cpp-python huggingface_hub
from huggingface_hub import hf_hub_download
from llama_cpp import Llama
# GGUF dosyasını indir
model_path = hf_hub_download(
repo_id="ArdaAydogdu/turklm-443m-sft",
filename="turklm-443m-sft-Q4_K_M.gguf"
)
# Modeli CPU veya GPU ile yükle (n_gpu_layers=-1 tüm katmanları GPU'ya atar, 0 sadece CPU)
llm = Llama(model_path=model_path, n_ctx=2048, n_threads=6)
prompt = "### Kullanıcı:\nPython'da liste nasıl ters çevrilir?\n### Asistan:\n"
output = llm(prompt, max_tokens=128, temperature=0.7, top_p=0.9)
print(output["choices"][0]["text"])
Yöntem 4: Ollama & LM Studio Entegrasyonu
GGUF dosyasını indirip Ollama ile tek komutla yerel chat asistanına dönüştürebilirsiniz:
-
Modeli indirin:
huggingface-cli download ArdaAydogdu/turklm-443m-sft turklm-443m-sft-Q4_K_M.gguf --local-dir . -
Bir
Modelfileoluşturun:FROM ./turklm-443m-sft-Q4_K_M.gguf TEMPLATE """{{ if .System }}### Sistem: {{ .System }}{{ end }} ### Kullanıcı: {{ .Prompt }} ### Asistan: """ PARAMETER temperature 0.7 PARAMETER top_p 0.9 PARAMETER stop "### Kullanıcı:" PARAMETER stop "</s>" -
Modeli Ollama'ya ekleyin ve sohbet edin:
ollama create turklm -f Modelfile ollama run turklm
🏗️ Model Mimarisi
| Parametre | Değer | Teknik Açıklama |
|---|---|---|
| Toplam Parametre | 443.07 Milyon | Non-embedding parametreler: ~377.5M |
| Gizli Boyut ($d_{model}$) | 1024 | Temsil vektör boyutu |
| Katman Sayısı (Layers) | 24 | Transformer decoder bloğu sayısı |
| Attention Query Heads | 16 | Çoklu dikkat başlığı sayısı |
| Key-Value Heads (GQA) | 8 | Grouped Query Attention (2:1 oranı ile bellek tasarrufu) |
| Feed-Forward ($d_{ff}$) | 4096 | SwiGLU ara katman genişliği |
| Bağlam Uzunluğu (Context) | 2048 tokens | Pretraining & SFT sekans penceresi |
| Kelime Dağarcığı (Vocab) | 64.000 | Özel Türkçe Byte-Level BPE |
| Pozisyonel Kodlama | RoPE ($\theta = 10000.0$) | Rotary Position Embedding |
| Normalizasyon | RMSNorm ($\epsilon = 10^{-5}$) | Root Mean Square Layer Norm |
| Weight Tying | Aktif | Giriş embedding ile LM head ağırlıkları bağlı |
🔬 Eğitim Detayları
flowchart LR
A["Türkçe Vikipedi<br>1.3B+ Tokens"] --> B["Bölüm 1: Base Pretraining<br>(train_base.py)<br>A100 GPU | 5.000 Adım"]
B --> C["Base Model (v10.0_turbo)<br>Eval Loss: 3.166 | PPL: 23.71"]
C --> D["Bölüm 2: SFT Instruction Tuning<br>(train_sft.py)<br>103K Talimat Çifti"]
D --> E["TURKLM 443M SFT (v10.2 Champion)<br>Eval Loss: 2.820 | PPL: 16.78"]
1. Ön Eğitim (Base Pretraining - v10.0)
- Veri Kümesi:
umarbutun/turkish-text-corpusve temizlenmiş Türkçe Vikipedi (2048'lik bloklar halinde paketlenmiş). - Optimizasyon: AdamW (LR: $2.5 \times 10^{-4}$, Linear Warmup: 2000 adım, Cosine Decay).
- Bellek ve Hız: Liger Kernel Fused Linear CrossEntropy + SwiGLU + RoPE.
- Sonuç: Eval Loss: 3.166, Perplexity: 23.71.
2. Talimat İnce Ayarı (SFT Alignment - v10.2 Champion)
- Veri Kümesi:
merve/turkish_instructions(51K) +turkish-alpaca(52K) = 103.000 talimat. - Loss Maskeleme: Sadece asistan yanıtları üzerinde gradyan hesaplandı (Assistant-only loss masking,
label_pad_token_id = -100). - Optimizasyon: AdamW (LR: $1.0 \times 10^{-4}$, Epoch: 3, Efektif Batch: 120).
- Sonuç: Eval Loss: 2.820, Perplexity: 16.78 (Base modele kıyasla şaşkınlık yarı yarıya azaldı).
📊 Benchmark ve Değerlendirme
Model kaydedildiği anda 5 temel soru ile test edilmiş ve gerçek çıktıları kaydedilmiştir:
[Soru 1]
Kullanıcı: Türkiye'nin başkenti neresi?
Asistan: Türkiye'nin başkenti Ankara'dır.
Durum: Doğru [Geçti]
[Soru 2]
Kullanıcı: Güneş Sistemi'nin en büyük gezegeni hangisi?
Asistan: Jüpiter, Güneş Sistemindeki en büyük gezegendir.
Durum: Doğru [Geçti]
[Soru 3]
Kullanıcı: Suyun kimyasal formülü nedir?
Asistan: Suyun kimyasal formülü CO2'dir.
Durum: Halüsinasyon [Kaldı] (Ön eğitim veri hacmi sınırı)
[Soru 4]
Kullanıcı: Mustafa Kemal Atatürk kimdir?
Asistan: İstanbul, Türkiye'de bulunan bir devlet üniversitesidir.
Durum: Halüsinasyon [Kaldı] (Kavram karışması)
[Soru 5]
Kullanıcı: Python'da liste nasıl ters çevrilir?
Asistan: Python'daki liste, her bir öğeyi sırayla tek tek ve her öğe için bir kez oluşturur...
Durum: Kısmi [Kısmi]
Mühendislik Analizi
443M parametreli kompakt bir model olarak TURKLM; Türkçe morfolojik kuralları, soru-cevap formatını ve sık geçen olgusal bilgileri (Ankara, Jüpiter) başarıyla kavramıştır. Ancak yalnızca ~1.3B token ile ön eğitildiği için derin ansiklopedik veya biyografik konularda halüsinasyon görebilmektedir. Bu durum mimari bir hatadan değil, parametre ölçeği ve ön eğitim veri hacminden kaynaklanmaktadır.
⚠️ Sınırlamalar ve Kullanım Uyarısı
- Bu model akademik araştırma, açık kaynak Türkçe NLP geliştirme ve prototipleme amaçlıdır.
- Medikal, finansal veya hukuki tavsiye amacıyla kullanılamaz.
- Yüksek doğruluk gerektiren üretim sistemlerinde RAG (Retrieval-Augmented Generation) mimarisiyle birlikte kullanılması önerilir.
📄 Kaynak Kod ve Lisans
Eğitimin tüm kaynak kodları, veri ön işleme scriptleri ve eğitim günlükleri GitHub reposunda mevcuttur:
👉 github.com/ArdaAydogdu1453/turklm-443m-sft
Lisans: Apache 2.0
✍️ Alıntı (Citation)
@misc{aydogdu2026turklm,
author = {Arda Aydoğdu},
title = {TURKLM: A 443M Turkish Language Model Built and Audited From Scratch},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/ArdaAydogdu/turklm-443m-sft}}
}