Repository: modelscope/evalscope
Issue: 评测qwen2.5-7b-Instruc模型，max_tokens=20000运行正常；但是测Qwen2.5-Math-7B-Base，max_tokens=2048,就出现错误
Root cause: Validation Gap

![Image](https://github.com/user-attachments/assets/71c570db-9168-4ec0-95bc-ff655542109b)

麻烦贴一下评测命令，模型服务是用什么拉起的呢

> 麻烦贴一下评测命令，模型服务是用什么拉起的呢

模型服务使用的vllm：
```
CUDA_VISIBLE_DEVICES=0 python -m vllm.entrypoints.openai.api_server \
  --model /data/model/Qwen2.5-Math-7B/ \
  --served-model-name qwen2.5-math \
  --trust_remote_code \
  --port 8801
```

测评命令是官网例子改的：
```
from evalscope import TaskConfig, run_task
from evalscope.constants import EvalType

task_cfg = TaskConfig(
    model='qwen2.5-math',   # 模型名称 (需要与部署时的模型名称一致)
    api_url='http://127.0.0.1:8801/v1',  # 推理服务地址
    api_key='EMPTY',
    eval_type=EvalType.SERVICE,   # 评测类型，SERVICE表示评测推理服务
    datasets=[
        'data_collection',  # 数据集名称(固定为data_collection表示使用混合数据集)
    ],
    dataset_args={
        'data_collection': {
            'dataset_id': 'modelscope/R1-Distill-Math-Test'  # 数据集ID 或 数据集本地路径
        }
    },
    eval_batch_size=32,       # 发送请求的并发数
    generation_config={       # 模型推理配置
        'max_tokens': 20000,  # 最大生成token数，建议设置为较大值避免输出截断
        'temperature': 0.6,   # 采样温度 (deepseek 报告推荐值)
        'top_p': 0.95,        # top-p采样 (deepseek 报告推荐值)
        'n': 3                # 每个请求产生的回复数量 (注意 lmdeploy 目前只支持 n=1)
    },
    stream=True               # 是否使用流式请求，推荐设置为True防止请求超时
)

run_task(task_cfg=task_cfg)
```


上图贴的是在测Qwen2.5-Math-7B时，max_tokens': 20000报的错。我试过将max_tokens设置成2048，有一些样例依然报错。如果max_tokens设置成1024，不会报错，但是我觉会进行输出截断，导致评分很低。


> 将max_tokens设置成2048，有一些样例依然报错

请问这里报什么错？

api评测走的是 `chat` 接口，base模型评测可能会有点问题（模型输出不会停止），建议用Instruct模型来测试

> > 将max_tokens设置成2048，有一些样例依然报错
> 
> 请问这里报什么错？
> 
> api评测走的是 `chat` 接口，base模型评测可能会有点问题（模型输出不会停止），建议用Instruct模型来测试

跟上述图片一样的错误。

另外，我想问一下，我看到评测模型后端接收到的system prompt是：
Please reason step by step, and put your final answer within \\boxed{}.

但是，我在使用grpo进行训练时，使用的system prompt是：
You are a helpful AI Assistant, designed to provided well-reasoned and detailed responses. You FIRST think about the reasoning process as an internal monologue and then provide the user with the answer. The reasoning process and answer are enclosed within  <think> </think> and <answer> </answer> tags, respectively,i.e., <think> reasoning process here </think> <answer> answer here </answer>."

这样的不一致应该对导致模型的评测有偏差吧？

可能有影响，可以评测单独的数据集，然后自己设置`system prompt`

```python

task_cfg = TaskConfig(
    model='DeepSeek-R1-Distill-Qwen-1.5B',
    api_url='http://127.0.0.1:8801/v1/chat/completions',
    api_key='EMPTY',
    eval_type=EvalType.SERVICE,
    datasets=[
        # 'aime24',
        # 'math_500',
        'gpqa',
    ],
    dataset_args={
        'gpqa': {
            'subset_list': ['gpqa_diamond'],
            'few_shot_num': 0,
            'system_prompt': 'You are a helpful assistant. ...'
        },
    },
    eval_batch_size=64,
    generation_config={
        'max_tokens': 15000,  # avoid exceed max length
        'temperature': 0.6,
        'top_p': 0.95,
    },
    limit=50
)
```

还有设置了`max_tokens`还会报错说completion有20000token吗，感觉不合理呀

> 可能有影响，可以评测单独的数据集，然后自己设置`system prompt`
> 
> task_cfg = TaskConfig(
>     model='DeepSeek-R1-Distill-Qwen-1.5B',
>     api_url='http://127.0.0.1:8801/v1/chat/completions',
>     api_key='EMPTY',
>     eval_type=EvalType.SERVICE,
>     datasets=[
>         # 'aime24',
>         # 'math_500',
>         'gpqa',
>     ],
>     dataset_args={
>         'gpqa': {
>             'subset_list': ['gpqa_diamond'],
>             'few_shot_num': 0,
>             'system_prompt': 'You are a helpful assistant. ...'
>         },
>     },
>     eval_batch_size=64,
>     generation_config={
>         'max_tokens': 15000,  # avoid exceed max length
>         'temperature': 0.6,
>         'top_p': 0.95,
>     },
>     limit=50
> )
> 还有设置了`max_tokens`还会报错说completion有20000token吗，感觉不合理呀


```
from evalscope import TaskConfig, run_task
from evalscope.constants import EvalType

task_cfg = TaskConfig(
    model='qwen2.5-math',   # 模型名称 (需要与部署时的模型名称一致)
    api_url='http://127.0.0.1:8801/v1/chat/completions',  # 推理服务地址
    api_key='EMPTY',
    eval_type=EvalType.SERVICE,   # 评测类型，SERVICE表示评测推理服务
    datasets=[
        # 'aime24',
         'math_500',
        #'gpqa',
    ],
    dataset_args={
        'math_500': {
            'dataset_id': 'AI-ModelScope/MATH-500'  # 数据集ID 或 数据集本地路径
        },
        "system_prompt": "You are a helpful AI Assistant, designed to provided well-reasoned and detailed responses. You FIRST think about the reasoning process as an internal monologue and then provide the user with the answer. The reasoning process and answer are enclosed within  <think> </think> and <answer> </answer> tags, respectively,i.e., <think> reasoning process here </think> <answer> answer here </answer>."
    },
    eval_batch_size=32,       # 发送请求的并发数
    generation_config={       # 模型推理配置
        'max_tokens': 15000,  # 最大生成token数，建议设置为较大值避免输出截断
        'temperature': 0.6,   # 采样温度 (deepseek 报告推荐值)
        'top_p': 0.95,        # top-p采样 (deepseek 报告推荐值)
        'n': 3                # 每个请求产生的回复数量 (注意 lmdeploy 目前只支持 n=1)
    },
    stream=True               # 是否使用流式请求，推荐设置为True防止请求超时
)

run_task(task_cfg=task_cfg)
```

你的意思是，使用base model，`max_tokens`设置较大还是会报错吗？这是我使用base model，`max_tokens`设置成15000，单独测math-500的代码，依然会报错

![Image](https://github.com/user-attachments/assets/759f70aa-d3b5-48ee-8970-201a620829c5)

Qwen2.5-Math-7B 最大只支持4096token，设置超过这个大小就会报错

> 感谢你的反馈！我们将关闭此问题。如果您有任何疑问，请随时重新打开它。如果EvalScope对您有所帮助，欢迎给我们点个STAR以示支持，谢谢！