# VBench 评分环境与兼容适配 ## 目标 将视频生成和评分解耦:保留已生成的 944 个 MP4,只建立独立评分环境并重复执行 VBench 评分。旧 `sglang`、`deploy` 和 `vbench` 环境不修改。 ## 独立环境 - Conda prefix:`/root/.miniconda3/envs/vbench-score` - Python:3.12.13 - PyTorch:2.11.0+cu130 - Transformers:4.36.2 - Tokenizers:0.15.2 - NumPy:1.26.4 - `timm==0.9.12` - CUDA capability:SM 12.0 环境由 `scripts/rebuild_vbench_score_env.sh` 重建;`scripts/check_vbench_score_env.py` 验证 16 个评分模块、CUDA matmul、缓存权重和 DINO 本地加载。最终快照位于 `environment/vbench_score_setup_logs`。 ## 适配记录 ### 1. Matplotlib 依赖闭包不完整 旧评分环境在导入 `object_class` 时经 Matplotlib 报缺少 `pyparsing`。独立环境补齐 Matplotlib、Detectron2/GRIT 和 VBench 所需依赖,并用 `object_class` 8 卡真实评分验证。 ### 2. Transformers/Tokenizers 与 Python 3.12 Transformers 4.33.2 依赖的 Tokenizers 0.13.x 没有 Python 3.12 wheel,服务器也没有 Rust 编译器。改为仍包含 VBench 所需 API 且提供 cp312 wheel 的 Transformers 4.36.2 + Tokenizers 0.15.2。 ### 3. UMT human_action 与 timm 继承环境中的 timm 1.0.16 会由工厂向 VBench UMT 模型注入 `cache_dir`,触发: ```text TypeError: VisionTransformer.__init__() got an unexpected keyword argument 'cache_dir' ``` VBench 自身约束为 `timm>=0.9,<=1.0.12`,最终锁定 `timm==0.9.12`。先做模型构造 RED/GREEN,再完成 `human_action` 单维度 8 卡真实评分,最后进入完整评分链。 ### 4. 服务器缺少 zip 命令 16 维 JSON 已生成后,原脚本因系统没有 `zip` 命令而在收尾失败。编排脚本改用 Python 标准库 `zipfile`,不安装系统包、不重算任何维度,然后运行官方 `scripts/cal_final_score.py`。 ## 只重跑评分 ```bash export HF_ENDPOINT=https://hf-mirror.com export RUN_ID=h3-vbench-base-dense-tp2x4-20260826-run1 export ACTION=evaluate export RUN_STATIC_FILTER=1 export VBENCH_REPO=/data/wxy/VBench export VBENCH_PYTHON=/root/.miniconda3/envs/vbench-score/bin/python bash scripts/run_h3_vbench_base_tp2x4.sh ``` 完整评分先计算 15 个主维度,再用单 GPU 官方静态过滤,最后用 8 卡计算 temporal flickering 并合并成 16 维结果。日志里的 `-2/-3/-4.mp4` 缺失警告来自本次每 prompt 只生成一个样本,不是环境错误。 ## 最终验收 - 944 个输入视频。 - 16/16 维存在且总分数值有限、位于 `[0,1]`。 - ZIP 只包含 `vbench_16_dimensions.json`,内容与磁盘 JSON 一致。 - 当前评分日志无 Traceback。 - 评分 tmux、Python 进程和 GPU 显存均已释放。