Image-Text-to-Text
Transformers
Safetensors
qwen3_5
vllm
video
multimodal
reinforcement-learning
temporal-grounding
object-tracking
video-segmentation
visual-question-answering
spatial-reasoning
qwen3.5
conversational
Instructions to use OraRL/Video-ORA-4B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use OraRL/Video-ORA-4B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="OraRL/Video-ORA-4B") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("OraRL/Video-ORA-4B") model = AutoModelForMultimodalLM.from_pretrained("OraRL/Video-ORA-4B", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use OraRL/Video-ORA-4B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "OraRL/Video-ORA-4B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "OraRL/Video-ORA-4B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/OraRL/Video-ORA-4B
- SGLang
How to use OraRL/Video-ORA-4B with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "OraRL/Video-ORA-4B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "OraRL/Video-ORA-4B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "OraRL/Video-ORA-4B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "OraRL/Video-ORA-4B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use OraRL/Video-ORA-4B with Docker Model Runner:
docker model run hf.co/OraRL/Video-ORA-4B
| # Thin shell entry for evaluation. | |
| # | |
| # Supported TASKS: videomme,videommev2,videommmu,mmvu,mvbench,videoholmes,longvideobench,lvbench,mlvu,vsi,mmsi,mindcube,revsi,spatial_grounding,tracking,stvg,temporal_grounding,segmentation,all | |
| # Common env overrides: | |
| # MODEL_PATH=/path/to/model_or_verl_actor | |
| # TASKS=videomme,videommev2,vsi | |
| # GPUS=0,1,2,3,4,5,6,7 | |
| # TP_SIZE=1 | |
| # Prefer explicit CLI args for new runs, which avoids stale env variables: | |
| # bash eval/task/eval.sh --model /path/to/model --tasks videomme,videommev2,mvbench --gpus 0,1,2,3,4,5,6,7 --force-merge | |
| # | |
| # MODEL must be provided explicitly with --model. | |
| # # —— Video QA / MC —— | |
| # bash eval/task/eval.sh --model $MODEL --tasks mvbench --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks mmvu --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks videomme --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks videoholmes --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks longvideobench --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks mlvu --gpus $GPUS --force-merge | |
| # # —— Spatial intelligence (MC) —— | |
| # bash eval/task/eval.sh --model $MODEL --tasks vsi --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks mmsi --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks mindcube --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks revsi --gpus $GPUS --force-merge | |
| # # —— Grounding / tracking / stvg / temporal —— | |
| # bash eval/task/eval.sh --model $MODEL --tasks spatial_grounding --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks tracking --gpus $GPUS --force-merge | |
| # bash eval/task/eval.sh --model $MODEL --tasks stvg --gpus $GPUS --force-merge | |
| # charades(默认) | |
| # TIMELENS_DATASETS=charades-timelens TIMELENS_FPS=4 bash eval/task/eval.sh --model $MODEL --tasks temporal_grounding --gpus $GPUS --force-merge | |
| # TIMELENS_DATASETS=activitynet-timelens TIMELENS_FPS=2 bash eval/task/eval.sh --model $MODEL --tasks temporal_grounding --gpus $GPUS --force-merge | |
| # TIMELENS_DATASETS=qvhighlights-timelens TIMELENS_FPS=2 bash eval/task/eval.sh --model $MODEL --tasks temporal_grounding --gpus $GPUS --force-merge | |
| # # —— Segmentation(需要 SAM2 + OraRL 评测环境)—— | |
| # EVAL_CONDA_ENV=orarl SEGMENTATION_RUN_SAM2=true \ | |
| # bash eval/task/eval.sh --model $MODEL --tasks segmentation --gpus $GPUS --force-merge | |
| set -euo pipefail | |
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| PROJECT_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)" | |
| DEFAULT_GPUS="0,1,2,3,4,5,6,7" | |
| usage() { | |
| cat <<'EOF' | |
| Usage: | |
| bash eval/task/eval.sh [options] | |
| Options: | |
| --model PATH Model or checkpoint path. | |
| --tasks LIST Comma-separated task list, e.g. videomme,videommev2,mvbench,mlvu. | |
| --gpus LIST Comma-separated GPU ids, e.g. 0,1,2,3,4,5,6,7. | |
| --tp-size N Tensor parallel size. | |
| --shard-mode MODE Sharding mode passed to vLLM task runner. | |
| --video-cache-size N Video cache size. | |
| --videomme-max-new-tokens N | |
| Max new tokens for VideoMME generation. | |
| --force-merge Force merging FSDP actor checkpoints. | |
| --skip-merge Reuse existing merged HF model for actor checkpoints. | |
| --merged-model PATH Explicit merged HF output/input path for actor checkpoints. | |
| --base-model PATH Base model path used when merging actor checkpoints. | |
| --env NAME Conda env to activate. Default: keep current env. | |
| --segmentation-run-sam2 | |
| Enable SAM2 post-processing for segmentation. | |
| --help Show this help. | |
| Core launch settings intentionally ignore inherited environment variables to | |
| avoid stale MODEL_PATH/TASKS/GPUS/etc. Use explicit CLI options instead. | |
| EOF | |
| } | |
| # Avoid stale shell environment contaminating evaluation identity. Task-specific | |
| # tuning envs below are still supported, but core launch identity is CLI/defaults. | |
| unset MODEL_PATH TASKS GPUS TP_SIZE SHARD_MODE VIDEO_CACHE_SIZE | |
| unset FORCE_MERGE SKIP_MERGE MERGED_MODEL_PATH BASE_MODEL_PATH EVAL_CONDA_ENV | |
| while (($# > 0)); do | |
| case "$1" in | |
| --model|--model-path) | |
| [[ $# -ge 2 ]] || { echo "ERROR: $1 requires a value" >&2; exit 1; } | |
| MODEL_PATH="$2" | |
| shift 2 | |
| ;; | |
| --tasks) | |
| [[ $# -ge 2 ]] || { echo "ERROR: $1 requires a value" >&2; exit 1; } | |
| TASKS="$2" | |
| shift 2 | |
| ;; | |
| --gpus) | |
| if [[ $# -ge 2 && "$2" != --* ]]; then | |
| GPUS="$2" | |
| shift 2 | |
| else | |
| GPUS="$DEFAULT_GPUS" | |
| shift | |
| fi | |
| ;; | |
| --tp-size) | |
| [[ $# -ge 2 ]] || { echo "ERROR: $1 requires a value" >&2; exit 1; } | |
| TP_SIZE="$2" | |
| shift 2 | |
| ;; | |
| --shard-mode) | |
| [[ $# -ge 2 ]] || { echo "ERROR: $1 requires a value" >&2; exit 1; } | |
| SHARD_MODE="$2" | |
| shift 2 | |
| ;; | |
| --video-cache-size) | |
| [[ $# -ge 2 ]] || { echo "ERROR: $1 requires a value" >&2; exit 1; } | |
| VIDEO_CACHE_SIZE="$2" | |
| shift 2 | |
| ;; | |
| --videomme-max-new-tokens) | |
| [[ $# -ge 2 ]] || { echo "ERROR: $1 requires a value" >&2; exit 1; } | |
| VIDEOMME_MAX_NEW_TOKENS="$2" | |
| shift 2 | |
| ;; | |
| --force-merge) | |
| FORCE_MERGE=1 | |
| shift | |
| ;; | |
| --skip-merge) | |
| SKIP_MERGE=1 | |
| shift | |
| ;; | |
| --merged-model|--merged-model-path) | |
| [[ $# -ge 2 ]] || { echo "ERROR: $1 requires a value" >&2; exit 1; } | |
| MERGED_MODEL_PATH="$2" | |
| shift 2 | |
| ;; | |
| --base-model|--base-model-path) | |
| [[ $# -ge 2 ]] || { echo "ERROR: $1 requires a value" >&2; exit 1; } | |
| BASE_MODEL_PATH="$2" | |
| shift 2 | |
| ;; | |
| --env|--conda-env) | |
| [[ $# -ge 2 ]] || { echo "ERROR: $1 requires a value" >&2; exit 1; } | |
| EVAL_CONDA_ENV="$2" | |
| shift 2 | |
| ;; | |
| --segmentation-run-sam2) | |
| SEGMENTATION_RUN_SAM2=true | |
| shift | |
| ;; | |
| --help|-h) | |
| usage | |
| exit 0 | |
| ;; | |
| --) | |
| shift | |
| break | |
| ;; | |
| *) | |
| echo "ERROR: unknown option '$1'" >&2 | |
| usage >&2 | |
| exit 1 | |
| ;; | |
| esac | |
| done | |
| # Require an explicit model so stale machine-local defaults cannot contaminate | |
| # benchmark results. | |
| if [[ -z "${MODEL_PATH:-}" ]]; then | |
| echo "ERROR: --model PATH is required." >&2 | |
| usage >&2 | |
| exit 2 | |
| fi | |
| MODEL_PATH="$(printf '%s' "$MODEL_PATH" | xargs)" | |
| # Common launch defaults. | |
| : "${TASKS:=all}" | |
| : "${GPUS:=$DEFAULT_GPUS}" | |
| : "${TP_SIZE:=1}" | |
| : "${SHARD_MODE:=contiguous}" | |
| : "${VIDEO_CACHE_SIZE:=2}" | |
| : "${PREFETCH_BATCHES:=1}" | |
| : "${FORCE_MERGE:=0}" | |
| : "${SKIP_MERGE:=0}" | |
| : "${MERGE_LOG_DIR:=${PROJECT_DIR}/logs/qwen3.5/eval/merge}" | |
| if [[ ! "$GPUS" =~ ^[0-9]+(,[0-9]+)*$ ]]; then | |
| echo "ERROR: --gpus must be a comma-separated list of GPU ids, got '${GPUS}'" >&2 | |
| exit 1 | |
| fi | |
| # VideoMME defaults. | |
| : "${VIDEOMME_VIDEO_BASE:=${PROJECT_DIR}/data/eval/videomme}" | |
| : "${VIDEOMME_VIDEO_DIR:=${VIDEOMME_VIDEO_BASE}/videos}" | |
| : "${VIDEOMME_VIDEO_MIN_PIXELS:=4096}" | |
| : "${VIDEOMME_VIDEO_MAX_PIXELS:=262144}" | |
| : "${VIDEOMME_VIDEO_TOTAL_PIXELS:=0}" | |
| : "${VIDEOMME_MAX_FRAMES:=384}" | |
| : "${VIDEOMME_FPS:=2}" | |
| : "${VIDEOMME_SETTING:=all-qwen3_vl-sub0-f${VIDEOMME_MAX_FRAMES}-fps${VIDEOMME_FPS}-min${VIDEOMME_VIDEO_MIN_PIXELS}-max${VIDEOMME_VIDEO_MAX_PIXELS}-total${VIDEOMME_VIDEO_TOTAL_PIXELS}-videomme_preprocessed_384f_262k_total0}" | |
| : "${VIDEOMME_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/videomme_preprocessed_384f_262k_total0.jsonl}" | |
| : "${VIDEOMME_PREPROCESSED_VIDEO_DIR:=${VIDEOMME_VIDEO_BASE}/preprocessed_videos_384f_262k_total0}" | |
| : "${VIDEOMME_BATCH_SIZE:=1}" | |
| : "${VIDEOMME_MAX_MODEL_LEN:=65536}" | |
| : "${VIDEOMME_MAX_NEW_TOKENS:=128}" | |
| : "${VIDEOMME_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${VIDEOMME_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${VIDEOMME_MAX_SAMPLES:=0}" | |
| # VideoMME-V2 defaults. Uses the same local schema and evaluator as VideoMME. | |
| : "${VIDEOMMEV2_VIDEO_BASE:=${PROJECT_DIR}/data/eval/videommev2}" | |
| : "${VIDEOMMEV2_VIDEO_DIR:=${VIDEOMMEV2_VIDEO_BASE}/videos}" | |
| : "${VIDEOMMEV2_VIDEO_MIN_PIXELS:=4096}" | |
| : "${VIDEOMMEV2_VIDEO_MAX_PIXELS:=262144}" | |
| : "${VIDEOMMEV2_VIDEO_TOTAL_PIXELS:=0}" | |
| : "${VIDEOMMEV2_MAX_FRAMES:=384}" | |
| : "${VIDEOMMEV2_FPS:=2}" | |
| : "${VIDEOMMEV2_SETTING:=all-qwen3_vl-sub0-f${VIDEOMMEV2_MAX_FRAMES}-fps${VIDEOMMEV2_FPS}-min${VIDEOMMEV2_VIDEO_MIN_PIXELS}-max${VIDEOMMEV2_VIDEO_MAX_PIXELS}-total${VIDEOMMEV2_VIDEO_TOTAL_PIXELS}-videommev2_preprocessed_384f_262k_total0}" | |
| : "${VIDEOMMEV2_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/videommev2_preprocessed_384f_262k_total0.jsonl}" | |
| : "${VIDEOMMEV2_PREPROCESSED_VIDEO_DIR:=${VIDEOMMEV2_VIDEO_BASE}/preprocessed_videos_384f_262k_total0}" | |
| : "${VIDEOMMEV2_BATCH_SIZE:=1}" | |
| : "${VIDEOMMEV2_MAX_MODEL_LEN:=65536}" | |
| : "${VIDEOMMEV2_MAX_NEW_TOKENS:=128}" | |
| : "${VIDEOMMEV2_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${VIDEOMMEV2_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${VIDEOMMEV2_PROMPT_MODE:=default}" | |
| : "${VIDEOMMEV2_ANSWER_FILTER:=}" | |
| : "${VIDEOMMEV2_MAX_SAMPLES:=0}" | |
| # VideoMMMU defaults. | |
| : "${VIDEOMMMU_SETTING:=videommmu-f128-fps2-min4096-max262144-total0-with-image}" | |
| : "${VIDEOMMMU_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/videommmu_with_image.json}" | |
| : "${VIDEOMMMU_VIDEO_ROOT:=${PROJECT_DIR}/data/eval/videommmu}" | |
| : "${VIDEOMMMU_BATCH_SIZE:=4}" | |
| : "${VIDEOMMMU_MAX_MODEL_LEN:=65536}" | |
| : "${VIDEOMMMU_MAX_NEW_TOKENS:=128}" | |
| : "${VIDEOMMMU_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${VIDEOMMMU_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${VIDEOMMMU_VIDEO_MIN_PIXELS:=4096}" | |
| : "${VIDEOMMMU_VIDEO_MAX_PIXELS:=262144}" | |
| : "${VIDEOMMMU_VIDEO_TOTAL_PIXELS:=0}" | |
| : "${VIDEOMMMU_MAX_FRAMES:=128}" | |
| : "${VIDEOMMMU_FPS:=2}" | |
| # OneThinker-style Adaptation uses subject videos + PNGs extracted from | |
| # Adaptation/test-00000-of-00001.parquet. Run once before eval: | |
| # python3 eval/data/extract_videommmu_images.py | |
| # prompt_mode=onethink reproduces OneThinker's CoT prompt; pair it with a large | |
| # VIDEOMMMU_MAX_NEW_TOKENS (OneThinker uses 8192). | |
| : "${VIDEOMMMU_PROMPT_MODE:=default}" | |
| # Separate Adaptation image resolution cap (OneThinker uses 1024*32*32=1048576). | |
| : "${VIDEOMMMU_IMAGE_MAX_PIXELS:=1048576}" | |
| # Qwen3.5 native benchmarking: thinking on + recommended sampling + long output. | |
| # To reproduce the official VideoMMMU number, run with: | |
| # VIDEOMMMU_PROMPT_MODE=qwen VIDEOMMMU_ENABLE_THINKING=true | |
| # VIDEOMMMU_MAX_NEW_TOKENS=32768 VIDEOMMMU_MAX_MODEL_LEN=131072 | |
| # VIDEOMMMU_TEMPERATURE=1.0 VIDEOMMMU_TOP_P=0.95 VIDEOMMMU_TOP_K=20 VIDEOMMMU_PRESENCE_PENALTY=1.5 | |
| : "${VIDEOMMMU_ENABLE_THINKING:=false}" | |
| : "${VIDEOMMMU_TEMPERATURE:=0.0}" | |
| : "${VIDEOMMMU_TOP_P:=1.0}" | |
| : "${VIDEOMMMU_TOP_K:=-1}" | |
| : "${VIDEOMMMU_PRESENCE_PENALTY:=0.0}" | |
| : "${VIDEOMMMU_MIN_P:=0.0}" | |
| # MMVU defaults (multiple-choice subset, raw video). | |
| # Build the MC JSONL once: python scripts/build_mmvu_mc.py | |
| : "${MMVU_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/mmvu_mc.jsonl}" | |
| : "${MMVU_VIDEO_ROOT:=${PROJECT_DIR}/data/eval/mmvu}" | |
| : "${MMVU_BATCH_SIZE:=1}" | |
| : "${MMVU_MAX_MODEL_LEN:=65536}" | |
| : "${MMVU_MAX_NEW_TOKENS:=128}" | |
| : "${MMVU_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${MMVU_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${MMVU_VIDEO_MIN_PIXELS:=4096}" | |
| : "${MMVU_VIDEO_MAX_PIXELS:=262144}" | |
| : "${MMVU_VIDEO_TOTAL_PIXELS:=0}" | |
| : "${MMVU_MAX_FRAMES:=384}" | |
| : "${MMVU_FPS:=2}" | |
| : "${MMVU_PROMPT_MODE:=default}" | |
| # Qwen3.5 native: MMVU_PROMPT_MODE=qwen MMVU_ENABLE_THINKING=true with large | |
| # MMVU_MAX_NEW_TOKENS / sampling, mirroring VideoMMMU. | |
| : "${MMVU_ENABLE_THINKING:=false}" | |
| : "${MMVU_TEMPERATURE:=0.0}" | |
| : "${MMVU_TOP_P:=1.0}" | |
| : "${MMVU_TOP_K:=-1}" | |
| : "${MMVU_PRESENCE_PENALTY:=0.0}" | |
| : "${MMVU_MIN_P:=0.0}" | |
| : "${MMVU_MAX_SAMPLES:=0}" | |
| : "${MMVU_SETTING:=mmvu-mc-f${MMVU_MAX_FRAMES}-fps${MMVU_FPS}-min${MMVU_VIDEO_MIN_PIXELS}-max${MMVU_VIDEO_MAX_PIXELS}-total${MMVU_VIDEO_TOTAL_PIXELS}-${MMVU_PROMPT_MODE}}" | |
| # MVBench defaults (multi-task short-video multiple-choice). | |
| : "${MVBENCH_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/mvbench.json}" | |
| : "${MVBENCH_VIDEO_ROOT:=${PROJECT_DIR}/data/eval/mvbench}" | |
| : "${MVBENCH_BATCH_SIZE:=1}" | |
| : "${MVBENCH_MAX_MODEL_LEN:=65536}" | |
| : "${MVBENCH_MAX_NEW_TOKENS:=128}" | |
| : "${MVBENCH_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${MVBENCH_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${MVBENCH_VIDEO_MIN_PIXELS:=4096}" | |
| : "${MVBENCH_VIDEO_MAX_PIXELS:=262144}" | |
| : "${MVBENCH_VIDEO_TOTAL_PIXELS:=0}" | |
| : "${MVBENCH_MAX_FRAMES:=384}" | |
| : "${MVBENCH_FPS:=2}" | |
| : "${MVBENCH_PROMPT_MODE:=default}" | |
| : "${MVBENCH_ENABLE_THINKING:=false}" | |
| : "${MVBENCH_TEMPERATURE:=0.0}" | |
| : "${MVBENCH_TOP_P:=1.0}" | |
| : "${MVBENCH_TOP_K:=-1}" | |
| : "${MVBENCH_PRESENCE_PENALTY:=0.0}" | |
| : "${MVBENCH_MIN_P:=0.0}" | |
| : "${MVBENCH_MAX_SAMPLES:=0}" | |
| : "${MVBENCH_SETTING:=mvbench-f${MVBENCH_MAX_FRAMES}-fps${MVBENCH_FPS}-min${MVBENCH_VIDEO_MIN_PIXELS}-max${MVBENCH_VIDEO_MAX_PIXELS}-total${MVBENCH_VIDEO_TOTAL_PIXELS}-${MVBENCH_PROMPT_MODE}}" | |
| # Video-Holmes defaults (all multiple-choice, raw cropped videos). | |
| # Download: huggingface-cli download TencentARC/Video-Holmes --repo-type dataset | |
| # Build: python scripts/build_videoholmes.py | |
| : "${VIDEOHOLMES_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/videoholmes.jsonl}" | |
| : "${VIDEOHOLMES_VIDEO_ROOT:=${PROJECT_DIR}/data/eval/videoholmes}" | |
| : "${VIDEOHOLMES_BATCH_SIZE:=1}" | |
| : "${VIDEOHOLMES_MAX_MODEL_LEN:=65536}" | |
| : "${VIDEOHOLMES_MAX_NEW_TOKENS:=128}" | |
| : "${VIDEOHOLMES_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${VIDEOHOLMES_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${VIDEOHOLMES_VIDEO_MIN_PIXELS:=4096}" | |
| : "${VIDEOHOLMES_VIDEO_MAX_PIXELS:=262144}" | |
| : "${VIDEOHOLMES_VIDEO_TOTAL_PIXELS:=0}" | |
| : "${VIDEOHOLMES_MAX_FRAMES:=384}" | |
| : "${VIDEOHOLMES_FPS:=2}" | |
| : "${VIDEOHOLMES_PROMPT_MODE:=default}" | |
| # Official benchmark prompt is reasoning-style: | |
| # VIDEOHOLMES_PROMPT_MODE=holmes VIDEOHOLMES_ENABLE_THINKING=true VIDEOHOLMES_MAX_NEW_TOKENS=1024 | |
| : "${VIDEOHOLMES_ENABLE_THINKING:=false}" | |
| : "${VIDEOHOLMES_TEMPERATURE:=0.0}" | |
| : "${VIDEOHOLMES_TOP_P:=1.0}" | |
| : "${VIDEOHOLMES_TOP_K:=-1}" | |
| : "${VIDEOHOLMES_PRESENCE_PENALTY:=0.0}" | |
| : "${VIDEOHOLMES_MIN_P:=0.0}" | |
| : "${VIDEOHOLMES_MAX_SAMPLES:=0}" | |
| : "${VIDEOHOLMES_SETTING:=videoholmes-f${VIDEOHOLMES_MAX_FRAMES}-fps${VIDEOHOLMES_FPS}-min${VIDEOHOLMES_VIDEO_MIN_PIXELS}-max${VIDEOHOLMES_VIDEO_MAX_PIXELS}-total${VIDEOHOLMES_VIDEO_TOTAL_PIXELS}-${VIDEOHOLMES_PROMPT_MODE}}" | |
| # LongVideoBench defaults. Main videos/subtitles repo is gated; after getting | |
| # access, download/extract to LONGVIDEOBENCH_VIDEO_ROOT with videos/ + subtitles/. | |
| # Build validation JSONL: python scripts/build_longvideobench.py | |
| : "${LONGVIDEOBENCH_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/longvideobench_val.jsonl}" | |
| : "${LONGVIDEOBENCH_VIDEO_ROOT:=${PROJECT_DIR}/data/eval/longvideobench}" | |
| : "${LONGVIDEOBENCH_SUBTITLE_ROOT:=$LONGVIDEOBENCH_VIDEO_ROOT}" | |
| : "${LONGVIDEOBENCH_USE_SUBTITLES:=true}" | |
| : "${LONGVIDEOBENCH_BATCH_SIZE:=1}" | |
| : "${LONGVIDEOBENCH_MAX_MODEL_LEN:=65536}" | |
| : "${LONGVIDEOBENCH_MAX_NEW_TOKENS:=128}" | |
| : "${LONGVIDEOBENCH_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${LONGVIDEOBENCH_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${LONGVIDEOBENCH_VIDEO_MIN_PIXELS:=4096}" | |
| : "${LONGVIDEOBENCH_VIDEO_MAX_PIXELS:=262144}" | |
| : "${LONGVIDEOBENCH_VIDEO_TOTAL_PIXELS:=0}" | |
| : "${LONGVIDEOBENCH_MAX_FRAMES:=384}" | |
| : "${LONGVIDEOBENCH_FPS:=2}" | |
| : "${LONGVIDEOBENCH_PROMPT_MODE:=default}" | |
| : "${LONGVIDEOBENCH_ENABLE_THINKING:=false}" | |
| : "${LONGVIDEOBENCH_TEMPERATURE:=0.0}" | |
| : "${LONGVIDEOBENCH_TOP_P:=1.0}" | |
| : "${LONGVIDEOBENCH_TOP_K:=-1}" | |
| : "${LONGVIDEOBENCH_PRESENCE_PENALTY:=0.0}" | |
| : "${LONGVIDEOBENCH_MIN_P:=0.0}" | |
| : "${LONGVIDEOBENCH_MAX_SAMPLES:=0}" | |
| : "${LONGVIDEOBENCH_SETTING:=longvideobench-val-f${LONGVIDEOBENCH_MAX_FRAMES}-fps${LONGVIDEOBENCH_FPS}-min${LONGVIDEOBENCH_VIDEO_MIN_PIXELS}-max${LONGVIDEOBENCH_VIDEO_MAX_PIXELS}-total${LONGVIDEOBENCH_VIDEO_TOTAL_PIXELS}-${LONGVIDEOBENCH_PROMPT_MODE}}" | |
| # LVBench defaults (long-video multiple-choice; independent from LongVideoBench). | |
| : "${LVBENCH_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/lvbench.json}" | |
| : "${LVBENCH_VIDEO_ROOT:=${PROJECT_DIR}/data/eval/lvbench}" | |
| : "${LVBENCH_BATCH_SIZE:=4}" | |
| : "${LVBENCH_MAX_MODEL_LEN:=65536}" | |
| : "${LVBENCH_MAX_NEW_TOKENS:=128}" | |
| : "${LVBENCH_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${LVBENCH_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${LVBENCH_VIDEO_MIN_PIXELS:=4096}" | |
| : "${LVBENCH_VIDEO_MAX_PIXELS:=262144}" | |
| : "${LVBENCH_VIDEO_TOTAL_PIXELS:=0}" | |
| : "${LVBENCH_MAX_FRAMES:=128}" | |
| : "${LVBENCH_FPS:=2}" | |
| : "${LVBENCH_PROMPT_MODE:=default}" | |
| : "${LVBENCH_ENABLE_THINKING:=false}" | |
| : "${LVBENCH_TEMPERATURE:=0.0}" | |
| : "${LVBENCH_TOP_P:=1.0}" | |
| : "${LVBENCH_TOP_K:=-1}" | |
| : "${LVBENCH_PRESENCE_PENALTY:=0.0}" | |
| : "${LVBENCH_MIN_P:=0.0}" | |
| : "${LVBENCH_SETTING:=lvbench-f${LVBENCH_MAX_FRAMES}-fps${LVBENCH_FPS}-min${LVBENCH_VIDEO_MIN_PIXELS}-max${LVBENCH_VIDEO_MAX_PIXELS}-total${LVBENCH_VIDEO_TOTAL_PIXELS}-${LVBENCH_PROMPT_MODE}}" | |
| # MLVU defaults (dev multiple-choice subset = 7 tasks, M-Avg). | |
| # Build the MC JSONL once: python scripts/build_mlvu_mc.py | |
| : "${MLVU_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/mlvu_mc.jsonl}" | |
| : "${MLVU_VIDEO_ROOT:=${PROJECT_DIR}/data/eval/mlvu}" | |
| : "${MLVU_BATCH_SIZE:=1}" | |
| : "${MLVU_MAX_MODEL_LEN:=65536}" | |
| : "${MLVU_MAX_NEW_TOKENS:=128}" | |
| : "${MLVU_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${MLVU_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${MLVU_VIDEO_MIN_PIXELS:=4096}" | |
| : "${MLVU_VIDEO_MAX_PIXELS:=262144}" | |
| : "${MLVU_VIDEO_TOTAL_PIXELS:=0}" | |
| : "${MLVU_MAX_FRAMES:=384}" | |
| : "${MLVU_FPS:=2}" | |
| : "${MLVU_PROMPT_MODE:=default}" | |
| : "${MLVU_ENABLE_THINKING:=false}" | |
| : "${MLVU_TEMPERATURE:=0.0}" | |
| : "${MLVU_TOP_P:=1.0}" | |
| : "${MLVU_TOP_K:=-1}" | |
| : "${MLVU_PRESENCE_PENALTY:=0.0}" | |
| : "${MLVU_MIN_P:=0.0}" | |
| : "${MLVU_MAX_SAMPLES:=0}" | |
| : "${MLVU_SETTING:=mlvu-mc-f${MLVU_MAX_FRAMES}-fps${MLVU_FPS}-min${MLVU_VIDEO_MIN_PIXELS}-max${MLVU_VIDEO_MAX_PIXELS}-total${MLVU_VIDEO_TOTAL_PIXELS}-${MLVU_PROMPT_MODE}}" | |
| # VSI-Bench defaults. | |
| : "${VSI_SETTING:=video128-16M-video-f128-fps2-min65536-maxnone-total16777216-vsibench_preprocessed_128f_16M}" | |
| : "${VSI_DATA_FILE:=${PROJECT_DIR}/eval/data/valid_data/vsibench_preprocessed_128f_16M.jsonl}" | |
| : "${VSI_PREPROCESSED_VIDEO_DIR:=${PROJECT_DIR}/data/eval/vsi/preprocessed_videos}" | |
| : "${VSI_BATCH_SIZE:=16}" | |
| : "${VSI_MAX_MODEL_LEN:=32768}" | |
| : "${VSI_MAX_NEW_TOKENS:=1024}" | |
| : "${VSI_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${VSI_EXPECTED_SAMPLES:=5130}" | |
| # MMSI-Bench defaults. Transformers is used so every image can be retained; | |
| # set MMSI_BACKEND=vllm and MMSI_MAX_IMAGES=8 for the legacy path. | |
| : "${MMSI_BACKEND:=transformers}" | |
| : "${MMSI_DATA_FILE:=${PROJECT_DIR}/data/eval/mmsi/MMSI_bench.tsv}" | |
| : "${MMSI_IMAGE_MIN_PIXELS:=4096}" | |
| : "${MMSI_IMAGE_MAX_PIXELS:=262144}" | |
| if [[ "${MMSI_BACKEND}" == "transformers" ]]; then | |
| : "${MMSI_MAX_IMAGES:=0}" | |
| else | |
| : "${MMSI_MAX_IMAGES:=8}" | |
| fi | |
| : "${MMSI_IMAGE_COUNT_TAG:=$([[ "${MMSI_MAX_IMAGES}" -le 0 ]] && echo all || echo "${MMSI_MAX_IMAGES}")}" | |
| : "${MMSI_SETTING:=${MMSI_BACKEND}-img-min${MMSI_IMAGE_MIN_PIXELS}-max${MMSI_IMAGE_MAX_PIXELS}-n${MMSI_IMAGE_COUNT_TAG}-all-MMSI_bench}" | |
| : "${MMSI_BATCH_SIZE:=16}" | |
| : "${MMSI_MAX_MODEL_LEN:=32768}" | |
| : "${MMSI_MAX_NEW_TOKENS:=1024}" | |
| : "${MMSI_MAX_NUM_BATCHED_TOKENS:=32768}" | |
| : "${MMSI_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${MMSI_MAX_SAMPLES:=0}" | |
| : "${MMSI_CATEGORY:=}" | |
| : "${MMSI_ENABLE_THINKING:=false}" | |
| : "${MMSI_ATTN_IMPLEMENTATION:=flash_attention_2}" | |
| if [[ -n "${MMSI_CATEGORY}" || "${MMSI_MAX_SAMPLES}" != "0" ]]; then | |
| : "${MMSI_EXPECTED_SAMPLES:=0}" | |
| else | |
| : "${MMSI_EXPECTED_SAMPLES:=1000}" | |
| fi | |
| # MindCube-Tiny defaults. | |
| : "${MINDCUBE_SETTING:=img-min4096-max262144-n4-official-tiny1050}" | |
| : "${MINDCUBE_DATA_FILE:=${PROJECT_DIR}/data/eval/mindcube_official/combined-00000-of-00001.parquet}" | |
| : "${MINDCUBE_MAX_IMAGES:=4}" | |
| : "${MINDCUBE_EXPECTED_SAMPLES:=1050}" | |
| : "${MINDCUBE_HF_CACHE_DIR:=}" | |
| : "${MINDCUBE_BATCH_SIZE:=16}" | |
| : "${MINDCUBE_MAX_MODEL_LEN:=32768}" | |
| : "${MINDCUBE_MAX_NEW_TOKENS:=1024}" | |
| : "${MINDCUBE_MAX_NUM_BATCHED_TOKENS:=32768}" | |
| : "${MINDCUBE_GPU_MEMORY_UTILIZATION:=0.90}" | |
| # ReVSI defaults. The all-frame/native-frame profile reproduces the 58.2 result | |
| # reported for Video-ORA-9B; ReVSI remains excluded from the three-benchmark | |
| # spatial-intelligence average. | |
| : "${REVSI_DATA_FILE:=${PROJECT_DIR}/data/eval/revsi/all_frame/test-00000-of-00001.parquet}" | |
| : "${REVSI_VIDEO_ROOT:=${PROJECT_DIR}/data/eval/revsi}" | |
| : "${REVSI_FRAME_BUDGET:=all}" | |
| : "${REVSI_MAX_FRAMES:=128}" | |
| : "${REVSI_EXACT_NFRAMES:=true}" | |
| : "${REVSI_FPS:=2}" | |
| : "${REVSI_VIDEO_MIN_PIXELS:=65536}" | |
| : "${REVSI_VIDEO_MAX_PIXELS:=}" | |
| : "${REVSI_VIDEO_TOTAL_PIXELS:=16777216}" | |
| : "${REVSI_BATCH_SIZE:=16}" | |
| : "${REVSI_MAX_MODEL_LEN:=32768}" | |
| : "${REVSI_MAX_NEW_TOKENS:=64}" | |
| : "${REVSI_GPU_MEMORY_UTILIZATION:=0.90}" | |
| : "${REVSI_MAX_SAMPLES:=0}" | |
| : "${REVSI_EXPECTED_SAMPLES:=6808}" | |
| : "${REVSI_TASK_FILTER:=}" | |
| : "${REVSI_ENABLE_THINKING:=false}" | |
| : "${REVSI_SETTING:=native-all-f${REVSI_MAX_FRAMES}-exact${REVSI_EXACT_NFRAMES}-fps${REVSI_FPS}-min${REVSI_VIDEO_MIN_PIXELS}-max${REVSI_VIDEO_MAX_PIXELS:-none}-total${REVSI_VIDEO_TOTAL_PIXELS}}" | |
| # Spatial grounding defaults, aligned to data/joint/sft_joint_all.jsonl. | |
| : "${SPATIAL_GROUNDING_DATASETS:=refcoco-val,refcoco-testA,refcoco-testB,refcoco+-val,refcoco+-testA,refcoco+-testB,refcocog-val,refcocog-test}" | |
| : "${SPATIAL_GROUNDING_BENCH_DIR:=${PROJECT_DIR}/eval/task/spatial_grounding}" | |
| : "${SPATIAL_GROUNDING_IMAGE_ROOT:=${PROJECT_DIR}/data/eval/spatial_grounding/images}" | |
| : "${SPATIAL_GROUNDING_PROCESSOR_PATH:=$MODEL_PATH}" | |
| : "${SPATIAL_GROUNDING_PROMPT_STYLE:=qwen_native}" | |
| : "${SPATIAL_GROUNDING_COORD_SYSTEM:=norm1000}" | |
| : "${SPATIAL_GROUNDING_BBOX_SELECT:=first}" | |
| : "${SPATIAL_GROUNDING_MIN_TOKENS:=64}" | |
| : "${SPATIAL_GROUNDING_TOTAL_TOKENS:=1024}" | |
| : "${SPATIAL_GROUNDING_BATCH_SIZE:=64}" | |
| : "${SPATIAL_GROUNDING_MAX_MODEL_LEN:=32768}" | |
| : "${SPATIAL_GROUNDING_MAX_NEW_TOKENS:=1024}" | |
| : "${SPATIAL_GROUNDING_MAX_NUM_BATCHED_TOKENS:=32768}" | |
| : "${SPATIAL_GROUNDING_GPU_MEMORY_UTILIZATION:=0.85}" | |
| : "${SPATIAL_GROUNDING_ENABLE_THINKING:=false}" | |
| : "${SPATIAL_GROUNDING_MAX_SAMPLES:=0}" | |
| : "${SPATIAL_GROUNDING_SETTING:=spatial-grounding-${SPATIAL_GROUNDING_DATASETS//,/_}-${SPATIAL_GROUNDING_PROMPT_STYLE}-min${SPATIAL_GROUNDING_MIN_TOKENS}-total${SPATIAL_GROUNDING_TOTAL_TOKENS}-new${SPATIAL_GROUNDING_MAX_NEW_TOKENS}}" | |
| # Tracking defaults, aligned to data/joint/sft_joint_all.jsonl tracking videos. | |
| : "${TRACKING_DATASETS:=eval_got10k}" | |
| : "${TRACKING_BENCH_DIR:=${PROJECT_DIR}/data/eval/tracking}" | |
| : "${TRACKING_BASE_PREFIX:=$TRACKING_BENCH_DIR}" | |
| : "${TRACKING_PROCESSOR_PATH:=$MODEL_PATH}" | |
| : "${TRACKING_VIDEO_MIN_PIXELS:=4096}" | |
| : "${TRACKING_VIDEO_MAX_PIXELS:=786432}" | |
| : "${TRACKING_VIDEO_TOTAL_PIXELS:=8388608}" | |
| : "${TRACKING_MAX_FRAMES:=32}" | |
| : "${TRACKING_FPS:=1}" | |
| : "${TRACKING_MAX_MODEL_LEN:=32768}" | |
| : "${TRACKING_MAX_NEW_TOKENS:=8192}" | |
| : "${TRACKING_MAX_NUM_BATCHED_TOKENS:=32768}" | |
| : "${TRACKING_BATCH_SIZE:=64}" | |
| : "${TRACKING_GPU_MEMORY_UTILIZATION:=0.95}" | |
| : "${TRACKING_ENABLE_THINKING:=false}" | |
| : "${TRACKING_PROMPT_MODE:=default}" | |
| : "${TRACKING_CHUNKED_REPROMPT:=0}" | |
| : "${TRACKING_REPROMPT_USE_GT_FIRST_BOX:=0}" | |
| : "${TRACKING_MAX_SAMPLES:=0}" | |
| : "${TRACKING_SETTING:=tracking-${TRACKING_DATASETS//,/_}-f${TRACKING_MAX_FRAMES}-fps${TRACKING_FPS}-min${TRACKING_VIDEO_MIN_PIXELS}-max${TRACKING_VIDEO_MAX_PIXELS}-total${TRACKING_VIDEO_TOTAL_PIXELS}-new${TRACKING_MAX_NEW_TOKENS}}" | |
| # STVG defaults, aligned to data/joint/sft_joint_all.jsonl stvg videos. | |
| : "${STVG_DATASETS:=eval_stvg}" | |
| : "${STVG_BENCH_DIR:=${PROJECT_DIR}/data/eval/stvg}" | |
| : "${STVG_BASE_PREFIX:=$STVG_BENCH_DIR}" | |
| : "${STVG_PROCESSOR_PATH:=$MODEL_PATH}" | |
| : "${STVG_VIDEO_MIN_PIXELS:=65536}" | |
| : "${STVG_VIDEO_MAX_PIXELS:=393216}" | |
| : "${STVG_VIDEO_TOTAL_PIXELS:=10485760}" | |
| : "${STVG_MAX_FRAMES:=128}" | |
| : "${STVG_FPS:=2}" | |
| : "${STVG_MAX_MODEL_LEN:=65536}" | |
| : "${STVG_MAX_NEW_TOKENS:=2048}" | |
| : "${STVG_MAX_NUM_BATCHED_TOKENS:=65536}" | |
| : "${STVG_BATCH_SIZE:=64}" | |
| : "${STVG_GPU_MEMORY_UTILIZATION:=0.85}" | |
| : "${STVG_ENABLE_THINKING:=false}" | |
| : "${STVG_PROMPT_MODE:=train_stvg}" | |
| : "${STVG_MAX_SAMPLES:=0}" | |
| : "${STVG_SETTING:=stvg-${STVG_DATASETS//,/_}-f${STVG_MAX_FRAMES}-fps${STVG_FPS}-min${STVG_VIDEO_MIN_PIXELS}-max${STVG_VIDEO_MAX_PIXELS}-total${STVG_VIDEO_TOTAL_PIXELS}-new${STVG_MAX_NEW_TOKENS}-${STVG_PROMPT_MODE}}" | |
| # Segmentation defaults. | |
| # This task is dispatched to eval/task/segmentation/run_eval_vllm.sh, | |
| # which performs vLLM inference plus optional SAM2 post-processing. | |
| : "${SEGMENTATION_DATASETS:=eval_seg_refcoco,eval_seg_refcocop,eval_seg_refcocog,eval_seg_mevis,eval_seg_reasonvos}" | |
| : "${SEGMENTATION_BENCH_DIR:=${PROJECT_DIR}/data/eval/segmentation}" | |
| : "${SEGMENTATION_DATA_ROOT:=$SEGMENTATION_BENCH_DIR}" | |
| : "${SEGMENTATION_PROCESSOR_PATH:=$MODEL_PATH}" | |
| : "${SEGMENTATION_DATA_TYPE:=all}" | |
| # train_seg mirrors the prompt used in joint SFT training data | |
| # (data/train/seg_image_nothink_evalaware.jsonl, seg_video_nothink.jsonl). | |
| : "${SEGMENTATION_PROMPT_MODE:=train_seg}" | |
| : "${SEGMENTATION_ENABLE_THINKING:=false}" | |
| : "${SEGMENTATION_BATCH_SIZE:=16}" | |
| : "${SEGMENTATION_MAX_NEW_TOKENS:=1024}" | |
| : "${SEGMENTATION_MAX_MODEL_LEN:=32768}" | |
| : "${SEGMENTATION_MAX_PIXELS_IMAGE:=1048576}" | |
| : "${SEGMENTATION_MIN_PIXELS_IMAGE:=4096}" | |
| : "${SEGMENTATION_VIDEO_MAX_PIXELS:=262144}" | |
| : "${SEGMENTATION_VIDEO_MIN_PIXELS:=4096}" | |
| : "${SEGMENTATION_VIDEO_TOTAL_PIXELS:=16777216}" | |
| : "${SEGMENTATION_MAX_FRAMES:=128}" | |
| : "${SEGMENTATION_FPS:=2}" | |
| : "${SEGMENTATION_VIDEO_READER:=decord}" | |
| : "${SEGMENTATION_GPU_MEM_UTIL:=0.85}" | |
| : "${SEGMENTATION_SEED:=42}" | |
| : "${SEGMENTATION_MAX_SAMPLES:=}" | |
| : "${SEGMENTATION_RUN_SAM2:=false}" | |
| : "${SEGMENTATION_SAM2_CKPT:=${PROJECT_DIR}/models/sam2/sam2.1_hiera_large.pt}" | |
| : "${SEGMENTATION_SAM2_CFG:=configs/sam2.1/sam2.1_hiera_l.yaml}" | |
| : "${SEGMENTATION_POSTPROCESSOR_PATH:=${PROJECT_DIR}/third_party/OneThinker/Evaluation/Eval/seg_post_sam2.py}" | |
| # SAM2 post-processing parallelism. world_size = NUM_GPUS * WORKERS_PER_GPU. | |
| # With a large SAM2_EPOCH_SIZE (single epoch) + maxtasksperchild=1, EACH worker | |
| # loads the SAM2 model exactly ONCE at startup and then streams its whole slice | |
| # (no repeated reloads). So WORKERS_PER_GPU only trades GPU utilization vs total | |
| # process count: too high (32 -> 256 procs) exhausts CPU/RAM/ffmpeg/handles and | |
| # aborts; too low (1) underutilizes the GPU. 4 per GPU is a balance (8 GPUs -> 32 | |
| # persistent workers, 32 one-time loads); bump to 6-8 if GPU is still not full. | |
| # Leave NUM_GPUS empty to auto-use all visible GPUs. | |
| : "${SEGMENTATION_SAM2_NUM_GPUS:=}" | |
| : "${SEGMENTATION_SAM2_WORKERS_PER_GPU:=8}" | |
| : "${SEGMENTATION_SETTING:=segmentation-${SEGMENTATION_DATASETS//,/_}-${SEGMENTATION_PROMPT_MODE}-f${SEGMENTATION_MAX_FRAMES}-fps${SEGMENTATION_FPS}-min${SEGMENTATION_VIDEO_MIN_PIXELS}-max${SEGMENTATION_VIDEO_MAX_PIXELS}-total${SEGMENTATION_VIDEO_TOTAL_PIXELS}-new${SEGMENTATION_MAX_NEW_TOKENS}}" | |
| # TimeLens-Bench temporal grounding defaults. | |
| # This task uses HuggingFace transformers, not vLLM. | |
| : "${TIMELENS_DATASETS:=charades-timelens}" | |
| : "${TIMELENS_BENCH_DIR:=${PROJECT_DIR}/data/eval/temporal_grounding}" | |
| : "${TIMELENS_ENABLE_THINKING:=false}" | |
| : "${TIMELENS_MIN_TOKENS:=1}" | |
| : "${TIMELENS_TOTAL_TOKENS:=128000}" | |
| : "${TIMELENS_MAX_PIXELS:=409600}" | |
| : "${TIMELENS_MAX_FRAMES:=2048}" | |
| : "${TIMELENS_FPS:=4}" | |
| : "${TIMELENS_MAX_NEW_TOKENS:=128}" | |
| : "${TIMELENS_REPETITION_PENALTY:=1.0}" | |
| : "${TIMELENS_STOP_AFTER_ANSWER:=true}" | |
| : "${TIMELENS_PROMPT_MODE:=same}" | |
| : "${TIMELENS_NUM_WORKERS:=2}" | |
| : "${TIMELENS_MAX_SAMPLES:=0}" | |
| export MODEL_PATH TASKS GPUS TP_SIZE SHARD_MODE VIDEO_CACHE_SIZE PREFETCH_BATCHES | |
| export FORCE_MERGE SKIP_MERGE MERGE_LOG_DIR | |
| export VIDEOMME_SETTING VIDEOMME_DATA_FILE VIDEOMME_VIDEO_BASE VIDEOMME_VIDEO_DIR | |
| export VIDEOMME_PREPROCESSED_VIDEO_DIR VIDEOMME_VIDEO_MIN_PIXELS VIDEOMME_VIDEO_MAX_PIXELS | |
| export VIDEOMME_VIDEO_TOTAL_PIXELS VIDEOMME_MAX_FRAMES VIDEOMME_FPS | |
| export VIDEOMME_BATCH_SIZE VIDEOMME_MAX_MODEL_LEN VIDEOMME_MAX_NEW_TOKENS | |
| export VIDEOMME_MAX_NUM_BATCHED_TOKENS VIDEOMME_GPU_MEMORY_UTILIZATION | |
| export VIDEOMME_MAX_SAMPLES | |
| export VIDEOMMEV2_SETTING VIDEOMMEV2_DATA_FILE VIDEOMMEV2_VIDEO_BASE VIDEOMMEV2_VIDEO_DIR | |
| export VIDEOMMEV2_PREPROCESSED_VIDEO_DIR VIDEOMMEV2_VIDEO_MIN_PIXELS VIDEOMMEV2_VIDEO_MAX_PIXELS | |
| export VIDEOMMEV2_VIDEO_TOTAL_PIXELS VIDEOMMEV2_MAX_FRAMES VIDEOMMEV2_FPS | |
| export VIDEOMMEV2_BATCH_SIZE VIDEOMMEV2_MAX_MODEL_LEN VIDEOMMEV2_MAX_NEW_TOKENS | |
| export VIDEOMMEV2_MAX_NUM_BATCHED_TOKENS VIDEOMMEV2_GPU_MEMORY_UTILIZATION | |
| export VIDEOMMEV2_PROMPT_MODE VIDEOMMEV2_ANSWER_FILTER VIDEOMMEV2_MAX_SAMPLES | |
| export VIDEOMMMU_SETTING VIDEOMMMU_DATA_FILE VIDEOMMMU_VIDEO_ROOT | |
| export VIDEOMMMU_BATCH_SIZE VIDEOMMMU_MAX_MODEL_LEN VIDEOMMMU_MAX_NEW_TOKENS | |
| export VIDEOMMMU_MAX_NUM_BATCHED_TOKENS VIDEOMMMU_GPU_MEMORY_UTILIZATION | |
| export VIDEOMMMU_VIDEO_MIN_PIXELS VIDEOMMMU_VIDEO_MAX_PIXELS VIDEOMMMU_VIDEO_TOTAL_PIXELS | |
| export VIDEOMMMU_MAX_FRAMES VIDEOMMMU_FPS VIDEOMMMU_PROMPT_MODE VIDEOMMMU_IMAGE_MAX_PIXELS | |
| export VIDEOMMMU_ENABLE_THINKING VIDEOMMMU_TEMPERATURE VIDEOMMMU_TOP_P VIDEOMMMU_TOP_K | |
| export VIDEOMMMU_PRESENCE_PENALTY VIDEOMMMU_MIN_P | |
| export MMVU_SETTING MMVU_DATA_FILE MMVU_VIDEO_ROOT MMVU_BATCH_SIZE | |
| export MMVU_MAX_MODEL_LEN MMVU_MAX_NEW_TOKENS MMVU_MAX_NUM_BATCHED_TOKENS | |
| export MMVU_GPU_MEMORY_UTILIZATION MMVU_VIDEO_MIN_PIXELS MMVU_VIDEO_MAX_PIXELS | |
| export MMVU_VIDEO_TOTAL_PIXELS MMVU_MAX_FRAMES MMVU_FPS MMVU_PROMPT_MODE | |
| export MMVU_ENABLE_THINKING MMVU_TEMPERATURE MMVU_TOP_P MMVU_TOP_K | |
| export MMVU_PRESENCE_PENALTY MMVU_MIN_P MMVU_MAX_SAMPLES | |
| export MVBENCH_SETTING MVBENCH_DATA_FILE MVBENCH_VIDEO_ROOT MVBENCH_BATCH_SIZE | |
| export MVBENCH_MAX_MODEL_LEN MVBENCH_MAX_NEW_TOKENS MVBENCH_MAX_NUM_BATCHED_TOKENS | |
| export MVBENCH_GPU_MEMORY_UTILIZATION MVBENCH_VIDEO_MIN_PIXELS MVBENCH_VIDEO_MAX_PIXELS | |
| export MVBENCH_VIDEO_TOTAL_PIXELS MVBENCH_MAX_FRAMES MVBENCH_FPS MVBENCH_PROMPT_MODE | |
| export MVBENCH_ENABLE_THINKING MVBENCH_TEMPERATURE MVBENCH_TOP_P MVBENCH_TOP_K | |
| export MVBENCH_PRESENCE_PENALTY MVBENCH_MIN_P MVBENCH_MAX_SAMPLES | |
| export VIDEOHOLMES_SETTING VIDEOHOLMES_DATA_FILE VIDEOHOLMES_VIDEO_ROOT VIDEOHOLMES_BATCH_SIZE | |
| export VIDEOHOLMES_MAX_MODEL_LEN VIDEOHOLMES_MAX_NEW_TOKENS VIDEOHOLMES_MAX_NUM_BATCHED_TOKENS | |
| export VIDEOHOLMES_GPU_MEMORY_UTILIZATION VIDEOHOLMES_VIDEO_MIN_PIXELS VIDEOHOLMES_VIDEO_MAX_PIXELS | |
| export VIDEOHOLMES_VIDEO_TOTAL_PIXELS VIDEOHOLMES_MAX_FRAMES VIDEOHOLMES_FPS VIDEOHOLMES_PROMPT_MODE | |
| export VIDEOHOLMES_ENABLE_THINKING VIDEOHOLMES_TEMPERATURE VIDEOHOLMES_TOP_P VIDEOHOLMES_TOP_K | |
| export VIDEOHOLMES_PRESENCE_PENALTY VIDEOHOLMES_MIN_P VIDEOHOLMES_MAX_SAMPLES | |
| export LONGVIDEOBENCH_SETTING LONGVIDEOBENCH_DATA_FILE LONGVIDEOBENCH_VIDEO_ROOT | |
| export LONGVIDEOBENCH_SUBTITLE_ROOT LONGVIDEOBENCH_USE_SUBTITLES LONGVIDEOBENCH_BATCH_SIZE | |
| export LONGVIDEOBENCH_MAX_MODEL_LEN LONGVIDEOBENCH_MAX_NEW_TOKENS LONGVIDEOBENCH_MAX_NUM_BATCHED_TOKENS | |
| export LONGVIDEOBENCH_GPU_MEMORY_UTILIZATION LONGVIDEOBENCH_VIDEO_MIN_PIXELS LONGVIDEOBENCH_VIDEO_MAX_PIXELS | |
| export LONGVIDEOBENCH_VIDEO_TOTAL_PIXELS LONGVIDEOBENCH_MAX_FRAMES LONGVIDEOBENCH_FPS LONGVIDEOBENCH_PROMPT_MODE | |
| export LONGVIDEOBENCH_ENABLE_THINKING LONGVIDEOBENCH_TEMPERATURE LONGVIDEOBENCH_TOP_P LONGVIDEOBENCH_TOP_K | |
| export LONGVIDEOBENCH_PRESENCE_PENALTY LONGVIDEOBENCH_MIN_P LONGVIDEOBENCH_MAX_SAMPLES | |
| export LVBENCH_SETTING LVBENCH_DATA_FILE LVBENCH_VIDEO_ROOT LVBENCH_BATCH_SIZE | |
| export LVBENCH_MAX_MODEL_LEN LVBENCH_MAX_NEW_TOKENS LVBENCH_MAX_NUM_BATCHED_TOKENS | |
| export LVBENCH_GPU_MEMORY_UTILIZATION LVBENCH_VIDEO_MIN_PIXELS LVBENCH_VIDEO_MAX_PIXELS | |
| export LVBENCH_VIDEO_TOTAL_PIXELS LVBENCH_MAX_FRAMES LVBENCH_FPS LVBENCH_PROMPT_MODE | |
| export LVBENCH_ENABLE_THINKING LVBENCH_TEMPERATURE LVBENCH_TOP_P LVBENCH_TOP_K | |
| export LVBENCH_PRESENCE_PENALTY LVBENCH_MIN_P | |
| export MLVU_SETTING MLVU_DATA_FILE MLVU_VIDEO_ROOT MLVU_BATCH_SIZE | |
| export MLVU_MAX_MODEL_LEN MLVU_MAX_NEW_TOKENS MLVU_MAX_NUM_BATCHED_TOKENS | |
| export MLVU_GPU_MEMORY_UTILIZATION MLVU_VIDEO_MIN_PIXELS MLVU_VIDEO_MAX_PIXELS | |
| export MLVU_VIDEO_TOTAL_PIXELS MLVU_MAX_FRAMES MLVU_FPS MLVU_PROMPT_MODE | |
| export MLVU_ENABLE_THINKING MLVU_TEMPERATURE MLVU_TOP_P MLVU_TOP_K | |
| export MLVU_PRESENCE_PENALTY MLVU_MIN_P MLVU_MAX_SAMPLES | |
| export VSI_SETTING VSI_DATA_FILE VSI_PREPROCESSED_VIDEO_DIR | |
| export VSI_BATCH_SIZE VSI_MAX_MODEL_LEN VSI_MAX_NEW_TOKENS VSI_GPU_MEMORY_UTILIZATION | |
| export VSI_EXPECTED_SAMPLES | |
| export MMSI_BACKEND MMSI_SETTING MMSI_DATA_FILE MMSI_MAX_IMAGES MMSI_BATCH_SIZE | |
| export MMSI_IMAGE_MIN_PIXELS MMSI_IMAGE_MAX_PIXELS MMSI_IMAGE_COUNT_TAG | |
| export MMSI_MAX_MODEL_LEN MMSI_MAX_NEW_TOKENS MMSI_MAX_NUM_BATCHED_TOKENS | |
| export MMSI_GPU_MEMORY_UTILIZATION MMSI_MAX_SAMPLES MMSI_CATEGORY | |
| export MMSI_ENABLE_THINKING MMSI_ATTN_IMPLEMENTATION MMSI_EXPECTED_SAMPLES | |
| export MINDCUBE_SETTING MINDCUBE_DATA_FILE MINDCUBE_MAX_IMAGES MINDCUBE_BATCH_SIZE | |
| export MINDCUBE_MAX_MODEL_LEN MINDCUBE_MAX_NEW_TOKENS MINDCUBE_MAX_NUM_BATCHED_TOKENS | |
| export MINDCUBE_GPU_MEMORY_UTILIZATION MINDCUBE_EXPECTED_SAMPLES MINDCUBE_HF_CACHE_DIR | |
| export REVSI_SETTING REVSI_DATA_FILE REVSI_VIDEO_ROOT REVSI_FRAME_BUDGET | |
| export REVSI_MAX_FRAMES REVSI_EXACT_NFRAMES REVSI_FPS | |
| export REVSI_VIDEO_MIN_PIXELS REVSI_VIDEO_MAX_PIXELS REVSI_VIDEO_TOTAL_PIXELS | |
| export REVSI_BATCH_SIZE REVSI_MAX_MODEL_LEN REVSI_MAX_NEW_TOKENS | |
| export REVSI_GPU_MEMORY_UTILIZATION REVSI_MAX_SAMPLES REVSI_EXPECTED_SAMPLES | |
| export REVSI_TASK_FILTER REVSI_ENABLE_THINKING | |
| export SPATIAL_GROUNDING_SETTING SPATIAL_GROUNDING_DATASETS SPATIAL_GROUNDING_BENCH_DIR | |
| export SPATIAL_GROUNDING_IMAGE_ROOT SPATIAL_GROUNDING_PROCESSOR_PATH SPATIAL_GROUNDING_PROMPT_STYLE | |
| export SPATIAL_GROUNDING_COORD_SYSTEM SPATIAL_GROUNDING_BBOX_SELECT | |
| export SPATIAL_GROUNDING_MIN_TOKENS SPATIAL_GROUNDING_TOTAL_TOKENS | |
| export SPATIAL_GROUNDING_BATCH_SIZE SPATIAL_GROUNDING_MAX_MODEL_LEN | |
| export SPATIAL_GROUNDING_MAX_NEW_TOKENS SPATIAL_GROUNDING_MAX_NUM_BATCHED_TOKENS | |
| export SPATIAL_GROUNDING_GPU_MEMORY_UTILIZATION SPATIAL_GROUNDING_ENABLE_THINKING | |
| export SPATIAL_GROUNDING_MAX_SAMPLES | |
| export TRACKING_SETTING TRACKING_DATASETS TRACKING_BENCH_DIR TRACKING_BASE_PREFIX | |
| export TRACKING_PROCESSOR_PATH TRACKING_VIDEO_MIN_PIXELS TRACKING_VIDEO_MAX_PIXELS | |
| export TRACKING_VIDEO_TOTAL_PIXELS TRACKING_MAX_FRAMES TRACKING_FPS | |
| export TRACKING_MAX_MODEL_LEN TRACKING_MAX_NEW_TOKENS TRACKING_MAX_NUM_BATCHED_TOKENS | |
| export TRACKING_BATCH_SIZE TRACKING_GPU_MEMORY_UTILIZATION TRACKING_ENABLE_THINKING | |
| export TRACKING_PROMPT_MODE TRACKING_CHUNKED_REPROMPT TRACKING_REPROMPT_USE_GT_FIRST_BOX | |
| export TRACKING_MAX_SAMPLES | |
| export STVG_SETTING STVG_DATASETS STVG_BENCH_DIR STVG_BASE_PREFIX STVG_PROCESSOR_PATH | |
| export STVG_VIDEO_MIN_PIXELS STVG_VIDEO_MAX_PIXELS STVG_VIDEO_TOTAL_PIXELS | |
| export STVG_MAX_FRAMES STVG_FPS STVG_MAX_MODEL_LEN STVG_MAX_NEW_TOKENS | |
| export STVG_MAX_NUM_BATCHED_TOKENS STVG_BATCH_SIZE STVG_GPU_MEMORY_UTILIZATION | |
| export STVG_ENABLE_THINKING STVG_PROMPT_MODE STVG_MAX_SAMPLES | |
| export SEGMENTATION_SETTING SEGMENTATION_DATASETS SEGMENTATION_BENCH_DIR SEGMENTATION_DATA_ROOT | |
| export SEGMENTATION_PROCESSOR_PATH SEGMENTATION_DATA_TYPE SEGMENTATION_PROMPT_MODE | |
| export SEGMENTATION_ENABLE_THINKING SEGMENTATION_BATCH_SIZE SEGMENTATION_MAX_NEW_TOKENS | |
| export SEGMENTATION_MAX_MODEL_LEN SEGMENTATION_MAX_PIXELS_IMAGE SEGMENTATION_MIN_PIXELS_IMAGE | |
| export SEGMENTATION_VIDEO_MAX_PIXELS SEGMENTATION_VIDEO_MIN_PIXELS SEGMENTATION_VIDEO_TOTAL_PIXELS | |
| export SEGMENTATION_MAX_FRAMES SEGMENTATION_FPS SEGMENTATION_VIDEO_READER | |
| export SEGMENTATION_GPU_MEM_UTIL SEGMENTATION_SEED | |
| export SEGMENTATION_MAX_SAMPLES | |
| export SEGMENTATION_RUN_SAM2 SEGMENTATION_SAM2_CKPT SEGMENTATION_SAM2_CFG | |
| export SEGMENTATION_SAM2_NUM_GPUS SEGMENTATION_SAM2_WORKERS_PER_GPU | |
| export TIMELENS_BENCH_DIR TIMELENS_MAX_SAMPLES | |
| # Conda env used to run eval. By default, keep the currently active environment. | |
| # Override with EVAL_CONDA_ENV=xxx only when an explicit env switch is desired. | |
| : "${EVAL_CONDA_ENV:=keep}" | |
| if [[ "${EVAL_CONDA_ENV}" != "keep" && "${CONDA_DEFAULT_ENV:-}" != "${EVAL_CONDA_ENV}" ]]; then | |
| if command -v conda >/dev/null 2>&1; then | |
| eval "$(conda shell.bash hook)" | |
| conda activate "${EVAL_CONDA_ENV}" | |
| else | |
| echo "ERROR: conda not found and CONDA_DEFAULT_ENV=${CONDA_DEFAULT_ENV:-<unset>}" >&2 | |
| exit 1 | |
| fi | |
| fi | |
| cd "${PROJECT_DIR}" | |
| resolve_model_path() { | |
| local input_path="${MODEL_PATH%/}" | |
| if ls "${input_path}"/model_world_size_*_rank_0.pt >/dev/null 2>&1; then | |
| local actor_dir="$input_path" | |
| local hf_dir="${MERGED_MODEL_PATH:-${actor_dir}/huggingface}" | |
| local need_merge=0 | |
| if [[ "${SKIP_MERGE}" = "1" ]]; then | |
| need_merge=0 | |
| elif [[ "${FORCE_MERGE}" = "1" ]]; then | |
| need_merge=1 | |
| elif [[ ! -f "${hf_dir}/model.safetensors" ]]; then | |
| need_merge=1 | |
| fi | |
| if [[ "${need_merge}" = "1" ]]; then | |
| mkdir -p "${MERGE_LOG_DIR}" | |
| local merge_log="${MERGE_LOG_DIR}/merge-$(basename "$(dirname "${actor_dir}")")-$(date +%Y%m%d_%H%M%S).log" | |
| echo "[merge] FSDP actor checkpoint detected: ${actor_dir}" | |
| echo "[merge] Merging shards -> ${hf_dir}" | |
| if [[ -n "${BASE_MODEL_PATH:-}" ]]; then | |
| python -u scripts/model_merger.py \ | |
| --local_dir "${actor_dir}" \ | |
| --base_model_path "${BASE_MODEL_PATH}" \ | |
| 2>&1 | tee "${merge_log}" | |
| else | |
| python -u scripts/model_merger.py \ | |
| --local_dir "${actor_dir}" \ | |
| 2>&1 | tee "${merge_log}" | |
| fi | |
| if [[ ! -f "${hf_dir}/model.safetensors" ]]; then | |
| echo "ERROR: merge finished but ${hf_dir}/model.safetensors was not created. Log: ${merge_log}" >&2 | |
| exit 1 | |
| fi | |
| else | |
| echo "[merge] Using existing merged HF model: ${hf_dir}" | |
| fi | |
| MODEL_PATH="${hf_dir}" | |
| export MODEL_PATH | |
| if [[ "${TRACKING_PROCESSOR_PATH%/}" = "${input_path}" ]]; then | |
| TRACKING_PROCESSOR_PATH="${MODEL_PATH}" | |
| export TRACKING_PROCESSOR_PATH | |
| fi | |
| if [[ "${STVG_PROCESSOR_PATH%/}" = "${input_path}" ]]; then | |
| STVG_PROCESSOR_PATH="${MODEL_PATH}" | |
| export STVG_PROCESSOR_PATH | |
| fi | |
| if [[ "${SPATIAL_GROUNDING_PROCESSOR_PATH%/}" = "${input_path}" ]]; then | |
| SPATIAL_GROUNDING_PROCESSOR_PATH="${MODEL_PATH}" | |
| export SPATIAL_GROUNDING_PROCESSOR_PATH | |
| fi | |
| if [[ "${SEGMENTATION_PROCESSOR_PATH%/}" = "${input_path}" ]]; then | |
| SEGMENTATION_PROCESSOR_PATH="${MODEL_PATH}" | |
| export SEGMENTATION_PROCESSOR_PATH | |
| fi | |
| elif [[ -d "${input_path}/huggingface" && -f "${input_path}/huggingface/model.safetensors" && ! -f "${input_path}/config.json" ]]; then | |
| MODEL_PATH="${input_path}/huggingface" | |
| export MODEL_PATH | |
| echo "[merge] MODEL_PATH points to a checkpoint wrapper; using ${MODEL_PATH}" | |
| fi | |
| } | |
| resolve_model_path | |
| VLLM_TASKS="" | |
| RUN_TIMELENS=0 | |
| RUN_SEGMENTATION=0 | |
| RUN_MMSI_TRANSFORMERS=0 | |
| RUN_REVSI=0 | |
| if [[ "${MMSI_BACKEND}" != "transformers" && "${MMSI_BACKEND}" != "vllm" ]]; then | |
| echo "ERROR: MMSI_BACKEND must be 'transformers' or 'vllm', got '${MMSI_BACKEND}'" >&2 | |
| exit 1 | |
| fi | |
| append_vllm_task() { | |
| local task="$1" | |
| if [[ -z "$VLLM_TASKS" ]]; then | |
| VLLM_TASKS="$task" | |
| else | |
| VLLM_TASKS="${VLLM_TASKS},${task}" | |
| fi | |
| } | |
| model_family_tag() { | |
| local model_path="${1%/}" | |
| local name | |
| name="$(basename "$model_path")" | |
| local parent | |
| local grandparent | |
| parent="$(basename "$(dirname "$model_path")")" | |
| grandparent="$(basename "$(dirname "$(dirname "$model_path")")")" | |
| if [[ "$name" == "huggingface" && "$parent" == "actor" && "$grandparent" == global_step_* ]]; then | |
| basename "$(dirname "$(dirname "$(dirname "$model_path")")")" | |
| return | |
| fi | |
| if [[ "$name" == checkpoint-* ]]; then | |
| basename "$(dirname "$(dirname "$model_path")")" | |
| else | |
| echo "$name" | |
| fi | |
| } | |
| checkpoint_tag() { | |
| local model_path="${1%/}" | |
| local name | |
| name="$(basename "$model_path")" | |
| local parent | |
| local grandparent | |
| parent="$(basename "$(dirname "$model_path")")" | |
| grandparent="$(basename "$(dirname "$(dirname "$model_path")")")" | |
| if [[ "$name" == "huggingface" && "$parent" == "actor" && "$grandparent" == global_step_* ]]; then | |
| basename "$(dirname "$(dirname "$model_path")")" | |
| return | |
| fi | |
| if [[ "$name" == checkpoint-* ]]; then | |
| echo "$name" | |
| else | |
| echo "base" | |
| fi | |
| } | |
| IFS=',' read -ra TASK_LIST <<< "$TASKS" | |
| for RAW_TASK in "${TASK_LIST[@]}"; do | |
| TASK="$(echo "$RAW_TASK" | xargs)" | |
| case "$TASK" in | |
| all) | |
| VLLM_TASKS="videomme,videommev2,videommmu,mmvu,mvbench,videoholmes,longvideobench,lvbench,mlvu,vsi,mindcube,spatial_grounding,tracking,stvg" | |
| if [[ "${MMSI_BACKEND}" == "transformers" ]]; then | |
| RUN_MMSI_TRANSFORMERS=1 | |
| else | |
| append_vllm_task "mmsi" | |
| fi | |
| RUN_REVSI=1 | |
| ;; | |
| videomme|videommev2|videommmu|mmvu|mvbench|videoholmes|longvideobench|lvbench|mlvu|vsi|mindcube|spatial_grounding|tracking|stvg) | |
| append_vllm_task "$TASK" | |
| ;; | |
| mmsi) | |
| if [[ "${MMSI_BACKEND}" == "transformers" ]]; then | |
| RUN_MMSI_TRANSFORMERS=1 | |
| else | |
| append_vllm_task "mmsi" | |
| fi | |
| ;; | |
| revsi) | |
| RUN_REVSI=1 | |
| ;; | |
| spatial|grounding|refcoco|spatial_grounding_eval) | |
| append_vllm_task "spatial_grounding" | |
| ;; | |
| spatial_temporal_grounding) | |
| append_vllm_task "stvg" | |
| ;; | |
| temporal_grounding|timelens|timelens_bench) | |
| RUN_TIMELENS=1 | |
| ;; | |
| segmentation|seg|reasonseg|refseg) | |
| RUN_SEGMENTATION=1 | |
| ;; | |
| "") | |
| ;; | |
| *) | |
| echo "ERROR: unknown TASK '${TASK}'. Supported: videomme,videommev2,videommmu,mmvu,mvbench,videoholmes,longvideobench,lvbench,mlvu,vsi,mmsi,mindcube,revsi,spatial_grounding,tracking,stvg,temporal_grounding,segmentation,all" >&2 | |
| exit 1 | |
| ;; | |
| esac | |
| done | |
| if [[ -n "$VLLM_TASKS" ]]; then | |
| TASKS="$VLLM_TASKS" python eval/task/eval_vllm.py "$@" | |
| fi | |
| if [[ "$RUN_MMSI_TRANSFORMERS" = "1" ]]; then | |
| MMSI_FAMILY="$(model_family_tag "$MODEL_PATH")" | |
| MMSI_CKPT="$(checkpoint_tag "$MODEL_PATH")" | |
| MMSI_RUN_ROOT="${PROJECT_DIR}/outputs/${MMSI_FAMILY}/spatial_intelligence/mmsi/${MMSI_CKPT}/${MMSI_SETTING}/$(date +%Y%m%d_%H%M%S)" | |
| CUDA_VISIBLE_DEVICES="$GPUS" \ | |
| PROCESSOR_PATH="$MODEL_PATH" \ | |
| DATA_FILE="$MMSI_DATA_FILE" \ | |
| OUTPUT_DIR="$MMSI_RUN_ROOT" \ | |
| IMAGE_MIN_PIXELS="$MMSI_IMAGE_MIN_PIXELS" \ | |
| IMAGE_MAX_PIXELS="$MMSI_IMAGE_MAX_PIXELS" \ | |
| MAX_IMAGES="$MMSI_MAX_IMAGES" \ | |
| MAX_NEW_TOKENS="$MMSI_MAX_NEW_TOKENS" \ | |
| MAX_SAMPLES="$MMSI_MAX_SAMPLES" \ | |
| CATEGORY="$MMSI_CATEGORY" \ | |
| ENABLE_THINKING="$MMSI_ENABLE_THINKING" \ | |
| ATTN_IMPLEMENTATION="$MMSI_ATTN_IMPLEMENTATION" \ | |
| EXPECTED_SAMPLES="$MMSI_EXPECTED_SAMPLES" \ | |
| bash eval/task/mmsi/run_eval_transformers.sh "$MODEL_PATH" | |
| fi | |
| if [[ "$RUN_REVSI" = "1" ]]; then | |
| REVSI_FAMILY="$(model_family_tag "$MODEL_PATH")" | |
| REVSI_CKPT="$(checkpoint_tag "$MODEL_PATH")" | |
| REVSI_RUN_EXPECTED_SAMPLES="$REVSI_EXPECTED_SAMPLES" | |
| if [[ "$REVSI_MAX_SAMPLES" != "0" || -n "$REVSI_TASK_FILTER" ]]; then | |
| REVSI_RUN_EXPECTED_SAMPLES=0 | |
| fi | |
| REVSI_RUN_ROOT="${PROJECT_DIR}/outputs/${REVSI_FAMILY}/spatial_intelligence/revsi/${REVSI_CKPT}/${REVSI_SETTING}/$(date +%Y%m%d_%H%M%S)" | |
| CUDA_VISIBLE_DEVICES="$GPUS" \ | |
| REVSI_ROOT="$REVSI_VIDEO_ROOT" \ | |
| QA_FILE="$REVSI_DATA_FILE" \ | |
| VIDEO_ROOT="$REVSI_VIDEO_ROOT" \ | |
| FRAME_BUDGET="$REVSI_FRAME_BUDGET" \ | |
| OUTPUT_DIR="$REVSI_RUN_ROOT" \ | |
| MAX_FRAMES="$REVSI_MAX_FRAMES" \ | |
| EXACT_NFRAMES="$REVSI_EXACT_NFRAMES" \ | |
| FPS="$REVSI_FPS" \ | |
| VIDEO_MIN_PIXELS="$REVSI_VIDEO_MIN_PIXELS" \ | |
| VIDEO_MAX_PIXELS="$REVSI_VIDEO_MAX_PIXELS" \ | |
| VIDEO_TOTAL_PIXELS="$REVSI_VIDEO_TOTAL_PIXELS" \ | |
| BATCH_SIZE="$REVSI_BATCH_SIZE" \ | |
| MAX_MODEL_LEN="$REVSI_MAX_MODEL_LEN" \ | |
| MAX_NEW_TOKENS="$REVSI_MAX_NEW_TOKENS" \ | |
| GPU_MEM_UTIL="$REVSI_GPU_MEMORY_UTILIZATION" \ | |
| MAX_SAMPLES="$REVSI_MAX_SAMPLES" \ | |
| EXPECTED_SAMPLES="$REVSI_RUN_EXPECTED_SAMPLES" \ | |
| TASK_FILTER="$REVSI_TASK_FILTER" \ | |
| ENABLE_THINKING="$REVSI_ENABLE_THINKING" \ | |
| TP_SIZE="$TP_SIZE" \ | |
| bash eval/task/revsi/run_eval_vllm.sh "$MODEL_PATH" | |
| fi | |
| if [[ "$RUN_TIMELENS" = "1" ]]; then | |
| TIMELENS_FAMILY="$(model_family_tag "$MODEL_PATH")" | |
| TIMELENS_CKPT="$(checkpoint_tag "$MODEL_PATH")" | |
| TIMELENS_SETTING="timelens-fps${TIMELENS_FPS}-min${TIMELENS_MIN_TOKENS}-total${TIMELENS_TOTAL_TOKENS}-new${TIMELENS_MAX_NEW_TOKENS}-${TIMELENS_DATASETS//,/_}" | |
| TIMELENS_RUN_ROOT="${PROJECT_DIR}/outputs/${TIMELENS_FAMILY}/temporal_grounding/${TIMELENS_CKPT}/${TIMELENS_SETTING}/$(date +%Y%m%d_%H%M%S)" | |
| CUDA_VISIBLE_DEVICES="$GPUS" \ | |
| DATASETS="$TIMELENS_DATASETS" \ | |
| SETTING="$TIMELENS_SETTING" \ | |
| OUTPUT_ROOT="$TIMELENS_RUN_ROOT" \ | |
| TIMELENS_USE_OUTPUT_ROOT_DIRECT=1 \ | |
| MIN_TOKENS="$TIMELENS_MIN_TOKENS" \ | |
| TOTAL_TOKENS="$TIMELENS_TOTAL_TOKENS" \ | |
| MAX_PIXELS="$TIMELENS_MAX_PIXELS" \ | |
| MAX_FRAMES="$TIMELENS_MAX_FRAMES" \ | |
| FPS="$TIMELENS_FPS" \ | |
| MAX_NEW_TOKENS="$TIMELENS_MAX_NEW_TOKENS" \ | |
| REPETITION_PENALTY="$TIMELENS_REPETITION_PENALTY" \ | |
| STOP_AFTER_ANSWER="$TIMELENS_STOP_AFTER_ANSWER" \ | |
| PROMPT_MODE="$TIMELENS_PROMPT_MODE" \ | |
| NUM_WORKERS="$TIMELENS_NUM_WORKERS" \ | |
| bash eval/task/temporal_grounding/run_eval.sh \ | |
| "$MODEL_PATH" \ | |
| "$TIMELENS_ENABLE_THINKING" \ | |
| "$TIMELENS_RUN_ROOT" | |
| fi | |
| if [[ "$RUN_SEGMENTATION" = "1" ]]; then | |
| SEG_FAMILY="$(model_family_tag "$MODEL_PATH")" | |
| SEG_CKPT="$(checkpoint_tag "$MODEL_PATH")" | |
| SEG_RUN_ROOT="${PROJECT_DIR}/outputs/${SEG_FAMILY}/segmentation/${SEG_CKPT}/${SEGMENTATION_SETTING}/$(date +%Y%m%d_%H%M%S)" | |
| CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-$GPUS}" \ | |
| PROCESSOR_PATH="$SEGMENTATION_PROCESSOR_PATH" \ | |
| BENCH_DIR="$SEGMENTATION_BENCH_DIR" \ | |
| DATA_ROOT="$SEGMENTATION_DATA_ROOT" \ | |
| DATASETS="$SEGMENTATION_DATASETS" \ | |
| DATA_TYPE="$SEGMENTATION_DATA_TYPE" \ | |
| PROMPT_MODE="$SEGMENTATION_PROMPT_MODE" \ | |
| ENABLE_THINKING="$SEGMENTATION_ENABLE_THINKING" \ | |
| BATCH_SIZE="$SEGMENTATION_BATCH_SIZE" \ | |
| MAX_NEW_TOKENS="$SEGMENTATION_MAX_NEW_TOKENS" \ | |
| MAX_MODEL_LEN="$SEGMENTATION_MAX_MODEL_LEN" \ | |
| MAX_PIXELS_IMAGE="$SEGMENTATION_MAX_PIXELS_IMAGE" \ | |
| MIN_PIXELS_IMAGE="$SEGMENTATION_MIN_PIXELS_IMAGE" \ | |
| VIDEO_MAX_PIXELS="$SEGMENTATION_VIDEO_MAX_PIXELS" \ | |
| VIDEO_MIN_PIXELS="$SEGMENTATION_VIDEO_MIN_PIXELS" \ | |
| VIDEO_TOTAL_PIXELS="$SEGMENTATION_VIDEO_TOTAL_PIXELS" \ | |
| MAX_FRAMES="$SEGMENTATION_MAX_FRAMES" \ | |
| FPS="$SEGMENTATION_FPS" \ | |
| VIDEO_READER="$SEGMENTATION_VIDEO_READER" \ | |
| TP_SIZE="$TP_SIZE" \ | |
| GPU_MEM_UTIL="$SEGMENTATION_GPU_MEM_UTIL" \ | |
| SEED="$SEGMENTATION_SEED" \ | |
| MAX_SAMPLES="$SEGMENTATION_MAX_SAMPLES" \ | |
| RUN_SAM2="$SEGMENTATION_RUN_SAM2" \ | |
| SAM2_CKPT="$SEGMENTATION_SAM2_CKPT" \ | |
| SAM2_CFG="$SEGMENTATION_SAM2_CFG" \ | |
| ONETHINKER_SEG_POST="$SEGMENTATION_POSTPROCESSOR_PATH" \ | |
| SAM2_NUM_GPUS="$SEGMENTATION_SAM2_NUM_GPUS" \ | |
| SAM2_WORKERS_PER_GPU="$SEGMENTATION_SAM2_WORKERS_PER_GPU" \ | |
| bash eval/task/segmentation/run_eval_vllm.sh \ | |
| "$MODEL_PATH" \ | |
| "$SEG_RUN_ROOT" | |
| fi | |