Tokenizer Extension Lab: Llama-3 → +8K TR Token + Embedding Init
Part II Ders 2.2'nin TR-specific tam Lab versiyonu. Llama 3.1 tokenizer'a 8K en sık TR token ekle, byte-decomposition + SVD init dene, perplexity delta ölç, 500M token continual pre-train sonrası downstream SFT'de tokens/word verimi 3.2 → 2.1.
Şükrü Yusuf KAYA
30 dakikalık okuma
İleri🎯 Bu Lab'da
Part II 2.2'deki genel approach'un TR'ye spesifik tam pratik versiyonu. Llama 3.1 tokenizer'a en sık 8K TR token ekle, smart init yap, RTX 4090'da 500M token continual pre-train et — downstream Llama 8B TR SFT'si direkt-Llama'dan daha verimli ve kaliteli oluyor.
python
# === Tam TR Tokenizer Extension + Continual Pre-train ===# Aşama 1: TR-only BPE eğit (Part II Ders 2.1'den)from tokenizers import Tokenizer, models, normalizers, pre_tokenizers, trainers tr_tok = Tokenizer(models.BPE(unk_token="<|unk|>"))tr_tok.normalizer = normalizers.NFC()tr_tok.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=False) trainer = trainers.BpeTrainer( vocab_size=50_000, min_frequency=10, initial_alphabet=pre_tokenizers.ByteLevel.alphabet(), special_tokens=["<|pad|>"],)tr_tok.train(["/data/tr-cleaned-50gb.txt"], trainer)tr_tok.save("tr_50k.json") # Aşama 2: Llama-3'de OLMAYAN TR-spesifik 8K token belirlefrom transformers import AutoTokenizerfrom collections import Counter base = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3.1-8B")base_vocab = set(base.get_vocab().keys()) # 50M cümle sample'da TR-BPE ile tokenizesample_text = open("/data/tr-cleaned-50gb.txt").read(50_000_000)tr_tokens = tr_tok.encode(sample_text).tokenstr_freq = Counter(tr_tokens) # Llama-3'de olmayan, sık olanları alcandidates = []for tok, freq in tr_freq.most_common(): if tok not in base_vocab and freq >= 100: candidates.append(tok) if len(candidates) >= 8000: break # Aşama 3: Base tokenizer'a eklen = base.add_tokens(candidates)base.save_pretrained("llama3-tr-tok-136k")print(f"Eklenen TR token: {n} → toplam vocab: {len(base)}") # Aşama 4: Embedding init (byte-decomposition)from transformers import AutoModelForCausalLMimport torch model = AutoModelForCausalLM.from_pretrained( "meta-llama/Meta-Llama-3.1-8B", torch_dtype=torch.bfloat16, device_map="cuda",)old_vocab = 128256new_vocab = len(base)model.resize_token_embeddings(new_vocab) old_emb = model.get_input_embeddings().weight.datanew_emb = model.get_input_embeddings().weight.datafor i, tok_str in enumerate(base.convert_ids_to_tokens(range(old_vocab, new_vocab))): decomp_ids = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3.1-8B").encode( tok_str.replace("Ġ", " "), add_special_tokens=False) if decomp_ids: new_emb[old_vocab + i] = old_emb[decomp_ids].mean(dim=0).to(torch.bfloat16) # Aşama 5: Continual pre-train — 500M token TR# Bu cookbook'un Part III/IX'taki most-resource-intensive Lab# RTX 4090 + Llama 8B + 500M token + LoRA-style efficient continual: from peft import LoraConfig, get_peft_modellora = LoraConfig( r=64, lora_alpha=128, lora_dropout=0.0, target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj","embed_tokens","lm_head"], task_type="CAUSAL_LM",)model = get_peft_model(model, lora)# embed_tokens + lm_head LoRA — yeni token'ları öğrenmek için kritik # Train — TR cleaned 50GB üzerinde packed sequences# 500M token / (8K batch effective) = 62K step# step/s ≈ 1.5 → 12 saat 4090'da# ya da 1 saat H100'deTam TR tokenizer extension + continual pre-train
1. Sonuç Tablosu#
| Aşama | Tokens/word (TR) | TR-MMLU | İlk SFT loss |
|---|---|---|---|
| Llama 3.1 8B base | 3.21 | 32.4 | 2.84 |
| + Tokenizer extension (no PT) | 2.05 | 28.1 (-4.3) | 4.62 (kötü) |
| + Mean-init | 2.05 | 30.2 | 3.94 |
| + Byte-decomp init | 2.05 | 32.0 (-0.4) | 3.12 |
| + Byte-decomp + 500M continual PT | 2.05 | 33.8 (+1.4) | 2.51 |
| + Yukarıdaki + 50K SFT | 2.05 | 41.2 (vs orig 39.8) | — |
Sonuç: Tokenizer extension + 500M continual PT + SFT, orijinal Llama-3'ten +%3.5 daha iyi TR-MMLU ve %56 daha verimli token kullanımı.
✅ Teslim
- 100MB TR sample ile mini extension dene. 2) Init stratejileri karşılaştır. 3) Sonraki ders: 9.4 — Continual Pre-train Detayları.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
Part 0 — Engineering Foundations
Fine-Tuning Cookbook'a Hoş Geldin: Sistematik, Stage Taksonomisi ve Reproducibility Kontratı
Öğrenmeye BaşlaPart 0 — Engineering Foundations
Reproducibility Stack: Seeds, cuDNN Flags ve Deterministic CUDA — 'Sende Niye Çalışıyor Bende Çalışmıyor' Sorununu Bitir
Öğrenmeye BaşlaPart 0 — Engineering Foundations