| #!/bin/bash |
| |
| |
| |
|
|
| set -x |
|
|
| |
| MODEL_PATH="${1:-/workspace/rl4phyx/models/Qwen2.5-VL-3B-Instruct}" |
| EXPERIMENT_NAME="${2:-rlvr_baseline}" |
|
|
| |
| WANDB_PROJECT=${WANDB_PROJECT:-"physics_one_shot_rlvr"} |
| BASE="/workspace/rl4phyx/RL4Phyx/ZeroSearch/One-Shot-RLVR" |
| DATA_FILE="${BASE}/data/train/physics_vlm/mechanics/mechanics_1_rl_numerical.parquet" |
| VAL_FILE="/workspace/rl4phyx/RL4Phyx/oneshot/validation_data/metaphyx_oe_1533.parquet" |
| IMAGE_DIR="${BASE}/data/train/physics_vlm/mechanics" |
|
|
| |
| N_GPUS=4 |
| GPUS="0,1,2,3" |
|
|
| |
| BATCH_SIZE="128" |
| LEARNING_RATE="1e-6" |
| ROLLOUT_N="8" |
| TEMPERATURE="0.7" |
| TENSOR_PARALLEL="2" |
|
|
| |
| CHECKPOINT_DIR="/workspace/rl4phyx/checkpoints/${EXPERIMENT_NAME}" |
|
|
| echo "==========================================" |
| echo "One-Shot RLVR: Physics (VLM)" |
| echo "Model: ${MODEL_PATH}" |
| echo "Experiment: ${EXPERIMENT_NAME}" |
| echo "Data: ${DATA_FILE}" |
| echo "Checkpoint: ${CHECKPOINT_DIR}" |
| echo "==========================================" |
|
|
| mkdir -p $CHECKPOINT_DIR |
| mkdir -p /workspace/rl4phyx/logs |
|
|
| |
| |
| cd /workspace/rl4phyx |
|
|
| |
| export VLLM_ATTENTION_BACKEND=XFORMERS |
| export VLLM_USE_TRITON_FLASH_ATTN=0 |
| export WANDB_API_KEY=${WANDB_API_KEY:-""} |
|
|
| |
| CUDA_VISIBLE_DEVICES=${GPUS} python3 -m verl.trainer.main_ppo \ |
| algorithm.adv_estimator=grpo \ |
| +data_domain=physics \ |
| data.train_files=${DATA_FILE} \ |
| data.val_files=${VAL_FILE} \ |
| data.train_batch_size=${BATCH_SIZE} \ |
| data.val_batch_size=1533 \ |
| data.max_prompt_length=2048 \ |
| data.max_response_length=3072 \ |
| +data.is_multimodal=True \ |
| +data.vlm_model=${MODEL_PATH} \ |
| +data.image_dir=${IMAGE_DIR} \ |
| reward_model.reward_manager='naive' \ |
| actor_rollout_ref.model.path=${MODEL_PATH} \ |
| actor_rollout_ref.actor.optim.lr=${LEARNING_RATE} \ |
| actor_rollout_ref.model.use_remove_padding=False \ |
| actor_rollout_ref.actor.ppo_mini_batch_size=${BATCH_SIZE} \ |
| actor_rollout_ref.actor.use_dynamic_bsz=True \ |
| actor_rollout_ref.actor.ppo_max_token_len_per_gpu=24000 \ |
| 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.model.enable_gradient_checkpointing=True \ |
| actor_rollout_ref.actor.fsdp_config.param_offload=False \ |
| +actor_rollout_ref.actor.fsdp_config.grad_offload=False \ |
| actor_rollout_ref.actor.fsdp_config.optimizer_offload=False \ |
| actor_rollout_ref.rollout.tensor_model_parallel_size=${TENSOR_PARALLEL} \ |
| actor_rollout_ref.rollout.name=vllm \ |
| actor_rollout_ref.rollout.temperature=${TEMPERATURE} \ |
| +actor_rollout_ref.rollout.val_temperature=${TEMPERATURE} \ |
| actor_rollout_ref.rollout.gpu_memory_utilization=0.7 \ |
| actor_rollout_ref.rollout.n=${ROLLOUT_N} \ |
| +actor_rollout_ref.rollout.n_val=1 \ |
| actor_rollout_ref.ref.fsdp_config.param_offload=True \ |
| algorithm.kl_ctrl.kl_coef=0.001 \ |
| trainer.critic_warmup=0 \ |
| trainer.logger=['console','wandb'] \ |
| trainer.project_name=${WANDB_PROJECT} \ |
| trainer.experiment_name=${EXPERIMENT_NAME} \ |
| trainer.checkpoints_dir=$CHECKPOINT_DIR \ |
| +trainer.val_before_train=True \ |
| trainer.n_gpus_per_node=${N_GPUS} \ |
| trainer.nnodes=1 \ |
| trainer.save_freq=20 \ |
| trainer.test_freq=20 \ |
| trainer.default_hdfs_dir=null \ |
| trainer.total_epochs=2000 2>&1 | tee /workspace/rl4phyx/logs/${EXPERIMENT_NAME}.log |
|
|