12 KiB
(opencompass)=
OpenCompass
为便于使用OpenCompass 评测后端,我们基于OpenCompass源码做了定制,命名为ms-opencompass,该版本在原版基础上对评测任务的配置和执行做了一些优化,并支持pypi安装方式,使得用户可以通过EvalScope发起轻量化的OpenCompass评测任务。同时,我们先期开放了基于OpenAI API格式的接口评测任务,您可以使用ms-swift、vLLM、LMDeploy、Ollama等模型服务,来拉起模型推理服务。
1. 环境准备
# 安装opencompass依赖
pip install evalscope[opencompass] -U
2. 数据准备
有以下两种方式下载数据集
数据集的详细信息可以参考[OpenCompass数据集列表](../../get_started/supported_dataset.md#2-opencompass评测后端支持的数据集)
您可以使用以下方式,来查看支持的数据集的名称列表:
```python
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']
```
::::{tab-set} :::{tab-item} 设置环境变量自动下载(推荐) 支持从 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 |
:::
:::{tab-item} 使用链接下载
# 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调用来进行评测,因此我们需要进行模型部署。
下面介绍四种方式部署模型服务: ::::{tab-set} :::{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-0.5B-Instruct --port 8000
ms-swift v2.x
CUDA_VISIBLE_DEVICES=0 swift deploy --model_type qwen2-0_5b-instruct --port 8000
:::
:::{tab-item} vLLM 部署 参考 vLLM 教程。
安装vLLM
pip install vllm -U
部署模型服务
VLLM_USE_MODELSCOPE=True CUDA_VISIBLE_DEVICES=0 python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2-0.5B-Instruct --port 8000
:::
:::{tab-item} LMDeploy 部署 参考 LMDeploy 教程。
安装LMDeploy
pip install lmdeploy -U
部署模型服务
LMDEPLOY_USE_MODELSCOPE=True CUDA_VISIBLE_DEVICES=0 lmdeploy serve api_server Qwen/Qwen2-0.5B-Instruct --server-port 8000
:::
:::{tab-item} Ollama 部署
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. 模型评测
配置文件
有如下三种方式编写配置文件: ::::{tab-set} :::{tab-item} Python 字典
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,
},
)
:::
:::{tab-item} yaml 配置文件
:caption: eval_openai_api.yaml
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
:::
:::{tab-item} json 配置文件
:caption: eval_openai_api.json
{
"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。
运行脚本
配置好配置文件后,运行以下脚本即可
:caption: example_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'
# 选项 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
...