kdirgul's picture
referans_kod Colab için
ad9632f verified
|
Raw
History Blame Contribute Delete
4.07 kB
# 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.