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 assemblyMamba3LM + 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.