OpenCompass 大模型评测实战_哔哩哔哩_bilibili
https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md
一、通过评测促进模型发展
- 面向未来拓展能力维度:评测体系需增加新能力维度(数学、复杂推理、逻辑推理、代码和智能体等),以全面评估模型性能。
- 扎根通用能力聚焦垂直行业:在医疗、金融、法律等专业领域,评测需结合行业知识和规范,以评估模型的行业适用性。
- 高质量中文基准:针对中文场景,需要开发能力准确评估其能力的中文评测基准,促进中文社区的大模型发展。
- 性能评测反哺能力迭代:通过深入分析评测性能,探索模型能力形成机制,发现模型不足,研究针对性提升策略。
二、大语言模型评测中的挑战
- 全面性
- 大模型应用场景千变万化。
- 模型能力演进迅速
- 如何设计和构造可扩展的能力维度体系
- 评测成本
- 评测数十万道题需要大量算力资源
- 基于人工打分的主观评测成本高昂
- 数据污染
- 海量语料不可避免带来评测集污染
- 亟需可靠的数据污染检测技术
- 如何设计可动态更新高质量评测基准
- 鲁棒性
- 大模型对提示词十分敏感
- 多次采样情况下模型性能不稳定
三、如何评测大模型
1、根据模型类型的不同评测模型
- 基座模型:不经过微调
- 对话模型:
- 指令数据有监督微调(SFT)
- 人类偏好对齐(RLHF)
- 公开权重的开源模型
- 使用GPU/推理加速卡进行本地推理
- API模型
- 发送网络请求获取回复
2、根据评测本身的方式(客观评测与主观评测)
- 客观评测
- 问答题
- 选择题
- 主观评测:写一首诗
- 人类评价
- 模型评价
3、提示词工程
-
做提示词工程,丰富题目,给模型做推理,然后做评测,评测结果更加真实反映模型性能。
- 小样本学习:
- 思维链技术:
4、长文本评测
- 大海捞针:
汇集社区力量:工具-基准-榜单 三位一体
四、CompassRank:中立全面的性能榜单
- 大模型
- 多模态
五、CompassKit:大模型评测全栈工具链
- 数据污染检查
- 多种数据污染检测方法
- 支持主流数据集污染检测
- 更丰富的模型推理接入
- 支持多个商业模型API
- 支持多种推理后端
- 长文本能力评测
- 支持长文本大海捞针测试
- 支持多个主流长文本评测基准
- 中英文双语主观评测
- 支持基于大模型评价的主观评测
- 提供模型打分、模型对战多种能力
- 灵活切换上百种评价模型
OpenCompass评测流水线
自定义任意模型和数据集,多模型和数据集进行切分,做到并行化(多GPU或任务),多种输出方式
- VLMEvalKit:多模态评测工具
- Code-Evaluator:代码评测工具
- MixtralKit MoE:模型入门工具
六、CompassHub:高质量评测基准社区
开源开放,共建共享的大模型评测基准社区
七、能力维度全面升级
八、夯实基础:自研高质量大模型评测基准
- MathBench:多层次数学能力评测基准(计算、小学、初中、高中、大学、CE平均分)
- 梯度难度
- 题目来源多种多样
- 循环测评
- CIBench:代码解释器能力评测基准
- 任务和软件的多样性
- 评测基准具有高度可拓展性
- 多难度等级设计(10轮以上交互)
- T-Eval:大模型细粒度工具能力评测基准
- 规划
- 检索
- 指令遵循
- 推理
- 理解
- 评价
各行业垂直领域合作
九、实战
1、安装、
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 -r requirements.txt
2、数据准备
cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/
unzip OpenCompassData-core-20231110.zip
3、查看支持的数据集和模型
列出所有跟 InternLM 及 C-Eval 相关的配置
python tools/list_configs.py internlm ceval
4、启动评测
评测 InternLM2-Chat-1.8B 模型在 C-Eval 数据集上的性能。 OpenCompass 默认并行启动评估过程。--debug 模式启动评估,并检查是否存在问题。
pip install protobuf
export MKL_SERVICE_FORCE_INTEL=1
#或
export MKL_THREADING_LAYER=GNU
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 数量
--work-dir "xxxx/xxx" #结果保存路径,默认outputs/default
--reuse latest #指定时间戳,接着之前的时间戳去跑
--debug #debug模式显示,默认存在log文件夹下
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