Download tests/special_e2e/run_transferqueue.sh from AnhLD2610/Nahs: direct link, hf CLI and curl.
- Browser
- Download file 7.21 kB
-
https://huggingface.co/AnhLD2610/Nahs/resolve/main/tests/special_e2e/run_transferqueue.sh
- Command line
-
hf download hf://AnhLD2610/Nahs/tests/special_e2e/run_transferqueue.sh
-
curl -L -o run_transferqueue.sh https://huggingface.co/AnhLD2610/Nahs/resolve/main/tests/special_e2e/run_transferqueue.sh
7.21 kB
| set -xeuo pipefail | |
| NUM_GPUS=${NUM_GPUS:-8} | |
| ACTOR_STRATEGY=${ACTOR_STRATEGY:-"fsdp"} # fsdp or megatron | |
| # Download model if not exists | |
| MODEL_ID=${MODEL_ID:-Qwen/Qwen2.5-0.5B-Instruct} | |
| MODEL_PATH=${MODEL_PATH:-${HOME}/models/${MODEL_ID}} | |
| huggingface-cli download "${MODEL_ID}" --local-dir "${MODEL_PATH}" | |
| rollout_mode="async" | |
| rollout_name="vllm" # sglang or vllm | |
| if [ "$rollout_mode" = "async" ]; then | |
| export VLLM_USE_V1=1 | |
| return_raw_chat="True" | |
| fi | |
| # Algorithm parameters | |
| adv_estimator=grpo | |
| use_kl_in_reward=False | |
| kl_coef=0.0 | |
| use_kl_loss=False | |
| kl_loss_coef=0.0 | |
| clip_ratio_low=0.2 | |
| clip_ratio_high=0.28 | |
| # Response length parameters | |
| max_prompt_length=512 | |
| max_response_length=1024 | |
| enable_overlong_buffer=True | |
| overlong_buffer_len=128 | |
| overlong_penalty_factor=1.0 | |
| # Training parameters | |
| loss_agg_mode="token-mean" | |
| # Temperature parameters | |
| temperature=1.0 | |
| top_p=1.0 | |
| top_k=-1 | |
| val_top_p=0.7 | |
| n_gpus_training=8 | |
| train_prompt_bsz=128 | |
| val_prompt_bsz=128 | |
| n_resp_per_prompt=5 | |
| train_prompt_mini_bsz=32 | |
| test_freq=-1 | |
| log_dir="./logs" | |
| mkdir -p $log_dir | |
| timestamp=$(date +"%Y%m%d%H%M%S") | |
| log_file="${log_dir}/qwen2_5-0_5b_transferqueue_${timestamp}.log" | |
| exp_name="$(basename "${MODEL_ID,}")-transferqueue-${ACTOR_STRATEGY}-minimal" | |
| echo "Running transferqueue with ${ACTOR_STRATEGY} strategy" | |
| echo "Total GPUs: ${NUM_GPUS}" | |
| # Common parameters for both FSDP and Megatron | |
| common_params=( | |
| data.train_files="${HOME}/data/gsm8k/train.parquet" | |
| data.val_files="${HOME}/data/gsm8k/test.parquet" | |
| data.prompt_key=prompt | |
| data.truncation='error' | |
| data.max_prompt_length=${max_prompt_length} | |
| data.max_response_length=${max_response_length} | |
| data.filter_overlong_prompts_workers=128 | |
| data.filter_overlong_prompts=True | |
| data.train_batch_size=${train_prompt_bsz} | |
| data.val_batch_size=${val_prompt_bsz} | |
| data.return_raw_chat=${return_raw_chat} | |
| actor_rollout_ref.rollout.n=${n_resp_per_prompt} | |
| algorithm.adv_estimator=${adv_estimator} | |
| algorithm.use_kl_in_reward=${use_kl_in_reward} | |
| algorithm.kl_ctrl.kl_coef=${kl_coef} | |
| actor_rollout_ref.actor.use_kl_loss=${use_kl_loss} | |
| actor_rollout_ref.actor.kl_loss_coef=${kl_loss_coef} | |
| actor_rollout_ref.actor.clip_ratio_low=${clip_ratio_low} | |
| actor_rollout_ref.actor.clip_ratio_high=${clip_ratio_high} | |
| actor_rollout_ref.actor.clip_ratio_c=10.0 | |
| actor_rollout_ref.actor.use_kl_loss=True | |
| actor_rollout_ref.model.path="${MODEL_PATH}" | |
| actor_rollout_ref.actor.optim.lr=1e-6 | |
| actor_rollout_ref.actor.optim.lr_warmup_steps=-1 | |
| actor_rollout_ref.actor.optim.weight_decay=0.1 | |
| actor_rollout_ref.actor.ppo_mini_batch_size=${train_prompt_mini_bsz} | |
| actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=4 | |
| actor_rollout_ref.actor.entropy_coeff=0 | |
| actor_rollout_ref.actor.loss_agg_mode=${loss_agg_mode} | |
| actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=4 | |
| actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu=8 | |
| actor_rollout_ref.rollout.gpu_memory_utilization=0.80 | |
| actor_rollout_ref.rollout.temperature=${temperature} | |
| actor_rollout_ref.rollout.top_p=${top_p} | |
| actor_rollout_ref.rollout.top_k=${top_k} | |
| actor_rollout_ref.rollout.max_num_batched_tokens=10240 | |
| actor_rollout_ref.rollout.val_kwargs.temperature=${temperature} | |
| actor_rollout_ref.rollout.val_kwargs.top_p=${val_top_p} | |
| actor_rollout_ref.rollout.val_kwargs.top_k=${top_k} | |
| actor_rollout_ref.rollout.val_kwargs.do_sample=True | |
| actor_rollout_ref.rollout.val_kwargs.n=1 | |
| actor_rollout_ref.rollout.enable_chunked_prefill=True | |
| actor_rollout_ref.rollout.name=${rollout_name} | |
| actor_rollout_ref.rollout.mode=${rollout_mode} | |
| actor_rollout_ref.rollout.disable_log_stats=True | |
| trainer.logger=console | |
| trainer.project_name='verl-test-transferqueue' | |
| trainer.experiment_name="${exp_name}" | |
| trainer.test_freq="${test_freq}" | |
| trainer.save_freq=-1 | |
| trainer.resume_mode=disable | |
| trainer.nnodes=1 | |
| trainer.n_gpus_per_node=${n_gpus_training} | |
| trainer.total_training_steps=2 | |
| trainer.total_epochs=15 | |
| trainer.val_before_train=True | |
| ) | |
| if [ "${ACTOR_STRATEGY}" == "fsdp" ]; then | |
| echo "Running TransferQueue training with FSDP strategy..." | |
| # FSDP specific parameters; fsdp_size need to be -1 | |
| gen_tp=1 | |
| sp_size=1 | |
| fsdp_size=-1 | |
| ref_offload=True | |
| actor_offload=False | |
| python3 -m recipe.transfer_queue.main_ppo \ | |
| --config-path=config \ | |
| --config-name='transfer_queue_ppo_trainer' \ | |
| "${common_params[@]}" \ | |
| actor_rollout_ref.model.enable_gradient_checkpointing=True \ | |
| actor_rollout_ref.actor.strategy=fsdp \ | |
| critic.strategy=fsdp \ | |
| actor_rollout_ref.actor.grad_clip=1.0 \ | |
| actor_rollout_ref.model.use_remove_padding=True \ | |
| actor_rollout_ref.actor.use_dynamic_bsz=True \ | |
| actor_rollout_ref.ref.log_prob_use_dynamic_bsz=True \ | |
| actor_rollout_ref.rollout.log_prob_use_dynamic_bsz=True \ | |
| actor_rollout_ref.actor.fsdp_config.param_offload=${actor_offload} \ | |
| actor_rollout_ref.actor.fsdp_config.optimizer_offload=${actor_offload} \ | |
| actor_rollout_ref.actor.ulysses_sequence_parallel_size=${sp_size} \ | |
| actor_rollout_ref.rollout.tensor_model_parallel_size=${gen_tp} \ | |
| actor_rollout_ref.ref.fsdp_config.param_offload=${ref_offload} \ | |
| actor_rollout_ref.ref.ulysses_sequence_parallel_size=${sp_size} \ | |
| actor_rollout_ref.actor.fsdp_config.fsdp_size=${fsdp_size} \ | |
| 2>&1 | tee "$log_file" $@ | |
| elif [ "${ACTOR_STRATEGY}" == "megatron" ]; then | |
| echo "Running TransferQueue training with Megatron strategy..." | |
| # Megatron specific parameters | |
| gen_tp=2 | |
| train_tp=1 | |
| train_pp=2 | |
| ref_offload=True | |
| actor_offload=False | |
| # For Ascend NPU, please add: | |
| #++actor_rollout_ref.actor.megatron.override_transformer_config.use_flash_attn=True \ | |
| #++actor_rollout_ref.ref.megatron.override_transformer_config.use_flash_attn=True \ | |
| python3 -m recipe.transfer_queue.main_ppo \ | |
| --config-path=config \ | |
| --config-name='transfer_queue_ppo_megatron_trainer' \ | |
| "${common_params[@]}" \ | |
| actor_rollout_ref.actor.strategy=megatron \ | |
| critic.strategy=megatron \ | |
| actor_rollout_ref.actor.optim.lr_decay_steps=10000000 \ | |
| actor_rollout_ref.actor.megatron.param_offload=${actor_offload} \ | |
| actor_rollout_ref.actor.megatron.optimizer_offload=${actor_offload} \ | |
| actor_rollout_ref.actor.megatron.grad_offload=${actor_offload} \ | |
| actor_rollout_ref.actor.megatron.pipeline_model_parallel_size=${train_pp} \ | |
| actor_rollout_ref.actor.megatron.tensor_model_parallel_size=${train_tp} \ | |
| actor_rollout_ref.rollout.tensor_model_parallel_size=${gen_tp} \ | |
| actor_rollout_ref.ref.megatron.pipeline_model_parallel_size=${train_pp} \ | |
| actor_rollout_ref.ref.megatron.tensor_model_parallel_size=${train_tp} \ | |
| actor_rollout_ref.ref.megatron.param_offload=${ref_offload} \ | |
| 2>&1 | tee "$log_file" $@ | |
| else | |
| echo "Error: Unknown strategy ${ACTOR_STRATEGY}. Please use 'fsdp' or 'megatron'" | |
| exit 1 | |
| fi | |
| echo "TransferQueue test completed successfully with ${ACTOR_STRATEGY} strategy" |