Views
No views yet
Qwen/Qwen3-1.7B-Base on POLARIS-Project/Polaris-Dataset-53K. Released as part of an ICML-2026 study on the low-rank structure of SGD vs Adam RL updates for batched-LoRA inference.ΔW = W_ft − W_base between SGD-trained and Adam-trained RL fine-tunes. Existing open RL FTs (POLARIS, Skywork-OR1, DeepCoder, AceReason, ORZ, DAPO) are all Adam-trained; we needed a same-base same-recipe SGD counterpart. POLARIS-1.7B-Preview is the upstream Adam-trained reference for this exact base + dataset combination — diff this model's ΔW against POLARIS-1.7B-Preview's ΔW for the head-to-head SGD-vs-Adam compressibility comparison.| field | value |
|---|---|
| base model | Qwen/Qwen3-1.7B-Base |
| dataset | POLARIS-Project/Polaris-Dataset-53K (52,779 train / 512 val) |
| algorithm | GRPO (adv_estimator=grpo, use_kl_loss=False, entropy_coeff=0, use_kl_in_reward=False) |
| optimizer | PLAIN SGD — momentum=0.0, nesterov=false, dampening=0.0, weight_decay=0.0 |
| learning rate | 1e-1 (constant) |
| train batch size | 128 (1 grad step per rollout batch) |
| ppo_micro_batch_size_per_gpu | 4 |
| rollout.n | 4 |
| rollout.temperature | 1.0 |
| max_prompt_length | 1024 |
| max_response_length | 8192 |
| epochs at this checkpoint | ~0.73 (step 300 / 412 per epoch) |
| hardware | 4× B200 (179 GB) |
| step time | ~65 s/step |
| trainer | verl (FSDP + vLLM rollout) |
lr=1e-2: gradient signal too weak — stalled.lr=2e-1: catastrophic policy collapse (response_length → 8192 cap, rewards pinned at -1).lr=1: instant collapse from step 1.lr=1e-1 ← this run: stable-but-slow regime where val acc actually rose from 0.| metric | value |
|---|---|
| baseline val acc (step 0) | 0.0% |
| val acc at this ckpt (step 300) | 14.29% ← peak across the run |
| val acc at step 550 | 13.7% |
| val acc at step 700 | 2.7% |
| val acc at step 1500+ | 0% (collapsed) |
Sinestro38/qwen3-1p7b-sgd-polaris-step1550-final.1from transformers import AutoModelForCausalLM, AutoTokenizer
2import torch
3
4m = AutoModelForCausalLM.from_pretrained(
5 "Sinestro38/qwen3-1p7b-sgd-polaris-step300-best-val",
6 torch_dtype=torch.bfloat16,
7 device_map="cuda",
8)
9tok = AutoTokenizer.from_pretrained("Sinestro38/qwen3-1p7b-sgd-polaris-step300-best-val")
10
11# Math problems work best with the boxed-answer suffix
12prompt = "Find all integer solutions to x^2 + y^2 = 25. Let's think step by step and output the final answer within \\boxed{}."
13msgs = [{"role": "user", "content": prompt}]
14ids = tok.apply_chat_template(msgs, tokenize=True, add_generation_prompt=True, return_tensors="pt").to("cuda")
15out = m.generate(ids, max_new_tokens=2048, do_sample=True, temperature=0.6)
16print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True))\boxed{} but the base learned to emit "Answer:" patterns that score correctly).Sinestro38/qwen3-1p7b-sgd-polaris-step1550-final — same run, final (collapsed) checkpointSinestro38/dsr1-qwen7b-sgd-polaris-step100-best-val — same recipe, scaled to 7B with DS-R1-Distill baseSinestro38/dsr1-qwen7b-sgd-polaris-step412-final — 7B final