forked from verl-project/verl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun_qwen2_5_0_5b_fsdp.sh
More file actions
executable file
·73 lines (67 loc) · 2.22 KB
/
Copy pathrun_qwen2_5_0_5b_fsdp.sh
File metadata and controls
executable file
·73 lines (67 loc) · 2.22 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
#!/usr/bin/env bash
# SFT | GSM8K | FSDP engine | NVIDIA GPUs
# Covers plain SFT, Ulysses sequence parallel, Liger-kernel, and LoRA/PEFT via env vars.
#
# Examples:
# # plain SFT
# bash run_qwen2_5_0_5b_fsdp.sh 8 /tmp/sft-ckpt
#
# # sequence-parallel (Ulysses) = 2
# SP_SIZE=2 bash run_qwen2_5_0_5b_fsdp.sh 8 /tmp/sft-ckpt
#
# # sequence-parallel + Liger kernel
# SP_SIZE=2 USE_LIGER=1 bash run_qwen2_5_0_5b_fsdp.sh 8 /tmp/sft-ckpt
#
# # LoRA (PEFT)
# USE_PEFT=1 bash run_qwen2_5_0_5b_fsdp.sh 8 /tmp/sft-ckpt
set -xeuo pipefail
if [ "$#" -lt 2 ]; then
echo "Usage: run_qwen2_5_0_5b_fsdp.sh <nproc_per_node> <save_path> [other_configs...]"
echo " Env: SP_SIZE (default 1), USE_LIGER (0|1), USE_PEFT (0|1)"
exit 1
fi
nproc_per_node=$1
save_path=$2
shift 2
# ---- user-adjustable ----
MODEL_PATH=${MODEL_PATH:-Qwen/Qwen2.5-0.5B-Instruct}
SP_SIZE=${SP_SIZE:-1}
USE_LIGER=${USE_LIGER:-0}
USE_PEFT=${USE_PEFT:-0}
LORA_RANK=${LORA_RANK:-32}
LORA_ALPHA=${LORA_ALPHA:-16}
LORA_TARGETS=${LORA_TARGETS:-all-linear}
MICRO_BATCH_SIZE_PER_GPU=${MICRO_BATCH_SIZE_PER_GPU:-4}
LR=${LR:-1e-4}
TOTAL_EPOCHS=${TOTAL_EPOCHS:-1}
PROJECT_NAME=${PROJECT_NAME:-gsm8k-sft}
EXPERIMENT_NAME=${EXPERIMENT_NAME:-gsm8k-sft-qwen2_5_0_5b}
# ---- end user-adjustable ----
extra_args=()
if [ "${USE_LIGER}" = "1" ]; then
extra_args+=("model.use_liger=True")
fi
if [ "${USE_PEFT}" = "1" ]; then
extra_args+=(
"model.lora_rank=${LORA_RANK}"
"model.lora_alpha=${LORA_ALPHA}"
"model.target_modules=${LORA_TARGETS}"
)
fi
torchrun --standalone --nnodes=1 --nproc_per_node=${nproc_per_node} \
-m verl.trainer.sft_trainer \
data.train_files=$HOME/data/gsm8k/train.parquet \
data.val_files=$HOME/data/gsm8k/test.parquet \
data.messages_key=messages \
data.micro_batch_size_per_gpu=${MICRO_BATCH_SIZE_PER_GPU} \
optim.lr=${LR} \
engine=fsdp \
engine.ulysses_sequence_parallel_size=${SP_SIZE} \
model.path="${MODEL_PATH}" \
model.use_remove_padding=true \
trainer.default_local_dir="${save_path}" \
trainer.project_name="${PROJECT_NAME}" \
trainer.experiment_name="${EXPERIMENT_NAME}" \
trainer.logger='["console","wandb"]' \
trainer.total_epochs=${TOTAL_EPOCHS} \
"${extra_args[@]}" "$@"