笔记部分
教程文档:Tutorial/opencompass/readme.md at camp2 · InternLM/Tutorial · GitHub
理解和运用OpenCompass进行大模型评测
1. 关于大模型评测
大模型评测的重要性
-
理解模型能力:评估大型语言模型是否真正理解内容,而非仅记忆训练数据。
-
人机交互:指导人机交互新范式的开发,以更好地适应人类用户的需求。
-
未来发展:规划大型语言模型的未来发展方向,预防潜在风险。
-
模型选择:帮助研究人员和产品开发者了解不同模型的性能,以作出更合适的选择。
如何通过能力评测促进模型的发展:
- 面向未来拓展能力维度:评测体系需增加新能力维度,如数学、复杂推理、逻辑推理、代码和智能体等,以全面评估模型性能。
- 扎根通用能力聚焦垂直行业:在医疗、金融、法律等专业领域,评测需结合行业知识和规范,以评估模型的行业适用性。
- 高质量中文基准:针对中文场景,需要开发能准确评估其能力的中文评测基准,促进中文社区的大模型发展。
- 性能评测反哺能力迭代:通过深入分析评测性能,探索模型能力形成机制,发现模型不足,研究针对性提升策略。
大语言模型评测中的挑战
- 全面性:
- 大模型应用场景千变万化:需要评估模型在不同场景下的适应能力。
- 模型能力演进迅速:评测标准需跟上模型能力提升的步伐。
- 如设计和构造可扩展的能力维度体系:建立灵活的评测框架,以涵盖不断发展的模型功能。
- 评测成本:
- 评测数十万道题需要大量算力资源:大规模评测工作需要强大的计算能力支持。
- 基于人工打分的的主观评测成本高昂:人力评分过程的成本较高。
- 数据污染:
- 海量语料不可避免带来评测集污染:海量数据可能引入噪音和偏差。
- 亟需可靠的数据污染检测技术:需有效方法识别并剔除受污染数据。
- 如何设计可动态更新的高质量评测基准:建立一个能够持续学习和改进的评测标准。
- 鲁棒性:
- 大模型对提示词十分敏感:模型性能对输入提示词依赖性强。
- 多次采样情况下模型性能不稳定:模型在不同采样时的表现不一,稳定性需考量。
2. OpenCompass 介绍
1、OpenCompass 亮点
-
开源与复现:提供公平、公开、可复现的评测方案。
-
全面的能力维度:五大维度设计,提供70+个数据集约40万题的模型评测方案。
-
模型支持:已支持20+ HuggingFace 及 API 模型。
-
分布式高效评测:一行命令实现任务分割和分布式评测,快速完成模型全量评测。
-
多样化评测范式:支持零样本、小样本及思维链评测,结合标准型或对话型提示词模板。
-
灵活化拓展:轻松增加新模型、数据集或自定义高级任务分割策略。
2、CompassKit:大模型评测全栈工具链
- VLMEvalKit多模态评测工具:一站式,支持主流多模态模型和数据集。
- Code-Evaluator代码评测工具:提供机遇docker的统一编程语言评测环境,确保代码能力评测的稳定性和可复现性。
- MixtralKit MoE模型入门工具:为MoE模型初学者提供学习资料、模型架构解析、推理与评测教程等入门工具
3、OpenCompass核心代码库功能全面升级
- 数据污染检查:多种数据污染检测方法,支持GSM-8k, MMLU等主流数据集上的污染检测。
- 更丰富的模型推理接入:支持近20个商业模型API,支持LMDeploy、vLLM、LightLLM等推理后端。
- 长文本能力评测:支持1M长度大海捞针测试,支持多个主流长文本评测基准。
- 中英文双语主观评测:支持基于大模型评价的主观评测,模型打分、模型对战等,灵活切换上百种评价模型。
4、CompassHub:高质量评测基准社区
5、夯实基础:自研高质量大模型评测基准
- MatchBench:多层次数学能力评测基准
- CriticBench:多维度的LLM反思能力评估基准
- T-Eval:大模型细粒度工具能力评测基准
- CreationBench:多场景中文创作能力评测基准
- F-Eval:大模型基础能力评测基准
- CIBench:代码解释器能力评测基准
MathBench:多层次数学能力评测基准工具
三级梯度难度,多语言题目来源
CIBench:代码解释器能力评测基准:
特点:
- 任务和软件的多样性
- 评测基准具有高度可拓展性
- 多难度等级设计
T-Eval:大模型细粒度工具评测基准
规划、检索、指令遵循、推理、理解、评价
- 全面且细粒度的评测方式
- 高质量的评测数据
- 剖析模型的工具调用能力
6. 评测对象
-
基座模型:通过海量文本数据自监督学习训练的模型,如 GPT-3、LLaMA,往往具有强大的文字续写能力。
-
对话模型:在基座模型基础上,经指令微调或人类偏好对齐训练的模型,如 ChatGPT、书生·浦语,能理解人类指令,有较强的对话能力。
7. 工具架构
-
模型层:重点评测基座模型和对话模型。
-
能力层:通用能力和特色能力两个维度,通用能力从语言、知识、理解、推理、安全等维度评测模型,特色能力从长文本、代码、工具、知识增强等维度评测。
-
方法层:结合客观评测(如选择题、填空题)和主观评测(用户真实满意度)。主观评测方面,OpenCompass 采用基于模型辅助的主观评测和基于人类反馈的主观评测两种方式。
-
工具层:丰富功能支持自动化开展高效评测,提供包括分布式评测、提示词工程、数据库对接、榜单发布、报告生成等功能。
8. 设计思路
-
从通用人工智能角度出发,结合学术界和工业界实践,提出面向实际应用的模型能力评价体系。能力维度体系涵盖通用能力和综合能力两大部分。
9. 评测方法
客观评测与主观评测相结合
-
客观评测:定量指标衡量模型性能,通过提示词工程(prompt engineering)和语境学习(in-context learning)进行评估。
-
判别式评测:将问题与候选答案组合在一起,计算模型在所有组合上的困惑度(perplexity),选择困惑度最低的答案作为输出。
-
生成式评测:针对生成类任务,如翻译或编程、逻辑分析题等,模型需生成完整输出,之后对输出进行必要的处理以符合数据集标准。
-
-
主观评测:基于人类反馈,评估模型对话能力,采用单模型回复满意度统计和多模型满意度比较两种方式。实际评测中,采用基于模型辅助的主观评测和基于人类反馈的主观评测两种方式
10. 快速开始
OpenCompass 评估一个模型通常包括以下几个阶段:配置 -> 推理 -> 评估 -> 可视化。
-
配置:配置整个评估过程,选择模型、数据集、评估策略、计算后端、显示结果方式等。
-
推理与评估:并行处理模型和数据集,评估输出与标准答案的匹配度。推理阶段主要是让模型从数据集产生输出,而评估阶段则是衡量这些输出与标准答案的匹配程度。
-
可视化:整理结果,保存为CSV和TXT文件,支持飞书状态上报(此后可在飞书客户端中及时获得评测状态报告)。
11. 关于提示词工程:
提示词工程(Prompt Engineering)是一门用于优化与控制生成式人工智能(如大型语言模型)输出的技术。通过设计、测试和调整输入提示词,提示词工程旨在确保模型生成符合预期、具有高质量和高效的输出。
提示词工程的准则:明确性、概念无歧义、逐步引导、具体描述、迭代反馈
基础作业
8. 环境配置
1、创建开发机界面选择镜像为 Cuda11.7-conda,并选择 GPU 为10% A100
2、面向GPU的环境安装,包括创建conda环境、克隆OpenCompass仓库和安装依赖
studio-conda -o internlm-base -t opencompass
source activate opencompass
git clone -b 0.2.4 https://github.com/open-compass/opencompass
cd opencompass
pip install -e .
# 如果pip install -e .安装未成功,请运行
# pip install -r requirements.txt
(有部分第三方功能,如代码能力基准测试 HumanEval 以及 Llama 格式的模型评测,可能需要额外步骤才能正常运行,如需评测,详细步骤参考安装指南)
9. 数据准备
1、解压评测数据集到 data/ 处
cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/
unzip OpenCompassData-core-20231110.zip
结果:代码运行完后,OpenCompass下能看到data文件夹
2、查看支持的数据集和模型
-
列出与特定模型和数据集相关的配置
python tools/list_configs.py internlm ceval
10. 启动评测 (10% A100 8GB 资源)
OpenCompass安装、数据集ok后,
用以下命令评测InternLM2-Chat-1.8B 模型在 C-Eval 数据集上的性能
(OpenCompass 默认并行启动评估过程,第一次运行可以用 --debug模式启动评估,并检查是否存在问题。在 --debug 模式下,任务将按顺序执行,并实时打印输出。)
python run.py --datasets ceval_gen --hf-path /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --tokenizer-path /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True --model-kwargs trust_remote_code=True device_map='auto' --max-seq-len 1024 --max-out-len 16 --batch-size 2 --num-gpus 1 --debug
# 以下是对上述代码的解析,请忽略
python run.py
--datasets ceval_gen \
--hf-path /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b \ # HuggingFace 模型路径
--tokenizer-path /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b \ # 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 1024 \ # 模型可以接受的最大序列长度
--max-out-len 16 \ # 生成的最大 token 数
--batch-size 2 \ # 批量大小
--num-gpus 1 # 运行模型所需的 GPU 数量
--debug
遇到了两个错误
错误1:
Error: mkl-service + Intel(R) MKL: MKL_THREADING_LAYER=INTEL is incompatible with libgomp.so.1 library.Try to import numpy first or set the threading layer accordingly. Set MKL_SERVICE_FORCE_INTEL to force it.
解决办法:
export MKL_SERVICE_FORCE_INTEL=1
#或
export MKL_THREADING_LAYER=GNU
错误2:
解决方法:pip install protobuf
如果一切正常,将看到屏幕上显示 “Starting inference process”
评测完成后,查看评测结果,包括各数据集上的模型准确率。
自定义数据集客主观评测:量身定制,慧眼识珠
详细的客观评测指引参见 支持新数据集 — OpenCompass 0.2.5 文档
主观评测简介:由于客观评测只能反映模型在一些性能数据上的指标,没法完全真实地反映模型在与人类对话时的表现,因此需要在真实的对话场景下通过主观评测的方式翻译模型的真实性能。 而由于完全靠人力来进行主观评测是费时费力的,因此有很多利用模型来进行主观评测的方式。 这些方式主要可以分为以下几类:打分,对战,多模型评测等。
自建主观数据集步骤,详见:主观评测指引 — OpenCompass 0.2.5 文档
数据污染评估:禁止作弊,诚信考试
数据污染评估简介:数据污染是指训练数据中包含下游测试任务的数据,这可能导致模型在测试任务上的表现虚高。最直接的检测方法是将测试数据与训练数据进行对比,看有多少内容是重复的。然而,由于开源模型通常只公开参数,不公开训练数据集,所以目前还没有广泛接受的解决方案来判断数据污染。OpenCompass提供了两种可能的解决方案。
实验评估步骤:数据污染评估 — OpenCompass 0.2.5 文档
大海捞针:星辰藏海深,字海寻珠难
大海捞针测试简介:大海捞针测试(灵感来自 NeedleInAHaystack)是一种方法,通过在长文本中的不同位置随机插入关键信息,形成LLM的Prompt,然后测试LLM能否从这段文本中准确提取出关键信息,从而测试大模型的长文本信息提取能力,可以反映LLM长文本理解的基本能力。
数据集介绍
Skywork/ChineseDomainModelingEval 数据集收录了 2023 年 9 月至 10 月期间发布的高质量中文文章,涵盖了多个领域。这些文章确保了公平且具有挑战性的基准测试。 该数据集包括特定领域的文件,用于评估LLM对不同特定领域的理解能力:
- zh_finance.jsonl 金融
- zh_game.jsonl 游戏
- zh_government.jsonl 政务
- zh_movie.jsonl 电影
- zh_tech.jsonl 技术
- zh_general.jsonl 综合
进阶作业
将自定义数据集提交至OpenCompass官网(待更新)
作业要求