任务目标
使用 OpenCompass 评测 internlm2-chat-1.8b 模型在 MMLU 数据集上的性能
1. OpenCompass介绍
上海人工智能实验室科学家团队正式发布了大模型开源开放评测体系 “司南” (OpenCompass2.0),用于为大语言模型、多模态模型等提供一站式评测服务。其主要特点如下:
- 开源可复现:提供公平、公开、可复现的大模型评测方案
- 全面的能力维度:五大维度设计,提供 70+ 个数据集约 40 万题的的模型评测方案,全面评估模型能力
- 丰富的模型支持:已支持 20+ HuggingFace 及 API 模型
- 分布式高效评测:一行命令实现任务分割和分布式评测,数小时即可完成千亿模型全量评测
- 多样化评测范式:支持零样本、小样本及思维链评测,结合标准型或对话型提示词模板,轻松激发各种模型最大性能
- 灵活化拓展:想增加新模型或数据集?想要自定义更高级的任务分割策略,甚至接入新的集群管理系统?OpenCompass 的一切均可轻松扩展!
1.1. 工具架构
- 模型层:大模型评测所涉及的主要模型种类,OpenCompass 以基座模型和对话模型作为重点评测对象。
- 能力层:OpenCompass 从本方案从通用能力和特色能力两个方面来进行评测维度设计。在模型通用能力方面,从语言、知识、理解、推理、安全等多个能力维度进行评测。在特色能力方面,从长文本、代码、工具、知识增强等维度进行评测。
- 方法层:OpenCompass 采用客观评测与主观评测两种评测方式。客观评测能便捷地评估模型在具有确定答案(如选择,填空,封闭式问答等)的任务上的能力,主观评测能评估用户对模型回复的真实满意度,OpenCompass 采用基于模型辅助的主观评测和基于人类反馈的主观评测两种方式。
- 工具层:OpenCompass 提供丰富的功能支持自动化地开展大语言模型的高效评测。包括分布式评测技术,提示词工程,对接评测数据库,评测榜单发布,评测报告生成等诸多功能。
1.2 评测方法
OpenCompass 采取客观评测与主观评测相结合的方法。针对具有确定性答案的能力维度和场景,通过构造丰富完善的评测集,对模型能力进行综合评价。针对体现模型能力的开放式或半开放式的问题、模型安全问题等,采用主客观相结合的评测方式。
客观评测
针对具有标准答案的客观问题,我们可以通过使用定量指标比较模型的输出与标准答案的差异,并根据结果衡量模型的性能。同时,由于大语言模型输出自由度较高,在评测阶段,我们需要对其输入和输出作一定的规范和设计,尽可能减少噪声输出在评测阶段的影响,才能对模型的能力有更加完整和客观的评价。 为了更好地激发出模型在题目测试领域的能力,并引导模型按照一定的模板输出答案,OpenCompass 采用提示词工程 (prompt engineering)和语境学习(in-context learning)进行客观评测。 在客观评测的具体实践中,我们通常采用下列两种方式进行模型输出结果的评测:
- 判别式评测:该评测方式基于将问题与候选答案组合在一起,计算模型在所有组合上的困惑度(perplexity),并选择困惑度最小的答案作为模型的最终输出。例如,若模型在 问题? 答案1 上的困惑度为 0.1,在 问题? 答案2 上的困惑度为 0.2,最终我们会选择 答案1 作为模型的输出。
- 生成式评测:该评测方式主要用于生成类任务,如语言翻译、程序生成、逻辑分析题等。具体实践时,使用问题作为模型的原始输入,并留白答案区域待模型进行后续补全。我们通常还需要对其输出进行后处理,以保证输出满足数据集的要求。
主观评测
语言表达生动精彩,变化丰富,大量的场景和能力无法凭借客观指标进行评测。针对如模型安全和模型语言能力的评测,以人的主观感受为主的评测更能体现模型的真实能力,并更符合大模型的实际使用场景。 OpenCompass 采取的主观评测方案是指借助受试者的主观判断对具有对话能力的大语言模型进行能力评测。在具体实践中,我们提前基于模型的能力维度构建主观测试问题集合,并将不同模型对于同一问题的不同回复展现给受试者,收集受试者基于主观感受的评分。由于主观测试成本高昂,本方案同时也采用使用性能优异的大语言模拟人类进行主观打分。在实际评测中,本文将采用真实人类专家的主观评测与基于模型打分的主观评测相结合的方式开展模型能力评估。 在具体开展主观评测时,OpenComapss 采用单模型回复满意度统计和多模型满意度比较两种方式开展具体的评测工作。
2. 环境配置
初始化环境:
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 .
数据准备:
cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/
unzip OpenCompassData-core-20231110.zip
再额外安装包:
pip install tabulate
pip install mmengine
3. 评测实践
列出所有跟 InternLM 及 mmlu 相关的配置
python tools/list_configs.py internlm mmlu
结果如下:
不知道是不是和教程的数据集不一样的问题,复制过来的环境里缺了很多包,需要再额外安装包:
pip install tqdm
pip install prettytable
pip install datasets
pip install transformers
pip install jieba
pip install scikit-learn
pip install evaluate
pip install rouge_chinese
pip install nltk
pip install rank_bm25
pip install sentence_transformers
pip install tiktoken
pip install absl-py
pip install fuzzywuzzy
pip install sentencepiece
pip install protobuf
pip install einops
pip install accelerate
启动评测 (10% A100 8GB 资源):
python run.py --datasets mmlu_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
遇到错误mkl-service + Intel(R) MKL MKL_THREADING_LAYER=INTEL is incompatible with libgomp.so.1 ... 解决方案:
export MKL_SERVICE_FORCE_INTEL=1
时间比较久,最后结果如下:
20240804_210538
tabulate format
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
dataset version metric mode opencompass.models.huggingface.HuggingFace_Shanghai_AI_Laboratory_internlm2-chat-1_8b
------------------------------------------------- --------- ---------------- ------ ---------------------------------------------------------------------------------------
lukaemon_mmlu_college_biology caec7d accuracy gen 51.39
lukaemon_mmlu_college_chemistry 520aa6 accuracy gen 34
lukaemon_mmlu_college_computer_science 99c216 accuracy gen 41
lukaemon_mmlu_college_mathematics 678751 accuracy gen 32
lukaemon_mmlu_college_physics 4f382c accuracy gen 29.41
lukaemon_mmlu_electrical_engineering 770ce3 accuracy gen 44.14
lukaemon_mmlu_astronomy d3ee01 accuracy gen 48.03
lukaemon_mmlu_anatomy 72183b accuracy gen 45.93
lukaemon_mmlu_abstract_algebra 2db373 accuracy gen 31
lukaemon_mmlu_machine_learning 0283bb accuracy gen 32.14
lukaemon_mmlu_clinical_knowledge cb3218 accuracy gen 51.32
lukaemon_mmlu_global_facts ab07b6 accuracy gen 24
lukaemon_mmlu_management 80876d accuracy gen 62.14
lukaemon_mmlu_nutrition 4543bd accuracy gen 48.37
lukaemon_mmlu_marketing 7394e3 accuracy gen 65.81
lukaemon_mmlu_professional_accounting 444b7f accuracy gen 35.11
lukaemon_mmlu_high_school_geography 0780e6 accuracy gen 56.06
lukaemon_mmlu_international_law cf3179 accuracy gen 49.59
lukaemon_mmlu_moral_scenarios f6dbe2 accuracy gen 24.47
lukaemon_mmlu_computer_security ce7550 accuracy gen 63
lukaemon_mmlu_high_school_microeconomics 04d21a accuracy gen 48.32
lukaemon_mmlu_professional_law 5f7e6c accuracy gen 31.1
lukaemon_mmlu_medical_genetics 881ef5 accuracy gen 54
lukaemon_mmlu_professional_psychology 221a16 accuracy gen 42.48
lukaemon_mmlu_jurisprudence 001f24 accuracy gen 50
lukaemon_mmlu_world_religions 232c09 accuracy gen 60.82
lukaemon_mmlu_philosophy 08042b accuracy gen 49.2
lukaemon_mmlu_virology 12e270 accuracy gen 37.35
lukaemon_mmlu_high_school_chemistry ae8820 accuracy gen 35.96
lukaemon_mmlu_public_relations e7d39b accuracy gen 53.64
lukaemon_mmlu_high_school_macroeconomics a01685 accuracy gen 45.64
lukaemon_mmlu_human_sexuality 42407c accuracy gen 54.2
lukaemon_mmlu_elementary_mathematics 269926 accuracy gen 29.89
lukaemon_mmlu_high_school_physics 93278f accuracy gen 34.44
lukaemon_mmlu_high_school_computer_science 9965a5 accuracy gen 38
lukaemon_mmlu_high_school_european_history eefc90 accuracy gen 58.18
lukaemon_mmlu_business_ethics 1dec08 accuracy gen 42
lukaemon_mmlu_moral_disputes a2173e accuracy gen 43.64
lukaemon_mmlu_high_school_statistics 8f3f3a accuracy gen 40.28
lukaemon_mmlu_miscellaneous 935647 accuracy gen 55.17
lukaemon_mmlu_formal_logic cfcb0c accuracy gen 26.98
lukaemon_mmlu_high_school_government_and_politics 3c52f9 accuracy gen 60.62
lukaemon_mmlu_prehistory bbb197 accuracy gen 46.3
lukaemon_mmlu_security_studies 9b1743 accuracy gen 55.1
lukaemon_mmlu_high_school_biology 37b125 accuracy gen 56.13
lukaemon_mmlu_logical_fallacies 9cebb0 accuracy gen 55.83
lukaemon_mmlu_high_school_world_history 048e7e accuracy gen 65.4
lukaemon_mmlu_professional_medicine 857144 accuracy gen 45.59
lukaemon_mmlu_high_school_mathematics ed4dc0 accuracy gen 21.48
lukaemon_mmlu_college_medicine 38709e accuracy gen 43.35
lukaemon_mmlu_high_school_us_history 8932df accuracy gen 51.96
lukaemon_mmlu_sociology c266a2 accuracy gen 64.68
lukaemon_mmlu_econometrics d1134d accuracy gen 31.58
lukaemon_mmlu_high_school_psychology 7db114 accuracy gen 65.5
lukaemon_mmlu_human_aging 82a410 accuracy gen 48.43
lukaemon_mmlu_us_foreign_policy 528cfe accuracy gen 69
lukaemon_mmlu_conceptual_physics 63588e accuracy gen 32.34
mmlu-humanities - naive_average gen 47.19
mmlu-stem - naive_average gen 38.98
mmlu-social-science - naive_average gen 53.9
mmlu-other - naive_average gen 47.13
mmlu - naive_average gen 45.85
mmlu-weighted - weighted_average gen 44.3