forked from verl-project/verl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun_qwen3_30b_veomni.sh
More file actions
134 lines (122 loc) · 4.5 KB
/
Copy pathrun_qwen3_30b_veomni.sh
File metadata and controls
134 lines (122 loc) · 4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/usr/bin/env bash
# GRPO | Qwen3-30B-A3B (MoE) | VeOmni training | NVIDIA GPUs or Ascend NPU
# Knobs:
# INFER_BACKEND controls rollout backend: vllm
set -x
ENGINE=${1:-vllm}
DEVICE=${DEVICE:-$(python3 -c 'import torch_npu' 2>/dev/null && echo npu || echo gpu)}
TRAIN_FILE=dapo-math-17k.parquet
TEST_FILE=aime-2024.parquet
max_prompt_length=$((1024 * 2))
max_response_length=$((1024 * 8))
rollout_max_num_seqs=$((128))
n_devices_per_node=$((8))
actor_ppo_max_token_len=$(((max_prompt_length + max_response_length) * 1))
infer_ppo_max_token_len=$(((max_prompt_length + max_response_length) * 3))
case "${DEVICE}" in
gpu)
;;
npu)
export TASK_QUEUE_ENABLE=1
export HCCL_OP_EXPANSION_MODE="AIV"
export VLLM_USE_V1=1
export VLLM_VERSION=0.13.0
export VLLM_ASCEND_ENABLE_NZ=0
export HCCL_BUFFSIZE=610
export CKPT_DIR="./ckpt30b"
export PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:1024
export CUDA_DEVICE_MAX_CONNECTIONS=1
n_devices_per_node=16
;;
*)
echo "Unsupported DEVICE=${DEVICE}. Expected 'gpu' or 'npu'." >&2
exit 1
;;
esac
DATA=(
algorithm.use_kl_in_reward=False
algorithm.adv_estimator=grpo
data.train_files=${TRAIN_FILE}
data.val_files=${TEST_FILE}
data.train_batch_size=16
data.max_prompt_length=${max_prompt_length}
data.max_response_length=${max_response_length}
data.filter_overlong_prompts=False
data.truncation='error'
)
MODEL=(
actor_rollout_ref.model.path=/Qwen3-30B-MoE-merge
actor_rollout_ref.model.enable_gradient_checkpointing=True
actor_rollout_ref.model.use_remove_padding=True
)
ACTOR=(
actor_rollout_ref.actor.optim.lr=1e-6
actor_rollout_ref.actor.veomni.param_offload=True
actor_rollout_ref.actor.veomni.optimizer_offload=True
actor_rollout_ref.actor.ppo_mini_batch_size=8
actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=1
actor_rollout_ref.actor.use_kl_loss=True
actor_rollout_ref.actor.kl_loss_coef=0.001
actor_rollout_ref.actor.kl_loss_type=low_var_kl
actor_rollout_ref.actor.entropy_coeff=0
actor_rollout_ref.actor.use_torch_compile=False
actor_rollout_ref.actor.veomni.fsdp_size=-1
actor_rollout_ref.actor.veomni.expert_parallel_size=1
actor_rollout_ref.actor.ppo_max_token_len_per_gpu=${actor_ppo_max_token_len}
)
ROLLOUT=(
actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=1
actor_rollout_ref.rollout.data_parallel_size=8
actor_rollout_ref.rollout.expert_parallel_size=8
actor_rollout_ref.rollout.tensor_model_parallel_size=1
actor_rollout_ref.rollout.name=$ENGINE
actor_rollout_ref.rollout.log_prob_max_token_len_per_gpu=${infer_ppo_max_token_len}
actor_rollout_ref.rollout.gpu_memory_utilization=0.7
actor_rollout_ref.rollout.enable_chunked_prefill=True
actor_rollout_ref.rollout.enable_prefix_caching=True
actor_rollout_ref.rollout.max_model_len=$((max_prompt_length + max_response_length))
actor_rollout_ref.rollout.max_num_batched_tokens=$((1024))
actor_rollout_ref.rollout.max_num_seqs=${rollout_max_num_seqs}
actor_rollout_ref.rollout.enforce_eager=False
actor_rollout_ref.rollout.free_cache_engine=True
actor_rollout_ref.rollout.n=4
+actor_rollout_ref.rollout.engine_kwargs.vllm.compilation_config.cudagraph_capture_sizes="[1, 8, 16, 32, 40, 48, 64, 96, 128, 256]"
+actor_rollout_ref.rollout.engine_kwargs.vllm.mm_processor_cache_gb=0
)
REF=(
actor_rollout_ref.ref.veomni.param_offload=True
actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu=1
actor_rollout_ref.ref.veomni.param_offload=True
actor_rollout_ref.ref.log_prob_max_token_len_per_gpu=${infer_ppo_max_token_len}
)
TRAINER=(
+trainer.use_legacy_worker_impl=disable
trainer.critic_warmup=0
trainer.logger=console
trainer.project_name='verl_qwen3_veomni'
trainer.experiment_name='qwen3_30b_veomni'
trainer.n_gpus_per_node=${n_devices_per_node}
trainer.nnodes=1
trainer.save_freq=100
trainer.default_local_dir=$CKPT_DIR
trainer.test_freq=-1
trainer.total_training_steps=100
)
if [ "${DEVICE}" = "npu" ]; then
ROLLOUT+=(
+actor_rollout_ref.rollout.engine_kwargs.vllm.compilation_config.cudagraph_mode="FULL_DECODE_ONLY"
)
fi
EXTRA=(
model_engine=veomni
)
########################### launch ###########################
python3 -m verl.trainer.main_ppo \
"${DATA[@]}" \
"${MODEL[@]}" \
"${ACTOR[@]}" \
"${ROLLOUT[@]}" \
"${REF[@]}" \
"${TRAINER[@]}" \
"${EXTRA[@]}" \
"$@"