Skip to content

Commit 6bad683

Browse files
authored
Camp4 (#2168)
* opencompass
1 parent 0646685 commit 6bad683

2 files changed

Lines changed: 142 additions & 103 deletions

File tree

docs/L1/Evaluation/readme.md

Lines changed: 109 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -9,97 +9,138 @@
99
- 对于多模态大模型评测,我们则可以使用 VLMEvalKit 评测,属于进阶任务,请查看[教程](vlmevalkit.md)
1010

1111

12-
OpenCompass 是一个功能强大的大模型评测工具,支持两种便捷的评测方式:
13-
- **直接评测**:通过加载模型权重文件进行评测
14-
- **API 模式评测**:对已部署的模型服务进行评测,无需加载模型权重
12+
大语言模型的使用通常有两种方式:可以通过调用 API 服务来使用,也可以通过本地加载模型权重文件的方式直接使用。基于这两种不同的使用方式,OpenCompass 作为一个大模型评测框架,相应地提供了 **API 模式评测****本地直接评测**两种方式。其中 API 模式评测针对那些以 API 服务形式部署的模型,而本地直接评测则面向那些可以获取到模型权重文件的情况。
1513

16-
本教程将带你使用以上两种方式评测 InternLM2.5-Chat-1.8B 在 C-Eval 数据集上的性能。整个评测过程非常简单,包含三个步骤:
17-
1. 配置阶段:准备环境,选择模型和数据集
18-
2. 推理评估:运行评测获取模型输出并打分
19-
3. 查看报告:自动生成 CSV 和 TXT 格式的评测报告
14+
我们首先在训练营提供的开发机上创建用于评测 conda 环境:
2015

16+
```bash
17+
conda create -n opencompass python=3.10
18+
conda activate opencompass
19+
20+
cd /root
21+
git clone -b 0.3.3 https://github.com/open-compass/opencompass
22+
cd opencompass
23+
pip install -e .
24+
pip install -r requirements.txt
25+
pip install huggingface_hub==0.25.2
26+
```
2127

2228
更多使用说明,请参考 OpenCompass [官方文档](https://opencompass.readthedocs.io/en/latest/tutorial.html)
2329

2430

25-
## 配置
2631

32+
## 评测 API 模型
33+
34+
如果你想要评测通过 API 访问的大语言模型,整个过程其实很简单。首先你需要获取模型的 API 密钥(API Key)和接口地址。以 OpenAI 的 GPT 模型为例,你只需要在 OpenAI 官网申请一个 API Key,然后在评测配置文件中设置好这个密钥和相应的模型参数就可以开始评测了。评测过程中,评测框架会自动向模型服务发送测试用例,获取模型的回复并进行打分分析。整个过程你不需要准备任何模型文件,也不用担心本地计算资源是否足够,只要确保网络连接正常即可。
35+
36+
37+
考虑到 openai 的 API 服务暂时在国内无法直接使用,我们这里以评测 internlm 模型为例,介绍如何评测 API 模型。
2738

28-
### 环境准备
2939

30-
创建开发机和 Conda 环境之后, 安装 OpenCompass 及其相关软件包 (注意:一定要先 cd /root)
40+
1) 打开网站浦语官方地址 https://internlm.intern-ai.org.cn/api/document 获得 api key 和 api 服务地址 (也可以从第三方平台 [硅基流动](https://siliconflow.cn/zh-cn/siliconcloud) 获取), 在终端中运行:
3141

3242
```bash
33-
conda create -n opencompass python=3.10
34-
conda activate opencompass
35-
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
43+
export INTERNLM_API_KEY=xxxxxxxxxxxxxxxxxxxxxxx # 填入你申请的 API Key
44+
```
3645

37-
cd /root
38-
git clone -b 0.3.3 https://github.com/open-compass/opencompass
39-
cd opencompass
40-
pip install -e .
46+
2) 配置模型: 在终端中运行: `touch opencompass/configs/models/openai/puyu_api.py`, 然后打开文件, 贴入以下代码:
4147

4248

43-
apt-get update
44-
apt-get install cmake
45-
pip install -r requirements.txt
46-
pip install protobuf==4.25.3
49+
```python
50+
import os
51+
from opencompass.models import OpenAISDK
52+
53+
54+
internlm_url = 'https://internlm-chat.intern-ai.org.cn/puyu/api/v1/' # 你前面获得的 api 服务地址
55+
internlm_api_key = os.getenv('INTERNLM_API_KEY')
56+
57+
models = [
58+
dict(
59+
# abbr='internlm2.5-latest',
60+
type=OpenAISDK,
61+
path='internlm2.5-latest', # 请求服务时的 model name
62+
# 换成自己申请的APIkey
63+
key=internlm_api_key, # API key
64+
openai_api_base=internlm_url, # 服务地址
65+
rpm_verbose=True, # 是否打印请求速率
66+
query_per_second=0.16, # 服务请求速率
67+
max_out_len=1024, # 最大输出长度
68+
max_seq_len=4096, # 最大输入长度
69+
temperature=0.01, # 生成温度
70+
batch_size=1, # 批处理大小
71+
retry=3, # 重试次数
72+
)
73+
]
4774
```
4875

49-
### 数据集准备
76+
3) 配置数据集: 在终端中运行: `touch /Users/gongqian/Desktop/opencompass/opencompass/configs/datasets/demo/demo_cmmlu_chat_gen.py`, 然后打开文件, 贴入以下代码:
5077

78+
```python
79+
from mmengine import read_base
80+
81+
with read_base():
82+
from ..cmmlu.cmmlu_gen_c13365 import cmmlu_datasets
83+
84+
85+
# 每个数据集只取前2个样本进行评测
86+
for d in cmmlu_datasets:
87+
d['abbr'] = 'demo_' + d['abbr']
88+
d['reader_cfg']['test_range'] = '[0:2]'
5189

52-
```bash
53-
cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/
54-
unzip OpenCompassData-core-20231110.zip
5590
```
56-
将会在 OpenCompass 下看到data文件夹.
91+
这样我们使用了 CMMLU Benchmark 的每个子数据集的 2 个样本进行评测.
92+
93+
94+
完成配置后, 在终端中运行: `python run.py --models puyu_api.py --datasets demo_cmmlu_chat_gen.py --debug` 得到结果:
95+
96+
![image](https://github.com/user-attachments/assets/de9c0b6d-b315-431e-b90f-852678f08468)
97+
5798

5899

59100

60-
### 配置文件
61101

62-
列出所有跟 InternLM 及 C-Eval 相关的配置
102+
103+
## 评测本地模型
104+
105+
106+
如果你想要评测本地部署的大语言模型,首先需要获取到完整的模型权重文件。以开源模型为例,你可以从 Hugging Face 等平台下载模型文件。接下来,你需要准备足够的计算资源,比如至少一张显存够大的 GPU,因为模型文件通常都比较大。有了模型和硬件后,你需要在评测配置文件中指定模型路径和相关参数,然后评测框架就会自动加载模型并开始评测。这种评测方式虽然前期准备工作相对繁琐,需要考虑硬件资源,但好处是评测过程完全在本地完成,不依赖网络状态,而且你可以更灵活地调整模型参数,深入了解模型的性能表现。这种方式特别适合需要深入研究模型性能或进行模型改进的研发人员。
107+
108+
109+
我们接下以评测 InternLM2-Chat-1.8B 在 C-Eval 数据集上的性能为例,介绍如何评测本地模型。
110+
111+
### 相关配置
112+
113+
114+
安装相关软件包:
63115

64116
```bash
65-
python tools/list_configs.py internlm ceval
117+
cd /root/opencompass
118+
conda activate opencompass
119+
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
120+
apt-get update
121+
apt-get install cmake
122+
pip install protobuf==4.25.3
123+
pip install huggingface-hub==0.23.2
66124
```
67-
将会看到如下输出
68125

126+
为了方便评测,我们首先将数据集下载到本地:
127+
128+
```bash
129+
cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/
130+
unzip OpenCompassData-core-20231110.zip
69131
```
70-
+----------------------------------------+----------------------------------------------------------------------+
71-
| Model | Config Path |
72-
|----------------------------------------+----------------------------------------------------------------------|
73-
| hf_internlm2_1_8b | configs/models/hf_internlm/hf_internlm2_1_8b.py |
74-
| hf_internlm2_20b | configs/models/hf_internlm/hf_internlm2_20b.py |
75-
| hf_internlm2_7b | configs/models/hf_internlm/hf_internlm2_7b.py |
76-
| hf_internlm2_base_20b | configs/models/hf_internlm/hf_internlm2_base_20b.py |
77-
| hf_internlm2_base_7b | configs/models/hf_internlm/hf_internlm2_base_7b.py |
78-
| hf_internlm2_chat_1_8b | configs/models/hf_internlm/hf_internlm2_chat_1_8b.py |
79-
| hf_internlm2_chat_1_8b_sft | configs/models/hf_internlm/hf_internlm2_chat_1_8b_sft.py |
80-
| hf_internlm2_chat_20b | configs/models/hf_internlm/hf_internlm2_chat_20b.py |
81-
| hf_internlm2_chat_20b_sft | configs/models/hf_internlm/hf_internlm2_chat_20b_sft.py |
82-
| ... | ... |
83-
+----------------------------------------+----------------------------------------------------------------------+
84-
+--------------------------------+-------------------------------------------------------------------+
85-
| Dataset | Config Path |
86-
|--------------------------------+-------------------------------------------------------------------|
87-
| ceval_clean_ppl | configs/datasets/ceval/ceval_clean_ppl.py |
88-
| ceval_contamination_ppl_810ec6 | configs/datasets/contamination/ceval_contamination_ppl_810ec6.py |
89-
| ceval_gen | configs/datasets/ceval/ceval_gen.py |
90-
| ceval_gen_2daf24 | configs/datasets/ceval/ceval_gen_2daf24.py |
91-
| ceval_gen_5f30c7 | configs/datasets/ceval/ceval_gen_5f30c7.py |
92-
| ceval_ppl | configs/datasets/ceval/ceval_ppl.py |
93-
| ceval_ppl_1cd8bf | configs/datasets/ceval/ceval_ppl_1cd8bf.py |
94-
| ceval_ppl_578f8d | configs/datasets/ceval/ceval_ppl_578f8d.py |
95-
| ... | ... |
96-
+--------------------------------+-------------------------------------------------------------------+
97-
```
132+
将会在 OpenCompass 下看到data文件夹.
133+
98134

99135

136+
### 加载本地模型进行评测
100137

101138

102-
## 启动评测(10% A100 8GB 资源)
139+
在 OpenCompass 中,模型和数据集的配置文件都存放在 `configs` 文件夹下。我们可以通过运行 `list_configs` 命令列出所有跟 InternLM 及 C-Eval 相关的配置。
140+
141+
```bash
142+
python tools/list_configs.py internlm ceval
143+
```
103144

104145
打开 opencompass 文件夹下 `configs/models/hf_internlm/的 hf_internlm2_5_1_8b_chat.py` 文件, 修改如下:
105146

@@ -124,6 +165,7 @@ models = [
124165

125166
```bash
126167
python run.py --datasets ceval_gen --models hf_internlm2_5_1_8b_chat --debug
168+
# 如果出现 rouge 导入报错, 请 pip uninstall rouge 之后再次安装 pip install rouge==1.0.1 可解决问题.
127169
```
128170
评测完成后,将会看到:
129171

@@ -137,7 +179,7 @@ cd /root/opencompass/configs/
137179
touch eval_tutorial_demo.py
138180
```
139181

140-
打开eval_tutorial_demo.py 贴入以下代码
182+
打开 `eval_tutorial_demo.py` 贴入以下代码
141183

142184
```python
143185
from mmengine.config import read_base
@@ -157,11 +199,11 @@ python run.py configs/eval_tutorial_demo.py --debug
157199
```
158200

159201

160-
## 评测 API 模型
202+
## 将本地模型通过部署成API服务再评测
161203

162-
OpenCompass 通过其设计,不会真正区分开源模型和 API 模型。您可以使用相同的方式甚至在一个设置中评估这两种模型类型。
204+
前面我们介绍了如何评测 API 模型和本地模型, 现在我们介绍如何将本地模型部署成 API 服务, 然后通过评测 API 服务的方式来评测本地模型. OpenCompass 通过其设计,不会真正区分开源模型和 API 模型。您可以使用相同的方式甚至在一个设置中评估这两种模型类型。
163205

164-
首先安装和部署模型:
206+
首先打开一个终端, 安装和部署模型:
165207

166208
```bash
167209
pip install lmdeploy==0.6.1 openai==1.52.0
@@ -183,18 +225,18 @@ INFO: 127.0.0.1:38584 - "POST /v1/chat/completions HTTP/1.1" 200 OK
183225
```
184226

185227

186-
使用以下 Python 代码获取由 LMDeploy 注册的模型名称:
228+
新开一个终端, 使用以下 Python 代码获取由 LMDeploy 注册的模型名称:
187229

188230
```python
189231
from openai import OpenAI
190232
client = OpenAI(
191-
api_key='sk-123456',
233+
api_key='sk-123456', # 可以设置成随意的字符串
192234
base_url="http://0.0.0.0:23333/v1"
193235
)
194236
model_name = client.models.list().data[0].id
195-
model_name
237+
model_name # 注册的模型名称需要被用于后续配置.
196238
```
197-
239+
结果显示 `/share/new_models/Shanghai_AI_Laboratory/internlm2_5-1_8b-chat/`, 接着,
198240
创建配置脚本 `/root/opencompass/configs/models/hf_internlm/hf_internlm2_5_1_8b_chat_api.py`
199241

200242
```python

0 commit comments

Comments
 (0)