#!/usr/bin/env bash set -euo pipefail SELF_FORCING_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" VBENCH_ROOT="${VBENCH_ROOT:-/mnt/s3files/s3-us-west2-default/zoubin/cz/projects/VBench}" PYTHON_BIN="${PYTHON_BIN:-/mnt/s3files/s3-us-west2-default/zoubin/cz/envs/vbench_eval/bin/python}" VIDEO_DIR="${VIDEO_DIR:-$SELF_FORCING_ROOT/videos/moviegenvideobench_extended_first100_dmd_seed0}" OUTPUT_DIR="${OUTPUT_DIR:-$VBENCH_ROOT/evaluation_results/self_forcing_dmd_moviegen_first100_seed0}" GPU_IDS="${GPU_IDS:-0,1,2,3,4,5,6,7}" DRY_RUN="${DRY_RUN:-0}" IFS=',' read -r -a GPU_ARRAY <<< "$GPU_IDS" NPROC_PER_NODE="${NPROC_PER_NODE:-${#GPU_ARRAY[@]}}" if [[ ! -d "$VBENCH_ROOT" || ! -f "$VBENCH_ROOT/evaluate.py" ]]; then echo "错误:VBench 仓库无效:$VBENCH_ROOT" >&2 exit 1 fi if [[ ! -x "$PYTHON_BIN" ]]; then echo "错误:VBench Python 不可执行:$PYTHON_BIN" >&2 exit 1 fi if [[ ! -d "$VIDEO_DIR" && "$DRY_RUN" != "1" ]]; then echo "错误:视频目录不存在:$VIDEO_DIR" >&2 exit 1 fi if (( NPROC_PER_NODE != ${#GPU_ARRAY[@]} )); then echo "错误:NPROC_PER_NODE 与 GPU_IDS 的 GPU 数量不一致。" >&2 exit 1 fi if [[ "$DRY_RUN" != "1" ]]; then VIDEO_COUNT="$(find "$VIDEO_DIR" -maxdepth 1 -type f -name '*.mp4' | wc -l)" if (( VIDEO_COUNT != 100 )); then echo "错误:VBench 评测需要 100 个视频,当前找到 $VIDEO_COUNT 个。" >&2 exit 1 fi fi ARGS=( evaluate.py --videos_path "$VIDEO_DIR" --output_path "$OUTPUT_DIR" --mode custom_input --load_ckpt_from_local True --dimension subject_consistency background_consistency motion_smoothness dynamic_degree aesthetic_quality imaging_quality ) if (( NPROC_PER_NODE == 1 )); then COMMAND=("$PYTHON_BIN" "${ARGS[@]}") else COMMAND=( "$PYTHON_BIN" -m torch.distributed.run --standalone --nproc_per_node="$NPROC_PER_NODE" "${ARGS[@]}" ) fi echo "VBench custom_input 六指标评测:" echo " GPUs: $GPU_IDS" echo " Videos: $VIDEO_DIR" echo " Output: $OUTPUT_DIR" printf ' Command: ' printf '%q ' "${COMMAND[@]}" printf '\n' if [[ "$DRY_RUN" == "1" ]]; then exit 0 fi mkdir -p "$OUTPUT_DIR" cd "$VBENCH_ROOT" CUDA_VISIBLE_DEVICES="$GPU_IDS" "${COMMAND[@]}" 2>&1 | tee "$OUTPUT_DIR/evaluation.log"