Internlm-06-使用 OpenCompass 对大模型进行评测
使用 OpenCompass 对大模型进行评测
大模型评测概要
人工智能技术的发展和主要模型的演变
- OpenAI GPT系列:
- 2018年:发布第一代GPT模型,开启自然语言模型生成式预训练。
- 随后:发布GPT-2和GPT-3模型。
- 谷歌的预训练模型:
- 探索不同的大规模预训练模型,如T5, Flan等。
- OpenAI的ChatGPT和GPT-4:
- 2022年11月:发布ChatGPT,展示问答、逻辑推理和内容创作能力。
- 2023年4月:发布GPT-4,引入多模态能力,拓展语言模型能力。
大模型的国际竞争和应用
- OpenAI和微软的集成:
- 将ChatGPT和GPT-4集成进搜索引擎和Office办公套件,推出New Bing和Office Copilot。
- 谷歌的Bard:
- 基于PaLM和PaLM-2模型,与OpenAI和微软竞争。
- 中国企业和高校的发展:
- 百度、阿里、华为、商汤、讯飞等发布国产大模型。
- 清华、复旦等高校发布GLM, MOSS等模型。
大模型评测的国际和国内进展
- 国际评测框架和数据集:
- 斯坦福大学的HELM评测框架。
- 纽约大学与谷歌、Meta的SuperGLUE评测集。
- 加州大学伯克利分校的MMLU测试集。
- 谷歌的Big-Bench评测集。
- 中国的评测数据集:
- 如CLUE, CUGE等,评测中文语言模型能力。
面临的挑战和OpenCompass的提议
- 当前挑战:
- 大模型应用场景广泛,但评测方案往往缺乏系统化。
- OpenCompass的提议:
- 设计全面、高效、可拓展的评测方案。
- 提供分布式自动化评测系统,支持全面系统的能力评估。
OpenCompass介绍
评测对象
本算法库的主要评测对象为语言大模型与多模态大模型。我们以语言大模型为例介绍评测的具体模型类型。
基座模型:一般是经过海量的文本数据以自监督学习的方式进行训练获得的模型(如OpenAI的GPT-3,Meta的LLaMA),往往具有强大的文字续写能力。
对话模型:一般是在的基座模型的基础上,经过指令微调或人类偏好对齐获得的模型(如OpenAI的ChatGPT、上海人工智能实验室的书生·浦语),能理解人类指令,具有较强的对话能力。
工具架构
工具架构
大模型评测的层级结构
模型层
- 重点评测对象:
- 基座模型
- 对话模型
- 重点评测对象:
能力层
通用能力:
- 语言
- 知识
- 理解
- 推理
- 安全
特色能力:
- 长文本处理
- 编码能力
- 工具使用
- 知识增强
方法层
客观评测:
- 评估模型在确定答案任务(如选择题、填空、封闭式问答)上的能力。
主观评测:
- 评估用户对模型回复的真实满意度。
- 方法包括:
- 基于模型辅助的主观评测
- 基于人类反馈的主观评测
工具层
- 自动化评测支持:
- 分布式评测技术
- 提示词工程
- 对接评测数据库
- 评测榜单发布
- 评测报告生成
- 自动化评测支持:
评测方法
客观评测
评测客观问题的方法
- 定量比较:
- 使用定量指标比较模型输出与标准答案的差异。
- 根据差异结果衡量模型性能。
输入输出规范:
- 在评测阶段规范模型的输入和输出。
- 尽量减少噪声输出,以便更客观地评价模型能力。
模型能力的激发与引导
提示词工程(Prompt Engineering):
- 使用特定提示词引导模型输出。
语境学习(In-Context Learning):
- 利用上下文环境提升模型的输出质量。
客观评测的具体实践
判别式评测:
- 结合问题和候选答案。
- 计算困惑度(perplexity),选择困惑度最小的答案。
- 生成式评测:
- 用于生成类任务(如语言翻译、程序生成、逻辑分析)。
- 使用问题作为输入,留白答案区域由模型补全。
- 对模型输出进行后处理,确保满足数据集要求。
主观评测
主观评测的重要性
- 场景和能力多样性:
- 语言表达丰富多变,很多场景和能力难以通过客观指标评测。
- 模型安全和语言能力:
- 需要依赖人的主观感受进行评测,以更真实地反映模型能力。
OpenCompass的主观评测方案
- 评测实施:
- 使用受试者的主观判断对大语言模型进行评测。
- 构建主观测试问题集,对比不同模型的回复。
- 成本与效率:
- 高成本的人类主观评测。
- 结合使用性能优异的大语言模型进行主观打分。
主观评测的具体实践
- 单模型回复满意度统计:
- 对单一模型的回复进行满意度评分。
- 多模型满意度比较:
- 比较不同模型回复的满意度。
快速开始
opencompass 评判流程
概览
在 OpenCompass 中评估一个模型通常包括以下几个阶段:配置 -> 推理 -> 评估 -> 可视化。
配置:这是整个工作流的起点。您需要配置整个评估过程,选择要评估的模型和数据集。此外,还可以选择评估策略、计算后端等,并定义显示结果的方式。
推理与评估:在这个阶段,OpenCompass 将会开始对模型和数据集进行并行推理和评估。推理阶段主要是让模型从数据集产生输出,而评估阶段则是衡量这些输出与标准答案的匹配程度。这两个过程会被拆分为多个同时运行的“任务”以提高效率,但请注意,如果计算资源有限,这种策略可能会使评测变得更慢。
可视化:评估完成后,OpenCompass 将结果整理成易读的表格,并将其保存为 CSV 和 TXT 文件。你也可以激活飞书状态上报功能,此后可以在飞书客户端中及时获得评测状态报告。
接下来,我们将展示 OpenCompass 的基础用法,展示书生浦语在 C-Eval 基准任务上的评估。它们的配置文件可以在 configs/eval_demo.py 中找到。
安装
面向GPU的环境安装
1 |
|
有部分第三方功能,如代码能力基准测试 Humaneval 以及 Llama格式的模型评测,可能需要额外步骤才能正常运行,如需评测,详细步骤请参考安装指南。
数据准备
1 |
|
查看支持的数据集和模型
1 |
|
将会看到
1 |
|
启动评测
确保按照上述步骤正确安装 OpenCompass 并准备好数据集后,可以通过以下命令评测 InternLM-Chat-7B 模型在 C-Eval 数据集上的性能。由于 OpenCompass 默认并行启动评估过程,我们可以在第一次运行时以 --debug
模式启动评估,并检查是否存在问题。在 --debug
模式下,任务将按顺序执行,并实时打印输出。
1 |
|
命令解析1
2
3
4
5
6
7
8
9
10--datasets ceval_gen \
--hf-path /share/temp/model_repos/internlm-chat-7b/ \ # HuggingFace 模型路径
--tokenizer-path /share/temp/model_repos/internlm-chat-7b/ \ # HuggingFace tokenizer 路径(如果与模型路径相同,可以省略)
--tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True \ # 构建 tokenizer 的参数
--model-kwargs device_map='auto' trust_remote_code=True \ # 构建模型的参数
--max-seq-len 2048 \ # 模型可以接受的最大序列长度
--max-out-len 16 \ # 生成的最大 token 数
--batch-size 2 \ # 批量大小
--num-gpus 1 # 运行模型所需的 GPU 数量
--debug
如果一切正常,您应该看到屏幕上显示 “Starting inference process”:
1 |
|
评测完成后,将会看到:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
dataset version metric mode opencompass.models.huggingface.HuggingFace_model_repos_internlm-chat-7b
---------------------------------------------- --------- ------------- ------ -------------------------------------------------------------------------
ceval-computer_network db9ce2 accuracy gen 31.58
ceval-operating_system 1c2571 accuracy gen 36.84
ceval-computer_architecture a74dad accuracy gen 28.57
ceval-college_programming 4ca32a accuracy gen 32.43
ceval-college_physics 963fa8 accuracy gen 26.32
ceval-college_chemistry e78857 accuracy gen 16.67
ceval-advanced_mathematics ce03e2 accuracy gen 21.05
ceval-probability_and_statistics 65e812 accuracy gen 38.89
ceval-discrete_mathematics e894ae accuracy gen 18.75
ceval-electrical_engineer ae42b9 accuracy gen 35.14
ceval-metrology_engineer ee34ea accuracy gen 50
ceval-high_school_mathematics 1dc5bf accuracy gen 22.22
ceval-high_school_physics adf25f accuracy gen 31.58
ceval-high_school_chemistry 2ed27f accuracy gen 15.79
ceval-high_school_biology 8e2b9a accuracy gen 36.84
ceval-middle_school_mathematics bee8d5 accuracy gen 26.32
ceval-middle_school_biology 86817c accuracy gen 61.9
ceval-middle_school_physics 8accf6 accuracy gen 63.16
ceval-middle_school_chemistry 167a15 accuracy gen 60
ceval-veterinary_medicine b4e08d accuracy gen 47.83
ceval-college_economics f3f4e6 accuracy gen 41.82
ceval-business_administration c1614e accuracy gen 33.33
ceval-marxism cf874c accuracy gen 68.42
ceval-mao_zedong_thought 51c7a4 accuracy gen 70.83
ceval-education_science 591fee accuracy gen 58.62
ceval-teacher_qualification 4e4ced accuracy gen 70.45
ceval-high_school_politics 5c0de2 accuracy gen 26.32
ceval-high_school_geography 865461 accuracy gen 47.37
ceval-middle_school_politics 5be3e7 accuracy gen 52.38
ceval-middle_school_geography 8a63be accuracy gen 58.33
ceval-modern_chinese_history fc01af accuracy gen 73.91
ceval-ideological_and_moral_cultivation a2aa4a accuracy gen 63.16
ceval-logic f5b022 accuracy gen 31.82
ceval-law a110a1 accuracy gen 25
ceval-chinese_language_and_literature 0f8b68 accuracy gen 30.43
ceval-art_studies 2a1300 accuracy gen 60.61
ceval-professional_tour_guide 4e673e accuracy gen 62.07
ceval-legal_professional ce8787 accuracy gen 39.13
ceval-high_school_chinese 315705 accuracy gen 63.16
ceval-high_school_history 7eb30a accuracy gen 70
ceval-middle_school_history 48ab4a accuracy gen 59.09
ceval-civil_servant 87d061 accuracy gen 53.19
ceval-sports_science 70f27b accuracy gen 52.63
ceval-plant_protection 8941f9 accuracy gen 59.09
ceval-basic_medicine c409d6 accuracy gen 47.37
ceval-clinical_medicine 49e82d accuracy gen 40.91
ceval-urban_and_rural_planner 95b885 accuracy gen 45.65
ceval-accountant 002837 accuracy gen 26.53
ceval-fire_engineer bc23f5 accuracy gen 22.58
ceval-environmental_impact_assessment_engineer c64e2d accuracy gen 64.52
ceval-tax_accountant 3a5e3c accuracy gen 34.69
ceval-physician 6e277d accuracy gen 40.82
ceval-stem - naive_average gen 35.09
ceval-social-science - naive_average gen 52.79
ceval-humanities - naive_average gen 52.58
ceval-other - naive_average gen 44.36
ceval-hard - naive_average gen 23.91
ceval - naive_average gen 44.16
有关 run.py
支持的所有与 HuggingFace 相关的参数,请阅读 评测任务发起
除了通过命令行配置实验外,OpenCompass 还允许用户在配置文件中编写实验的完整配置,并通过 run.py
直接运行它。配置文件是以 Python 格式组织的,并且必须包括 datasets
和 models
字段。
示例测试配置在 configs/eval_demo.py 中。此配置通过 继承机制 引入所需的数据集和模型配置,并以所需格式组合 datasets
和 models
字段。
1 |
|
运行任务时,我们只需将配置文件的路径传递给 run.py
:
1 |
|
OpenCompass 提供了一系列预定义的模型配置,位于 configs/models
下。以下是与 opt-350m(configs/models/opt/hf_opt_350m.py
)相关的配置片段:
1 |
|
使用配置时,我们可以通过命令行参数 --models
指定相关文件,或使用继承机制将模型配置导入到配置文件中的 models
列表中。
与模型类似,数据集的配置文件也提供在 configs/datasets
下。用户可以在命令行中使用 --datasets
,或通过继承在配置文件中导入相关配置
下面是来自 configs/eval_demo.py
的与数据集相关的配置片段:
1 |
|
数据集配置通常有两种类型:’ppl’ 和 ‘gen’,分别指示使用的评估方法。其中 ppl
表示辨别性评估,gen
表示生成性评估。
此外,configs/datasets/collections 收录了各种数据集集合,方便进行综合评估。OpenCompass 通常使用 base_medium.py
进行全面的模型测试。要复制结果,只需导入该文件,例如:
1 |
|
OpenCompass 通常假定运行环境网络是可用的。如果您遇到网络问题或希望在离线环境中运行 OpenCompass,请参阅 FAQ - 网络 - Q1 寻求解决方案。
可视化评估结果
评估完成后,评估结果表格将打印如下:
1 |
|
所有运行输出将定向到 outputs/demo/
目录,结构如下:
1 |
|
打印评测结果的过程可被进一步定制化,用于输出一些数据集的平均分 (例如 MMLU, C-Eval 等)。
关于评测结果输出的更多介绍可阅读 结果展示。
更多教程
想要更多了解 OpenCompass, 可以点击下列链接学习。
作业
准备环境
1 |
|
准备数据
1 |
|
解压数据
查看支持的数据集和模型
1 |
|
列出所有跟 internlm 及 ceval 相关的配置
启动评测
1 |
|
便于复制版:
1 |
|
发现显存不够用,尝试改小 batch size 为 1。
1 |
|
运行截图
评测结果
进阶作业
安装 lmdeploy,这一步是必须的,否则无法加载 TurboMind 模型
1 |
|
编写 config 文件如下:
1 |
|
运行评测:
1 |
|
加载量化后的模型
评判 internlm-awq
可见 internlm-AWQ 在 ceval 上的得分并不如 internlm2。
使用 lmdeploy 0.2.0 转换 internlm2 为 awq 模型并进行评测
使用 lmdeploy 0.2 的时候与 0.1 版本进行 AWQ 量化的方式略有不同,同时要从 huggingface 上下载测试数据集,所以国内可以使用镜像:
1 |
|
之后对模型进行转化:
1 |
|
转换模型
之后编写新的 config.py
1 |
|
进行评测:
1 |
|
AWQ 量化评测
能够发现 AWQ 量化后的模型在 ceval 数据集上的得分比原模型要好。精度不仅没有明显下降,相反在不少任务上还有一定的提升。可能得原因是,量化会导致一定的误差,有时候这种误差可能会减少模型对训练数据的拟合,从而提高泛化性能。量化可以被视为引入轻微噪声的正则化方法。或者,也有可能量化后的模型正好对某些数据集具有更好的性能。
- 本文作者:EnableAsync
- 本文链接:https://enableasync.github.io/internlm/internlm-06/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!