Beyond Prompt Count: How Data Shapes Transfer in On-Policy Distillation
Paper • 2609.37377 • Published
How to use wyy1112/OPD-Models with Transformers:
# Use a pipeline as a high-level helper
from transformers import pipeline
pipe = pipeline("text-generation", model="wyy1112/OPD-Models") # pip install -U transformers accelerate
# Load model directly
from transformers import AutoModel
model = AutoModel.from_pretrained("wyy1112/OPD-Models", device_map="auto")How to use wyy1112/OPD-Models with vLLM:
# Install vLLM from pip:
pip install vllm
# Start the vLLM server:
vllm serve "wyy1112/OPD-Models"
# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:8000/v1/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "wyy1112/OPD-Models",
"prompt": "Once upon a time,",
"max_tokens": 512,
"temperature": 0.5
}'docker model run hf.co/wyy1112/OPD-Models
How to use wyy1112/OPD-Models with SGLang:
# Install SGLang from pip:
pip install sglang
# Start the SGLang server:
python3 -m sglang.launch_server \
--model-path "wyy1112/OPD-Models" \
--host 0.0.0.0 \
--port 30000
# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:30000/v1/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "wyy1112/OPD-Models",
"prompt": "Once upon a time,",
"max_tokens": 512,
"temperature": 0.5
}'docker run --gpus all \
--shm-size 32g \
-p 30000:30000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HF_TOKEN=<secret>" \
--ipc=host \
lmsysorg/sglang:latest \
python3 -m sglang.launch_server \
--model-path "wyy1112/OPD-Models" \
--host 0.0.0.0 \
--port 30000
# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:30000/v1/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "wyy1112/OPD-Models",
"prompt": "Once upon a time,",
"max_tokens": 512,
"temperature": 0.5
}'How to use wyy1112/OPD-Models with Docker Model Runner:
docker model run hf.co/wyy1112/OPD-Models
Paper: Beyond Prompt Count: How Data Shapes Transfer in On-Policy Distillation
Code: github.com/wyy-1112/dissecting-opd
Checkpoints trained for the on-policy distillation (OPD) experiments of our paper. All other teachers and students used in the paper are public Hub checkpoints. Each model lives in its own subfolder:
| Subfolder | Role in OPD | Init | Training | Weights |
|---|---|---|---|---|
math_grpo500_qwen3_4b |
teacher of Qwen/Qwen3-4B |
Qwen/Qwen3-4B |
GRPO, 500 steps × 128 prompts × 8 samples, lr 1e-6, on DeepMath-103K difficulty ≥ 6 (57,046 problems); reward: last \boxed{} checked with math-verify |
BF16 |
code_grpo300_qwen3_4b |
teacher of Qwen/Qwen3-4B |
Qwen/Qwen3-4B |
GRPO, 300 steps × 128 × 8, lr 1e-6, on Eurus-2-RL-Data code problems with stdio tests (22,618); reward: 1 if all tests pass | BF16 |
qwen3_1p7b_base_sft554 |
student of code_grpo400_qwen3_1p7b |
Qwen/Qwen3-1.7B-Base (+ chat template) |
direct-code SFT, 1 epoch, lr 3e-6, step 554 | FP32 (as used in training) |
code_grpo400_qwen3_1p7b |
teacher of qwen3_1p7b_base_sft554 |
qwen3_1p7b_base_sft554 |
GRPO, 400 steps × 128 × 8, lr 5e-7, on open-r1/verifiable-coding-problems-python (6,519); reward: fraction of (≤ 10) tests passed | BF16 |
The two Qwen3-4B teachers were trained and used with enable_thinking=False.
from transformers import AutoModelForCausalLM, AutoTokenizer
repo = "wyy1112/OPD-Models"
sub = "math_grpo500_qwen3_4b"
tok = AutoTokenizer.from_pretrained(repo, subfolder=sub)
model = AutoModelForCausalLM.from_pretrained(repo, subfolder=sub, torch_dtype="auto")
To download a single model for vLLM / verl:
hf download wyy1112/OPD-Models --include "math_grpo500_qwen3_4b/*" --local-dir OPD-Models
Base model
Qwen/Qwen3-1.7B-Base