Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
243 commits
Select commit Hold shift + click to select a range
03abedb
Move padding
JacobHelwig Jan 17, 2026
8017175
Prompt lens
JacobHelwig Jan 17, 2026
2565b75
Tests
JacobHelwig Jan 15, 2026
3664c9c
Multiple 3D tensors test
JacobHelwig Jan 15, 2026
34f24b9
Merge tests
JacobHelwig Jan 15, 2026
bd02255
init
JacobHelwig Jan 12, 2026
a472528
Init debug script
JacobHelwig Jan 12, 2026
2e8d897
Plan
JacobHelwig Jan 13, 2026
51345a1
Add top-k log probs
JacobHelwig Jan 14, 2026
acf9efb
Stage-wise top-k
JacobHelwig Jan 15, 2026
a820f93
Distillation cfg
JacobHelwig Jan 16, 2026
924e276
Distillation losses
JacobHelwig Jan 16, 2026
7e11cd7
Re-factor distillation
JacobHelwig Jan 16, 2026
501ea0f
RM unused
JacobHelwig Jan 17, 2026
4c82890
Working: Add full JSD/KL, rm FSDP cfg, routing by distillation loss type
JacobHelwig Jan 17, 2026
782babb
rm example
JacobHelwig Jan 17, 2026
871feaf
dp distillation cfg
JacobHelwig Jan 17, 2026
b13474e
Fix clamping
JacobHelwig Jan 17, 2026
3b818c1
Enable ref w distillation
JacobHelwig Jan 18, 2026
ad88cc7
Teacher model cfg
JacobHelwig Jan 18, 2026
af8f3a8
Legacy distillation
JacobHelwig Jan 18, 2026
f1019a9
Distillation cfg to actor_rollout_ref
JacobHelwig Jan 18, 2026
6fb69e6
Clamping and pass distillation cfg instead of actor
JacobHelwig Jan 18, 2026
fcc0c48
Ruff
JacobHelwig Jan 18, 2026
08bc6e2
Distillation training script
JacobHelwig Jan 18, 2026
17d7b5a
Update train script
JacobHelwig Jan 18, 2026
270c801
Decouple distillation and ref configs
JacobHelwig Jan 18, 2026
a14714e
Distillation cfg validation
JacobHelwig Jan 18, 2026
b3c3114
Loss settings in cfg
JacobHelwig Jan 18, 2026
18501ba
Use estimator
JacobHelwig Jan 18, 2026
b0dc7f1
Distillation_config->distillation
JacobHelwig Jan 18, 2026
c468dd9
Distillatoin loss signatures
JacobHelwig Jan 18, 2026
8a69d17
Running w no rm pad
JacobHelwig Jan 18, 2026
541e5a5
Ulysses working
JacobHelwig Jan 18, 2026
14d16d1
SP in script
JacobHelwig Jan 18, 2026
34664b6
Log eps
JacobHelwig Jan 18, 2026
c8451a9
Add distillation tests
JacobHelwig Jan 18, 2026
523c885
Reduce tests
JacobHelwig Jan 18, 2026
463a791
Doc strings
JacobHelwig Jan 18, 2026
fbbdca6
Ruff
JacobHelwig Jan 18, 2026
d5a29de
Not implemented
JacobHelwig Jan 18, 2026
5b4ea67
Clamp
JacobHelwig Jan 19, 2026
32c42a2
Divergence note
JacobHelwig Jan 19, 2026
23d5923
take abs and distillation loss inputs
JacobHelwig Jan 19, 2026
4953ece
Take abs in name
JacobHelwig Jan 19, 2026
e4d8eed
loss fix
JacobHelwig Jan 19, 2026
e0b5c51
null
JacobHelwig Jan 19, 2026
7c91180
Take abs fix
JacobHelwig Jan 19, 2026
e69a9a2
RM blank lines
JacobHelwig Jan 19, 2026
e445038
Long line and generate cfg
JacobHelwig Jan 19, 2026
f408f09
rl dataset
JacobHelwig Jan 19, 2026
29322c5
rm TODO
JacobHelwig Jan 19, 2026
69d9323
CI fixes
JacobHelwig Jan 19, 2026
15b56a5
PC
JacobHelwig Jan 19, 2026
8984a2a
None cfg
JacobHelwig Jan 19, 2026
63f77f0
Distillation
JacobHelwig Jan 19, 2026
99fb0e6
cfg to test
JacobHelwig Jan 19, 2026
30ac6fa
None config
JacobHelwig Jan 19, 2026
00e6faa
Dist cfg
JacobHelwig Jan 19, 2026
8e53ec7
Distillation enabled
JacobHelwig Jan 19, 2026
cc8cee2
Dist cfg test eng
JacobHelwig Jan 19, 2026
2913091
Update generated cfg
JacobHelwig Jan 19, 2026
cb447c3
Entropy bonus
JacobHelwig Jan 19, 2026
5855845
Types
JacobHelwig Jan 19, 2026
6f239b4
Generated PPO trainer
JacobHelwig Jan 26, 2026
8301e8b
RM take abs
JacobHelwig Jan 26, 2026
d9477f2
Only teacher topk in utils
JacobHelwig Jan 26, 2026
76b735e
Re-factor stages
JacobHelwig Jan 26, 2026
fa0fad1
FSDP losses
JacobHelwig Jan 27, 2026
c997d89
Update training config
JacobHelwig Jan 27, 2026
859125a
Ruff
JacobHelwig Jan 27, 2026
9f1de01
FSDP utils
JacobHelwig Jan 27, 2026
2fd4c05
Fix teacher logprobs for top-k
JacobHelwig Jan 27, 2026
bd6eca1
Doc string
JacobHelwig Jan 27, 2026
6e4999f
Distllation loss range
JacobHelwig Jan 27, 2026
7c03a58
Mask bug fix
JacobHelwig Jan 27, 2026
8b7f7f4
Disable clamp
JacobHelwig Jan 27, 2026
c559da1
Clamp distillation loss to 10
JacobHelwig Jan 27, 2026
f713c9d
Clamp probs
JacobHelwig Jan 27, 2026
f0c9cf9
log prob clamping
JacobHelwig Jan 28, 2026
fd0bbac
Clipping defaults
JacobHelwig Jan 28, 2026
e0c4b66
Script
JacobHelwig Jan 28, 2026
331e702
k3 fixes
JacobHelwig Jan 28, 2026
ac6aeb4
Loss settings doc string
JacobHelwig Jan 29, 2026
96d5746
Separate fields for log probs
JacobHelwig Jan 29, 2026
676360d
Policy loss default
JacobHelwig Jan 29, 2026
144a2fa
Generated config
JacobHelwig Jan 29, 2026
138f50c
Fix kld
JacobHelwig Jan 30, 2026
3daceb8
Generate cfg
JacobHelwig Feb 3, 2026
10962d2
mindspeed
JacobHelwig Feb 3, 2026
d5add9a
ms
JacobHelwig Feb 3, 2026
f4e8183
Padding util for multi-dimensional tensors
JacobHelwig Feb 4, 2026
d50009b
RM slicing
JacobHelwig Feb 4, 2026
77fb6a3
Ruff
JacobHelwig Feb 4, 2026
8159497
Multi-teacher configs
JacobHelwig Feb 2, 2026
9c746bb
Return teacher cfg by ID
JacobHelwig Feb 2, 2026
66cffab
Multi task knowledge acquisition
JacobHelwig Feb 2, 2026
9be692e
Training running
JacobHelwig Feb 2, 2026
de83df2
RM debugging device
JacobHelwig Feb 2, 2026
c5dba48
Domain sets
JacobHelwig Feb 3, 2026
9e3d218
Acquire knowledge in ray trainer
JacobHelwig Feb 3, 2026
9d0c5e8
Distillation loss config and refactor distillation loss
JacobHelwig Feb 4, 2026
3bbc9fe
Fix setting distillation loss settings
JacobHelwig Feb 4, 2026
a453898
Teacher pool
JacobHelwig Feb 4, 2026
769faed
PC
JacobHelwig Feb 14, 2026
9775865
Init teacher loop and teacher model
JacobHelwig Feb 15, 2026
099e4c3
init distillatoin model config
JacobHelwig Feb 15, 2026
3c19fea
Migrate distillation config
JacobHelwig Feb 15, 2026
153dde3
Re-org hydra distillation cfgs
JacobHelwig Feb 20, 2026
f14991c
Passing dist cfg
JacobHelwig Feb 21, 2026
59e03d1
Teacher model in servers and replica
JacobHelwig Feb 21, 2026
7304fe4
Rename dist cfg fields
JacobHelwig Feb 21, 2026
2f3b21c
Need teacher policy
JacobHelwig Feb 21, 2026
abf3743
Add rollout cfg
JacobHelwig Feb 21, 2026
7dda814
Walk back engine workers
JacobHelwig Feb 21, 2026
77f7bc0
RM dist cfg from validate
JacobHelwig Feb 22, 2026
9297913
Teacher model in roles
JacobHelwig Feb 22, 2026
10fffdb
RM extract distillation inputs
JacobHelwig Feb 22, 2026
a12cdc2
Update cfg yaml
JacobHelwig Feb 22, 2026
3561c29
Teacher resource pool in main ppo
JacobHelwig Feb 22, 2026
2b740b7
Reset config
JacobHelwig Feb 22, 2026
c6874fa
RM JSD
JacobHelwig Feb 22, 2026
6198ffd
Teacher loop working
JacobHelwig Feb 24, 2026
d56974f
RM use full
JacobHelwig Feb 24, 2026
51ca255
Align max_logprobs with topk
JacobHelwig Feb 24, 2026
8317dad
Teacher loop manager in trainer
JacobHelwig Feb 24, 2026
b41f8fa
Update distillation utils for teacher server
JacobHelwig Feb 25, 2026
9adf572
Only response ids and logprobs in teacher server
JacobHelwig Feb 25, 2026
3845b62
Working: pass actor cfg to dist loss
JacobHelwig Feb 25, 2026
27c6abd
RM JSD in cfg
JacobHelwig Feb 25, 2026
15c2f8f
Ruff
JacobHelwig Feb 25, 2026
b08b7b9
Sleep teachers
JacobHelwig Feb 25, 2026
2755b79
Add distillation PG
JacobHelwig Feb 26, 2026
853ded9
k1 metrics and clamping
JacobHelwig Feb 26, 2026
1abf21c
Fix comments
JacobHelwig Feb 26, 2026
8cffbad
Update generated cfg
JacobHelwig Feb 26, 2026
c97945d
Optional dist cfg to ActorRolloutRef worker
JacobHelwig Feb 26, 2026
3c5bbf6
Handle none distillation cfg in ppo loss
JacobHelwig Feb 26, 2026
b5722e5
Distillation enabled in main
JacobHelwig Feb 26, 2026
727c1ba
Missing stage
JacobHelwig Feb 26, 2026
36d18fa
Missing distillation cfg in main
JacobHelwig Feb 26, 2026
e96bd1b
Missing distillation cfg in ray_trainer
JacobHelwig Feb 26, 2026
ec474e9
Distillation enabled in veomni engine
JacobHelwig Feb 26, 2026
82c85a2
Update worker test for distillation
JacobHelwig Feb 26, 2026
d34d74b
Fix engine test
JacobHelwig Feb 26, 2026
8b7a8fd
Fix distillation cfg in engine test
JacobHelwig Feb 26, 2026
f4afa33
Fully async teacher loop worker handles
JacobHelwig Feb 26, 2026
2625090
Fix stage
JacobHelwig Feb 26, 2026
7df2e99
Update training script
JacobHelwig Feb 26, 2026
f7975eb
Update comment
JacobHelwig Mar 1, 2026
af2d4bf
Auto await
JacobHelwig Mar 1, 2026
a0eb621
Async teacher loop manager
JacobHelwig Mar 1, 2026
730c679
Prompt length in teacher inference cfg
JacobHelwig Mar 1, 2026
9ad0696
Max response length
JacobHelwig Mar 1, 2026
b324697
Add math trainer
JacobHelwig Mar 1, 2026
aa7a6a1
PC
JacobHelwig Mar 1, 2026
32eef50
Fused kernels
JacobHelwig Mar 2, 2026
44643c0
Update veomni
JacobHelwig Mar 2, 2026
33454ca
PC
JacobHelwig Mar 2, 2026
9c81299
RM math script
JacobHelwig Mar 2, 2026
c2c5170
PC
JacobHelwig Mar 7, 2026
e04e867
pre-commit
JacobHelwig Mar 13, 2026
105d693
add back MTP after rebase
JacobHelwig Mar 13, 2026
7d67767
Fix agent loop test
JacobHelwig Mar 13, 2026
9398c0e
Fix agent loop tests
JacobHelwig Mar 14, 2026
7115db2
Agent loop test
JacobHelwig Mar 14, 2026
339806c
rm stages
JacobHelwig Mar 14, 2026
5a2abbe
Rename
JacobHelwig Mar 15, 2026
8cfbd4e
RM teacher loop worker
JacobHelwig Mar 13, 2026
19f2151
Teacher logprobs in agent loop
JacobHelwig Mar 13, 2026
9bdd9df
Collapse teacher loop manager into teacher model manager
JacobHelwig Mar 13, 2026
80379ba
Fix estimator
JacobHelwig Mar 13, 2026
b5f9c66
Error message length
JacobHelwig Mar 13, 2026
8df5fff
PC
JacobHelwig Mar 13, 2026
cf800b1
geo3k OPD script
JacobHelwig Mar 13, 2026
0735f6f
temp
JacobHelwig Mar 14, 2026
d456874
Add script
JacobHelwig Mar 14, 2026
c8b5775
Temp in gen cfgs
JacobHelwig Mar 14, 2026
472c407
Dist enabled in agent loop
JacobHelwig Mar 14, 2026
6fb7817
rm comment
JacobHelwig Mar 14, 2026
8a074c7
Fix name
JacobHelwig Mar 16, 2026
9110927
Add back docstring and slice_responses to losses.py
JacobHelwig Mar 16, 2026
dd5c29a
Dist loss settings check
JacobHelwig Mar 16, 2026
4731490
RM extra comments
JacobHelwig Mar 16, 2026
7e73a0a
Teacher world size
JacobHelwig Mar 16, 2026
4408005
Use generate to compute logprobs
JacobHelwig Mar 17, 2026
c754a44
Re-factor prompt logprob extraction
JacobHelwig Mar 18, 2026
848de65
Max model len check
JacobHelwig Mar 18, 2026
3983861
Move padding
JacobHelwig Mar 18, 2026
14c6b07
Megatron script
JacobHelwig Jan 22, 2026
a7fec4c
Dist cfg
JacobHelwig Jan 22, 2026
b0e9e0c
megatron transformer impl
JacobHelwig Jan 29, 2026
46215cd
dev on megatron topk logprobs
JacobHelwig Jan 29, 2026
81e0f80
Init megatron losses
JacobHelwig Jan 29, 2026
fc81a2f
Update script
JacobHelwig Jan 30, 2026
252dea3
Compute top-k megatron
JacobHelwig Jan 30, 2026
b89f424
Working top-k megatron loss
JacobHelwig Jan 30, 2026
379faf6
VP SM
JacobHelwig Jan 30, 2026
86ece2b
VP SM in VP topk KL
JacobHelwig Jan 30, 2026
c7a58f6
Clean up script
JacobHelwig Jan 30, 2026
d702ef0
Comments and mass logging
JacobHelwig Jan 30, 2026
6788d08
Handle nested logits
JacobHelwig Jan 30, 2026
b7ba2a3
Correction to gradients of top-k KL loss
JacobHelwig Jan 30, 2026
0c52eb7
Working script
JacobHelwig Jan 30, 2026
0bd434b
Working script
JacobHelwig Jan 30, 2026
19e2c9d
Clamping
JacobHelwig Jan 31, 2026
a69b383
Fix the scatter add
JacobHelwig Jan 31, 2026
b7f1bda
Update comments
JacobHelwig Jan 31, 2026
7006e98
log softmax for stability
JacobHelwig Jan 31, 2026
a7e04e6
FSDP parity tests
JacobHelwig Jan 31, 2026
4e6d9c6
Workflow
JacobHelwig Jan 31, 2026
dcb721a
Ruff
JacobHelwig Jan 31, 2026
9a25b1f
TP in exp name
JacobHelwig Feb 1, 2026
66c5a2e
Train script
JacobHelwig Feb 1, 2026
44eee39
Generate megatron cfg
JacobHelwig Feb 1, 2026
d8d8919
Reset yaml cfg
JacobHelwig Mar 1, 2026
5d1b44e
vp softmax into losses
JacobHelwig Mar 1, 2026
35a58d1
Restore cfg
JacobHelwig Mar 1, 2026
c65efe4
Transformer impl
JacobHelwig Mar 1, 2026
506f3aa
Fix generated cfg
JacobHelwig Mar 1, 2026
71c598d
PC
JacobHelwig Mar 1, 2026
179a783
Working: megatron transformer impl
JacobHelwig Mar 1, 2026
b5a3ed6
Update script
JacobHelwig Mar 1, 2026
5e19899
Fix test
JacobHelwig Mar 1, 2026
65571ba
Restore datasets
JacobHelwig Mar 1, 2026
e3936dc
Update megatron script
JacobHelwig Mar 1, 2026
4aeeaa8
Working megatron
JacobHelwig Mar 1, 2026
0935b34
Enable fused kernels for mega distillation
JacobHelwig Mar 2, 2026
4726c66
[trainer] feat: support SP/CP for opd loss
wuxibin89 Mar 19, 2026
d34a538
right shift one token for vllm prompt_logprobs
wuxibin89 Mar 21, 2026
6ed0366
Merge pull request #1 from wuxibin89/wuxibin/opd_logit_processor
JacobHelwig Mar 21, 2026
0986d5f
extraction comment
JacobHelwig Mar 21, 2026
7239871
Server name prefix
JacobHelwig Mar 21, 2026
d220a3e
Response mask fixes
JacobHelwig Mar 21, 2026
9c4c5b6
Clean up scripts
JacobHelwig Mar 21, 2026
c133316
split in losses
JacobHelwig Mar 21, 2026
f5b03a0
Fix test
JacobHelwig Mar 21, 2026
80d27b2
Merge pull request #3 from JacobHelwig/jhelwig/megaOPD_fixes
JacobHelwig Mar 21, 2026
b0045eb
Merge remote-tracking branch 'origin/main' into jhelwig/megaOPD
JacobHelwig Mar 21, 2026
a0db345
Distillation enabled
JacobHelwig Mar 21, 2026
3446bfc
Distillation enabled in update actor
JacobHelwig Mar 21, 2026
59a8c8e
Revert engine test
JacobHelwig Mar 21, 2026
4fbcd2e
Distillation enabled in actor update
JacobHelwig Mar 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/gpu_unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,9 @@ jobs:
- name: Testing LinearCrossEntropyTP Correctness, Computation Time and Memory Consumption
run: |
LOW_MEMORY=True torchrun --standalone --nnodes=1 --nproc-per-node=8 tests/utils/test_special_linear_cross_entropy_tp.py
- name: Testing Megatron KL Loss TP Correctness
run: |
torchrun --standalone --nnodes=1 --nproc-per-node=2 tests/utils/test_special_megatron_kl_loss_tp.py
- name: Testing FSDP2 actor functionality
run: |
torchrun --standalone --nnodes=1 --nproc-per-node=2 tests/workers/actor/test_special_dp_actor.py
Expand Down
159 changes: 159 additions & 0 deletions examples/on_policy_distillation_trainer/run_qwen3_vl_geo3k.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
#!/usr/bin/env bash
set -xeuo pipefail

############################ Quick Config ############################

ROLLOUT_NAME="vllm" # sglang or vllm

FAMILY="Qwen"
STUDENT_MODEL=Qwen3-VL-2B-Instruct
TEACHER_MODEL=Qwen3-VL-4B-Instruct

# USE_POLICY_GRADIENT=False
# DISTILLATION_LOSS_MODE="k3"
# DISTILLATION_LOSS_MODE="forward_kl_topk"
# USE_FUSED_KERNELS=False

USE_POLICY_GRADIENT=True
DISTILLATION_LOSS_MODE="k1"
USE_FUSED_KERNELS=True

DISTILLATION_LOSS_MAX_CLAMP=10.0
DISTILLATION_LOG_PROB_MIN_CLAMP=-10.0

PROJECT_NAME='verl_on_policy_distillation_example_geo3k'

MAX_PROMPT=1024
MAX_RESPONSE_LENGTH=2048
MAX_NUM_TOKENS=$(( MAX_PROMPT + MAX_RESPONSE_LENGTH + 1 ))
TRAIN_PROMPT_BSZ=128
STUDENT_MICRO_BATCH_SIZE_PER_GPU=1
STUDENT_MAX_TOKEN_LEN_PER_GPU=$(( STUDENT_MICRO_BATCH_SIZE_PER_GPU * (MAX_PROMPT + MAX_RESPONSE_LENGTH) ))
USE_DYNAMIC_BSZ=False

STUDENT_WORLD_SIZE=4

TEACHER_RESOURCE_POOL=True
TEACHER_WORLD_SIZE=4

SP=1

EXP_NAME="fsdp/student-${STUDENT_MODEL}/teacher-${TEACHER_MODEL}/loss-${DISTILLATION_LOSS_MODE}/pg-${USE_POLICY_GRADIENT}"

ENFORCE_EAGER=False # true for faster debugging

############################ Paths ############################

geo3k_train_path=$DATA_PATH/geo3k/train.parquet
geo3k_test_path=$DATA_PATH/geo3k/test.parquet

TRAIN_FILES="['$geo3k_train_path']"
TEST_FILES="['$geo3k_test_path']"

############################ Parameter Groups ############################

DATA=(
data.train_files="$TRAIN_FILES"
data.val_files="$TEST_FILES"
data.max_prompt_length=$MAX_PROMPT
data.max_response_length=$MAX_RESPONSE_LENGTH
data.train_batch_size=$TRAIN_PROMPT_BSZ
data.filter_overlong_prompts=True
data.truncation='error'
data.shuffle=False
data.image_key=images
)

MODEL=(
actor_rollout_ref.model.path="${FAMILY}/${STUDENT_MODEL}"
actor_rollout_ref.model.enable_gradient_checkpointing=True
actor_rollout_ref.model.use_remove_padding=True
actor_rollout_ref.model.use_fused_kernels=$USE_FUSED_KERNELS
actor_rollout_ref.actor.use_torch_compile=True
actor_rollout_ref.rollout.enforce_eager=$ENFORCE_EAGER
)

DISTILLATION=(
distillation.enabled=True
distillation.num_workers=8
distillation.teacher_model.enable_resource_pool=$TEACHER_RESOURCE_POOL
distillation.teacher_model.n_gpus_per_node=$TEACHER_WORLD_SIZE
distillation.teacher_model.nnodes=1
distillation.teacher_model.model_path="${FAMILY}/${TEACHER_MODEL}"
distillation.teacher_model.inference.tensor_model_parallel_size=1
distillation.teacher_model.inference.name=$ROLLOUT_NAME
distillation.teacher_model.inference.gpu_memory_utilization=0.8
distillation.teacher_model.inference.enforce_eager=$ENFORCE_EAGER
distillation.teacher_model.inference.max_model_len=$MAX_NUM_TOKENS
distillation.teacher_model.inference.max_num_batched_tokens=$MAX_NUM_TOKENS
distillation.teacher_model.inference.max_num_seqs=$MAX_NUM_TOKENS
+distillation.teacher_model.inference.engine_kwargs.vllm.disable_mm_preprocessor_cache=True
distillation.distillation_loss.loss_mode=$DISTILLATION_LOSS_MODE
distillation.distillation_loss.topk=64
distillation.distillation_loss.use_task_rewards=False
distillation.distillation_loss.use_policy_gradient=$USE_POLICY_GRADIENT
distillation.distillation_loss.loss_max_clamp=$DISTILLATION_LOSS_MAX_CLAMP
distillation.distillation_loss.log_prob_min_clamp=$DISTILLATION_LOG_PROB_MIN_CLAMP
)

STUDENT=(
actor_rollout_ref.actor.optim.lr=1e-6
actor_rollout_ref.actor.ppo_mini_batch_size=$TRAIN_PROMPT_BSZ
actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=$STUDENT_MICRO_BATCH_SIZE_PER_GPU
actor_rollout_ref.actor.ppo_max_token_len_per_gpu=$STUDENT_MAX_TOKEN_LEN_PER_GPU
actor_rollout_ref.actor.use_dynamic_bsz=$USE_DYNAMIC_BSZ
actor_rollout_ref.actor.fsdp_config.param_offload=True
actor_rollout_ref.actor.fsdp_config.optimizer_offload=True
actor_rollout_ref.actor.ulysses_sequence_parallel_size=1
)

ROLLOUT=(
actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=$STUDENT_MICRO_BATCH_SIZE_PER_GPU
actor_rollout_ref.rollout.log_prob_max_token_len_per_gpu=$STUDENT_MAX_TOKEN_LEN_PER_GPU
actor_rollout_ref.rollout.log_prob_use_dynamic_bsz=$USE_DYNAMIC_BSZ
actor_rollout_ref.rollout.tensor_model_parallel_size=1
actor_rollout_ref.rollout.name=$ROLLOUT_NAME
actor_rollout_ref.rollout.gpu_memory_utilization=0.8
actor_rollout_ref.rollout.calculate_log_probs=False
actor_rollout_ref.rollout.max_model_len=$MAX_NUM_TOKENS
actor_rollout_ref.rollout.max_num_batched_tokens=$MAX_NUM_TOKENS
actor_rollout_ref.rollout.max_num_seqs=$MAX_NUM_TOKENS
actor_rollout_ref.rollout.n=1
+actor_rollout_ref.rollout.engine_kwargs.vllm.disable_mm_preprocessor_cache=True
)

ALGORITHM=(
algorithm.adv_estimator=grpo
algorithm.use_kl_in_reward=False
)

TRAINER=(
trainer.logger='["console","wandb"]'
trainer.project_name=$PROJECT_NAME
trainer.experiment_name=$EXP_NAME
trainer.n_gpus_per_node=$STUDENT_WORLD_SIZE
trainer.nnodes=1
trainer.save_freq=200
trainer.test_freq=5
trainer.total_epochs=15
trainer.val_before_train=True
trainer.use_legacy_worker_impl=disable
trainer.resume_mode=disable
trainer.log_val_generations=5
)



############################ Launch ############################

python3 -m verl.trainer.main_ppo \
--config-path=config \
--config-name='ppo_trainer.yaml' \
"${DATA[@]}" \
"${ALGORITHM[@]}" \
"${MODEL[@]}" \
"${DISTILLATION[@]}" \
"${ROLLOUT[@]}" \
"${STUDENT[@]}" \
"${TRAINER[@]}" \
"$@"
156 changes: 156 additions & 0 deletions examples/on_policy_distillation_trainer/run_qwen_gsm8k.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
#!/usr/bin/env bash
set -xeuo pipefail

############################ Quick Config ############################

ROLLOUT_NAME="vllm" # sglang or vllm

FAMILY="Qwen"
STUDENT_MODEL=Qwen2.5-0.5B
TEACHER_MODEL=Qwen2.5-0.5B

# USE_POLICY_GRADIENT=False
# DISTILLATION_LOSS_MODE="k3"
# DISTILLATION_LOSS_MODE="forward_kl_topk"
# USE_FUSED_KERNELS=False

USE_POLICY_GRADIENT=True
DISTILLATION_LOSS_MODE="k1"
USE_FUSED_KERNELS=False

DISTILLATION_LOSS_MAX_CLAMP=10.0
DISTILLATION_LOG_PROB_MIN_CLAMP=-10.0

PROJECT_NAME='verl_on_policy_distillation_example_gsm8k'

MAX_PROMPT=256
MAX_RESPONSE_LENGTH=512
MAX_NUM_TOKENS=$(( MAX_PROMPT + MAX_RESPONSE_LENGTH + 1 ))
TRAIN_PROMPT_BSZ=128
STUDENT_MICRO_BATCH_SIZE_PER_GPU=2
STUDENT_MAX_TOKEN_LEN_PER_GPU=$(( STUDENT_MICRO_BATCH_SIZE_PER_GPU * (MAX_PROMPT + MAX_RESPONSE_LENGTH) ))
USE_DYNAMIC_BSZ=True

STUDENT_WORLD_SIZE=2

TEACHER_RESOURCE_POOL=False
TEACHER_WORLD_SIZE=4

SP=1

EXP_NAME="fsdp/student-${STUDENT_MODEL}/teacher-${TEACHER_MODEL}/loss-${DISTILLATION_LOSS_MODE}/pg-${USE_POLICY_GRADIENT}"

ENFORCE_EAGER=True # true for faster debugging

############################ Paths ############################

gsm8k_train_path=$DATA_PATH/gsm8k/train.parquet
gsm8k_test_path=$DATA_PATH/gsm8k/test.parquet

TRAIN_FILES="['$gsm8k_train_path']"
TEST_FILES="['$gsm8k_test_path']"

############################ Parameter Groups ############################

DATA=(
data.train_files="$TRAIN_FILES"
data.val_files="$TEST_FILES"
data.max_prompt_length=$MAX_PROMPT
data.max_response_length=$MAX_RESPONSE_LENGTH
data.train_batch_size=$TRAIN_PROMPT_BSZ
data.filter_overlong_prompts=True
data.truncation='error'
data.shuffle=False
)

MODEL=(
actor_rollout_ref.model.path="${FAMILY}/${STUDENT_MODEL}"
actor_rollout_ref.model.enable_gradient_checkpointing=True
actor_rollout_ref.model.use_remove_padding=True
actor_rollout_ref.model.use_fused_kernels=$USE_FUSED_KERNELS
actor_rollout_ref.actor.use_torch_compile=True
actor_rollout_ref.rollout.enforce_eager=$ENFORCE_EAGER
)

DISTILLATION=(
distillation.enabled=True
distillation.num_workers=8
distillation.teacher_model.enable_resource_pool=$TEACHER_RESOURCE_POOL
distillation.teacher_model.n_gpus_per_node=$TEACHER_WORLD_SIZE
distillation.teacher_model.nnodes=1
distillation.teacher_model.model_path="${FAMILY}/${TEACHER_MODEL}"
distillation.teacher_model.inference.tensor_model_parallel_size=1
distillation.teacher_model.inference.name=$ROLLOUT_NAME
distillation.teacher_model.inference.gpu_memory_utilization=0.3
distillation.teacher_model.inference.enforce_eager=$ENFORCE_EAGER
distillation.teacher_model.inference.max_model_len=$MAX_NUM_TOKENS
distillation.teacher_model.inference.max_num_batched_tokens=$MAX_NUM_TOKENS
distillation.teacher_model.inference.max_num_seqs=$MAX_NUM_TOKENS
distillation.distillation_loss.loss_mode=$DISTILLATION_LOSS_MODE
distillation.distillation_loss.topk=64
distillation.distillation_loss.use_task_rewards=False
distillation.distillation_loss.use_policy_gradient=$USE_POLICY_GRADIENT
distillation.distillation_loss.loss_max_clamp=$DISTILLATION_LOSS_MAX_CLAMP
distillation.distillation_loss.log_prob_min_clamp=$DISTILLATION_LOG_PROB_MIN_CLAMP
)

STUDENT=(
actor_rollout_ref.actor.optim.lr=1e-6
actor_rollout_ref.actor.ppo_mini_batch_size=$TRAIN_PROMPT_BSZ
actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=$STUDENT_MICRO_BATCH_SIZE_PER_GPU
actor_rollout_ref.actor.ppo_max_token_len_per_gpu=$STUDENT_MAX_TOKEN_LEN_PER_GPU
actor_rollout_ref.actor.use_dynamic_bsz=$USE_DYNAMIC_BSZ
actor_rollout_ref.actor.fsdp_config.param_offload=True
actor_rollout_ref.actor.fsdp_config.optimizer_offload=True
actor_rollout_ref.actor.ulysses_sequence_parallel_size=$SP
)

ROLLOUT=(
actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=$STUDENT_MICRO_BATCH_SIZE_PER_GPU
actor_rollout_ref.rollout.log_prob_max_token_len_per_gpu=$STUDENT_MAX_TOKEN_LEN_PER_GPU
actor_rollout_ref.rollout.log_prob_use_dynamic_bsz=$USE_DYNAMIC_BSZ
actor_rollout_ref.rollout.tensor_model_parallel_size=1
actor_rollout_ref.rollout.name=$ROLLOUT_NAME
actor_rollout_ref.rollout.gpu_memory_utilization=0.3
actor_rollout_ref.rollout.calculate_log_probs=False
actor_rollout_ref.rollout.max_model_len=$MAX_NUM_TOKENS
actor_rollout_ref.rollout.max_num_batched_tokens=$MAX_NUM_TOKENS
actor_rollout_ref.rollout.max_num_seqs=$MAX_NUM_TOKENS
actor_rollout_ref.rollout.n=1
)

ALGORITHM=(
algorithm.adv_estimator=grpo
algorithm.use_kl_in_reward=False
)

TRAINER=(
trainer.logger='["console","wandb"]'
trainer.project_name=$PROJECT_NAME
trainer.experiment_name=$EXP_NAME
trainer.n_gpus_per_node=$STUDENT_WORLD_SIZE
trainer.nnodes=1
trainer.save_freq=200
trainer.test_freq=5
trainer.total_epochs=15
trainer.val_before_train=False
trainer.use_legacy_worker_impl=disable
trainer.resume_mode=disable
trainer.log_val_generations=5
)



############################ Launch ############################

python3 -m verl.trainer.main_ppo \
--config-path=config \
--config-name='ppo_trainer.yaml' \
"${DATA[@]}" \
"${ALGORITHM[@]}" \
"${MODEL[@]}" \
"${DISTILLATION[@]}" \
"${ROLLOUT[@]}" \
"${STUDENT[@]}" \
"${TRAINER[@]}" \
"$@"
Loading
Loading