强推理模型评测教程¶
OpenCompass提供针对DeepSeek R1系列推理模型的评测教程(数学数据集)。
在模型层面,我们建议使用Sampling方式,以减少因为Greedy评测带来的大量重复
在数据集层面,我们对数据量较小的评测基准,使用多次评测并取平均的方式。
在答案验证层面,为了减少基于规则评测带来的误判,我们统一使用基于LLM验证的方式进行评测。
安装和准备¶
请按OpenCompass安装教程进行安装。
构建评测配置¶
我们在 example/eval_deepseek_r1.py
中提供了示例配置,以下对评测配置进行解读
评测配置解读¶
1. 数据集与验证器配置¶
# 支持多运行次数的数据集配置(示例)
from opencompass.configs.datasets.aime2024.aime2024_llmverify_repeat8_gen_e8fcee import aime2024_datasets
datasets = sum(
(v for k, v in locals().items() if k.endswith('_datasets')),
[],
)
# 设置LLM验证器, 用户需事先通过LMDeploy/vLLM/SGLang等工具启动API 评测服务器,或者直接使用兼容OpenAI标准接口的模型服务
verifier_cfg = dict(
abbr='qwen2-5-32B-Instruct',
type=OpenAISDK,
path='Qwen/Qwen2.5-32B-Instruct', # 需替换实际路径
key='YOUR_API_KEY', # 需替换真实API Key
openai_api_base=['http://your-api-endpoint'], # 需替换API地址
query_per_second=16,
batch_size=1024,
temperature=0.001,
max_out_len=16384
)
# 应用验证器到所有数据集
for item in datasets:
if 'judge_cfg' in item['eval_cfg']['evaluator']:
item['eval_cfg']['evaluator']['judge_cfg'] = verifier_cfg
2. 模型配置¶
我们提供了基于LMDeploy作为推理后端的评测示例,用户可以通过修改path(即HF路径)
# LMDeploy模型配置示例
models = [
dict(
type=TurboMindModelwithChatTemplate,
abbr='deepseek-r1-distill-qwen-7b-turbomind',
path='deepseek-ai/DeepSeek-R1-Distill-Qwen-7B',
engine_config=dict(session_len=32768, max_batch_size=128, tp=1),
gen_config=dict(
do_sample=True,
temperature=0.6,
top_p=0.95,
max_new_tokens=32768
),
max_seq_len=32768,
batch_size=64,
run_cfg=dict(num_gpus=1),
pred_postprocessor=dict(type=extract_non_reasoning_content)
),
# 可扩展14B/32B配置...
]
3. 评估流程配置¶
# 推理配置
infer = dict(
partitioner=dict(type=NumWorkerPartitioner, num_worker=1),
runner=dict(type=LocalRunner, task=dict(type=OpenICLInferTask))
# 评估配置
eval = dict(
partitioner=dict(type=NaivePartitioner, n=8),
runner=dict(type=LocalRunner, task=dict(type=OpenICLEvalTask)))
4. 结果汇总配置¶
# 多运行结果平均配置
summary_groups = [
{
'name': 'AIME2024-Aveage8',
'subsets':[[f'aime2024-run{idx}', 'accuracy'] for idx in range(8)]
},
# 其他数据集平均配置...
]
summarizer = dict(
dataset_abbrs=[
['AIME2024-Aveage8', 'naive_average'],
# 其他数据集指标...
],
summary_groups=summary_groups
)
# 工作目录设置
work_dir = "outputs/deepseek_r1_reasoning"
执行评测¶
场景1:模型1卡加载,数据1个worker评测,共使用1个GPU¶
opencompass example/eval_deepseek_r1.py --debug --dump-eval-details
评测日志会在命令行输出。
场景2:模型1卡加载,数据8个worker评测,共使用8个GPU¶
需要修改配置文件中的infer配置,将num_worker设置为8
# 推理配置
infer = dict(
partitioner=dict(type=NumWorkerPartitioner, num_worker=1),
runner=dict(type=LocalRunner, task=dict(type=OpenICLInferTask))
同时评测命令去掉--debug
参数
opencompass example/eval_deepseek_r1.py --dump-eval-details
此模式下,OpenCompass将使用多线程启动$num_worker
个任务,命令行不展示具体日志,具体的评测日志将会在$work_dir
下中展示。
场景3:模型2卡加载,数据4个worker评测,共使用8个GPU¶
需要注意模型配置中,run_cfg
中的num_gpus
需要设置为2(如使用推理后端,则推理后端的参数也需要同步修改,比如LMDeploy中的tp需要设置为2),同时修改infer
配置中的num_worker
为4
models += [
dict(
type=TurboMindModelwithChatTemplate,
abbr='deepseek-r1-distill-qwen-14b-turbomind',
path='deepseek-ai/DeepSeek-R1-Distill-Qwen-14B',
engine_config=dict(session_len=32768, max_batch_size=128, tp=2),
gen_config=dict(
do_sample=True,
temperature=0.6,
top_p=0.95,
max_new_tokens=32768),
max_seq_len=32768,
max_out_len=32768,
batch_size=128,
run_cfg=dict(num_gpus=2),
pred_postprocessor=dict(type=extract_non_reasoning_content)
),
]
# 推理配置
infer = dict(
partitioner=dict(type=NumWorkerPartitioner, num_worker=4),
runner=dict(type=LocalRunner, task=dict(type=OpenICLInferTask))
评测结果¶
评测结果展示如下:
dataset version metric mode deepseek-r1-distill-qwen-7b-turbomind ---------------------------------- --------- ------------- ------ --------------------------------------- MATH - - - AIME2024-Aveage8 - naive_average gen 56.25
性能基线参考¶
由于模型使用Sampling进行解码,同时AIME数据量较小,使用8次评测取平均情况下,仍会出现1-3分的性能抖动
模型 |
数据集 |
指标 |
数值 |
---|---|---|---|
DeepSeek-R1-Distill-Qwen-7B |
AIME2024 |
Accuracy |
56.3 |
DeepSeek-R1-Distill-Qwen-14B |
AIME2024 |
Accuracy |
74.2 |
DeepSeek-R1-Distill-Qwen-32B |
AIME2024 |
Accuracy |
74.2 |