| # Referans kod — `hrsvrn/mamba3-norm-free` |
|
|
| Kaynak: https://github.com/hrsvrn/mamba3-norm-free (normalisation-free Mamba-3 projesi, "lossfun"). |
| HF modelleri: `hrsvrn/mamba3-180m-finewebedu-10B` (+ dypower-p1, dylinear varyantları). |
| İndirilme: 2026-06-04. Bu klasör, kendi 180M EN+TR modelimizi kurarken **temel alacağımız** dosyalar. |
|
|
| ## Bu klasördeki dosyalar |
|
|
| | Dosya | Repo yolu | Ne işe yarar | |
| |---|---|---| |
| | `model.py` | `pretraining/model.py` | **Model assembly** — `Mamba3LM` + `build_model_from_config`. Mamba3 mixer'ı prenorm Llama-stack'e bağlar. **Bizim v1 model iskeletimiz.** | |
| | `mamba3_minimal.py` | `mamba3-minimal/mamba3.py` | **Saf-PyTorch tek-dosya Mamba-3** (Triton GEREKMEZ; CPU/MPS/CUDA). SISO+MIMO, chunked SSD, inference cache. **Yerel smoke test + anlama + tam kontrol için ideal.** | |
| | `train_180m.py` | `pretraining/train_180m.py` | **Komple eğitim harness'i**: cosine/linear/constant LR, AdamW param grupları, `HubPusher` (async HF push), `--resume`, DDP, torch.compile. Bizim Faz 3 altyapımızın çoğu burada hazır. | |
| | `mamba3_180m.yaml` | `pretraining/configs/mamba3_180m.yaml` | 180M SISO config + **param muhasebesi yorumları**. | |
| | `tokenizer.py` | `src/nfmamba/data/tokenizer.py` | HF AutoTokenizer wrapper (onlar gpt2/Llama-3.1). Biz kendi 48K EN+TR SentencePiece'imizi aynı arayüzle saracağız. | |
|
|
| ## İki çalışan kod yolu (kritik — #1 riskimiz kapandı) |
|
|
| 1. **`mamba-og/` fork** (repo'da; buraya indirilmedi, ~96 dosya): resmi `state-spaces/mamba`'nın **Mamba-3 eklenmiş fork'u**. `mamba_ssm/modules/mamba3.py` + Triton (`ops/triton/mamba3/`: siso_fwd/bwd/step) + cute + tilelang (MIMO) kernelleri + `mha.py` (attention!). **Hızlı, Colab/CUDA için.** `model.py` bunu `sys.path`'e ekleyip `from mamba_ssm.modules.mamba3 import Mamba3` ile kullanıyor → yani pip paketi değil, **vendored fork**. |
| 2. **`mamba3_minimal.py`**: tek dosya, saf PyTorch, taşınabilir. Yavaş ama her yerde çalışır. **Önce bununla anla + yerel smoke; sonra Colab'da fork'un Triton kernel'ine geç.** |
| |
| ## Doğrulanan 180M param muhasebesi (config yorumundan) |
| |
| Mamba-2 "125M" scaling-law şekli, 128K Llama vocab ile ~185M'e şişirilmiş: |
| - embedding (tied): **98.5M** ← 128256 × 768 |
| - 12 × mixer: ~45M (≈3.75M/mixer; in_proj 768×3352 + out_proj 1536×768 + BCNorm/bias) |
| - 12 × SwiGLU MLP: ~41.5M (≈3.46M/MLP; 3×768×1500) |
| - norm'lar: ~0.04M |
| - **Toplam ~185M; ama embedding %53!** Gerçek sequence-mixing yalnız ~86M. |
| - d_inner=1536 (expand2×768), n_heads=24 (1536/64), ngroups=1, d_state=128, head_dim=64. |
| |
| ## Bizim 180M EN+TR'ye uyarlama (somut) |
| |
| 1. **vocab 128256 → 48000** (EN+TR SentencePiece). embedding 98.5M → **~36.9M**. Kurtulan ~62M'i gerçek modele ver. |
| 2. **Derinliği artır:** ~7.2M/katman (mixer+MLP). 180M hedefi için 37M embed + ~143M katman → **~20 katman** (onların 12'sine karşı; ~1.7× daha fazla mixing kapasitesi). Param-sayım `Mamba3LM.num_params()` ile doğrula. |
| 3. **GQA 5:1 hibrit ekle:** `model.py:_build_block`'ta her 6. katmanın `mixer_cls`'ini `Mamba3` yerine fork'un `mamba_ssm/modules/mha.py`'sindeki MHA (GQA destekli) yap. İlk/son katman Mamba kalsın. |
| 4. **v1 = SISO** (`is_mimo=false`), kanıtlanmış baseline. **v1.5 = MIMO** (`is_mimo=true, mimo_rank=4` — sadece config flag). |
| 5. **Tokenizer:** `tokenizer.py` arayüzünü koru, AutoTokenizer yerine kendi 48K SentencePiece'imizi yükle. |
| 6. **Eğitim:** `train_180m.py`'yi kullan; cosine yerine WSD için `constant`(stable) + `linear`(decay) parçalarını birleştir (zaten var). `HubPusher` = bizim async HF push'umuz. `--resume` = Colab session resume. |
| 7. **Veri:** onların `pretraining/data.py` + `src/nfmamba/data/` (packing, dataloader) HF streaming; biz EN=FineWeb-Edu + TR=FineWeb2-HQ mixture ekleyeceğiz. |
|
|
| ## Kullanamayacağımız |
| - **Ağırlıklar (warm-start):** vocab/dil farklı + İngilizce-only. Reçeteyi/kodu kopyalıyoruz, ağırlığı değil. |
| - **`dypower`/`dylinear`/DyT vb. stabilizer'lar:** tezlerinin ablasyonu (BCNorm-free); biz baseline `bcnorm=true` ile başlıyoruz. |
|
|