SeanWang0027/opd_polaris_15K_qwen3-4b_from_qwen3-30b-a3b_topk16_bf16_epoch_1
opdpolaris15Kqwen3-4bfromqwen3-30b-a3btopk16bf16epoch_1
On-Policy Distillation. Qwen3-4B trained against top-16 logprobs from Qwen3-30B-A3B-Thinking-2507, which scores and never generates: it runs one forward pass over what the student already wrote and reads the teacher's distribution at the states the student visited.
There is no teacher server and no GPU split — the teacher is a reward-model worker in the same Ray cluster, sharing every GPU with the actor.
Configuration
Code: `cl-from-nothing/online-rose` docs/POLARIS_OPD_QWEN3_30B_A3B_TEACHER.md.
The dtype deviation
The document specifies fp32 (upstream OPD's default). This run is bf16. It is not a preference: the teacher's weights are materialised in full host RAM on the coordinate-0 rank before FSDP shards them, and 30.53B × 4 B = 122 GB does not fit in a Vista node's 117.7 GiB of real Grace DRAM — the run is killed by the OOM killer, not by a CUDA error. The launcher's own header prescribes exactly this remedy below ~200 GB of node RAM. bf16 halves the teacher to 61 GB, which fits.
Nothing here is comparable to an fp32 OPD number.
What the run measured
The paper's condition (i) holds, and this is the part worth having. The doc states that whether a 3.4B-active MoE shares thinking patterns with a 4B student "has not been measured by anyone". It was measured here, across all 240 steps:
99.8% of the probability mass sits on the shared token set, steadily, for the whole run — above the 97–99% the paper reports for successful OPD. overlap_ratio drifts from 0.694 to 0.673, i.e. the top-16 sets overlap slightly less by the end, but the mass does not move: the disagreement is confined to tokens carrying almost no probability.
The student barely moved. Measured against Qwen/Qwen3-4B:
For context, two ROSE runs on the same corpus and cluster, also bf16 but at lr 1e-5, moved 12.3% and 15.5% of their parameters. This run used lr 1e-6. A single AdamW step at 1e-6 is roughly 40× smaller than a bf16 half-ULP at |w| ≈ 0.02 (~3.9e-5), so most weights cannot represent the update at all. That is a consistent reading of three runs, not a controlled experiment — the students, teachers and objectives all differ, and no fp32 arm has been run.
No downstream evaluation has been run on this checkpoint or on the base model.
Treat this as a reproduction artifact of the training run and a measurement of OPD's condition (i) with a MoE teacher — not a model claimed to be better than Qwen/Qwen3-4B.
Usage
from transformers import AutoModelForCausalLM, AutoTokenizer
mid = "SeanWang0027/opd_polaris_15K_qwen3-4b_from_qwen3-30b-a3b_topk16_bf16_epoch_1"
tok = AutoTokenizer.from_pretrained(mid)
model = AutoModelForCausalLM.from_pretrained(mid, dtype="bfloat16", device_map="auto")