update needlebench docs for chinese

This commit is contained in:
Mor-Li 2025-04-26 13:18:10 +08:00
parent e8bc8c1e8c
commit 2602c1ad82

View File

@ -16,37 +16,10 @@
- **祖先追溯挑战(Ancestral Trace Challenge, ATC)**通过设计“亲属关系针”测试LLM处理真实长文本中多层逻辑挑战的能力。在ATC任务中通过一系列逻辑推理问题检验模型对长文本中每个细节的记忆和分析能力在此任务中我们去掉了无关文本(Haystack)的设定而是将所有文本设计为关键信息LLM必须综合运用长文本中的所有内容和推理才能准确回答问题。 - **祖先追溯挑战(Ancestral Trace Challenge, ATC)**通过设计“亲属关系针”测试LLM处理真实长文本中多层逻辑挑战的能力。在ATC任务中通过一系列逻辑推理问题检验模型对长文本中每个细节的记忆和分析能力在此任务中我们去掉了无关文本(Haystack)的设定而是将所有文本设计为关键信息LLM必须综合运用长文本中的所有内容和推理才能准确回答问题。
### 评估步骤 ## 评估步骤
> 注意:在最新代码中OpenCompass已经设置数据集从[Huggingface的接口](https://huggingface.co/datasets/opencompass/NeedleBench)中自动加载,可以直接跳过下面的手动下载安放数据集 > 注意:在最新的OpenCompass代码中NeedleBench数据集会自动从[Huggingface接口](https://huggingface.co/datasets/opencompass/NeedleBench)加载,无需手动下载或配置数据集,您可以直接运行评测命令
1. 从[这里](https://github.com/open-compass/opencompass/files/14741330/needlebench.zip)下载数据集。
2. 将下载的文件放置于`opencompass/data/needlebench/`目录下。`needlebench`目录中预期的文件结构如下所示:
```
opencompass/
├── configs
├── docs
├── data
│ └── needlebench
│ ├── multi_needle_reasoning_en.json
│ ├── multi_needle_reasoning_zh.json
│ ├── names.json
│ ├── needles.jsonl
│ ├── PaulGrahamEssays.jsonl
│ ├── zh_finance.jsonl
│ ├── zh_game.jsonl
│ ├── zh_government.jsonl
│ ├── zh_movie.jsonl
│ ├── zh_tech.jsonl
│ ├── zh_general.jsonl
├── LICENSE
├── opencompass
├── outputs
├── run.py
├── more...
```
### `OpenCompass`环境配置 ### `OpenCompass`环境配置
@ -60,13 +33,13 @@ pip install -e .
### 配置数据集 ### 配置数据集
我们在`configs/datasets/needlebench`中已经预先配置好了关于常见长度区间(4k, 8k, 32k, 128k, 200k, 1000k)的长文本测试设定,您可以通过在配置文件中定义相关参数,以灵活地创建适合您需求的数据集。 我们在`opencompass/configs/datasets/needlebench`中已经预先配置好了关于常见长度区间(4k, 8k, 32k, 128k, 200k, 1000k)的长文本测试设定,您可以通过在配置文件中定义相关参数,以灵活地创建适合您需求的数据集。
### 评估示例 ### 评估示例
#### 使用`LMDeploy`部署的 `InternLM2-7B` 模型进行评估 #### 使用`VLLM`部署的 `Qwen2-5-7B` 模型进行评估
例如,使用`LMDeploy`部署的 `InternLM2-7B` 模型进行评估NeedleBench-4K的所有任务可以在命令行中直接使用以下命令该命令会调用预定义好的模型、数据集配置文件而无需额外书写配置文件 例如,使用`VLLM`部署的 `Qwen2-5-7B` 模型进行评估NeedleBench-128K的所有任务可以在命令行中直接使用以下命令该命令会调用预定义好的模型、数据集配置文件而无需额外书写配置文件
##### 本地评估 ##### 本地评估
@ -74,7 +47,7 @@ pip install -e .
```bash ```bash
# 本地评估 # 本地评估
python run.py --dataset needlebench_4k --models lmdeploy_internlm2_chat_7b --summarizer needlebench/needlebench_4k_summarizer python run.py --dataset needlebench_128k --models vllm_qwen2_5_7b_instruct_128k --summarizer needlebench/needlebench_128k_summarizer
``` ```
##### 在Slurm集群上评估 ##### 在Slurm集群上评估
@ -83,60 +56,62 @@ python run.py --dataset needlebench_4k --models lmdeploy_internlm2_chat_7b --su
```bash ```bash
# Slurm评估 # Slurm评估
python run.py --dataset needlebench_4k --models lmdeploy_internlm2_chat_7b --summarizer needlebench/needlebench_4k_summarizer --slurm -p partition_name -q reserved --max-num-workers 16 python run.py --dataset needlebench_128k --models vllm_qwen2_5_7b_instruct_128k --summarizer needlebench/needlebench_128k_summarizer --slurm -p partition_name -q reserved --max-num-workers 16
``` ```
##### 只评估子数据集 ##### 只评估子数据集
如果只想测试原始的大海捞针任务设定,比如可以更换数据集的参数为`needlebench_single_4k`这对应于4k长度下的单针版本的大海捞针测试 如果只想测试原始的大海捞针任务设定,比如可以更换数据集的参数为`needlebench_single_128k`这对应于4k长度下的单针版本的大海捞针测试
```bash ```bash
python run.py --dataset needlebench_single_4k --models lmdeploy_internlm2_chat_7b --summarizer needlebench/needlebench_4k_summarizer --slurm -p partition_name -q reserved --max-num-workers 16 python run.py --dataset needlebench_single_128k --models vllm_qwen2_5_7b_instruct_128k --summarizer needlebench/needlebench_128k_summarizer --slurm -p partition_name -q reserved --max-num-workers 16
``` ```
您也可以进一步选择子数据集,如更换数据集`--datasets`的参数为`needlebench_single_4k/needlebench_zh_datasets`仅仅进行中文版本的单针4K长度下的大海捞针任务测试其中`/`后面的参数代表子数据集,您可以在`configs/datasets/needlebench/needlebench_4k/needlebench_single_4k.py`中找到可选的子数据集变量,如: 您也可以进一步选择子数据集,如更换数据集`--datasets`的参数为`needlebench_single_128k/needlebench_zh_datasets`仅仅进行中文版本的单针4K长度下的大海捞针任务测试其中`/`后面的参数代表子数据集,您可以在`opencompass/configs/datasets/needlebench/needlebench_128k/needlebench_single_128k.py`中找到可选的子数据集变量,如:
```bash ```bash
python run.py --dataset needlebench_single_4k/needlebench_zh_datasets --models lmdeploy_internlm2_chat_7b --summarizer needlebench/needlebench_4k_summarizer --slurm -p partition_name -q reserved --max-num-workers 16 python run.py --dataset needlebench_single_128k/needlebench_zh_datasets --models vllm_qwen2_5_7b_instruct_128k --summarizer needlebench/needlebench_128k_summarizer --slurm -p partition_name -q reserved --max-num-workers 16
``` ```
注意在评估前预先安装[LMDeploy](https://github.com/InternLM/lmdeploy)工具 注意在评估前预先安装[VLLM](https://docs.vllm.ai/en/latest/getting_started/installation/gpu.html)工具
```bash ```bash
pip install lmdeploy # Install vLLM with CUDA 12.4.
# For other CUDA versions, please refer to the [official documentation](https://docs.vllm.ai/en/latest/getting_started/installation/gpu.html)
pip install vllm
``` ```
这个命令将启动评估流程,参数 `-p partition_name -q auto``--max-num-workers 32` 用于指定 Slurm 分区名称和最大工作进程数。 这个命令将启动评估流程,其中参数 `-p partition_name` 用于指定 Slurm 分区名称,`-q auto` 用于指定 quota type资源队列类型例如 auto、reserved 等),`--max-num-workers 32` 用于设置最大工作进程数。
#### 评估其他`Huggingface`模型 #### 评估其他`Huggingface`模型
对于其他模型,我们建议额外书写一个运行的配置文件以便对模型的`max_seq_len`, `max_out_len`参数进行修改,以便模型可以接收到完整的长文本内容。如我们预先写好的`configs/eval_needlebench.py`文件。完整内容如下 对于其他模型,我们建议额外书写一个运行的配置文件以便对模型的`max_seq_len`, `max_out_len`参数进行修改,以便模型可以接收到完整的长文本内容。如这里的的`configs/eval_needlebench.py`文件。完整内容如下
```python ```python
from mmengine.config import read_base from mmengine.config import read_base
# 我们使用mmengine.config来import其他的配置文件中的变量 # 我们使用mmengine.config来import其他的配置文件中的变量
with read_base(): with read_base():
# from .models.hf_internlm.lmdeploy_internlm2_chat_7b import models as internlm2_chat_7b_200k
from .models.hf_internlm.hf_internlm2_chat_7b import models as internlm2_chat_7b from .models.hf_internlm.hf_internlm2_chat_7b import models as internlm2_chat_7b
# Evaluate needlebench_4k, adjust the configuration to use 8k, 32k, 128k, 200k, or 1000k if necessary. # Evaluate needlebench_32k, adjust the configuration to use 4k, 32k, 128k, 200k, or 1000k if necessary.
# from .datasets.needlebench.needlebench_4k.needlebench_4k import needlebench_datasets # from .datasets.needlebench.needlebench_32k.needlebench_32k import needlebench_datasets
# from .summarizers.needlebench import needlebench_4k_summarizer as summarizer # from .summarizers.needlebench import needlebench_32k_summarizer as summarizer
# only eval original "needle in a haystack test" in needlebench_4k # only eval original "needle in a haystack test" in needlebench_32k
from .datasets.needlebench.needlebench_4k.needlebench_single_4k import needlebench_zh_datasets, needlebench_en_datasets from .datasets.needlebench.needlebench_32k.needlebench_single_32k import needlebench_zh_datasets, needlebench_en_datasets
from .summarizers.needlebench import needlebench_4k_summarizer as summarizer from .summarizers.needlebench import needlebench_32k_summarizer as summarizer
# eval Ancestral Tracing Challenge(ATC) # eval Ancestral Tracing Challenge(ATC)
# from .datasets.needlebench.atc.atc_choice_50 import needlebench_datasets # from .datasets.needlebench.atc.atc_0shot_nocot_2_power_en import needlebench_datasets
# from .summarizers.needlebench import atc_summarizer_50 as summarizer # ATC use default summarizer thus no need to import summarizer
datasets = sum([v for k, v in locals().items() if ('datasets' in k)], []) datasets = sum([v for k, v in locals().items() if ('datasets' in k)], [])
for m in internlm2_chat_7b: for m in internlm2_chat_7b:
m['max_seq_len'] = 30768 # 保证InternLM2-7B模型能接收到完整的长文本其他模型需要根据各自支持的最大序列长度修改。 m['max_seq_len'] = 32768 # 保证InternLM2-7B模型能接收到完整的长文本其他模型需要根据各自支持的最大序列长度修改。
m['max_out_len'] = 2000 # 保证在多针召回任务中能接收到模型完整的回答 m['max_out_len'] = 4096
models = internlm2_chat_7b models = internlm2_chat_7b