get_started.md 7.48 KB
Newer Older
gaotongxiao's avatar
gaotongxiao committed
1
2
# 安装

Ma Zerun's avatar
Ma Zerun committed
3
1. 使用以下命令准备 OpenCompass 环境:
gaotongxiao's avatar
gaotongxiao committed
4
5

```bash
Ma Zerun's avatar
Ma Zerun committed
6
conda create --name opencompass python=3.10 pytorch torchvision pytorch-cuda -c nvidia -c pytorch -y
gaotongxiao's avatar
gaotongxiao committed
7
8
9
conda activate opencompass
```

Ma Zerun's avatar
Ma Zerun committed
10
11
如果你希望自定义 PyTorch 版本或相关的 CUDA 版本,请参考 [官方文档](https://pytorch.org/get-started/locally/) 准备 PyTorch 环境。需要注意的是,OpenCompass 要求 `pytorch>=1.13`

gaotongxiao's avatar
gaotongxiao committed
12
13
14
15
16
17
18
19
20
21
2. 安装 OpenCompass:

```bash
git clone https://github.com/opencompass/opencompass
cd opencompass
pip install -e .
```

3. 安装 humaneval(可选)

Ezra-Yu's avatar
Ezra-Yu committed
22
如果你需要在 humaneval 数据集上进行评估,请执行此步骤,否则忽略这一步。
gaotongxiao's avatar
gaotongxiao committed
23

Ezra-Yu's avatar
Ezra-Yu committed
24
```bash
gaotongxiao's avatar
gaotongxiao committed
25
26
git clone https://github.com/openai/human-eval.git
cd human-eval
Leymore's avatar
Leymore committed
27
pip install -r requirements.txt
gaotongxiao's avatar
gaotongxiao committed
28
pip install -e .
Ma Zerun's avatar
Ma Zerun committed
29
cd ..
gaotongxiao's avatar
gaotongxiao committed
30
31
```

Ma Zerun's avatar
Ma Zerun committed
32
请仔细阅读 `human_eval/execution.py` **第48-57行**的注释,了解执行模型生成的代码可能存在的风险,如果接受这些风险,请取消**第58行**的注释,启用代码执行评测。
gaotongxiao's avatar
gaotongxiao committed
33
34
35

# 快速上手

Ezra-Yu's avatar
Ezra-Yu committed
36
37
38
39
40
41
42
启动一个简单评测任务一般需要三个步骤:

1. **准备数据集及其配置**[`configs/datasets`](https://github.com/open-mmlab/OpenCompass/tree/main/configs/datasets) 提供了 OpenCompass 已经支持的 50 多种数据集。
2. **准备模型配置**[`configs/models`](https://github.com/open-mmlab/OpenCompass/tree/main/configs/models) 提供已经支持的大模型样例, 包括基于 HuggingFace 的模型以及类似 ChatGPT 的 API 模型。
3. **使用 `run` 脚本启动**, 支持一行命令在本地或者 slurm 上启动评测,支持一次测试多个数据集,多个模型。

我们会以测试 LLaMA-7B 预训练基座模型在 SIQA 和 PIQA 上的性能为例,带领你熟悉 OpenCompass 的一些基本功能。在运行前,
Ma Zerun's avatar
Ma Zerun committed
43
44
请先确保你安装好了 OpenCompass,并在本机或集群上有满足 LLaMA-7B 最低要求的 GPU 计算资源。

Ezra-Yu's avatar
Ezra-Yu committed
45
使用以下命令在本地启动评测任务(运行中需要联网自动下载数据集和模型,模型下载较慢):
Ma Zerun's avatar
Ma Zerun committed
46

Ezra-Yu's avatar
Ezra-Yu committed
47
48
49
```bash
python run.py configs/eval_llama_7b.py --debug
```
Ma Zerun's avatar
Ma Zerun committed
50

Ezra-Yu's avatar
Ezra-Yu committed
51
下面是这个案例的详细步骤解释。
Ma Zerun's avatar
Ma Zerun committed
52

Ezra-Yu's avatar
Ezra-Yu committed
53
54
55
56
57
## 详细步骤

<details>
<summary>准备数据集及其配置</summary>

Tong Gao's avatar
Tong Gao committed
58
因为 [siqa](https://huggingface.co/datasets/siqa)[piqa](https://huggingface.co/datasets/piqa) 支持自动下载,所以这里不需要手动下载数据集,但有部分数据集可能需要手动下载,详细查看文档 [准备数据集](./user_guides/dataset_prepare.md).
Ezra-Yu's avatar
Ezra-Yu committed
59
60

创建一个 '.py' 配置文件, 添加以下内容:
Ma Zerun's avatar
Ma Zerun committed
61
62

```python
Ezra-Yu's avatar
Ezra-Yu committed
63
from mmengine.config import read_base                # 使用 mmengine 的 config 机制
Ma Zerun's avatar
Ma Zerun committed
64
65
66
67
68

with read_base():
    # 直接从预设数据集配置中读取需要的数据集配置
    from .datasets.piqa.piqa_ppl import piqa_datasets
    from .datasets.siqa.siqa_gen import siqa_datasets
Tong Gao's avatar
Tong Gao committed
69

Ezra-Yu's avatar
Ezra-Yu committed
70
71
72
73
datasets = [*piqa_datasets, *siqa_datasets]          # 最后 config 需要包含所需的评测数据集列表 datasets
```

[configs/datasets](https://github.com/InternLM/OpenCompass/blob/main/configs/datasets) 包含各种数据集预先定义好的配置文件,如 [piqa](https://github.com/InternLM/OpenCompass/blob/main/configs/) 文件夹下有不同 Prompt 版本的 piqa 定义,其中 `ppl` 表示使用判别式评测, `gen` 表示使用生成式评测。[configs/datasets/collections](https://github.com/InternLM/OpenCompass/blob/main/configs/datasets/collections) 存放了各类数据集集合,方便做综合评测。
Ma Zerun's avatar
Ma Zerun committed
74

Ezra-Yu's avatar
Ezra-Yu committed
75
</details>
Ma Zerun's avatar
Ma Zerun committed
76

Ezra-Yu's avatar
Ezra-Yu committed
77
78
<details>
<summary>准备模型</summary>
Ma Zerun's avatar
Ma Zerun committed
79

Ezra-Yu's avatar
Ezra-Yu committed
80
81
82
83
84
85
86
87
[configs/models](https://github.com/InternLM/OpenCompass/blob/main/configs/models) 包含多种已经支持的模型案案例,如 gpt3.5, hf_llama 等。

HuggingFace 中的 'huggyllama/llama-7b' 支持自动下载,在配置文件中添加以下内容:

```python
from opencompass.models import HuggingFaceCausalLM    # 提供直接使用 HuggingFaceCausalLM 模型的接口

llama_7b = dict(
Ma Zerun's avatar
Ma Zerun committed
88
89
90
91
92
93
94
95
96
97
98
99
        type=HuggingFaceCausalLM,
        # 以下参数为 HuggingFaceCausalLM 的初始化参数
        path='huggyllama/llama-7b',
        tokenizer_path='huggyllama/llama-7b',
        tokenizer_kwargs=dict(padding_side='left', truncation_side='left'),
        max_seq_len=2048,
        # 以下参数为各类模型都有的参数,非 HuggingFaceCausalLM 的初始化参数
        abbr='llama-7b',            # 模型简称,用于结果展示
        max_out_len=100,            # 最长生成 token 数
        batch_size=16,              # 批次大小
        run_cfg=dict(num_gpus=1),   # 运行配置,用于指定资源需求
    )
Tong Gao's avatar
Tong Gao committed
100

Ezra-Yu's avatar
Ezra-Yu committed
101
models = [llama_7b]                                     # 最后 config 需要包含所需的模型列表 models
Ma Zerun's avatar
Ma Zerun committed
102
103
```

Ezra-Yu's avatar
Ezra-Yu committed
104
105
106
107
</details>

<details>
<summary>启动评测</summary>
Ma Zerun's avatar
Ma Zerun committed
108
109
110
111

首先,我们可以使用 debug 模式启动任务,以检查模型加载、数据集读取是否出现异常,如未正确读取缓存等。

```shell
Ezra-Yu's avatar
Ezra-Yu committed
112
python run.py configs/eval_llama_7b.py -w outputs/llama --debug
Ma Zerun's avatar
Ma Zerun committed
113
114
115
116
117
```

`--debug` 模式下只能逐一序列执行任务,因此检查无误后,可关闭 `--debug` 模式,使程序充分利用多卡资源

```shell
Ezra-Yu's avatar
Ezra-Yu committed
118
python run.py configs/eval_llama_7b.py -w outputs/llama
Ma Zerun's avatar
Ma Zerun committed
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
```

以下是一些与评测相关的参数,可以帮助你根据自己的环境情况配置更高效的推理任务。

- `-w outputs/llama`: 评测日志及结果保存目录
- `-r`: 重启上一次(中断的)评测
- `--mode all`: 指定进行某一阶段的任务
  - all: 进行全阶段评测,包括推理和评估
  - infer: 仅进行各个数据集上的推理
  - eval: 仅基于推理结果进行评估
  - viz: 仅展示评估结果
- `--max-partition-size 2000`: 数据集拆分尺寸,部分数据集可能比较大,利用此参数将其拆分成多个子任务,能有效利用资源。但如果拆分过细,则可能因为模型本身加载时间过长,反而速度更慢
- `--max-num-workers 32`: 最大并行启动任务数,在 Slurm 等分布式环境中,该参数用于指定最大提交任务数;在本地环境中,该参数用于指定最大并行执行的任务数,注意实际并行执行任务数受制于 GPU 等资源数,并不一定为该数字。

如果你不是在本机进行评测,而是使用 slurm 集群,可以指定如下参数:

- `--slurm`: 使用 slurm 在集群提交任务
Ezra-Yu's avatar
Ezra-Yu committed
136
- `--partition(-p) my_part`: slurm 集群分区
Ma Zerun's avatar
Ma Zerun committed
137
138
- `--retry 2`: 任务出错重试次数

Ezra-Yu's avatar
Ezra-Yu committed
139
140
141
</details>

## 评测结果
Ma Zerun's avatar
Ma Zerun committed
142
143
144
145
146
147
148
149
150
151

评测完成后,会打印评测结果表格如下:

```text
dataset    version    metric    mode      llama-7b
---------  ---------  --------  ------  ----------
piqa       1cf9f0     accuracy  ppl          77.75
siqa       e78df3     accuracy  gen          36.08
```

Ezra-Yu's avatar
Ezra-Yu committed
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
所有运行结果会默认放在`outputs/default/`目录下,目录结构如下所示:

```text
outputs/default/
├── 20200220_120000
├── ...
├── 20230220_183030
│   ├── configs
│   ├── logs
│   │   ├── eval
│   │   └── infer
│   ├── predictions
│   │   └── MODEL1
│   └── results
│       └── MODEL1
```

其中,每一个时间戳中存在以下内容:

- configs文件夹,用于存放以这个时间戳为输出目录的每次运行对应的配置文件;
- logs文件夹,用于存放推理和评测两个阶段的输出日志文件,各个文件夹内会以模型为子文件夹存放日志;
- predicitions文件夹,用于存放推理json结果,以模型为子文件夹;
- results文件夹,用于存放评测json结果,以模型为子文件夹