| #!/usr/bin/env bash |
| |
| |
| set -e |
| ROOT=/data222/hongbo.wang/Spatial_MLLM |
| cd $ROOT |
|
|
| PY="conda run -n spatial_mllm --no-capture-output python" |
| LF=$ROOT/LLaMA-Factory |
| CKPT=$LF/saves/qwen2_5_vl-7b/full/mgeo_full_dpo_v11_local |
| TAG=v11_local |
| VLM_NAME=Qwen2.5-VL-7B-MGeo-Mix-v11 |
|
|
| LOG=$ROOT/logs/v11_chain |
| mkdir -p $LOG |
|
|
| ts() { date +"%Y-%m-%d %H:%M:%S"; } |
| log() { echo "[$(ts) V11] $*" | tee -a $LOG/orchestrator.log; } |
|
|
| |
| |
| |
| if [ -f $CKPT/config.json ]; then |
| log "Train: $CKPT exists, skip" |
| else |
| log "=== Stage 0/4: v11 DPO training on GPU 4-7 ===" |
| cd $LF |
| CUDA_VISIBLE_DEVICES=4,5,6,7 \ |
| conda run -n spatial_mllm --no-capture-output \ |
| llamafactory-cli train mgeo_full_dpo_v11_local.yaml \ |
| > $LOG/train.log 2>&1 || { log "Train FAILED"; exit 1; } |
| cd $ROOT |
| log "Train done" |
| fi |
|
|
| |
| |
| |
| log "=== Stage 1/4: P3 probe v2 ===" |
| if [ -f $ROOT/results/probe_p3/preds_${TAG}.jsonl ]; then |
| log "P3: exists, skip" |
| else |
| $PY $ROOT/mgeo_dpo/scripts/eval_p3.py --model $TAG --gpus 4,5,6,7 \ |
| > $LOG/p3.log 2>&1 || log "P3 FAILED, continue" |
| fi |
| $PY $ROOT/mgeo_dpo/scripts/p3_metrics.py \ |
| --models $TAG base v3 v9 msmu_dpo_v1 \ |
| > $LOG/p3_metrics.log 2>&1 || log "p3_metrics failed" |
|
|
| |
| |
| |
| log "=== Stage 2/4: SpatialRGPT-Bench ===" |
| MODEL_BASE=$ROOT/models/Qwen2.5-VL-7B-Instruct |
| BENCH_JSON=/data222/hongbo.wang/SpatialRGPT/bench_data/SpatialRGPT-Bench_v1.json |
| IMAGE_DIR=/data222/hongbo.wang/SpatialRGPT/bench_data/images |
| EVAL_SCRIPT=/data222/hongbo.wang/SpatialRGPT/eval_qwen2vl_spatialrgpt.py |
| GPT_SCRIPT=/data222/hongbo.wang/SpatialRGPT/evaluate_spatial_with_api.py |
|
|
| OUT_SRGPT=/data222/hongbo.wang/SpatialRGPT/eval_output/${TAG} |
| mkdir -p $OUT_SRGPT |
|
|
| if [ -f $OUT_SRGPT/answers.jsonl ]; then |
| log "SRGPT infer: exists, skip" |
| else |
| log "SRGPT infer on GPU 4" |
| CUDA_VISIBLE_DEVICES=4 $PY $EVAL_SCRIPT \ |
| --model-path "$CKPT" --adapter-path NONE \ |
| --bench-json $BENCH_JSON --image-dir $IMAGE_DIR \ |
| --output $OUT_SRGPT/answers.jsonl --model-name $TAG \ |
| > $LOG/srgpt_infer.log 2>&1 || log "SRGPT infer FAILED" |
| fi |
|
|
| if [ -f $OUT_SRGPT/score.json ]; then |
| log "SRGPT score: exists, skip" |
| else |
| log "SRGPT GPT score" |
| $PY $GPT_SCRIPT $OUT_SRGPT/answers.jsonl >> $LOG/srgpt_infer.log 2>&1 || log "SRGPT score FAILED" |
| fi |
|
|
| |
| |
| |
| log "=== Stage 3/4: ViewSpatial-Bench ===" |
| OUTDIR=$ROOT/results/vlmeval_v11/${VLM_NAME} |
| ACCFILE=$OUTDIR/${VLM_NAME}_ViewSpatialBench_extract_matching_acc.csv |
|
|
| if [ -f $ACCFILE ]; then |
| log "ViewSpatial: exists, skip" |
| else |
| mkdir -p $OUTDIR |
| cd /data222/hongbo.wang/VLMEvalKit |
| CUDA_VISIBLE_DEVICES=4,5,6,7 conda run -n vlmeval --no-capture-output \ |
| torchrun --nproc-per-node=4 --master_port=29611 run.py \ |
| --data ViewSpatialBench --model $VLM_NAME \ |
| --reuse --work-dir $OUTDIR \ |
| > $LOG/vs.log 2>&1 || log "ViewSpatial FAILED" |
| cd $ROOT |
| fi |
|
|
| |
| |
| |
| log "=== Stage 4/4: ALL DONE — summary ===" |
| log "--- P3 ---" |
| grep "^${TAG}\|^msmu_dpo\|^v9\|^v3\|^base" $LOG/p3_metrics.log 2>/dev/null | tee -a $LOG/orchestrator.log |
| log "--- SpatialRGPT ---" |
| [ -f $OUT_SRGPT/score.json ] && cat $OUT_SRGPT/score.json | tee -a $LOG/orchestrator.log |
| log "--- ViewSpatial ---" |
| [ -f $ACCFILE ] && cat $ACCFILE | tee -a $LOG/orchestrator.log |
|
|
| log "=== v11 chain complete ===" |
|
|