hallucination / experiment /scripts /run_finetune.sh
ToiTenBao's picture
Upload hallucination folder
a2ffd07 verified
Raw
History Blame Contribute Delete
4.65 kB
#!/usr/bin/env bash
# =============================================================================
# Run Fine-Tune, Validate, and Inspect Delta-W
# =============================================================================
# This script runs:
# 1. Fine-tune model to remove toilet hallucination
# 2. Validate across 4 image categories
# 3. SVD analysis of delta-W
#
# Usage:
# bash experiment/scripts/run_finetune.sh
# =============================================================================
set -euo pipefail
# Resolve project root (parent of experiment/)
PROJECT_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
# Ensure project is importable
export PYTHONPATH="${PROJECT_ROOT}:${PYTHONPATH:-}"
# Redirect torch inductor / Triton cache to a writable location
export TORCHINDUCTOR_CACHE_DIR="${HOME}/scratch/.cache/torchinductor"
export TRITON_CACHE_DIR="${HOME}/scratch/.cache/triton"
# =============================================================================
# Configuration — edit these or set as environment variables
# =============================================================================
CSV_PATH="${CSV_PATH:-CC3M-Dataset/bathroom_filter/bathroom_toilet_labels.csv}"
IMAGE_DIR="${IMAGE_DIR:-CC3M-Dataset/cc3m_images/train}"
STEP3_OUTPUT_DIR="${STEP3_OUTPUT_DIR:-./step3_outputs}"
STEP4_OUTPUT_DIR="${STEP4_OUTPUT_DIR:-./step4_outputs}"
STEP5_OUTPUT_DIR="${STEP5_OUTPUT_DIR:-./step5_outputs}"
NUM_PER_CATEGORY="${NUM_PER_CATEGORY:-50}"
TOP_K_SINGULAR="${TOP_K_SINGULAR:-10}"
# Config file (will be auto-generated if it doesn't exist)
FINETUNE_CONFIG="${FINETUNE_CONFIG:-${PROJECT_ROOT}/experiment/default_config.json}"
echo "=========================================="
echo "Fine-Tune, Validate, Inspect"
echo "=========================================="
echo "Config:"
echo " CSV path: $CSV_PATH"
echo " Image dir: $IMAGE_DIR"
echo " Finetune config: $FINETUNE_CONFIG"
echo "=========================================="
# Generate default config if it doesn't exist
if [ ! -f "$FINETUNE_CONFIG" ]; then
echo "Generating default 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='${STEP3_OUTPUT_DIR}',
)
cfg.save('${FINETUNE_CONFIG}')
print(' Config saved.')
"
fi
# ========================================
# Fine-tune
# ========================================
echo ""
echo ">>> Running Fine-Tune..."
echo "================================"
python -m experiment.training.finetune \
--config "$FINETUNE_CONFIG"
# Verify fine-tuning succeeded
if [ ! -f "$STEP3_OUTPUT_DIR/final_model.pt" ]; then
echo "ERROR: Fine-tuning failed — final_model.pt not found."
exit 1
fi
echo ""
echo ">>> Fine-Tuning Complete!"
# ========================================
# Validate
# ========================================
echo ""
echo ">>> Running Validation..."
echo "================================"
python -m experiment.evaluation.validate \
--model_type delta_w \
--checkpoint "$STEP3_OUTPUT_DIR/final_model.pt" \
--val_csv "$CSV_PATH" \
--val_image_dir "$IMAGE_DIR" \
--num_per_category "$NUM_PER_CATEGORY" \
--output_dir "$STEP4_OUTPUT_DIR"
echo ""
echo ">>> Validation Complete!"
# ========================================
# Inspect delta-W
# ========================================
echo ""
echo ">>> Running Delta-W Inspection..."
echo "======================================="
DELTA_W_PATH="$STEP3_OUTPUT_DIR/final/delta_w.pt"
if [ ! -f "$DELTA_W_PATH" ]; then
echo "WARNING: delta_w.pt not found at $DELTA_W_PATH, trying step-level checkpoints..."
# Find the latest delta_w
DELTA_W_PATH=$(find "$STEP3_OUTPUT_DIR" -name "delta_w.pt" | sort | tail -1)
fi
python -m experiment.analysis.inspect_delta_w \
--delta_w_path "$DELTA_W_PATH" \
--top_k_singular "$TOP_K_SINGULAR" \
--output_dir "$STEP5_OUTPUT_DIR"
echo ""
echo ">>> Delta-W Inspection Complete!"
# ========================================
# Summary
# ========================================
echo ""
echo "=========================================="
echo "All Steps Complete!"
echo "=========================================="
echo "Outputs:"
echo " Fine-tuned model: $STEP3_OUTPUT_DIR/"
echo " Validation: $STEP4_OUTPUT_DIR/"
echo " SVD analysis: $STEP5_OUTPUT_DIR/"
echo ""
echo "Next steps:"
echo " 1. Review step4_outputs/validation_results.json"
echo " 2. Review step5_outputs/delta_w_analysis.json"
echo "=========================================="