| #!/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" |
|
|
| |
| |
| |
| RELATION="${RELATION:-bathroom_toilet}" |
| |
| CSV_PATH="${CSV_PATH:-}" |
| IMAGE_DIR="${IMAGE_DIR:-}" |
|
|
| |
| export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-}" |
|
|
| OUTPUT="${OUTPUT:-experiment/data/caption_targets_${RELATION}.json}" |
| MODEL="${MODEL:-llava-hf/llava-1.5-7b-hf}" |
| JUDGE_MODEL="${JUDGE_MODEL:-Qwen/Qwen3-8B}" |
| CLEANER_MODEL="${CLEANER_MODEL:-Qwen/Qwen3-8B}" |
| DEVICE="${DEVICE:-cuda}" |
| INFERENCE_ONLY="${INFERENCE_ONLY:-false}" |
| SKIP_JUDGE="${SKIP_JUDGE:-false}" |
| JUDGE_EXISTING="${JUDGE_EXISTING:-}" |
| CLEAN_EXISTING="${CLEAN_EXISTING:-}" |
| BATCH_SIZE="${BATCH_SIZE:-64}" |
| GPU_MEMORY="${GPU_MEMORY:-0.8}" |
| NUM_GPUS="${NUM_GPUS:-1}" |
| JUDGE_BATCH_SIZE="${JUDGE_BATCH_SIZE:-64}" |
| JUDGE_GPU_MEMORY="${JUDGE_GPU_MEMORY:-0.8}" |
| JUDGE_TP="${JUDGE_TP:-1}" |
| CLEANER_BATCH_SIZE="${CLEANER_BATCH_SIZE:-64}" |
| CLEANER_GPU_MEMORY="${CLEANER_GPU_MEMORY:-0.8}" |
| CLEANER_TP="${CLEANER_TP:-1}" |
|
|
| echo "==========================================" |
| echo "Build Caption Targets" |
| echo "==========================================" |
| echo " Relation: ${RELATION}" |
| echo "Data:" |
| if [ -n "${CSV_PATH}" ] && [ -n "${IMAGE_DIR}" ]; then |
| echo " CSV: ${CSV_PATH}" |
| echo " Image dir: ${IMAGE_DIR}" |
| else |
| echo " Dataset: (auto from relation config)" |
| fi |
| echo " GPUs: ${CUDA_VISIBLE_DEVICES:-all}" |
| echo " Output: ${OUTPUT}" |
| echo " LLaVA model: ${MODEL} (transformers)" |
| echo " Judge model: ${JUDGE_MODEL} (vLLM)" |
| echo " Cleaner model: ${CLEANER_MODEL} (vLLM)" |
| echo " Device: ${DEVICE}" |
| echo " Inference only: ${INFERENCE_ONLY}" |
| echo " Skip judge: ${SKIP_JUDGE}" |
| echo " Judge existing: ${JUDGE_EXISTING:-none}" |
| echo " Clean existing: ${CLEAN_EXISTING:-none}" |
| echo "==========================================" |
|
|
| if [ -n "${JUDGE_EXISTING}" ]; then |
| |
| echo "" |
| echo ">>> Stage 1.5: LLM judge of ${JUDGE_EXISTING}" |
| python -m experiment.data.build_caption_targets \ |
| --relation "${RELATION}" \ |
| --judge_only "${JUDGE_EXISTING}" \ |
| --judge_model "${JUDGE_MODEL}" \ |
| --judge_batch_size "${JUDGE_BATCH_SIZE}" \ |
| --judge_gpu_memory "${JUDGE_GPU_MEMORY}" \ |
| --judge_tp "${JUDGE_TP}" |
|
|
| elif [ -n "${CLEAN_EXISTING}" ]; then |
| |
| echo "" |
| echo ">>> Stage 2: LLM cleaning of ${CLEAN_EXISTING}" |
| python -m experiment.data.build_caption_targets \ |
| --relation "${RELATION}" \ |
| --clean "${CLEAN_EXISTING}" \ |
| --cleaner_model "${CLEANER_MODEL}" \ |
| --cleaner_batch_size "${CLEANER_BATCH_SIZE}" \ |
| --cleaner_gpu_memory "${CLEANER_GPU_MEMORY}" \ |
| --cleaner_tp "${CLEANER_TP}" |
| else |
| |
| DATA_ARGS=(--relation "${RELATION}") |
| if [ -n "${CSV_PATH}" ] && [ -n "${IMAGE_DIR}" ]; then |
| DATA_ARGS+=(--csv "${CSV_PATH}" --image_dir "${IMAGE_DIR}") |
| fi |
|
|
| |
| CMD=( |
| python -m experiment.data.build_caption_targets |
| "${DATA_ARGS[@]}" |
| --output "${OUTPUT}" |
| --model "${MODEL}" |
| --judge_model "${JUDGE_MODEL}" |
| --cleaner_model "${CLEANER_MODEL}" |
| --device "${DEVICE}" |
| --batch_size "${BATCH_SIZE}" |
| --gpu_memory "${GPU_MEMORY}" |
| --num_gpus "${NUM_GPUS}" |
| --judge_batch_size "${JUDGE_BATCH_SIZE}" |
| --judge_gpu_memory "${JUDGE_GPU_MEMORY}" |
| --judge_tp "${JUDGE_TP}" |
| --cleaner_batch_size "${CLEANER_BATCH_SIZE}" |
| --cleaner_gpu_memory "${CLEANER_GPU_MEMORY}" |
| --cleaner_tp "${CLEANER_TP}" |
| ) |
|
|
| if [ "${INFERENCE_ONLY}" = "true" ]; then |
| CMD+=(--inference_only) |
| echo "" |
| echo ">>> Stage 1 only: LLaVA inference" |
| elif [ "${SKIP_JUDGE}" = "true" ]; then |
| CMD+=(--skip_judge) |
| echo "" |
| echo ">>> Stage 1 + Stage 2 (regex only, no LLM judge)" |
| else |
| echo "" |
| echo ">>> Full pipeline: Stage 1 (LLaVA) + Stage 1.5 (LLM judge) + Stage 2 (LLM clean)" |
| fi |
|
|
| "${CMD[@]}" |
| fi |
|
|
| echo "" |
| echo "==========================================" |
| echo "Done!" |
| echo " Output: ${JUDGE_EXISTING:-${CLEAN_EXISTING:-${OUTPUT}}}" |
| echo "==========================================" |
|
|