Repository: open-compass/opencompass
Issue: [Bug] 通过调用vllm启动服务的api接口，多次运行测试，得分结果不一致
Root cause: Configuration Error

### 先决条件

- [X] 我已经搜索过 [问题](https://github.com/open-compass/opencompass/issues/) 和 [讨论](https://github.com/open-compass/opencompass/discussions) 但未得到预期的帮助。
- [X] 错误在 [最新版本](https://github.com/open-compass/opencompass) 中尚未被修复。

### 问题类型

我修改了代码（配置不视为代码），或者我正在处理我自己的任务/模型/数据集。

### 环境

# 用vllm启动api服务：
CUDA_VISIBLE_DEVICES=0 vllm serve /data/qwen/Qwen2.5/Qwen2.5-0.5B-Instruct --trust-remote-code --gpu-memory-utilization 0.2 --port 9998 --served-model-name qwen2.5-0.5b-instruct --tensor-parallel-size 1
# 采用opencompass提供的调用api代码
1. 参考：
https://opencompass.readthedocs.io/zh-cn/latest/advanced_guides/accelerator_intro.html
![image](https://github.com/user-attachments/assets/112cce63-ba40-4a8e-9ce4-6394b4447d25)
在opencompass/configs/models/openai目录下新建一个文件llm_api.py，内容如下：
```
from opencompass.models import OpenAISDK

api_meta_template = dict(
    round=[
        dict(role='HUMAN', api_role='HUMAN'),
        dict(role='BOT', api_role='BOT', generate=True),
    ],
    reserved_roles=[dict(role='SYSTEM', api_role='SYSTEM')],
)

models = [
    dict(
        abbr='qwen2.5-0.5b-instruct',
        type=OpenAISDK,
        key='EMPTY', # API key
        openai_api_base='http://127.0.0.1:9998/v1', # 服务地址
        path='qwen2.5-0.5b-instruct', # 请求服务时的 model name
        tokenizer_path=None, # 请求服务时的 tokenizer name 或 path, 为None时使用默认tokenizer gpt-4
        rpm_verbose=True, # 是否打印请求速率
        meta_template=api_meta_template, # 服务请求模板
        query_per_second=50, # 服务请求速率
        max_out_len=1024, # 最大输出长度
        max_seq_len=4096, # 最大输入长度
        temperature=0.01, # 生成温度
        # tok_p=1, # 生成温度
        batch_size=8, # 批处理大小
        retry=3, # 重试次数
    )
]
```
2. 由于报错，vllm不接受max_completion_tokens这个参数，修改opencompass/models/openai_api.py中的内容，把max_completion_tokens注释掉
![image](https://github.com/user-attachments/assets/ce82881e-37df-42c8-b640-30d540deecf7)

3. 创建启动脚本
在configs/目录下，创建eval_ch_api_demo.py文件，内容如下：
```
from mmengine.config import read_base
with read_base():
    from opencompass.configs.datasets.bbh.bbh_gen import bbh_datasets
    # from opencompass.configs.models.openai.gpt_4o_2024_05_13 import models as gpt4
    from opencompass.configs.models.openai.llm_api import models as ch_llm_model
datasets = bbh_datasets# + math_datasets
models = ch_llm_model
```
4. 执行脚本
CUDA_VISIBLE_DEVICES=0 python3 run.py configs/eval_ch_api_demo.py --debug

5. 多次运行结果不一致
多次运行的得分不一样，下面是其中一个示例的预测结果，可以看出，生成的文字都是不一样的
![image](https://github.com/user-attachments/assets/a5fe9e62-e5c8-46e5-b4b3-1fa5935a6ab4)



### 重现问题 - 代码/配置示例

见上述描述详情

### 重现问题 - 命令或脚本

见上述描述详情

### 重现问题 - 错误信息

见上述描述详情

### 其他信息

希望可以解决多次调用api结果不一致的原因

Please try a smaller temp, like 0.000001

# 本地模型加载评测
1. 启动命令
CUDA_VISIBLE_DEVICES=2 python3 run.py configs/eval_vllm_qwen2_5_0_5b_instruct.py --debug
2. eval_vllm_qwen2_5_0_5b_instruct.py 如下
bbh_datasets数据中只选择了temporal_sequences.json这个子集，其他数据注释掉了
```
from mmengine.config import read_base
with read_base():
    from opencompass.configs.datasets.bbh.bbh_gen import bbh_datasets
    from opencompass.configs.models.qwen2_5.vllm_qwen2_5_0_5b_instruct import models
    from opencompass.configs.summarizers.example import summarizer

datasets = sum([v for k, v in locals().items() if k.endswith('_datasets') or k == 'datasets'], [])
work_dir = './outputs/vllm_qwen2_5_0_5b_instruct/'
```
3. qwen2_5.vllm_qwen2_5_0_5b_instruct文件内容如下
```
from opencompass.models import VLLMwithChatTemplate
models = [
    dict(
        type=VLLMwithChatTemplate,
        abbr='qwen2.5-0.5b-instruct-vllm',
        path = '/data/chdmx/models/LLM_models/qwen/Qwen2.5/Qwen2.5-0.5B-Instruct',
        model_kwargs=dict(tensor_parallel_size=1, gpu_memory_utilization=0.5),
        max_out_len=4096,
        batch_size=16,
        run_cfg=dict(num_gpus=1),
    )
]
```
4. 结果
多次运行预测生成的文本结果一致。甚至连temperature参数都没有设置，然而调用api服务评测的结果每次都是不一样的