AI大模型系列:OpenCompass(司南)大模型测评工具介绍和实践 前言OpenCompass也称为“司南”是由上海人工智能实验室发布的一个开源的大模型评测体系已经成为目前权威的大型模型评估平台本篇介绍如何使用OpenCompass进行大模型测评以及其中涉及的相关知识。OpenCompass概述介绍本篇要介绍的OpenCompass工具已经内置了一系列大模型测评常用的步骤模块从而实现对大模型的高效自动化测评。OpenCompass是一个一站式的大模型评估平台旨在为大模型评估提供一个公平、开放和可复制的基准。它不仅量化了模型在知识、语言、理解、推理等方面的能力还推动了模型的迭代和优化。其主要特点包括OpenCompass工作流程图对模型和数据集支持丰富支持20HuggingFace和API模型70数据集的模型评估方案约40万个问题从五个维度全面评估模型的能力分布式高效评测提供了分布式评测方案支持了本机或集群上的计算任务并行分发实现评测并行式的提速评估范式多样化支持Zero-Shot、Few-Shot、思维链内置多种Prompt模板最大程度激发大模型潜能模块化设计和可拓展性强支持对用户自定义的的新模型或者数据集进行测评各模块可高效复用和拓展实验管理和报告机制有完备的实验管理和报告结果跟踪并且有多种可视化方案输出到终端、文件、飞书OpenCompass平台同时会发布大模型的评分榜包含大语言模型、多模态模型、以及各个垂类领域的模型排名为用户提供全面、客观、中立的评测参考。OpenCompass大语言模型排行榜OpenCompass下载安装OpenCompass基于Python实现安装参考其Github的项目链接下载项目源码之后创建conda虚拟环境再安装项目目录下所需的依赖conda create--name opencompass python3.10pytorch torchvision pytorch-cuda-c nvidia-c pytorch-y conda activate opencompass git clone https://github.com/open-compass/opencompass opencompass cd opencompass pip install-r./requirements/runtime.txt pip install-e.安装完成后下一步下载官方的测评数据使用网页或者命令下载放在opencompass目录下解压为data目录wget https://github.com/open-compass/opencompass/releases/download/0.1.8.rc1/OpenCompassData-core-20231110.zipunzip OpenCompassData-core-20231110.zip至此项目工程和评测数据已经安装下载完成。OpenCompass快速开始和前文一样本节也采用C-Eval数据来测评ChatGLM2-6B在OpenCompass项目上只需要运行run.py脚本并且通过命令行传参的方式指定模型文件路径和测评数据名称即可进行评测执行脚本如下python run.py \--datasets ceval_gen \--hf-path/home/model/chatglm2-6b \--tokenizer-path/home/model/chatglm2-6b \--model-kwargs device_mapautotrust_remote_codeTrue\--tokenizer-kwargs padding_sidelefttruncationleftuse_fastFalsetrust_remote_codeTrue\--max-out-len100\--max-seq-len2048\--batch-size8\--no-batch-padding \--num-gpus1其中datasets指定测评数据的配置方式为ceval_gengen代表以generate生成式的方式来评估大模型ceval_gen配置方式和OpenCompass目录下的**/configs/datasets/ceval_gen.py对应在配置里面指明了测试数据的地址、解析方式以及Prompt构建等信息。hf-path和tokenizer-path分别指定模型文件个分词模型直接瞄定本地已经下载好的HuggingFace模型文件即可。除此之外还需要指定其他的模型推理参数包括max-out-len等。另一种启动方式为使用模型配置将所有模型信息以/configs/models/**内的配置文件交代清楚再以命令行中直接传入models模型配置来启动启动命令如下python run.py--datasets ceval_gen--models hf_chatglm2_6b其中hf_chatglm2_6b和**/configs/models/chatglm/hf_chatglm2_6b.py**对应其中交代了大模型所在的路径以及其他模型配置信息# hf_chatglm2_6b.pymodels[dict(typeHuggingFace,abbrchatglm2-6b-hf,path/home/model/chatglm2-6b,tokenizer_path/home/model/chatglm2-6b,model_kwargsdict(trust_remote_codeTrue,device_mapauto,),tokenizer_kwargsdict(padding_sideleft,truncation_sideleft,trust_remote_codeTrue,),max_out_len16,max_seq_len4096,batch_size8,run_cfgdict(num_gpus1,num_procs1),)]至此评测数据集ceval_gen和待测评大模型chatglm2_6b已经提交给OpenCompass程序运行日志如下02/1916:30:29-OpenCompass-INFO-Loading ceval_gen:configs/datasets/ceval/ceval_gen.py02/1916:30:29-OpenCompass-INFO-Loading example:configs/summarizers/example.py02/1916:30:29-OpenCompass-WARNING-SlurmRunnerisnotused,so the partition argumentisignored.02/1916:30:29-OpenCompass-INFO-Partitioned into1tasks....100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████|1/1[06:5300:00,413.05s/it]02/1916:37:22-OpenCompass-INFO-Partitioned into52tasks.launch OpenICLEval[opencompass.models.huggingface.HuggingFace_model_chatglm2-6b/ceval-operating_system]on CPU launch OpenICLEval[opencompass.models.huggingface.HuggingFace_model_chatglm2-6b/ceval-computer_network]on CPU...100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████|52/52[06:1200:00,7.17s/it]dataset version metric mode opencompass.models.huggingface.HuggingFace_model_chatglm2-6b-------------------------------------------------------------------------------------------------------------------------------------------------------------------ceval-computer_network db9ce2 accuracy gen15.79ceval-operating_system 1c2571 accuracy gen47.37...ceval-stem-naive_average gen43.44ceval-social-science-naive_average gen60.04ceval-humanities-naive_average gen58.58ceval-other-naive_average gen49.21ceval-hard-naive_average gen36.24ceval-naive_average gen51.06OpenCompass分别计算C-Eval每个学科的正确率最后输出模型在4个学科大类以及Hard模式和整体的平均得分测评结果如下学科得分ceval-stem43.44ceval-social-science60.04ceval-humanities58.58ceval-other49.21ceval-hard36.24ceval51.06ppl、gen两种测评方式区别简述上一节中使用ceval_gen数据配置来评估大模型表明其采用generate的形式额外的还有另一种评估形式ppl在项目的configs/datasets下能查看到ppl和gen两种数据配置它们决定了测试数据集在Prompt构造和回答结果后处理的差异。数据配置下的gen和ppl两种形式ppl 是困惑度 (perplexity)的缩写是一种评价模型进行语言建模能力的指标。在OpenCompass的语境下它一般指一种选择题的做法给定一个上下文模型需要从多个备选项中选择一个最合适的。此时我们会将n个选项拼接上下文后形成n个序列然后计算模型对这n个序列的perplexity我们认为其中perplexity最低的序列所对应的选项即为模型在这道题上面的推理结果该种评测方法的后处理简单直接、确定性高。ppl的工作流程图示如下ppl测评的方式gen 是生成 (generate)的缩写它指的是在给定上下文的情况下模型往后续写的结果就是这道题目上的推理结果。一般来说续写得到的字符串需要结合上比较重的后处理过程才能进行可靠的答案提取从而完成评测。gen测评的方式ppl需要推理的试题答案的组合推理的组合数量由选项多少决定对于单选题如果有N个选项则需要推理N条句子分别得到困惑度才能获得最终的答案而gen不需要组合答案直接对问题进行推理因此一条试题只需要推理一个句子但是由于gen生成的结果不可控需要配合复杂的后处理提取出答案而ppl几乎不需要后处理。ppl和gen的选取由大模型的类型、试题类型和提示词要求多方因素决定一般Base模型没有经过指令微调更加适合续写任务因此Base模型一般采用ppl的方式而Chat模型可以直接对问题进行回答因此采用gen的方式特殊的如果Base模型面对的试题存在多选题或者需要CoT思维链的方式引入中间过程则还是采用gen方式。在OpenCompass的官方文档中还提到第三种评估方法clp条件对数概率 conditional log probability前文介绍的使用Python脚本来测试C-Eval就是采用clp的方法。clp条件对数概率是在给定上下文的情况下计算下一个 token 的概率。它也仅适用于选择题考察概率的范围仅限于备选项标号所对应的 token取其中概率最高的 token 所对应的选项为模型的推理结果。clp的评估示意图如下clp测评的方式clp和ppl一样下一个token的条件概率对答案的判断起到决定作用区别是clp只需要推理一次而ppl需要推理选项个数N次因此clp更加高效但是clp更加容易受到prompt的扰动因此OpenCompass官方一般都采用ppl的方式由于ppl考虑了整个句子的合理性比clp的鲁棒性更高。OpenCompass的Prompt构建OpenCompass将测评数据集的试题通过Prompt模板组装成最终输入给大模型的语句模板分为数据侧(Prompt Template)和模型侧(Meta Template)原始试题依次进入为数据侧和模型侧的Prompt模板最终输入给大模型。数据侧的Prompt模板包括需要完成的任务说明以及上下文样例一个数据侧的Prompt模板样例如下数据侧的Prompt模板样例其中任务说明为**“Solve math questions”**而round定义了每一轮HUMAN和BOT对话的范例使用这个模板对数学计算问题进行提问最终格式如下仅使用数据侧的Prompt模板的大模型输入其中左侧代表采用ppl的方式将最后的答案11拼接到Prompt中让模型推理出困惑度而右侧代表gen的方式不需要给到答案只需要提问56基于模型生成的答案再做提取。模型侧的Prompt模板一般为了迎合模型在SFT过程中所加入一些预定义的自负串包括在对话开头加入的系统层级的指令以及每轮对话期望的文本格式模型侧的Prompt模板样例如下模型侧的Prompt模板样例模型侧的Prompt在开头给到大模型身份提示并且约定了每轮问答的文本格式最终加入模型侧Prompt后的模型输入如下上方为ppl方式下方为gen方式融合模型侧Prompt和数据侧Prompt的最终输入数据集、测评指标、模型推理的配置在数据配置中对数据集、测评指标等相关信息进行了指定我们以C-Eval测评数据为例配置代码在configs/datasets/ceval/ceval_gen下ceval_datasets.append(dict(typeCEvalDataset,path./data/ceval/formal_ceval,name_name,abbrceval-_nameif_splitvalelseceval-test-_name,reader_cfgdict(input_columns[question,A,B,C,D],output_columnanswer,train_splitdev,test_split_split),infer_cfgceval_infer_cfg,eval_cfgceval_eval_cfg,))OpenCompass会遍历C-Eval的每一个科目分别生成一个配置信息写入ceval_datasets其中path 指定了数据集的路径name指定学科名称reader_cfg测评数据读取的相关信息包括输入的表头列答案列训练数据和测试数据分别对应的字符串标签infer_cfg推理配置信息eval_cfg评测的配置信息推理配置信息infer_cfg包含推理的Prompt模板以gen为例推理配置如下其中inferencer指定的类型为GenInferencer代表采用gen方式。ceval_infer_cfgdict(ice_templatedict(typePromptTemplate,templatedict(begin/E,round[dict(roleHUMAN,promptf以下是中国关于{_ch_name}考试的单项选择题请选出其中的正确答案。\n{{question}}\nA. {{A}}\nB. {{B}}\nC. {{C}}\nD. {{D}}\n答案: ),dict(roleBOT,prompt{answer}),]),ice_token/E,),retrieverdict(typeFixKRetriever,fix_id_list[0,1,2,3,4]),inferencerdict(typeGenInferencer),)评测配置包含评测的指标和后处理在C-Eval这种单选题的形式下评测指标是正确率AccEvaluator如果采用的gen模式需要指定后处理方式C-Eval使用的first_capital_postprocess后处理ceval_eval_cfgdict(evaluatordict(typeAccEvaluator),# TODO 评估指标正确率pred_postprocessordict(typefirst_capital_postprocess))# TODO 后处理,提取第一个大写英文字符跟踪first_capital_postprocess它的作用是抽取回答内容的第一个大写英文字母作为答案TEXT_POSTPROCESSORS.register_module(first-capital)deffirst_capital_postprocess(text:str)-str:fortintext:ift.isupper():returntreturnppl方式的Prompt和后处理和gen有差异感兴趣的读者可以自行阅读ppl的C-Eval数据配置源码。在OpenCompass快速开始章节中以chatglm2-6为例其中已经给到了模型推理配置包括模型和分词模型路径最大推理长度推理的batch_size等在此不再敖述。测评结果可视化在OpenCompass快速开始章节中测评结果打印在终端上同步的OpenCompass会将评测信息写入本地文件默认在项目的outputs/default下进入对应的评测版本号一共有5个文件夹(opencompass)ubunturoot:~/myproject/opencompass-main/outputs/default/20240220_143747$ ls-l 总用量20drwxr-xr-x2root root40962月2014:37configs drwxr-xr-x4root root40962月2014:45logs drwxr-xr-x3root root40962月2014:38predictions drwxr-xr-x3root root40962月2014:45results drwxr-xr-x2root root40962月2014:48summaryconfigs记录了每个科目的数据配置信息包括Prompt模板标签名称等logs程序运行日志又包括eval日志和infer日志其中eval日志记录了每个科目的正确率和运行耗时infer日志记录了推理日志包括运行进度报错信息等predictions记录每个科目的模型回答结果其中包含了模型的最终输入和输出通过该文件可以追溯每一条问题的回答结果。以一条信息为例{0:{origin_prompt:以下是中国关于注册会计师考试的单项选择题请选出其中的正确答案。\n甲公司是国内一家上市公司。甲公司对其各子公司实行全面预算管理并通常使用增量预算方式进行战略控制子公司预算需要经甲公司预算管理委员会批准后执行。2015年10月甲公司投资了一个新的项目乙(子公司)。2015年11月甲公司启动2016年度预算编制工作此时甲公司应要求乙公司编制____。\nA.增量预算\nB.零基预算\nC.固定预算\nD.弹性预算\n答案:\nB\n以下是中国关于注册会计师考试的单项选择题请选出其中的正确答案。\n债务人转让全部合同义务的下列说法不正确的是____。\nA.须债权人同意方可进行\nB.新债务人可主张原债务人对债权人的抗辩\nC.债务人转移债务的原债务人对债权人享有债权的新债务人可以向债权人主张抵销\nD.非专属于原债务人自身的从债务一并转让给新债务人\n答案:\nC\n以下是中国关于注册会计师考试的单项选择题请选出其中的正确答案。\n某公司2012年以150万元的价格进口了1台仪器2014年6月因出现故障运往日本修理(出境时已向海关报明)2014年10月按海关规定的期限复运进境。此时该仪器的国际市场价格为200万元。若经海关审定的修理费和料件费为40万元运费为1.5万元保险费用为2.8万元进口关税税率为6%。该仪器复运进境时应缴纳的进口关税为____万元。\nA.9\nB.3\nC.2.4\nD.12\n答案:\nC\n以下是中国关于注册会计师考试的单项选择题请选出其中的正确答案。\n公开发行公司债券证监会同意注册的决定自作出之日起一定期限内有效发行人应当该期限内发行公司债券。该期限是____。\nA.6个月\nB.1年\nC.2年\nD.3年\n答案:\nC\n以下是中国关于注册会计师考试的单项选择题请选出其中的正确答案。\n某集团公司在一家银行开设了许多不同的银行账户那么该集团公司可以要求银行在考虑其利息及透支限额时将其子公司的账户余额集中起来。下列不属于现金余额集中的好处是____。\nA.盈余与赤字相抵\nB.加强控制\nC.增加投资机会\nD.匹配\n答案:\nD\n以下是中国关于注册会计师考试的单项选择题请选出其中的正确答案。\n下列关于税法基本原则的表述中不正确的是____。\nA.税收法定原则包括税收要件法定原则和税务合法性原则\nB.税收公平原则源于法律上的平等性原则\nC.税 收效率原则包含经济效率和行政效率两个方面\nD.税务机关按法定程序依法征税可以自由做出减征、停征或免征税款的决定\n答案:,prediction:\nD,gold:D},}origin_prompt为最终的模型输入它采用Few-Shot Answer Only方式将dev数据集中属于该科目的问题答案作为范例将其中一条val中的问题拼接在所有范例之后让大模型回答答案。prediction为模型的回答gold为标准答案这条信息表明大模型在该科目的编号为0的问题上回答为D并且回答正确。results记录了每个科目的正确率结果summary记录了最终评测结果以csv表格的形式呈现结果如下OpenCompass测评结果可视化本篇介绍了如何快速上手和理解OpenCompass对于该项目来说所介绍的内容只是冰山一角有兴趣的读者可以自行阅读官方文档全文完毕。最后的最后感谢你们的阅读和喜欢作为一位在一线互联网行业奋斗多年的老兵我深知在这个瞬息万变的技术领域中持续学习和进步的重要性。为了帮助更多热爱技术、渴望成长的朋友我特别整理了一份涵盖大模型领域的宝贵资料集。这些资料不仅是我多年积累的心血结晶也是我在行业一线实战经验的总结。这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。如果你愿意花时间沉下心来学习相信它们一定能为你提供实质性的帮助。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】