大模型评测工具OpenCompass

本文最后更新于 2025年2月18日 凌晨

OpenCompass是一个开源的大模型评测工具,支持对各类大模型进行全方位的能力评估。本文介绍了如何使用OpenCompass搭建评测环境、配置模型和数据集,并分享了对多个主流大模型在高中/初中理科和高考数学选择题上的评测结果。

环境配置

基础安装

使用conda创建虚拟环境并安装:

1
2
3
4
5
6
conda create -n opencompass python=3.10
conda activate opencompass

git clone https://github.com/open-compass/opencompass opencompass
cd opencompass
pip install -e .

也可以通过pip直接安装:

1
2
3
4
5
6
7
8
# 支持绝大多数数据集及模型
pip install -U opencompass

# 完整安装(支持更多数据集)
# pip install "opencompass[full]"

# API 测试(例如 OpenAI、Qwen)
# pip install "opencompass[api]"

测试数据集

可用数据集

目前支持的数据集包括:

1
2
3
4
humaneval, triviaqa, commonsenseqa, tydiqa, strategyqa, cmmlu, lambada, piqa, 
ceval, math, LCSTS, Xsum, winogrande, openbookqa, AGIEval, gsm8k, nq, race,
siqa, mbpp, mmlu, hellaswag, ARC, BBH, xstory_cloze, summedits, GAOKAO-BENCH,
OCNLI, cmnli

数据集下载

默认使用Huggingface Dataset,可通过环境变量切换到ModelScope:

1
export DATASET_SOURCE=ModelScope

运行测试的时候会自动下载数据集,也可以手动下载(版本不同):

1
2
wget https://github.com/open-compass/opencompass/releases/download/0.2.5.rc1/OpenCompassData-core-20240423.zip
unzio OpenCompassData-core-20240423.zip

模型配置

models文件夹中已经定义了很多模型,包含API调用方式或者本地部署,由于我准备使用oneapi,所以需要新定义一个。

配置API模型

  1. opencompass/models下新建oneapi_api.py,将openai的配置复制过来

  2. 设置API地址:

    1
    2
    通过环境变量设置:
    export OPENAI_BASE_URL="http://172.1.1.1:11111/v1"

    或者在代码中加入:

    1
    2
    import os
    os.environ['OPENAI_BASE_URL'] = "http://172.1.1.1:11111/v1"
  3. 由于很多接口没有实现,所以需要简化token计数:

    1
    2
    def get_token_len(self, prompt: str) -> int:
    return 0
  4. __init__.py中注册模型:

    1
    from .oneapi_api import Oneapi  # noqa: F401
  5. 创建模型配置文件configs/models/oneapi/qwen_max.py:(也可以在后面的测试文件中直接写)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    from opencompass.models import Oneapi

    api_meta_template = dict(
    round=[
    dict(role='HUMAN', api_role='HUMAN'),
    dict(role='BOT', api_role='BOT', generate=True),
    ],
    )

    models = [
    dict(
    abbr='Qwen_max',
    type=Oneapi,
    path='qwen-max',
    key='',
    meta_template=api_meta_template,
    query_per_second=1,
    max_out_len=8192,
    max_seq_len=30720,
    batch_size=8
    ),
    ]

评测实践

测试配置

创建测试文件examples/eval_oneapi_qwen.py:

1
2
3
4
5
6
7
8
from mmengine.config import read_base

with read_base():
from opencompass.configs.datasets.demo.demo_gsm8k_chat_gen import gsm8k_datasets
from opencompass.configs.models.oneapi.qwen_max import models as qwen_max

datasets = gsm8k_datasets
models = qwen_max

运行评测

1
python run.py examples/eval_oneapi_qwen.py -w outputs/demo --debug

如果想查看对比日志,可以增加参数--dump-eval-details,例如

1
python run.py examples/eval_oneapi_qwen.py -w outputs/demo --debug --dump-eval-details

最后在results文件夹中能看到:

1
2
3
4
5
6
7
8
9
"0": {
"pred": [
"D"
],
"refr": [
"D"
],
"is_correct": true
}

输出目录结构

1
2
3
4
5
6
7
8
9
outputs/demo/
├── 20250208_152351 # 运行时创建的文件夹
│ ├── configs # 配置文件备份
│ ├── logs # 日志文件
│ │ ├── eval
│ │ └── infer
│ ├── predictions # 推理结果
│ ├── results # 评估结果
│ └── summary # 评估汇总

评测结果

CEval理科测试结果 (2025-02-10)

测试范围包括高中和初中的数学、物理、化学、生物科目,每个科目包含10-20个测试题目。

科目 qwen-max o1-preview gpt-4o DeepSeek-V3 glm-zero
高中数学 72.22 94.44 27.78 66.67 66.67
高中物理 89.47 94.74 78.95 84.21 89.47
高中化学 89.47 73.68 57.89 73.68 94.74
高中生物 94.74 89.47 78.95 84.21 100.00
初中数学 94.74 100.00 73.68 94.74 94.74
初中生物 85.71 90.48 90.48 90.48 85.71
初中物理 100.00 94.74 94.74 100.00 100.00
初中化学 95.00 95.00 95.00 95.00 95.00

高考数学选择题测试结果 (2025-02-10)

测试范围:

  • 2010-2022数学B卷选择题:217题
  • 2010-2022数学A卷选择题:213题
试卷类型 Qwen-max o1-preview gpt-4o DeepSeek-V3 glm-zero
数学B卷选择题 91.28 99.08 81.19 94.95 30.28
数学A卷选择题 85.51 98.13 70.09 90.19 25.70

智谱这得分很离谱,查看了几个回答日志,的确很多错的,于是有单独对他重新跑了一遍,分数还是很低。

dataset version metric mode glm-zero-preview
2010-2022数学B卷选择题 5b0b29 score gen 30.28
2010-2022数学A卷选择题 5b0b29 score gen 25.70

大模型评测工具OpenCompass
https://blog.kala.love/posts/52fbc345/
作者
久远·卡拉
发布于
2025年2月12日
许可协议