AlexWortega's picture
Upload TASK.md with huggingface_hub
ed8e81d verified

TASK — 100M-active MoE, from scratch, physics-sim next-frame prediction, custom minimal vocab

Train a Qwen3-style sparse-MoE LM from scratch on the physics-simulation next-frame-prediction corpus, using a custom minimal tokenizer whose vocab contains only the tokens needed to emit the simulation text (digits, punctuation, structural keywords). Target ~100M active params.

Scaffold

  • Model/trainer: github.com/AlexWortega/moe-200m-qwen3-100b- (Qwen3-MoE: GQA + partial RoPE
    • QK-Norm + RMSNorm, aux-loss-free sigmoid bias router, 1 shared + N routed top-2 SwiGLU experts, tied embed/lm_head, Liger fused-CE, Muon optimizer). MoEModelConfig in model.py.
  • Sibling 100M config exists: moe-100m-volta-week (good sizing reference).

Data (HF Hub, from the physics-llm project)

  • AlexWortega/physics-scenarios-raw, AlexWortega/physics-scenarios-packed (~900K scenes, 30 types, 24 train / 6 held-out). Format = the LFM2 serialization (Scene/Gravity/Frame/obj_...).

Key requirement — custom vocab

Vocab = ONLY simulation tokens (tens–low-hundreds). With tied embeddings, shrinking vocab from 151,936 → ~100 frees ~97M embedding params, so the whole ~100M budget goes to the MoE/dynamics (vs the 350M LFM2 whose huge vocab embeddings ate the budget). Drop free-text Scene/Frame descriptions (not needed for physics); keep Type as a categorical token.

Success metric

Pymunk position error as % of scene diagonal (same as LFM2 baseline), via the existing harness at /Users/aleksandrnikolich/Desktop/vae_llm/physics_blog/bench (physics_core.rollout). Baseline to beat: LFM2-350M bf16 — @15f trained 0.38% / held-out 0.93%; orbit 0.75% @80f.

High-impact unknowns -> Clarify

  • experiment budget (GPU-h / wall-clock) - GPU choice (eva02 A6000 vs eva01 4xV100)
  • tokenizer/number encoding (char-level vs tiny-BPE) [genuine 2-path fork]