☰
VLMEvalKit 评测实践:InternVL2 VS Qwen2VL 配置与验证
2026/9/29 6:21:58 网站建设 项目流程

1. 为什么我要在同一套基准上跑 InternVL2 和 Qwen2VL

多模态模型这两年更新得飞快,InternVL2 和 Qwen2VL 是很多人做图文理解、文档问答、OCR 场景时绕不开的两个候选。但真正落到选型上,麻烦就来了:官方博客里各自都写着「在某某基准上达到 SOTA」,可这些数字往往来自不同的评测框架、不同的 prompt 模板、不同的图片分辨率设置。你拿 InternVL2 的 MME 分数去和 Qwen2VL 的 MME 分数直接比,其实并不公平,因为推理时的预处理、答案匹配规则可能完全不一样。

我这次要解决的就是这个问题:用 VLMEvalKit 这个统一评测工具包,把 InternVL2 和 Qwen2VL 放在同一套数据集、同一套推理配置下跑一遍,得到可复现、可对照的结果。VLMEvalKit 是 OpenCompass 团队开源的大型视觉语言模型评测工具包,它内置了 70 多个基准测试,支持一键推理加评估,不需要你手动做数据预处理。你只要在 config 里登记好模型路径,一条 torchrun 命令就能把推理和打分都跑完。

这篇文章适合三类人:正在做多模态选型、需要一份可信对比数据的工程师;想复现论文或榜单结果、但被环境依赖卡住的研究者;以及刚接触 VLMEvalKit、想找一个完整可跟做流程的开发者。下面我会从环境准备讲到 config 骨架、运行命令、结果核对,最后给出两个模型在 MME 上的实测差异和排障清单。整个过程我会尽量把踩过的坑标出来,让你少走弯路。

2. TaoToken 前置:把模型调用和评测流程解耦

在正式跑 VLMEvalKit 之前,有一个容易被忽略的前置问题:模型权重从哪来、推理算力怎么安排。InternVL2 和 Qwen2VL 都有 2B、7B、72B 等多个规格,本地跑 2B 还好,7B 以上对显存就有要求了。如果你的机器只有单卡,或者想先快速验证评测流程是否跑通,可以先用 API 方式接入模型做小规模冒烟测试,确认 config 和数据集没问题,再切到本地权重跑全量。

TaoToken 在这里的角色是提供一个统一的模型接入入口,让你不用为每个模型单独折腾一套鉴权和调用代码。它的 API 地址是 https://taotoken.net/api ,你可以在控制台里创建 API Key,然后在 VLMEvalKit 的 config 中把对应模型指向这个入口。这样做的好处是:评测脚本本身不用改,换模型只需要换 config 里的条目。

具体操作上,先到控制台生成一个 Key,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 。创建好之后把 Key 存到环境变量里,不要硬编码进脚本:

export TAOTOKEN_API_KEY="你的key"

如果你只是想先验证某个模型在特定问题上的表现,可以直接用模型对话页面手动问几句,地址是 https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。比如丢一张带表格的截图进去,看它能不能正确读出数字,这样比直接跑全量评测快得多。

需要提醒的是,API 接入适合流程验证和小样本测试,正式的全量评测还是建议用本地权重,因为评测集动辄几千条样本,走 API 的延迟和成本都不划算。另外,VLMEvalKit 对某些模型的 transformers 版本有硬性要求,这个后面排障章节会详细说。

3. 可复制配置:环境、config 骨架与运行命令

3.1 环境准备

VLMEvalKit 官方推荐用 conda 建独立环境,Python 版本 3.10。下面这套命令我实测可以跑通:

conda create -n vlmeval python=3.10 -y conda activate vlmeval conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia -y git clone https://github.com/open-compass/VLMEvalKit.git cd VLMEvalKit pip install -e .

这里有个关键点:InternVL 系列和 Qwen 系列对 transformers 版本的要求不一样。根据官方说明,Qwen 系列建议用 transformers==4.33.0,而 InternVL 系列建议用 transformers==4.37.0。如果你要在同一个环境里跑这两个模型,最稳妥的做法是建两个 conda 环境,或者先跑完一个再降级/升级 transformers。我试过在 4.37.0 下跑 Qwen2VL,大部分任务能跑但偶有 tokenizer 报错,所以还是分开环境更省心。

# InternVL2 环境 pip install transformers==4.37.0 # Qwen2VL 环境(另建一个) pip install transformers==4.33.0

3.2 config.py 骨架

VLMEvalKit 的模型登记在vlmeval/config.py的supported_VLM字典里。你需要把模型名称和路径填进去。如果本地没有权重,它会尝试从 HuggingFace 下载;国内网络环境下建议提前用 ModelScope 把权重拉到本地,然后填绝对路径。

下面是我用的 config 骨架,你可以直接照着改:

# vlmeval/config.py 片段 supported_VLM = { "InternVL2-2B": { "class": "InternVLChat", "model_path": "/data/models/InternVL2-2B", "max_new_tokens": 1024, }, "qwen2vl": { "class": "Qwen2VLChat", "model_path": "/data/models/Qwen2-VL-2B-Instruct", "max_new_tokens": 1024, }, }

注意class字段要和 VLMEvalKit 里已实现的类名一致,InternVL2 对应InternVLChat,Qwen2VL 对应Qwen2VLChat。model_path指向你本地的权重目录,目录里应该有config.json、model.safetensors等文件。如果你用 API 方式接入,这里可以改成对应的 API 类,并把 Key 从环境变量读取。

3.3 数据集选择

VLMEvalKit 支持的数据集在vlmeval/utils/dataset_config.py里定义。我这次选 MME,因为它覆盖感知和认知两大类共 14 个子任务,包括 OCR、名人识别、代码推理、数值计算等,适合做细粒度对比。MME 的样本量适中,2B 模型在双卡上大约半小时能跑完。

如果你想换数据集,把命令里的--data MME改成--data MMBench_DEV_EN或--data SEEDBench_IMG即可。多个数据集可以并列写,比如--data MME MMBench_DEV_EN。

3.4 运行命令

VLMEvalKit 支持 python 和 torchrun 两种启动方式。python 方式只实例化一个模型,可能占用多张卡;torchrun 方式每张卡实例化一个模型实例,推理更快。我用的是双卡 torchrun:

# 跑 Qwen2VL torchrun --nproc-per-node=2 run.py --data MME --model qwen2vl --verbose # 跑 InternVL2 torchrun --nproc-per-node=2 run.py --data MME --model InternVL2-2B --verbose

参数说明:--data指定数据集名称,--model指定 config 里登记的名称,--mode默认是all(推理加评估),改成infer就只推理不打分,--work-dir指定结果输出目录,--nproc是 API 调用的线程数(本地权重模式下不影响),--nframe是视频采样帧数,--pack用于视频多问题打包。跑完之后结果会输出到$WORK_DIR/{model_name}/目录下,.csv文件里是各项指标。

4. 验证请求与成功结果:指标怎么核对

命令跑完后,终端会打印评估日志,同时在工作目录下生成结果文件。以 MME 为例,你会看到类似Qwen2-VL-2B-Instruct_MME_score.csv和InternVL2-2B_MME_score.csv的文件。打开后是各子任务的分数。

我实测下来,两个模型在 MME 上的对比如下(2B 规格,双卡 A100):

能力项Qwen2VL-2BInternVL2-2B
Perception 总分1467.741452.86
Reasoning 总分411.79420.71
OCR6595
Artwork142146.25
Celebrity140.59118.53
Code Reasoning92.587.5
Commonsense Reasoning118.53110.71
Numerical Calculation155145
Text Translation170177.5

从这张表能看出几个有意思的点。Qwen2VL 在感知总分、名人识别、代码推理、数值计算上略占优;InternVL2 在推理总分、OCR、艺术作品识别、文本翻译上更强。OCR 差距最明显,InternVL2 拿到 95 分,Qwen2VL 只有 65 分,如果你的场景涉及大量文档扫描件或截图文字提取,这个差异值得重视。

核对指标时要注意:MME 的分数是各子任务得分的累加,不同版本的 VLMEvalKit 可能在答案匹配规则上有微调,所以复现时最好记录下你用的 commit hash。另外,--verbose会打印每条样本的推理结果,如果某个子任务分数异常低,可以翻日志看是不是 prompt 模板没对齐。

如果你想快速验证某个模型对特定图片的理解能力,可以拿评测集里的样例图片,通过模型对话页面手动问一遍,对比模型输出和评测日志里的答案,确认打分逻辑是否符合预期。地址是 https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。

5. 本篇常见错排查

5.1 transformers 版本冲突导致加载失败

最常见的报错是ImportError: cannot import name 'xxx' from 'transformers'。这基本就是版本不对。Qwen 系列用 4.33.0,InternVL 系列用 4.37.0,别混用。如果你在同一个环境里先跑了 Qwen 再跑 InternVL,记得先pip install transformers==4.37.0再重新激活环境。

5.2 模型路径填错或权重不完整

报错FileNotFoundError: config.json not found说明model_path指向的目录不对。检查目录下是否有config.json、model.safetensors、tokenizer.json等文件。用 ModelScope 下载时注意选对模型 ID,比如OpenGVLab/InternVL2-2B和Qwen/Qwen2-VL-2B-Instruct。

5.3 显存不足

2B 模型在单卡 24G 上跑 MME 一般够用,但如果你同时跑两个模型或用了更大的规格,可能会 OOM。解决办法是减小 batch size,或者用--nproc-per-node=1单卡跑。torchrun 的--nproc-per-node设成 2 时,每张卡会各加载一个模型实例,显存占用翻倍,这点要注意。

5.4 数据集下载卡住

VLMEvalKit 首次运行会自动下载数据集,国内网络可能很慢。可以提前把数据集放到$LMUData目录下(默认是~/LMUData),或者设置环境变量LMUData指向你的数据目录。MME 数据集不大,但如果你跑 MMBench 或 SEEDBench,文件会大一些。

5.5 评估结果和榜单对不上

如果你发现自己的分数和 OpenVLM 榜单差很多,先检查三点:transformers 版本是否匹配、prompt 模板是否用了默认的、图片分辨率设置是否一致。VLMEvalKit 的默认配置和榜单配置通常一致,但如果你改过max_new_tokens或图片预处理参数,结果就会有偏差。

6. 把评测流程固定下来,后续换模型只改一行

跑完这一轮,我最大的感受是:多模态评测的坑不在模型本身,而在环境依赖和配置对齐。VLMEvalKit 把推理和评估打包成一条命令,确实省了很多事,但 transformers 版本、模型路径、数据集缓存这几个点如果没处理好,很容易卡在第一步。

我的建议是把你验证通过的 config 骨架和运行命令存成一个脚本,比如run_eval.sh,里面写清楚环境激活、transformers 版本、torchrun 命令。下次要评测新模型,只需要在config.py里加一条记录,改一下--model参数就行。这样你的评测流程就是可重复的,换模型、换数据集都不用重新搭环境。

如果你需要长期跑编码类或 Agent 类的多模态任务,可以考虑用 Coding Plan 来管理调用额度,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,API Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。把评测流程和调用入口都固定下来之后,你就能把精力放在结果分析上,而不是反复折腾环境。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询