Self-Forcing-part-2 / scripts /run_predictor_v4_dmd_validation.sh
Cccccz's picture
Add files using upload-large-folder tool
2847d0b verified
Raw
History Blame Contribute Delete
3.97 kB
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PYTHON_BIN="${PYTHON_BIN:-/mnt/s3files/s3-us-west2-default/zoubin/cz/envs/self_forcing/bin/python}"
METRICS_PYTHON_BIN="${METRICS_PYTHON_BIN:-/mnt/s3files/s3-us-west2-default/zoubin/cz/envs/vbench_eval/bin/python}"
VBENCH_ROOT="${VBENCH_ROOT:-/mnt/s3files/s3-us-west2-default/zoubin/cz/projects/VBench}"
GPU_IDS="${GPU_IDS:-0,1,2,3,4,5,6,7}"
EXPERIMENT_NAME="${EXPERIMENT_NAME:?EXPERIMENT_NAME is required}"
FULL_CHECKPOINT="${FULL_CHECKPOINT:?FULL_CHECKPOINT is required}"
PREDICTOR_CHECKPOINT="${PREDICTOR_CHECKPOINT:-}"
INCLUDE_FFFF="${INCLUDE_FFFF:-0}"
PROMPT_FILE="${PROMPT_FILE:-$ROOT_DIR/prompts/MovieGenVideoBench_extended_101_200.txt}"
NVME_ROOT="${NVME_ROOT:-/mnt/local_nvme/zoubin/cz/self_forcing_predictor_v4_dmd_validation}"
PROJECT_VIDEO_ROOT="${PROJECT_VIDEO_ROOT:-$ROOT_DIR/videos}"
RESULT_ROOT="${RESULT_ROOT:-$ROOT_DIR/evaluation_results/predictor_v4_dmd}"
REFERENCE_FFFF="${REFERENCE_FFFF:-}"
cd "$ROOT_DIR"
IFS=',' read -r -a GPU_ARRAY <<< "$GPU_IDS"
NPROC_PER_NODE="${#GPU_ARRAY[@]}"
mkdir -p "$NVME_ROOT" "$PROJECT_VIDEO_ROOT" "$RESULT_ROOT"
for required in "$PYTHON_BIN" "$METRICS_PYTHON_BIN" "$FULL_CHECKPOINT" "$PROMPT_FILE"; do
if [[ ! -e "$required" ]]; then
echo "错误:找不到 $required" >&2
exit 1
fi
done
if [[ -n "$PREDICTOR_CHECKPOINT" && ! -f "$PREDICTOR_CHECKPOINT" ]]; then
echo "错误:找不到 $PREDICTOR_CHECKPOINT" >&2
exit 1
fi
variants=(fppf fppp)
if [[ "$INCLUDE_FFFF" == "1" ]]; then
variants=(ffff fppf fppp)
fi
video_dir() {
echo "$NVME_ROOT/${EXPERIMENT_NAME}_$1_seed0"
}
run_inference() {
local variant="$1"
local output
output="$(video_dir "$variant")"
if "$PYTHON_BIN" scripts/validate_generated_videos.py "$output" \
>/dev/null 2>&1; then
echo "[$(date -u +%FT%TZ)] 跳过已完成的 $variant 推理。"
return
fi
echo "[$(date -u +%FT%TZ)] 启动 $EXPERIMENT_NAME $variant 验证集推理。"
if [[ "$variant" == "ffff" ]]; then
GPU_IDS="$GPU_IDS" \
CHECKPOINT_PATH="$FULL_CHECKPOINT" \
DATA_PATH="$PROMPT_FILE" \
OUTPUT_FOLDER="$output" \
bash scripts/run_moviegen_first100_dmd.sh
else
GPU_IDS="$GPU_IDS" \
CHECKPOINT_PATH="$FULL_CHECKPOINT" \
PREDICTOR_CHECKPOINT="$PREDICTOR_CHECKPOINT" \
PREDICTOR_SCHEDULE="$variant" \
DATA_PATH="$PROMPT_FILE" \
OUTPUT_FOLDER="$output" \
bash scripts/run_moviegen_first100_dmd.sh
fi
"$PYTHON_BIN" scripts/validate_generated_videos.py "$output"
local project_output="$PROJECT_VIDEO_ROOT/${EXPERIMENT_NAME}_${variant}_seed0"
mkdir -p "$project_output"
rsync -a "$output/" "$project_output/"
}
run_vbench() {
local variant="$1"
local output_dir="$VBENCH_ROOT/evaluation_results/${EXPERIMENT_NAME}_${variant}_moviegen_101_200_seed0"
if find "$output_dir" -maxdepth 1 -type f -name '*_eval_results.json' \
-print -quit 2>/dev/null | grep -q .; then
echo "[$(date -u +%FT%TZ)] 跳过已有的 $variant VBench。"
return
fi
VIDEO_DIR="$(video_dir "$variant")" \
OUTPUT_DIR="$output_dir" \
GPU_IDS="$GPU_IDS" \
bash scripts/run_vbench_custom_6_metrics.sh
}
for variant in "${variants[@]}"; do
run_inference "$variant"
run_vbench "$variant"
done
if [[ "$INCLUDE_FFFF" == "1" ]]; then
pair_reference="$(video_dir ffff)"
else
pair_reference="$REFERENCE_FFFF"
fi
if [[ -n "$pair_reference" ]]; then
for variant in fppf fppp; do
CUDA_VISIBLE_DEVICES="$GPU_IDS" \
"$METRICS_PYTHON_BIN" -m torch.distributed.run \
--standalone \
--nproc_per_node="$NPROC_PER_NODE" \
scripts/compare_video_metrics.py \
--reference_dir "$pair_reference" \
--comparison_dir "$(video_dir "$variant")" \
--output_json "$RESULT_ROOT/${EXPERIMENT_NAME}_ffff_vs_${variant}.json"
done
fi
touch "$RESULT_ROOT/${EXPERIMENT_NAME}.complete"
echo "[$(date -u +%FT%TZ)] $EXPERIMENT_NAME 验证集评估完成。"