L2 OpenCompass 评测书生大模型实践
OpenCompass 评测书生大模型实践
1.OpenCompass 概述
OpenCompass是由上海人工智能实验室开发的开源大模型评测平台,旨在全面评估大语言模型和多模态模型的能力。

在 OpenCompass 中评估一个模型通常包括以下几个阶段:配置 -> 推理 -> 评估 -> 可视化。
配置:这是整个工作流的起点。您需要配置整个评估过程,选择要评估的模型和数据集。此外,还可以选择评估策略、计算后端等,并定义显示结果的方式。
推理与评估:在这个阶段,OpenCompass 将会开始对模型和数据集进行并行推理和评估。推理阶段主要是让模型从数据集产生输出,而评估阶段则是衡量这些输出与标准答案的匹配程度。这两个过程会被拆分为多个同时运行的“任务”以提高效率,但请注意,如果计算资源有限,这种策略可能会使评测变得更慢。如果需要了解该问题及解决方案,可以参考 FAQ: 效率。
可视化:评估完成后,OpenCompass 将结果整理成易读的表格,并将其保存为 CSV 和 TXT 文件。你也可以激活飞书状态上报功能,此后可以在飞书客户端中及时获得评测状态报告。
2.评测环境配置
2.1开发机的选择
在创建开发机界面选择镜像为 Cuda12.8-conda,并选择 GPU 为 30% A100。

2.2 conda环境安装
conda create -n opencompass10 python=3.10
conda activate opencompass10
# 注意:一定要先 cd /root
cd /root
git clone -b 0.5.0 https://gh.llkk.cc/https://github.com/open-compass/opencompass.git opencompass
cd opencompass
pip install -e .
pip install opencompass[api]
pip install jmespath



3.评测不同类型的题目
3.0数据集的下载
OpenCompass 支持的数据集主要包括三个部分:
-
Huggingface 数据集: Huggingface Dataset 提供了大量的数据集,这部分数据集运行时会自动下载。
-
ModelScope 数据集:ModelScope OpenCompass Dataset 支持从 ModelScope 自动下载数据集。
要启用此功能,请设置环境变量:export DATASET_SOURCE=ModelScope,可用的数据集包括(来源于 OpenCompassData-core.zip):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
-
自建以及第三方数据集:OpenCompass 还提供了一些第三方数据集及自建中文数据集。运行以下命令手动下载解压。
为了方便评测,我们首先将数据集下载到本地:
apt-get update && apt-get install -y unzip
cd /root/opencompass
wget https://ghfast.top/https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip
unzip OpenCompassData-core-20240207.zip



将会在 OpenCompass 下看到data文件夹,里面包含的数据集如下图所示:
3.1使用Intern-s1评测C-Eval 选择题
评测数据集为C-Eval,格式为csv,摘出部分内容如下所示:
| id | question | A | B | C | D | answer | explanation |
| 0 | 甲公司是国内一家上市公司。甲公司对其各子公司实行全面预算管理,并通常使用增量预算方式进行战略控制,子公司预算需要经甲公司预算管理委员会批准后执行。2015年10月,甲公司投资了一个新的项目乙(子公司)。2015年11月,甲公司启动2016年度预算编制工作,此时甲公司应要求乙公司编制____。 | 增量预算 | 零基预算 | 固定预算 | 弹性预算 | B | 1. 乙公司属于甲公司全新的子公司,在启动2016年度预算编制工作时没有可以参考的基数,预算编制者必须根据自己的经验和判断,加上对周围环境变化的预期来做预算。因此,乙公司应编制零基预算。 |
| 1 | 债务人转让全部合同义务的,下列说法不正确的是____。 | 须债权人同意方可进行 | 新债务人可主张原债务人对债权人的抗辩 | 债务人转移债务的,原债务人对债权人享有债权的,新债务人可以向债权人主张抵销 | 非专属于原债务人自身的从债务,一并转让给新债务人 | C | 1. 首先,债务人将债务的全部或者部分转移给第三人的,应当经债权人同意,因此选项A正确。 2. 其次,债务人转移债务的,新债务人可以主张原债务人对债权人的抗辩;原债务人对债权入享有债权的,新债务人不得向债权人主张抵销,因此选项B正确,选项C错误。 3. 然后,债务人转移债务的,新债务人应当承担与主债务有关的从债务,但是该从债务专属于原债务人自身的除外,因此选项D正确。 |
| 2 | 某公司2012年以150万元的价格进口了1台仪器;2014年6月因出现故障运往日本修理(出境时已向海关报明),2014年10月,按海关规定的期限复运进境。此时,该仪器的国际市场价格为200万元。若经海关审定的修理费和料件费为40万元,运费为1.5万元,保险费用为2.8万元,进口关税税率为6%。该仪器复运进境时,应缴纳的进口关税为____万元。 | 9 | 3 | 2.4 | 12 | C | 1. 根据海关规定,运往境外修理的机械器具、运输工具或其他货物,出境时已向海关报明,并在海关规定期限内复运进境的,应当以海关审定的境外修理费和料件费为完税价格。 2. 境外修理费和料件费为40万元,进口关税为6%,因此应缴纳的进口关税为40×6%=2.4(万元)。 |
| 3 | 公开发行公司债券,证监会同意注册的决定自作出之日起一定期限内有效,发行人应当该期限内发行公司债券。该期限是____。 | 6个月 | 1年 | 2年 | 3年 | C | 1. 中国证监会同意注册的决定自作出之日起2年内有效,发行人应当在注册决定有效期内发行公司债券,并自主选择发行时点。 |
| 4 | 某集团公司在一家银行开设了许多不同的银行账户,那么,该集团公司可以要求银行在考虑其利息及透支限额时将其子公司的账户余额集中起来。下列不属于现金余额集中的好处是____。 | 盈余与赤字相抵 | 加强控制 | 增加投资机会 | 匹配 | D | 1. 现金余额集中的好处包括盈余与赤字相抵、加强控制和增加投资机会;匹配,是汇率风险管理中的一项原则,可能与现金余额的集中相冲突,不是现金余额集中的好处。 |
3.1.1 写配置脚本运行
OpenCompass 允许用户在配置文件中编写实验的完整配置脚本,并通过run.py直接运行它。
配置文件就像一个指令集,告诉评测系统用什么模型(model)测什么数据(datasets)。
用 read_base () 直接复用已有配置,不用重复编写。比如代码中通过 with read_base () 块,直接引入了 ceval 数据集和其他模型配置,再组合成当前所需的完整配置。
在opencompass/opencompass/configs文件夹下创建eval_tutorial_demo1.py
cd /root/opencompass/opencompass/configs
touch eval_tutorial_demo1.py
打开eval_tutorial_demo1.py 贴入以下代码
from mmengine.config import read_base
from opencompass.models import OpenAISDK
# 配置模型
models = [
dict(
type=OpenAISDK,
path='intern-s1', # 明确模型名称
key='sk-xxx', # 你的API密钥
openai_api_base='https://chat.intern-ai.org.cn/api/v1', # API地址
rpm_verbose=True,
query_per_second=1, # 根据 rpm 限制,进行调整.rpm==30
max_out_len=512,
max_seq_len=4096,
temperature=0.01,
batch_size=10,# 根据 rpm 限制,进行调整.rpm==30
retry=5, # 增加重试次数
)
]
# 配置数据集(只取每个子数据集的1个样本)
with read_base():
from .datasets.ceval.ceval_gen import ceval_datasets
#datasets=ceval_datasets #测试完整的数据集
# 缩小数据集规模为五个子数据集,每个子数据集仅保留10个样本,缩短测评时间
datasets = []
for d in ceval_datasets[:5]:
# 添加前缀标识这是演示用的精简数据集
d['abbr'] = 'demo_' + d['abbr']
# 仅使用第1个样本(索引0)
d['reader_cfg']['test_range'] = '[0:10]'
datasets.append(d)
因此,运行任务时,我们只需将配置文件的路径参数传递给 run.py:
cd /root/opencompass
python run.py opencompass/configs/eval_tutorial_demo1.py --debug


3.2使用Intern-s1评测自建数据集进行
这里我们评测一下论文分类比赛的数据,newformat_sft_test_data.csv是A榜测试数据,将其放在/root/opencompass/newformat_sft_test_data.csv位置
在configs文件夹下创建eval_tutorial_demo2.py
cd /root/opencompass/opencompass/configs
touch eval_tutorial_demo2.py
from opencompass.models import OpenAISDK
# 配置模型
models = [
dict(
type=OpenAISDK,
path='intern-s1', # 明确模型名称
key='sk-xxxx', # 你的API密钥
openai_api_base='https://chat.intern-ai.org.cn/api/v1', # API地址
rpm_verbose=True,
query_per_second=1, # 根据 rpm 限制,进行调整.rpm==30
max_out_len=512,
max_seq_len=4096,
temperature=0.01,
batch_size=8,# 根据 rpm 限制,进行调整.rpm==30
retry=5, # 增加重试次数
)
]
# 配置数据集
datasets = [
dict(
path='/root/opencompass/newformat_sft_test_data.csv',
data_type='mcq',
infer_method='gen'
)
]
运行
#在opencompass目录下
python run.py opencompass/configs/eval_tutorial_demo2.py --debug


3.3评测MME多模态题——InternVL3_5-1B评测实践
VLMEvalKit是一个专为大型视觉语言模型评测设计的开源工具包。它支持在各种基准测试上对大型视觉语言模型进行一键评估,无需进行繁重的数据准备工作,使评估过程更加简便。VLMEvalKit适用于图文多模态模型的评测,支持单对图文输入或是任意数量的图文交错输入。它通过实现70多个基准测试,覆盖了多种任务,包括但不限于图像描述、视觉问答、图像字幕生成等。

VLMEvalKit的主要用途包括以下几个方面:
-
多模态模型评估:VLMEvalKit旨在为研究人员和开发人员提供一个用户友好且全面的框架,以评估现有的多模态模型并发布可重复的评估结果。它支持多种多模态模型和评测集,包括闭源和开源模型,以及多个多模态基准数据集。
-
模型性能比较:通过VLMEvalKit,用户可以轻松比较不同多模态模型在各种任务上的性能。该工具包提供了详细的评测结果,并支持将结果发布在OpenCompass的多模态整体榜单上。
-
便捷的一站式评测:VLMEvalKit支持一键式评测,无需手动进行数据预处理。用户只需一条命令即可完成对多个多模态模型和评测集的评测。
-
易于扩展:VLMEvalKit框架支持轻松添加新的多模态模型和评测集。用户可以根据需要添加新的模型或评测集,并确保原有的评测集和模型仍然适用于新的模型或评测集。
-
支持多种模型和评测集:VLMEvalKit支持超过三十个开源多模态模型和十余个开源多模态评测集,包括GPT-4v、GeminiPro、QwenVLPlus等主流模型和MME、MMBench、SEEDBench等评测集。
-
提供定量与定性结果:VLMEvalKit不仅提供定量评测结果,还支持对模型的定性分析,帮助用户了解模型在特定任务上的表现和不足之处。
使用VLMEvalKit进行评测需要进行以下步骤:
3.3.1环境准备
用以下命令安装依赖:
cd /root/opencompass
git clone https://gh.llkk.cc/https://github.com/open-compass/VLMEvalKit.git
conda create -n VLMEvalKit1 python=3.10
conda activate VLMEvalKit1
cd VLMEvalKit
pip install -e .
pip install datasets
注意:
某些 VLM 可能无法在某些特定的 transformers 版本下运行,参考以下设置来评估对应的VLM:
请用
transformers==4.33.0来运行:Qwen series,Monkey series,InternLM-XComposer Series,mPLUG-Owl2,OpenFlamingo v2,IDEFICS series,VisualGLM,MMAlaya,ShareCaptioner,MiniGPT-4 series,InstructBLIP series,PandaGPT,VXVERSE.请用
transformers==4.37.0来运行:LLaVA series,ShareGPT4V series,TransCore-M,LLaVA (XTuner),CogVLM Series,EMU2 Series,Yi-VL Series,MiniCPM-[V1/V2],OmniLMM-12B,DeepSeek-VL series,InternVL series,Cambrian Series,VILA Series,Llama-3-MixSenseV1_1,Parrot-7B,PLLaVA Series.请用
transformers==4.40.0来运行:IDEFICS2,Bunny-Llama3,MiniCPM-Llama3-V2.5,360VL-70B,Phi-3-Vision,WeMM.请用
transformers==latest来运行:LLaVA-Next series,PaliGemma-3B,Chame3leon series,Video-LLaVA-7B-HF,Ovis series,Mantis series,MiniCPM-V2.6,OmChat-v2.0-13B-sinlge-beta,Idefics-3,GLM-4v-9B,VideoChat2-HD.
3.3.2修改文件
在$VLMEvalKit/vlmeval/config.py文件中设置在 VLMEvalKit 中支持的 VLM 名称,以及模型路径。
如果你的电脑上面没有该模型的模型文件,则需要自己下载,然后更改模型路径,也可以不修改,在运行模型评测命令的时候会自动下载模型文件。
注:默认下载使用的是Huggingface,需要进行科学上网,也可以使用modelscope将模型下载到本地,然后更改路径。
修改VLMEvalKit/vlmeval/config.py下红框所示为
"InternVL3_5-1B": partial(InternVLChat, model_path="/root/share/new_models/InternVL3.5/InternVL3_5-1B", version="V2.0"
),

3.3.3模型评测
模型评测时可以使用 python 或 torchrun 来运行脚本,使用 python 运行时,只实例化一个 VLM,并且它可能使用多个 GPU。使用 torchrun 运行时,每个 GPU 上实例化一个 VLM 实例,这可以加快推理速度。
这里我们在 MME 上 进行推理和评估。
MME涵盖了感知和认知能力的考察。除了OCR外,感知包括对粗粒度和细粒度对象的识别。前者识别对象的存在、数量、位置和颜色。后者识别电影海报、名人、场景、地标和艺术作品。认知包括常识推理、数值计算、文本翻译和代码推理。总共有14个子任务。
使用以下命令开始评测:
python run.py --data MME --model InternVL3_5-1B --verbose
参数解释:
--data (list[str]): 设置在 VLMEvalKit 中支持的数据集名称(在vlmeval/utils/dataset_config.py中定义)
--model (list[str]): 设置在 VLMEvalKit 中支持的 VLM 名称(在vlmeval/config.py中的supported_VLM中定义)
--mode (str, 默认值为 'all', 可选值为 ['all', 'infer']):当 mode 设置为 "all" 时,将执行推理和评估;当设置为 "infer" 时,只执行推理
--nproc (int, 默认值为 4): 调用 API 的线程数
--work-dir (str, default to '.'): 存放测试结果的目录
--nframe (int, default to 8): 从视频中采样的帧数,仅对视频多模态评测集适用
--pack (bool, store_true): 一个视频可能关联多个问题,如pack==True,将会在一次询问中提问所有问题

到此为止,此关卡结束。
更多推荐



所有评论(0)