VSI-Bench 环境配置与评估完整指南
环境要求
- GPU:支持 CUDA 的 NVIDIA 显卡(本文使用 RTX 5090 32GB)
- CPU 内存:建议 32GB 以上
- CUDA:13.x
- Python:3.10
一、创建 conda 环境
bash
conda create --name vsibench python=3.10
conda activate vsibench
二、克隆代码
bash
git clone git@github.com:vision-x-nyu/thinking-in-space.git
cd thinking-in-space
git submodule update --init --recursive
三、安装依赖
bash
cd transformers && pip install -e . && cd ..
pip install -e .
pip install s2wrapper@git+https://github.com/bfshi/scaling_on_scales
pip install deepspeed
四、编译安装 flash-attn
flash-attn 需要从源码本地编译,不能直接用预编译包(CUDA 版本不匹配)。
bash
export CUDA_HOME=/usr/local/cuda-13.1 # 根据实际路径修改
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
export FLASH_ATTENTION_FORCE_BUILD=TRUE
export OMP_NUM_THREADS=4
pip install flash-attn --no-build-isolation --no-cache-dir
编译时间约 15-30 分钟,CPU 会跑满属于正常现象。
五、配置 HuggingFace Token
VSI-Bench 数据集需要 HuggingFace 账号 token 才能访问。
- 注册 HuggingFace 账号:https://huggingface.co
- 生成 token:https://huggingface.co/settings/tokens,权限选 Read
- 保存 token 到本地:
bash
mkdir -p ~/.cache/huggingface
echo "你的hf_开头的token" > ~/.cache/huggingface/token
国内服务器无法直连 huggingface.co,用写文件的方式绕过网络验证,配合镜像站使用。
六、配置 accelerate
bash
accelerate config default
七、运行评估
每次运行前设置以下环境变量,防止内存溢出:
bash
export HF_ENDPOINT=https://hf-mirror.com # 国内镜像
export HUGGING_FACE_HUB_TOKEN=$(cat ~/.cache/huggingface/token)
export CUDA_VISIBLE_DEVICES=0 # 指定使用的 GPU 编号
export OMP_NUM_THREADS=4 # 限制 CPU 线程数
export TOKENIZERS_PARALLELISM=false # 关闭 tokenizer 多线程
export HF_DATASETS_IN_MEMORY_MAX_SIZE=0 # 数据集走磁盘不缓存到内存
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512 # 防止显存碎片化
运行单个模型评估:
bash
cd thinking-in-space
bash evaluate_all_in_one.sh \
--model internvl2_2b_8f \
--num_processes 1 \
--benchmark vsibench
支持的模型列表:
llava_one_vision_qwen2_0p5b_ov_32f
llava_one_vision_qwen2_7b_ov_32f
llava_next_video_7b_qwen2_32f
llama3_vila1p5_8b_32f
llama3_longvila_8b_128frames_32f
longva_7b_32f
internvl2_2b_8f
internvl2_8b_8f
八、内存注意事项(干爆服务器一次,老实了,按实际情况来)
必须严格遵守以下限制,否则服务器内存会被打爆:
| 参数 | 要求 | 原因 |
|---|---|---|
--num_processes |
必须为 1 | 每个进程独立加载完整模型,4进程=4倍内存 |
--batch_size |
必须为 1 | 减少中间激活值内存占用 |
以 7B 模型为例:
| num_processes | CPU 内存占用 |
|---|---|
| 1 | ~20GB |
| 4 | ~80GB |
| 8 | ~160GB |
九、查看结果
结果保存在 logs/ 目录下:
logs/
└── 20260326/
└── vsibench/
└── xxxx_internvl2_2b_8f_xxx/
├── results.json # 完整评估配置和分数
└── vsibench.json # 每条样本的输入输出
results.json 包含完整复现信息,包括模型参数、随机种子、代码 git hash。
十、InternVL2-2B 参考结果
| 任务 | 分数 |
|---|---|
| Overall | 27.56 |
| 物体计数 | 22.83 |
| 绝对距离估计 | 25.40 |
| 物体大小估计 | 21.93 |
| 房间大小估计 | 33.54 |
| 相对距离 | 33.38 |
| 相对方向 | 44.30 |
| 路线规划 | 31.96 |
| 出现顺序 | 7.12 |
与论文原始结果吻合,说明环境配置正确。