File size: 7,071 Bytes
535fb25 | 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 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | #!/usr/bin/env bash
set -euo pipefail
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)
cd "$PROJECT_ROOT"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# Optional W&B credentials. This file may export WANDB_API_KEY; the key is not printed.
WANDB_ENV_FILE="${WANDB_ENV_FILE:-$HOME/.wandb_env}"
if [[ -f "$WANDB_ENV_FILE" ]]; then
# shellcheck disable=SC1090
source "$WANDB_ENV_FILE"
fi
export OMNIGEN_CODE_ROOT="${OMNIGEN_CODE_ROOT:-/home/wenting/zr/gen_code_plan2_1}"
export CONFIG_ENTRY="${CONFIG_ENTRY:-config/grpo.py:general_radiomics_joint_omnigen_4gpu_cm_kl_eval}"
# SFT_LORA_PATH: SFT adapter folder merged before eval RL LoRA is loaded.
export SFT_LORA_PATH="${SFT_LORA_PATH:-/home/wenting/zr/gen_code_plan2_1/results_new/scratch_15k}"
# MASK_MODULES_PATH: companion mask_modules.bin for the joint model.
export MASK_MODULES_PATH="${MASK_MODULES_PATH:-/home/wenting/zr/gen_code_plan2_1/results_new/scratch_15k/mask_modules.bin}"
# TRAIN_JSONL: training metadata jsonl; printed for provenance, not consumed by eval generation.
export TRAIN_JSONL="${TRAIN_JSONL:-/home/wenting/zr/wt_dataset/LIDC_IDRI/anno/cxr_synth_anno_mask_train.jsonl}"
# TEST_JSONL: held-out metadata jsonl used by eval generation.
export TEST_JSONL="${TEST_JSONL:-/home/wenting/zr/wt_dataset/LIDC_IDRI/anno/cxr_synth_anno_mask_test.jsonl}"
# SAVE_DIR: training run directory that usually contains checkpoints.
export SAVE_DIR="${SAVE_DIR:-logs/radiomics/joint-scratch15k-lung-beta0p005}"
# OUTPUT_DIR: root for eval-generated images and downstream metrics.
export OUTPUT_DIR="${OUTPUT_DIR:-outputs/joint-plan2_1/eval_noise001_${TIMESTAMP}}"
export EVAL_LORA_PATH="${EVAL_LORA_PATH:-logs/radiomics/joint-scratch15k-lung-beta0p005/checkpoints/checkpoint-60/lora}"
export EVAL_EXACT_OUTPUT_DIR="${EVAL_EXACT_OUTPUT_DIR:-0}" # If set, eval generation will write to OUTPUT_DIR without timestamp subfolder and will look for LoRA in OUTPUT_DIR; otherwise, OUTPUT_DIR is a parent folder for timestamped eval outputs and EVAL_LORA_PATH must be set explicitly.——如果是1就是断点续跑
# Reward controls are printed for provenance; eval generation does not compute reward.
export REWARD_MASK_CHANNELS="${REWARD_MASK_CHANNELS:-0,1}"
export REWARD_FEATURE_PREFIXES="${REWARD_FEATURE_PREFIXES:-cm_}"
export REWARD_BASE_FEATURE_FAMILIES="${REWARD_BASE_FEATURE_FAMILIES:-cm}"
export REWARD_DISTANCE_MODE="${REWARD_DISTANCE_MODE:-relative_l1}"
export REWARD_SCALE="${REWARD_SCALE:-1.0}"
export REWARD_MISSING_SCORE="${REWARD_MISSING_SCORE:--10.0}"
# Sampling controls. NOISE_LEVEL should remain 0.0 for deterministic eval unless intentionally overridden.
export NUM_STEPS="${NUM_STEPS:-10}"
export EVAL_NUM_STEPS="${EVAL_NUM_STEPS:-50}"
export NOISE_LEVEL="${NOISE_LEVEL:-0.0}"
export SDE_TYPE="${SDE_TYPE:-cps}"
export GUIDANCE_SCALE="${GUIDANCE_SCALE:-2.5}"
export IMG_GUIDANCE_SCALE="${IMG_GUIDANCE_SCALE:-2.0}"
export SAME_LATENT="${SAME_LATENT:-false}"
export GLOBAL_STD="${GLOBAL_STD:-true}"
export MAX_EVAL_BATCHES="${MAX_EVAL_BATCHES:-2}" # cy
# Training/GRPO controls are part of config provenance; eval mainly uses LoRA/checkpoint paths and sampling controls.
export NUM_IMAGE_PER_PROMPT="${NUM_IMAGE_PER_PROMPT:-4}"
export KL_BETA="${KL_BETA:-0.005}"
export LEARNING_RATE="${LEARNING_RATE:-1e-4}"
export TRAIN_BATCH_SIZE="${TRAIN_BATCH_SIZE:-}"
export GRAD_ACCUM="${GRAD_ACCUM:-}"
export MAX_TRAIN_STEPS="${MAX_TRAIN_STEPS:-}"
export SAVE_FREQ="${SAVE_FREQ:-5}"
export EVAL_FREQ="${EVAL_FREQ:-5}"
export RL_LORA_RANK="${RL_LORA_RANK:-32}"
export RL_LORA_ALPHA="${RL_LORA_ALPHA:-64}"
export RL_LORA_TARGET_MODULES="${RL_LORA_TARGET_MODULES:-qkv_proj,o_proj}"
export NUM_PROCESSES="${NUM_PROCESSES:-4}"
export MAIN_PROCESS_PORT="${MAIN_PROCESS_PORT:-29501}"
export MIXED_PRECISION="${MIXED_PRECISION:-bf16}"
export PYTORCH_CUDA_ALLOC_CONF="${PYTORCH_CUDA_ALLOC_CONF:-expandable_segments:True}"
export HF_HOME="${HF_HOME:-/NAS_REMOTE/vicky/wt/huggingface/models}"
export HF_HUB_CACHE="${HF_HUB_CACHE:-/tmp/flow_grpo_hf_cache/hub}"
export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0,1,2,3}"
export WANDB_PROJECT="${WANDB_PROJECT:-flow_grpo}"
export WANDB_NAME="${WANDB_NAME:-joint-plan2_1-eval-${TIMESTAMP}}"
export WANDB_MODE="${WANDB_MODE:-disabled}"
export PYTHONPATH="$PROJECT_ROOT:$OMNIGEN_CODE_ROOT:${PYTHONPATH:-}"
mkdir -p "$OUTPUT_DIR"
export LAUNCH_CONFIG="$OUTPUT_DIR/launch_config.txt"
{
echo "timestamp=${TIMESTAMP}"
echo "repo_path=${PROJECT_ROOT}"
echo "config_entry=${CONFIG_ENTRY}"
echo "omnigen_code_root=${OMNIGEN_CODE_ROOT}"
echo "sft_lora_path=${SFT_LORA_PATH}"
echo "mask_modules_path=${MASK_MODULES_PATH}"
echo "train_jsonl=${TRAIN_JSONL}"
echo "test_jsonl=${TEST_JSONL}"
echo "save_dir=${SAVE_DIR}"
echo "output_dir=${OUTPUT_DIR}"
echo "eval_lora_path=${EVAL_LORA_PATH}"
echo "eval_exact_output_dir=${EVAL_EXACT_OUTPUT_DIR}"
echo "max_samples=${MAX_SAMPLES:-}"
echo "launch_config=${LAUNCH_CONFIG}"
echo "reward_mask_channels=${REWARD_MASK_CHANNELS}"
echo "reward_feature_prefixes=${REWARD_FEATURE_PREFIXES}"
echo "reward_base_feature_families=${REWARD_BASE_FEATURE_FAMILIES}"
echo "reward_distance_mode=${REWARD_DISTANCE_MODE}"
echo "reward_scale=${REWARD_SCALE}"
echo "reward_missing_score=${REWARD_MISSING_SCORE}"
echo "num_steps=${NUM_STEPS}"
echo "eval_num_steps=${EVAL_NUM_STEPS}"
echo "noise_level=${NOISE_LEVEL}"
echo "sde_type=${SDE_TYPE}"
echo "guidance_scale=${GUIDANCE_SCALE}"
echo "img_guidance_scale=${IMG_GUIDANCE_SCALE}"
echo "same_latent=${SAME_LATENT}"
echo "global_std=${GLOBAL_STD}"
echo "max_eval_batches=${MAX_EVAL_BATCHES}"
echo "num_image_per_prompt=${NUM_IMAGE_PER_PROMPT}"
echo "kl_beta=${KL_BETA}"
echo "learning_rate=${LEARNING_RATE}"
echo "train_batch_size=${TRAIN_BATCH_SIZE}"
echo "grad_accum=${GRAD_ACCUM}"
echo "max_train_steps=${MAX_TRAIN_STEPS}"
echo "save_freq=${SAVE_FREQ}"
echo "eval_freq=${EVAL_FREQ}"
echo "rl_lora_rank=${RL_LORA_RANK}"
echo "rl_lora_alpha=${RL_LORA_ALPHA}"
echo "rl_lora_target_modules=${RL_LORA_TARGET_MODULES}"
echo "num_processes=${NUM_PROCESSES}"
echo "main_process_port=${MAIN_PROCESS_PORT}"
echo "mixed_precision=${MIXED_PRECISION}"
echo "cuda_visible_devices=${CUDA_VISIBLE_DEVICES}"
echo "wandb_project=${WANDB_PROJECT}"
echo "wandb_name=${WANDB_NAME}"
echo "wandb_mode=${WANDB_MODE}"
if [[ -n "${WANDB_API_KEY:-}" ]]; then echo "wandb_api_key_set=true"; else echo "wandb_api_key_set=false"; fi
echo "wandb_env_file=${WANDB_ENV_FILE}"
} | tee "$LAUNCH_CONFIG"
CMD=(python3 -m accelerate.commands.launch
--config_file scripts/accelerate_configs/multi_gpu.yaml
--num_processes="$NUM_PROCESSES"
--main_process_port "$MAIN_PROCESS_PORT"
scripts/eval_omnigen.py
--config "$CONFIG_ENTRY"
--output_dir "$OUTPUT_DIR"
)
if [ "$EVAL_EXACT_OUTPUT_DIR" = "1" ]; then
CMD+=(--resume_dir "$OUTPUT_DIR")
fi
if [ -n "$EVAL_LORA_PATH" ]; then
CMD+=(--eval_lora_path "$EVAL_LORA_PATH")
fi
if [ -n "${MAX_SAMPLES:-}" ]; then
CMD+=(--max_samples "$MAX_SAMPLES")
fi
CMD+=("$@")
"${CMD[@]}"
|