| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -euo pipefail |
|
|
| |
| PROJECT_ROOT="$(cd "$(dirname "$0")/../.." && pwd)" |
|
|
| |
| export PYTHONPATH="${PROJECT_ROOT}:${PYTHONPATH:-}" |
|
|
| |
| export TORCHINDUCTOR_CACHE_DIR="${HOME}/scratch/.cache/torchinductor" |
| export TRITON_CACHE_DIR="${HOME}/scratch/.cache/triton" |
|
|
| |
| |
| |
| CSV_PATH="${CSV_PATH:-/home/users/ntu/cong045/scratch/testing/hallucination/CC3M-Dataset/data-qwenvl32b/bathroom_toilet_labels.csv}" |
| IMAGE_DIR="${IMAGE_DIR:-CC3M-Dataset/cc3m_images/train}" |
| OUTPUT_DIR="${OUTPUT_DIR:-./step3_lora_outputs}" |
| NGPUS="${NGPUS:-1}" |
|
|
| |
| FINETUNE_CONFIG="${FINETUNE_CONFIG:-${PROJECT_ROOT}/experiment/lora_config.json}" |
|
|
| echo "==========================================" |
| echo "LoRA Fine-Tune" |
| echo "==========================================" |
| echo "Config:" |
| echo " CSV path: $CSV_PATH" |
| echo " Image dir: $IMAGE_DIR" |
| echo " Output dir: $OUTPUT_DIR" |
| echo " Finetune config: $FINETUNE_CONFIG" |
| echo " GPUs: $NGPUS" |
| echo "==========================================" |
|
|
| |
| if [ ! -f "$FINETUNE_CONFIG" ]; then |
| echo "Generating default LoRA config at $FINETUNE_CONFIG ..." |
| python -c " |
| import sys; sys.path.insert(0, '${PROJECT_ROOT}') |
| from experiment.config.train_config import TrainConfig |
| cfg = TrainConfig( |
| csv_path='${CSV_PATH}', |
| image_dir='${IMAGE_DIR}', |
| output_dir='${OUTPUT_DIR}', |
| ) |
| cfg.save('${FINETUNE_CONFIG}') |
| print(' Config saved.') |
| " |
| fi |
|
|
| |
| |
| |
| echo "" |
| echo ">>> Running LoRA Fine-Tune..." |
| echo "================================" |
|
|
| if [ "$NGPUS" -gt 1 ]; then |
| torchrun --nproc_per_node="$NGPUS" \ |
| -m experiment.training.finetune_lora \ |
| --config "$FINETUNE_CONFIG" |
| else |
| python -m experiment.training.finetune_lora \ |
| --config "$FINETUNE_CONFIG" |
| fi |
|
|
| |
| LATEST_RUN=$(ls -dt "$OUTPUT_DIR"/run_* 2>/dev/null | head -1) |
|
|
| if [ -z "$LATEST_RUN" ]; then |
| echo "ERROR: Fine-tuning failed — no run_* directory found in $OUTPUT_DIR" |
| exit 1 |
| fi |
|
|
| echo "" |
| echo ">>> LoRA Fine-Tuning Complete!" |
| echo " Run dir: $LATEST_RUN" |
|
|
| |
| |
| |
| EVAL_OUTPUT_DIR="${EVAL_OUTPUT_DIR:-./step4_lora_outputs}" |
| NUM_PER_CATEGORY="${NUM_PER_CATEGORY:-50}" |
|
|
| echo "" |
| echo ">>> Running Validation..." |
| echo "================================" |
|
|
| python -m experiment.evaluation.validate \ |
| --model_type lora \ |
| --model_dir "$LATEST_RUN/lora_adapter" \ |
| --val_csv "$CSV_PATH" \ |
| --val_image_dir "$IMAGE_DIR" \ |
| --num_per_category "$NUM_PER_CATEGORY" \ |
| --output_dir "$EVAL_OUTPUT_DIR" |
|
|
| echo "" |
| echo "==========================================" |
| echo "All Steps Complete!" |
| echo "==========================================" |
| echo "Outputs:" |
| echo " Run dir: $LATEST_RUN/" |
| echo " LoRA adapter: $LATEST_RUN/lora_adapter/" |
| echo " Merged model: $LATEST_RUN/merged_model/" |
| echo " Validation: $EVAL_OUTPUT_DIR/" |
| echo "==========================================" |
|
|