evalscope/docs/zh/user_guides/backend/vlmevalkit_backend.md

14 KiB
Raw Permalink Blame History

(vlmeval)=

VLMEvalKit

为便于使用VLMEvalKit 评测后端我们基于VLMEvalKit源码做了定制命名为ms-vlmeval该版本在原版基础上对评测任务的配置和执行进行了封装并支持pypi安装方式使得用户可以通过EvalScope发起轻量化的VLMEvalKit评测任务。同时我们支持基于OpenAI API格式的接口评测任务您可以使用ms-swiftvLLMLMDeployOllama等模型服务,部署多模态模型服务。

1. 环境准备

# 安装额外依赖
pip install evalscope[vlmeval] -U

2. 数据准备

在加载数据集时,若本地不存在该数据集文件,将会自动下载数据集到 ~/LMUData/ 目录下。

目前支持的数据集有:

名称 备注
A-Bench_TEST, A-Bench_VAL
AI2D_TEST, AI2D_TEST_NO_MASK
AesBench_TEST, AesBench_VAL
BLINK
CCBench
COCO_VAL
ChartQA_TEST
DUDE, DUDE_MINI
DocVQA_TEST, DocVQA_VAL DocVQA_TEST没有提供答案使用DocVQA_VAL进行自动评测
GMAI_mm_bench_VAL
HallusionBench
InfoVQA_TEST, InfoVQA_VAL InfoVQA_TEST没有提供答案使用InfoVQA_VAL进行自动评测
LLaVABench
MLLMGuard_DS
MMBench-Video
MMBench_DEV_CN, MMBench_DEV_CN_V11
MMBench_DEV_EN, MMBench_DEV_EN_V11
MMBench_TEST_CN, MMBench_TEST_CN_V11 MMBench_TEST_CN没有提供答案
MMBench_TEST_EN, MMBench_TEST_EN_V11 MMBench_TEST_EN没有提供答案
MMBench_dev_ar, MMBench_dev_cn, MMBench_dev_en,
MMBench_dev_pt, MMBench_dev_ru, MMBench_dev_tr
MMDU
MME
MMLongBench_DOC
MMMB, MMMB_ar, MMMB_cn, MMMB_en,
MMMB_pt, MMMB_ru, MMMB_tr
MMMU_DEV_VAL, MMMU_TEST
MMStar
MMT-Bench_ALL, MMT-Bench_ALL_MI,
MMT-Bench_VAL, MMT-Bench_VAL_MI
MMVet
MTL_MMBench_DEV
MTVQA_TEST
MVBench, MVBench_MP4
MathVision, MathVision_MINI, MathVista_MINI
OCRBench
OCRVQA_TEST, OCRVQA_TESTCORE
POPE
Q-Bench1_TEST, Q-Bench1_VAL
RealWorldQA
SEEDBench2, SEEDBench2_Plus, SEEDBench_IMG
SLIDEVQA, SLIDEVQA_MINI
ScienceQA_TEST, ScienceQA_VAL
TaskMeAnything_v1_imageqa_random
TextVQA_VAL
VCR_EN_EASY_100, VCR_EN_EASY_500, VCR_EN_EASY_ALL
VCR_EN_HARD_100, VCR_EN_HARD_500, VCR_EN_HARD_ALL
VCR_ZH_EASY_100, VCR_ZH_EASY_500, VCR_ZH_EASY_ALL
VCR_ZH_HARD_100, VCR_ZH_HARD_500, VCR_ZH_HARD_ALL
Video-MME
数据集的详细信息可以参考[VLMEvalKit支持的图文多模态评测集](https://github.com/open-compass/VLMEvalKit/blob/main/docs/zh-CN/README_zh-CN.md#%E6%94%AF%E6%8C%81%E7%9A%84%E5%9B%BE%E6%96%87%E5%A4%9A%E6%A8%A1%E6%80%81%E8%AF%84%E6%B5%8B%E9%9B%86)。

您可以使用以下方式,来查看数据集的名称列表:
```python
from evalscope.backend.vlm_eval_kit import VLMEvalKitBackendManager
print(f'** All models from VLMEvalKit backend: {VLMEvalKitBackendManager.list_supported_datasets()}')

```

3. 模型评测

模型评测有两种方式可以选择,一种是部署模型服务评测,另一种是本地模型推理评测。具体如下:

方式1. 部署模型服务评测

模型部署

下面介绍四种方式部署模型服务: ::::{tab-set}

:::{tab-item} vLLM 部署

参考vLLM 教程 for more details.

支持的模型列表

安装vLLM

pip install vllm -U

部署模型服务

VLLM_USE_MODELSCOPE=True CUDA_VISIBLE_DEVICES=0 python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-VL-3B-Instruct --port 8000 --trust-remote-code --max_model_len 4096 --served-model-name Qwen2.5-VL-3B-Instruct
如遇到`ValueError: At most 1 image(s) may be provided in one request`错误,可尝试将设置`--limit-mm-per-prompt "image=5"`参数并可以将image设置为更大的值。

:::

:::{tab-item} ms-swift部署

使用ms-swift部署模型服务具体可参考ms-swift部署指南

安装ms-swift

pip install ms-swift -U

部署模型服务

CUDA_VISIBLE_DEVICES=0 swift deploy --model Qwen/Qwen2.5-VL-3B-Instruct --port 8000

:::

:::{tab-item} LMDeploy 部署 参考 LMDeploy 教程.

安装LMDeploy

pip install lmdeploy -U

部署模型服务

CUDA_VISIBLE_DEVICES=0 lmdeploy serve api_server Qwen-VL-Chat --server-port 8000

:::

:::{tab-item} Ollama 部署

使用Ollama一键运行ModelScope上托管的模型参考文档

ollama run modelscope.cn/IAILabs/Qwen2.5-VL-7B-Instruct-GGUF

::: ::::

配置模型评测参数

编写配置 ::::{tab-set} :::{tab-item} yaml 配置文件

work_dir: outputs
eval_backend: VLMEvalKit
eval_config:
  model: 
    - type: Qwen2.5-VL-3B-Instruct
      name: CustomAPIModel 
      api_base: http://localhost:8000/v1/chat/completions
      key: EMPTY
      temperature: 0.0
      img_size: -1
      max_tokens: 1024
      video_llm: false
  data:
    - SEEDBench_IMG
    - ChartQA_TEST
  mode: all
  limit: 20
  reuse: false
  nproc: 16
  judge: exact_matching

:::

:::{tab-item} TaskConfig 字典

from evalscope import TaskConfig

task_cfg_dict = TaskConfig(
    work_dir='outputs',
    eval_backend='VLMEvalKit',
    eval_config={
        'data': ['SEEDBench_IMG', 'ChartQA_TEST'],
        'limit': 20,
        'mode': 'all',
        'model': [ 
            {'api_base': 'http://localhost:8000/v1/chat/completions',
            'key': 'EMPTY',
            'name': 'CustomAPIModel',
            'temperature': 0.0,
            'type': 'Qwen2.5-VL-3B-Instruct',
            'img_size': -1,
            'video_llm': False,
            'max_tokens': 1024,}
            ],
        'reuse': False,
        'nproc': 16,
        'judge': 'exact_matching'}
)

::: ::::

方式2. 本地模型推理评测

不启动模型服务,直接配置模型评测参数,在本地进行推理

配置模型评测参数

::::{tab-set} :::{tab-item} yaml 配置文件

:caption: eval_openai_api.json

work_dir: outputs
eval_backend: VLMEvalKit
eval_config:
  model: 
    - name: qwen_chat
      model_path: models/Qwen-VL-Chat
  data:
    - SEEDBench_IMG
    - ChartQA_TEST
  mode: all
  limit: 20
  reuse: false
  work_dir: outputs
  nproc: 16

:::

:::{tab-item} TaskConfig 字典

from evalscope import TaskConfig

task_cfg_dict = TaskConfig(
    work_dir='outputs',
    eval_backend='VLMEvalKit',
    eval_config=
        {'data': ['SEEDBench_IMG', 'ChartQA_TEST'],
        'limit': 20,
        'mode': 'all',
        'model': [ 
            {'name': 'qwen_chat',
            'model_path': 'models/Qwen-VL-Chat',
            'video_llm': False,
            'max_new_tokens': 1024,
            }
          ],
        'reuse': False}
 )

::: ::::

参数说明

  • eval_backend:默认值为 VLMEvalKit,表示使用 VLMEvalKit 评测后端。
  • work_dir:字符串,保存评测结果、日志和摘要的目录。默认值为 outputs
  • eval_config:字典,包含以下字段:
    • data:列表,参考目前支持的数据集
    • model:字典列表,每个字典可以指定以下字段:
      • 使用远程API调用时
        • api_base:模型服务的 URL。
        • typeAPI 请求模型名称,例如 Qwen2.5-VL-3B-Instruct
        • name:固定值,必须为 CustomAPIModel
        • key:模型 API 的 OpenAI API 密钥,默认值为 EMPTY
        • temperature:模型推理的温度系数,默认值为 0.0
        • max_tokens:模型推理的最大 token 数,默认值为 2048
        • img_size:模型推理的图像大小,默认值为 -1,表示使用原始大小;设置为其他值,例如 224,表示将图像缩放到 224x224 大小。
        • video_llm:布尔值,默认为False,在评测视频数据集时,如需传递 video_url 参数,请设置为 True
      • 使用本地模型推理时:
    • mode:选项: ['all', 'infer']all包括推理和评测;infer仅进行推理。
    • limit:整数,评测的数据数量,默认值为 None,表示运行所有示例。
    • reuse:布尔值,是否重用评测结果,否则将删除所有评测临时文件。
      对与`ms-vlmeval>=0.0.11`参数`rerun` 更名为`reuse`,默认值为`False`。设置为`True`时需要在task_cfg_dict中添加`use_cache`来指定使用的缓存目录。
      
    • nproc:整数,并行调用 API 的数量。
    • nframe:整数,视频数据集的视频帧数,默认值为 8
    • fps:整数,视频数据集的帧率,默认值为 -1,表示使用nframe设置为大于0则使用fps来计算视频帧数。
    • use_subtitle:布尔值,视频数据集是否使用字幕,默认值为 False

(可选) 部署裁判员模型

部署本地语言模型作为评判 / 选择提取器同样使用ms-swift部署模型服务具体可参考ms-swift LLM 部署指南

在未部署裁判员模型模型时,将使用后处理+精确匹配进行评判;且**必须配置裁判员模型环境变量才能正确调用模型**。

部署裁判员模型

# 部署qwen2-7b作为裁判员
CUDA_VISIBLE_DEVICES=0 swift deploy --model_type qwen2-7b-instruct --model_id_or_path models/Qwen2-7B-Instruct --port 8866

配置裁判员模型环境变量

在yaml配置文件的eval_config中增加如下配置:

eval_config:
  # ... 其他配置
  OPENAI_API_KEY: EMPTY 
  OPENAI_API_BASE: http://127.0.0.1:8866/v1/chat/completions # 裁判员模型的 api_base
  LOCAL_LLM: qwen2-7b-instruct #裁判员模型的 model_id

4. 执行评测任务

若想让模型重新进行推理,需清空`outputs`文件夹下的模型预测结果再运行脚本。
因为之前的预测结果不会自动清除,若存在该结果**会跳过推理阶段**,直接对结果进行评测。

配置好配置文件后,运行以下脚本即可

:caption: eval_openai_api.py

from evalscope.run import run_task
from evalscope.summarizer import Summarizer

def run_eval():
    # 选项 1: python 字典
    task_cfg = task_cfg_dict

    # 选项 2: yaml 配置文件
    # task_cfg = 'eval_openai_api.yaml'

    run_task(task_cfg=task_cfg)

    print('>> Start to get the report with summarizer ...')
    report_list = Summarizer.get_report_from_cfg(task_cfg)
    print(f'\n>> The report list: {report_list}')

run_eval()

运行以下命令:

python eval_openai_api.py