OpenCompass#
为便于使用OpenCompass 评测后端,我们基于OpenCompass源码做了定制,命名为ms-opencompass
,该版本在原版基础上对评测任务的配置和执行做了一些优化,并支持pypi安装方式,使得用户可以通过EvalScope发起轻量化的OpenCompass评测任务。同时,我们先期开放了基于OpenAI API格式的接口评测任务,您可以使用ms-swift、vLLM、LMDeploy、Ollama等模型服务,来拉起模型推理服务。
1. 环境准备#
# 安装opencompass依赖
pip install evalscope[opencompass] -U
2. 数据准备#
备注
有以下两种方式下载数据集
数据集的详细信息可以参考OpenCompass数据集列表
您可以使用以下方式,来查看支持的数据集的名称列表:
from evalscope.backend.opencompass import OpenCompassBackendManager
# 显示支持的数据集名称列表
OpenCompassBackendManager.list_datasets()
>>> ['summedits', 'humaneval', 'lambada',
'ARC_c', 'ARC_e', 'CB', 'C3', 'cluewsc', 'piqa',
'bustm', 'storycloze', 'lcsts', 'Xsum', 'winogrande',
'ocnli', 'AX_b', 'math', 'race', 'hellaswag',
'WSC', 'eprstmt', 'siqa', 'agieval', 'obqa',
'afqmc', 'GaokaoBench', 'triviaqa', 'CMRC',
'chid', 'gsm8k', 'ceval', 'COPA', 'ReCoRD',
'ocnli_fc', 'mbpp', 'csl', 'tnews', 'RTE',
'cmnli', 'AX_g', 'nq', 'cmb', 'BoolQ', 'strategyqa',
'mmlu', 'WiC', 'MultiRC', 'DRCD', 'cmmlu']
支持从 ModelScope 自动下载数据集,要启用此功能,请设置环境变量:
export DATASET_SOURCE=ModelScope
以下数据集在使用时将自动下载:
名称 |
名称 |
---|---|
humaneval |
AGIEval |
triviaqa |
gsm8k |
commonsenseqa |
nq |
tydiqa |
race |
strategyqa |
siqa |
cmmlu |
mbpp |
lambada |
hellaswag |
piqa |
ARC |
ceval |
BBH |
math |
xstory_cloze |
LCSTS |
summedits |
Xsum |
GAOKAO-BENCH |
winogrande |
OCNLI |
openbookqa |
cmnli |
# ModelScope下载
wget -O eval_data.zip https://www.modelscope.cn/datasets/swift/evalscope_resource/resolve/master/eval.zip
# 或使用github下载
wget -O eval_data.zip https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-complete-20240207.zip
# 解压
unzip eval_data.zip
包含的数据集有:
名称 |
名称 |
名称 |
---|---|---|
obqa |
AX_b |
siqa |
nq |
mbpp |
winogrande |
mmlu |
BoolQ |
cluewsc |
ocnli |
lambada |
CMRC |
ceval |
csl |
cmnli |
bbh |
ReCoRD |
math |
humaneval |
eprstmt |
WSC |
storycloze |
MultiRC |
RTE |
chid |
gsm8k |
AX_g |
bustm |
afqmc |
piqa |
lcsts |
strategyqa |
Xsum |
agieval |
ocnli_fc |
C3 |
tnews |
race |
triviaqa |
CB |
WiC |
hellaswag |
summedits |
GaokaoBench |
ARC_e |
COPA |
ARC_c |
DRCD |
总大小约1.7GB,下载并解压后,将数据集文件夹(即data文件夹)放置在当前工作路径下。
3. 部署模型服务#
OpenCompass 评测后端使用统一的OpenAI API调用来进行评测,因此我们需要进行模型部署。
下面介绍四种方式部署模型服务:
使用ms-swift部署模型服务,具体可参考:ms-swift部署指南。
安装ms-swift
pip install ms-swift -U
部署模型服务
CUDA_VISIBLE_DEVICES=0 swift deploy --model_type qwen2-0_5b-instruct --port 8000
参考 vLLM 教程。
安装vLLM
pip install vllm -U
部署模型服务
CUDA_VISIBLE_DEVICES=0 python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2-0.5B-Instruct --port 8000
参考 LMDeploy 教程。
安装LMDeploy
pip install lmdeploy -U
部署模型服务
CUDA_VISIBLE_DEVICES=0 lmdeploy serve api_server Qwen2-0.5B-Instruct --server-port 8000
备注
Ollama 对于 OpenAI API 的支持目前处于实验性状态,本教程仅提供示例,请根据实际情况修改。
参考 Ollama 教程。
安装Ollama
# Linux 系统
curl -fsSL https://ollama.com/install.sh | sh
启动Ollama
# 默认端口为 11434
ollama serve
小技巧
若使用ollama pull
拉取模型,可跳过以下创建模型的步骤;若使用ollama import
导入模型,则需要手动创建模型配置文件。
创建模型配置文件 Modelfile
# 模型路径
FROM models/Meta-Llama-3-8B-Instruct
# 温度系数
PARAMETER temperature 1
# system prompt
SYSTEM """
You are a helpful assistant.
"""
创建模型
会将模型自动转为ollama支持的格式,同时支持多种量化方式。
ollama create llama3 -f ./Modelfile
4. 模型评测#
配置文件#
有如下三种方式编写配置文件:
task_cfg_dict = dict(
eval_backend='OpenCompass',
eval_config={
'datasets': ["mmlu", "ceval",'ARC_c', 'gsm8k'],
'models': [
{'path': 'qwen2-0_5b-instruct',
'openai_api_base': 'http://127.0.0.1:8000/v1/chat/completions',
'is_chat': True,
'batch_size': 16},
],
'work_dir': 'outputs/qwen2_eval_result',
'limit': 10,
},
)
eval_backend: OpenCompass
eval_config:
datasets:
- mmlu
- ceval
- ARC_c
- gsm8k
models:
- openai_api_base: http://127.0.0.1:8000/v1/chat/completions
path: qwen2-0_5b-instruct
temperature: 0.0
{
"eval_backend": "OpenCompass",
"eval_config": {
"datasets": [
"mmlu",
"ceval",
"ARC_c",
"gsm8k"
],
"models": [
{
"path": "qwen2-0_5b-instruct",
"openai_api_base": "http://127.0.0.1:8000/v1/chat/completions",
"temperature": 0.0
}
]
}
}
参数说明#
eval_backend
:默认值为OpenCompass
,表示使用 OpenCompass 评测后端eval_config
:字典,包含以下字段:datasets
:列表,参考目前支持的数据集models
:字典列表,每个字典必须包含以下字段:path
:OpenAI API 请求模型名称。若使用
ms-swift
部署,设置为--model_type
的值;若使用
vLLM
或LMDeploy
部署模型,则设置为model_id
;若使用
Ollama
部署模型,则设置为model_name
,使用ollama list
命令查看。
openai_api_base
:OpenAI API 的URL。is_chat
:布尔值,设置为True
表示聊天模型,设置为False
表示基础模型。key
:模型 API 的 OpenAI API 密钥,默认值为EMPTY
。
work_dir
:字符串,保存评测结果、日志和摘要的目录。默认值为outputs/default
。limit
: 可以是int
、float
或str
,例如 5、5.0 或'[10:20]'
。默认值为None
,表示运行所有示例。
有关其他可选属性,请参考 opencompass.cli.arguments.ApiModelConfig
。
运行脚本#
配置好配置文件后,运行以下脚本即可
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'
# 选项 3: json 配置文件
# task_cfg = 'eval_openai_api.json'
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
可以看到最终输出如下:
dataset version metric mode qwen2-0_5b-instruct
-------------------------------------- --------- ------------- ------ ---------------------
--------- 考试 Exam --------- - - - -
ceval - naive_average gen 30.00
agieval - - - -
mmlu - naive_average gen 42.28
GaokaoBench - - - -
ARC-c 1e0de5 accuracy gen 60.00
--------- 语言 Language --------- - - - -
WiC - - - -
summedits - - - -
winogrande - - - -
flores_100 - - - -
--------- 推理 Reasoning --------- - - - -
cmnli - - - -
ocnli - - - -
ocnli_fc-dev - - - -
AX_b - - - -
AX_g - - - -
strategyqa - - - -
math - - - -
gsm8k 1d7fe4 accuracy gen 40.00
...