|
| 1 | +#!/usr/bin/env bash |
| 2 | +set -euo pipefail |
| 3 | + |
| 4 | +# Current implementation: |
| 5 | +# on-policy loop = live GSM8K candidate generation -> generated parquet -> VERL/GRPO train |
| 6 | +# -> roll out the saved HF actor checkpoint -> repeat. |
| 7 | +# |
| 8 | +# This is intentionally different from the older static sampled-parquet launcher: |
| 9 | +# bash/20260327_gsm8k_mc_sampled.sh |
| 10 | + |
| 11 | +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
| 12 | +BUILDER_DIR="$REPO_ROOT/reliable-gsm8k-builder" |
| 13 | + |
| 14 | +DATE_TAG=${DATE_TAG:-20260529} |
| 15 | +GPU_IDS=${GPU_IDS:-} |
| 16 | + |
| 17 | +BASE_MODEL=${BASE_MODEL:-Qwen/Qwen2.5-3B-Instruct} |
| 18 | +GENERATOR_PROFILE=${GENERATOR_PROFILE:-qwen25_3b} |
| 19 | +INFERENCE_PROFILE=${INFERENCE_PROFILE:-sample_balanced} |
| 20 | +TRAIN_DATASET=${TRAIN_DATASET:-mc_onecorrect} # mc_onecorrect | mc_allwrong | oe |
| 21 | + |
| 22 | +ITERATIONS=${ITERATIONS:-3} |
| 23 | +NUM_SAMPLES=${NUM_SAMPLES:-1000} |
| 24 | +SPLIT=${SPLIT:-train} |
| 25 | +VAL_FILE=${VAL_FILE:-$HOME/data/gsm8k/test.parquet} |
| 26 | + |
| 27 | +PROJECT_NAME=${PROJECT_NAME:-multiple_choice_question_study} |
| 28 | +IMPLEMENTATION_TAG=${IMPLEMENTATION_TAG:-gsm8k_mc_sampled_onpolicy_livegen_parseronly_grpo} |
| 29 | +RUN_PREFIX=${RUN_PREFIX:-${DATE_TAG}_${IMPLEMENTATION_TAG}_${GENERATOR_PROFILE}_${TRAIN_DATASET}_n${NUM_SAMPLES}_it${ITERATIONS}} |
| 30 | + |
| 31 | +OUTPUT_ROOT=${OUTPUT_ROOT:-$BUILDER_DIR/runs_on_policy} |
| 32 | +CHECKPOINT_ROOT=${CHECKPOINT_ROOT:-$REPO_ROOT/checkpoints/on_policy} |
| 33 | +LOG_DIR=${LOG_DIR:-$REPO_ROOT/logs} |
| 34 | +LOG_FILE=${LOG_FILE:-$LOG_DIR/${RUN_PREFIX}.log} |
| 35 | + |
| 36 | +TOTAL_EPOCHS=${TOTAL_EPOCHS:-1} |
| 37 | +SAVE_FREQ=${SAVE_FREQ:-999999} # positive; VERL still saves on final step |
| 38 | +TEST_FREQ=${TEST_FREQ:-1} |
| 39 | +TRAIN_BATCH_SIZE=${TRAIN_BATCH_SIZE:-1024} |
| 40 | +PPO_MINI_BATCH_SIZE=${PPO_MINI_BATCH_SIZE:-1024} |
| 41 | +ACTOR_MICRO_BATCH_SIZE=${ACTOR_MICRO_BATCH_SIZE:-8} |
| 42 | +ROLLOUT_N=${ROLLOUT_N:-8} |
| 43 | +LEARNING_RATE=${LEARNING_RATE:-1e-6} |
| 44 | + |
| 45 | +USE_JUDGE=${USE_JUDGE:-0} |
| 46 | +JUDGE_PROFILE=${JUDGE_PROFILE:-judgelm_7b} |
| 47 | +DRY_RUN=${DRY_RUN:-0} |
| 48 | + |
| 49 | +mkdir -p "$LOG_DIR" |
| 50 | + |
| 51 | +CMD=( |
| 52 | + python "$BUILDER_DIR/run_on_policy_loop.py" |
| 53 | + --run-prefix "$RUN_PREFIX" |
| 54 | + --iterations "$ITERATIONS" |
| 55 | + --num-samples "$NUM_SAMPLES" |
| 56 | + --split "$SPLIT" |
| 57 | + --base-model "$BASE_MODEL" |
| 58 | + --generator-profile "$GENERATOR_PROFILE" |
| 59 | + --inference-profile "$INFERENCE_PROFILE" |
| 60 | + --train-dataset "$TRAIN_DATASET" |
| 61 | + --output-root "$OUTPUT_ROOT" |
| 62 | + --checkpoint-root "$CHECKPOINT_ROOT" |
| 63 | + --val-file "$VAL_FILE" |
| 64 | + --project-name "$PROJECT_NAME" |
| 65 | + --total-epochs "$TOTAL_EPOCHS" |
| 66 | + --save-freq "$SAVE_FREQ" |
| 67 | + --test-freq "$TEST_FREQ" |
| 68 | + --train-batch-size "$TRAIN_BATCH_SIZE" |
| 69 | + --ppo-mini-batch-size "$PPO_MINI_BATCH_SIZE" |
| 70 | + --actor-micro-batch-size "$ACTOR_MICRO_BATCH_SIZE" |
| 71 | + --rollout-n "$ROLLOUT_N" |
| 72 | + --learning-rate "$LEARNING_RATE" |
| 73 | +) |
| 74 | + |
| 75 | +if [[ -n "$GPU_IDS" ]]; then |
| 76 | + export CUDA_VISIBLE_DEVICES="$GPU_IDS" |
| 77 | + CMD+=(--gpu-ids "$GPU_IDS") |
| 78 | +fi |
| 79 | + |
| 80 | +if [[ "$USE_JUDGE" == "1" ]]; then |
| 81 | + CMD+=(--use-judge --judge-profile "$JUDGE_PROFILE") |
| 82 | +fi |
| 83 | + |
| 84 | +if [[ "$DRY_RUN" == "1" ]]; then |
| 85 | + CMD+=(--dry-run) |
| 86 | +fi |
| 87 | + |
| 88 | +echo "[20260529_gsm8k_mc_sampled] implementation=$IMPLEMENTATION_TAG" |
| 89 | +echo "[20260529_gsm8k_mc_sampled] run_prefix=$RUN_PREFIX" |
| 90 | +echo "[20260529_gsm8k_mc_sampled] base_model=$BASE_MODEL" |
| 91 | +echo "[20260529_gsm8k_mc_sampled] generator_profile=$GENERATOR_PROFILE inference_profile=$INFERENCE_PROFILE" |
| 92 | +echo "[20260529_gsm8k_mc_sampled] train_dataset=$TRAIN_DATASET iterations=$ITERATIONS num_samples=$NUM_SAMPLES" |
| 93 | +echo "[20260529_gsm8k_mc_sampled] output_root=$OUTPUT_ROOT" |
| 94 | +echo "[20260529_gsm8k_mc_sampled] checkpoint_root=$CHECKPOINT_ROOT" |
| 95 | +echo "[20260529_gsm8k_mc_sampled] CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-<all>}" |
| 96 | +echo "[20260529_gsm8k_mc_sampled] log_file=$LOG_FILE" |
| 97 | + |
| 98 | +PYTHONUNBUFFERED=1 VLLM_USE_FLASHINFER_SAMPLER=1 "${CMD[@]}" 2>&1 | tee "$LOG_FILE" |
0 commit comments