快速开始¶
概览¶
在 OpenCompass 中评估一个模型通常包括以下几个阶段:配置 -> 推理 -> 评估 -> 可视化。
配置:这是整个工作流的起点。您需要配置整个评估过程,选择要评估的模型和数据集。此外,还可以选择评估策略、计算后端等,并定义显示结果的方式。
推理与评估:在这个阶段,OpenCompass 将会开始对模型和数据集进行并行推理和评估。推理阶段主要是让模型从数据集产生输出,而评估阶段则是衡量这些输出与标准答案的匹配程度。这两个过程会被拆分为多个同时运行的“任务”以提高效率,但请注意,如果计算资源有限,这种策略可能会使评测变得更慢。如果需要了解该问题及解决方案,可以参考 FAQ: 效率。
可视化:评估完成后,OpenCompass 将结果整理成易读的表格,并将其保存为 CSV 和 TXT 文件。你也可以激活飞书状态上报功能,此后可以在飞书客户端中及时获得评测状态报告。
接下来,我们将展示 OpenCompass 的基础用法,展示预训练模型 OPT-125M 和 OPT-350M 在 SIQA 和 Winograd 基准任务上的评估。它们的配置文件可以在 configs/eval_demo.py 中找到。
在运行此实验之前,请确保您已在本地安装了 OpenCompass。这个例子可以在一台 GTX-1660-6G GPU 下成功运行。 对于参数更大的模型,如 Llama-7B,请参考 configs 目录 中提供的其他示例。
配置评估任务¶
在 OpenCompass 中,每个评估任务由待评估的模型和数据集组成。评估的入口点是 run.py
。用户可以通过命令行或配置文件选择要测试的模型和数据集。
用户可以使用 --models
和 --datasets
结合想测试的模型和数据集。
python run.py --models hf_opt_125m hf_opt_350m --datasets siqa_gen winograd_ppl
模型和数据集的配置文件预存于 configs/models
和 configs/datasets
中。用户可以使用 tools/list_configs.py
查看或过滤当前可用的模型和数据集配置。
# 列出所有配置
python tools/list_configs.py
# 列出与llama和mmlu相关的所有配置
python tools/list_configs.py llama mmlu
对于 HuggingFace 模型,用户可以通过命令行直接设置模型参数,无需额外的配置文件。例如,对于 facebook/opt-125m
模型,您可以使用以下命令进行评估:
python run.py --datasets siqa_gen winograd_ppl \
--hf-type base \
--hf-path facebook/opt-125m
请注意,通过这种方式,OpenCompass 一次只评估一个模型,而其他方式可以一次评估多个模型。
小心
--num-gpus
不代表实际用于评估的 GPU 数量,而是该模型所需的最少 GPU 数量。更多
除了通过命令行配置实验外,OpenCompass 还允许用户在配置文件中编写实验的完整配置,并通过 run.py
直接运行它。配置文件是以 Python 格式组织的,并且必须包括 datasets
和 models
字段。
本次测试配置在 configs/eval_demo.py 中。此配置通过 继承机制 引入所需的数据集和模型配置,并以所需格式组合 datasets
和 models
字段。
from mmengine.config import read_base
with read_base():
from .datasets.siqa.siqa_gen import siqa_datasets
from .datasets.winograd.winograd_ppl import winograd_datasets
from .models.opt.hf_opt_125m import opt125m
from .models.opt.hf_opt_350m import opt350m
datasets = [*siqa_datasets, *winograd_datasets]
models = [opt125m, opt350m]
运行任务时,我们只需将配置文件的路径传递给 run.py
:
python run.py configs/eval_demo.py
警告
OpenCompass 通常假定运行环境网络是可用的。如果您遇到网络问题或希望在离线环境中运行 OpenCompass,请参阅 FAQ - 网络 - Q1 寻求解决方案。
接下来的部分将使用基于配置的方法作为示例来解释其他特征。
启动评估¶
由于 OpenCompass 默认并行启动评估过程,我们可以在第一次运行时以 --debug
模式启动评估,并检查是否存在问题。在 --debug
模式下,任务将按顺序执行,并实时打印输出。
python run.py configs/eval_demo.py -w outputs/demo --debug
预训练模型 ‘facebook/opt-350m’ 和 ‘facebook/opt-125m’ 将在首次运行期间从 HuggingFace 自动下载。 如果一切正常,您应该看到屏幕上显示 “Starting inference process”:
[2023-07-12 18:23:55,076] [opencompass.openicl.icl_inferencer.icl_gen_inferencer] [INFO] Starting inference process...
然后,您可以按 ctrl+c
中断程序,并以正常模式运行以下命令:
python run.py configs/eval_demo.py -w outputs/demo
在正常模式下,评估任务将在后台并行执行,其输出将被重定向到输出目录 outputs/demo/{TIMESTAMP}
。前端的进度条只指示已完成任务的数量,而不考虑其成功或失败。任何后端任务失败都只会在终端触发警告消息。
可视化评估结果¶
评估完成后,评估结果表格将打印如下:
dataset version metric mode opt350m opt125m
--------- --------- -------- ------ --------- ---------
siqa e78df3 accuracy gen 21.55 12.44
winograd b6c7ed accuracy ppl 51.23 49.82
所有运行输出将定向到 outputs/demo/
目录,结构如下:
outputs/default/
├── 20200220_120000
├── 20230220_183030 # 每个实验一个文件夹
│ ├── configs # 用于记录的已转储的配置文件。如果在同一个实验文件夹中重新运行了不同的实验,可能会保留多个配置
│ ├── logs # 推理和评估阶段的日志文件
│ │ ├── eval
│ │ └── infer
│ ├── predictions # 每个任务的推理结果
│ ├── results # 每个任务的评估结果
│ └── summary # 单个实验的汇总评估结果
├── ...
打印评测结果的过程可被进一步定制化,用于输出一些数据集的平均分 (例如 MMLU, C-Eval 等)。
关于评测结果输出的更多介绍可阅读 结果展示。
更多教程¶
想要更多了解 OpenCompass, 可以点击下列链接学习。