- 模型评测
- 人工智能
- 大模型
- AI 评测
【免费下载链接】opencompass
OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100+ datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.
导读
本文是 OpenCompass 官方针对 Intern-S1(InternLM 开源的推理/思考模型)提供的评测实战指南。文章围绕「部署 API 服务 → 配置模型接入 → 配置数据集与 LLM Judge → 启动评估」这条完整链路展开,读者学完后可以基于 OpenCompass 将任意 OpenAI 兼容的推理模型接入评测流程,并正确处理思考模式(thinking mode)下的输出后处理与长序列评测场景。
一、评测前的准备:模型下载与 API 服务部署
Intern-S1 已经开源,可先从 Hugging Face 下载模型权重(仓库内配置默认使用internlm/Intern-S1作为模型路径)。
模型下载完成后,官方推荐将模型部署为 API 服务供 OpenCompass 调用,而不是在评测机本地直接加载权重。支持以下部署方式:
- LMDeploy:InternLM 官方推理引擎,对 Intern 系列模型支持完善;
- vLLM:高性能推理框架,可通过 OpenAI 兼容接口对外提供服务;
- SGLang:同样提供 OpenAI 兼容服务接口。
部署细节(Serving)以 Intern-S1 官方仓库的说明为准;本文聚焦 OpenCompass 侧的接入配置,不涉及具体部署命令。
部署完成后,你会得到一个 API Base 地址与 API Key,它们将直接用于下文模型配置中的openai_api_base与key字段。
二、模型接入配置:intern_s1.py
OpenCompass 在opencompass/configs/models/interns1/intern_s1.py中提供了现成的 Intern-S1 模型配置示例,用户只需按需修改即可。完整配置如下:
from opencompass.models import OpenAISDK from opencompass.utils.text_postprocessors import extract_non_reasoning_content api_meta_template = dict( round=[ dict(role='HUMAN', api_role='HUMAN'), dict(role='BOT', api_role='BOT', generate=True), ], ) models = [ dict( abbr='intern-s1', key='YOUR_API_KEY', # 填写你的 API KEY openai_api_base='YOUR_API_BASE', # 填写你的 API BASE type=OpenAISDK, path='internlm/Intern-S1', temperature=0.7, meta_template=api_meta_template, query_per_second=1, batch_size=8, max_out_len=64000, max_seq_len=65536, openai_extra_kwargs={ 'top_p': 0.95, }, retry=10, extra_body={ 'chat_template_kwargs': {'enable_thinking': True} # 基于 vllm 或 sglang 部署时控制思考模式开关 }, pred_postprocessor=dict(type=extract_non_reasoning_content), # 开启思考模式后,提取非推理内容用于评测 ), ]关键字段说明
| 字段 | 作用 | 说明 |
|---|---|---|
type | 模型封装类型 | 使用OpenAISDK,即 OpenAI SDK 风格的 API 模型封装(见 openai_api.py) |
path | 模型标识 | 传给 API 服务的模型名/路径,默认internlm/Intern-S1 |
abbr | 模型缩写 | 用于结果文件命名与报告展示,可自定义 |
openai_api_base | API 服务地址 | 指向已部署服务的 OpenAI 兼容端点;从源码看也支持传入list,此时会随机选择一个以做多端点负载均衡(openai_api.py) |
key | API 密钥 | 也支持传入密钥列表实现轮换 |
temperature/top_p | 采样参数 | 思考类模型通常配合一定的随机性采样,top_p通过openai_extra_kwargs透传给 OpenAI SDK |
query_per_second | 请求速率上限 | 控制每秒最大请求数,避免打爆服务端 |
batch_size | 并发批大小 | 并发请求条数,需与服务端容量匹配 |
max_out_len | 最大生成长度 | Intern-S1 为长推理模型,配置为 64000,覆盖其长 CoT 输出 |
max_seq_len | 最大序列长度 | 配置为 65536,与长上下文的评测需求匹配 |
retry | 失败重试次数 | API 调用失败后的重试次数 |
meta_template | 元提示模板 | 定义 HUMAN/BOT 角色轮次,generate=True标记生成角色,用于组装对话请求 |
extra_body | 额外请求体字段 | 当基于 vLLM/SGLang 部署时,通过chat_template_kwargs.enable_thinking控制思考模式开/关 |
pred_postprocessor | 预测后处理器 | 开启思考模式后用于剔除推理(thinking)内容,仅保留最终答案参与评测 |
思考模式与extract_non_reasoning_content的底层原理
当enable_thinking=True时,模型输出会携带<think>...</think>推理标签。评测指标(如准确率匹配)只应针对最终答案计算,因此需要把推理内容剥离开。这一后处理由注册在opencompass/utils/text_postprocessors.py中的extract_non_reasoning_content完成(text_postprocessors.py),其核心逻辑为:
- 若文本中只存在结束标签
</think>,则按结束标签切分并取最后一段; - 若起止标签都存在,则用正则
<think>(.*?)</think>(re.DOTALL模式)将中间推理段落整体删除。
该函数还支持自定义思考标签:如think_start_token与think_end_token参数(仓库内 HuatuoGPT-O1 等模型配置即传入了'## Thinking'/'## Final Response'这类自定义标记)。对应单元测试见 test_text_postprocessors.py,覆盖了「仅含结束标签」与「成对标签」两种典型场景。
三、数据集配置与 LLM Judge:eval_bench_intern_s1.py
OpenCompass 在examples/eval_bench_intern_s1.py中提供了评测 Intern-S1 使用的数据集配置,也可按需追加其他数据集。该示例文件实际上是一份可直接运行的完整评测配置,其内部结构如下:
- 数据集导入:通过
read_base批量引入 8 个数据集配置,涵盖多个能力维度:- 数学推理:
aime2025(级联评测配置); - 科学推理:
GPQA_diamond、ChemBench(LLM Judge 评测)、ProteinLMBench(LLM Judge 评测); - 通识知识:
mmlu_pro; - 指令遵循:
IFEval; - 实验科学:
matbench(LLM Judge 评测); - 指令生成:
SmolInstruct的 0-shot instruct 系列子集。
- 数学推理:
- 模型导入:复用上文
opencompass/configs/models/interns1/intern_s1.py中的models。 - 推理长度适配:遍历所有数据集,将
infer_cfg['inferencer']['max_out_len']统一设为 65536,以匹配思考模型的长输出需求。 - LLM Judge 注入:将统一的
judge_cfg注入到需要 LLM 评判的评估器(judge_cfg字段或llm_evaluator.judge_cfg)中。
配置 LLM Judge(评判模型)
对于 ChemBench、ProteinLMBench、matbench 这类主观/生成式评测任务,需要额外配置一个 LLM 评判模型来打分。文档给出的示例配置如下:
judge_cfg = dict( abbr='YOUR_JUDGE_MODEL', type=OpenAISDK, path='YOUR_JUDGE_MODEL_PATH', key='YOUR_API_KEY', openai_api_base='YOUR_API_BASE', meta_template=dict( round=[ dict(role='HUMAN', api_role='HUMAN'), dict(role='BOT', api_role='BOT', generate=True), ]), query_per_second=1, batch_size=1, temperature=0.001, max_out_len=8192, max_seq_len=32768, mode='mid', )与待评模型配置相比,Judge 配置有以下差异值得注意:
temperature=0.001:评判任务追求稳定一致,几乎退化为贪心解码,避免同一答案在不同次打分中出现明显波动;max_out_len=8192/max_seq_len=32768:评判模型无需覆盖超长 CoT,输出上限可以收紧;mode='mid':指定输入超长时的截断策略为从中间截断(OpenAI 基类支持'front'/'mid'/'rear'三种截断位置,默认'none',见 openai_api.py);batch_size=1:评判请求单条串行,保证打分质量与稳定性。
在examples/eval_bench_intern_s1.py中,judge_cfg先被置为空dict(),随后通过循环注入到每个数据集的评估器配置中,因此自行追加数据集时,必须保证该数据集若依赖 LLM 评判,其judge_cfg能被正确覆盖。
摘要与输出目录
示例文件还内置了summarizer配置,按「Knowledge / Instruction Following / General Reasoning / Math Calculation / Academic / SmolInstruct」等分组汇总各数据集成绩(如['mmlu_pro', 'accuracy']、['GPQA_diamond', 'accuracy']、['aime2025', 'accuracy']、['ChemBench', 'naive_average']等),并指定输出目录work_dir = './outputs/oc_bench_intern_s1'。
四、推理与评测执行配置
examples/eval_bench_intern_s1.py中还包含推理与评测阶段的任务调度配置(与 OpenCompass 通用的infer/eval字典结构一致):
# 推理阶段:8 个 worker 并行推理,本地 runner,最多 16 个并发进程 infer = dict( partitioner=dict(type=NumWorkerPartitioner, num_worker=8), runner=dict( type=LocalRunner, max_num_workers=16, retry=0, # 按需修改 task=dict(type=OpenICLInferTask), ), ) # 评测阶段:Naive 切分 10 份,本地 runner 执行 OpenICLEvalTask eval = dict( partitioner=dict(type=NaivePartitioner, n=10), runner=dict(type=LocalRunner, max_num_workers=16, task=dict(type=OpenICLEvalTask)), )其中NumWorkerPartitioner按 worker 数量切分推理任务,NaivePartitioner将评测数据朴素均分为n份。由于 Intern-S1 输出极长(推理+答案),任务切分粒度与并发度需结合服务端吞吐能力调整,避免单 worker 超时或请求堆积。
五、启动评估
完成上述模型与数据集配置后,在仓库根目录执行以下命令即可启动评估:
opencompass examples/eval_bench_intern_s1.pyOpenCompass 会依次完成:配置读取与合并 → 推理任务切分与下发(对 Intern-S1 执行长上下文推理)→ 结果评测(含 LLM Judge 打分)→ 汇总输出报告到work_dir指定目录。
六、常见实践要点小结
- 思考模式与评测解耦:
enable_thinking=True仅影响服务端推理时的输出格式;评测侧通过pred_postprocessor=dict(type=extract_non_reasoning_content)剥离<think>内容,保证打分只看最终答案。 - 长序列参数必须匹配:Intern-S1 的
max_out_len=64000、max_seq_len=65536与数据集侧max_out_len=65536三者需保持一致口径,否则可能出现截断导致答案不完整。 - Judge 模型独立配置:LLM 评判任务使用低温、单并发、中截断策略,与待评模型的采样参数相互独立,可分别调优。
- 可扩展性:如需追加数据集,只需在
read_base中引入对应数据集配置即可;若新数据集依赖 LLM 评判,确保其评估器中的judge_cfg会被示例文件中的循环覆盖逻辑捕获。
参考资源
- 模型配置:opencompass/configs/models/interns1/intern_s1.py
- 完整评测示例:examples/eval_bench_intern_s1.py
- 思考内容提取实现:opencompass/utils/text_postprocessors.py
- 对应单元测试:tests/utils/test_text_postprocessors.py
- OpenAI SDK 模型封装:opencompass/models/openai_api.py
- 模型评测
- 人工智能
- 大模型
- AI 评测
【免费下载链接】opencompass
OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100+ datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.
相关推荐
CloudCLI 应用图标 SVG 转 PNG 全流程指南:多尺寸 PWA 图标生成与转换实战
CloudCLI 应用图标 SVG 转 PNG 全流程指南:多尺寸 PWA 图标生成与转换实战 本篇指南以 CloudCLI(Claude Code UI)仓库
模型评测人工智能大模型AI 评测如何把 Amazon Bedrock 模型接入 DeepEval 用作评估 judge?
如何把 Amazon Bedrock 模型接入 DeepEval 用作评估 judge? DeepEval 里几乎所有指标( GEval 、 AnswerRel
人工智能大模型模型评测AI 评测测试红蓝对抗提示工程Oumi 评估配置完全指南:用 EvaluationConfig 与 YAML 定制 LLM/VLM 评测流程
Oumi 评估配置完全指南:用 EvaluationConfig 与 YAML 定制 LLM/VLM 评测流程 Oumi OSS 提供了一套统一的评估框架,用于
人工智能大模型预训练微调强化学习模型推理服务模型评测MCP 服务分布式训练模型量化
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考