LMFlow 基准测试指南#

我们仓库支持两种添加评估设置的方式:NLL Task SettingLM-Evaluation Task Setting。以下是它们的详细信息:

1. NLL任务设置#

用户可以轻松创建新任务,并在提供的nll (Negative Log Likelihood)指标上评估他们的数据集。

安装#

Fork主仓库,克隆它,并创建一个以你任务名称命名的新分支,然后安装以下内容:

# After forking...
git clone https://github.com/<YOUR-USERNAME>/LMFlow.git
cd LMFlow
git checkout -b <TASK-NAME>
conda create -n lmflow python=3.9 -y
conda activate lmflow
conda install mpi4py
pip install -e .

创建您的任务数据集文件#

运行后,我们在data目录下提供了多个可用数据集

cd data && ./download.sh && cd -

您可以参考一些给定的评估数据集文件并创建自己的数据集。 同时,您也可以查阅我们的 DATASET指南。

在这一步中,您需要确定您的回答类型,如text2texttext_only(请注意当前的nll实现仅支持这两种回答类型)。我们将选定的回答类型记为

准备好你自己的DATASET文件后,可以将其放入data目录下,并创建一个TASK目录。

mkdir <TASK>
mv <DATASET> <TASK>

任务注册#

请注意您的数据集路径,data//

打开文件 examples/benchmarking.py,将您的任务信息添加到 LOCAL_DATSET_GROUP_MAPLOCAL_DATSET_MAPLOCAL_DATSET_ANSWERTYPE_MAP

LOCAL_DATSET_MAP中,您需要指定DATASET文件的路径:

LOCAL_DATSET_MAP ={
    "...":"...",
    "<TASK>":"data/<TASK>/<DATASET>",
}

LOCAL_DATSET_ANSWERTYPE_MAP中,您需要指定任务的

LOCAL_DATSET_ANSWERTYPE_MAP ={
    "...":"...",
    "<TASK>":"<ANSWER_TYPE>,
}

如果只有一个任务,你可以在LOCAL_DATSET_GROUP_MAP中添加类似"":""的键值对:

LOCAL_DATSET_GROUP_MAP ={
    "...":"...",
    "<TASK>":"<TASK>",
}

如果想组合多个任务,可以先指定一个组合名称,然后在LOCAL_DATSET_GROUP_MAP中添加类似"":",,.."的键值对。

请记得用,分隔任务:

LOCAL_DATSET_GROUP_MAP ={
    "...":"...",
    "<TASK_COMBINATION>":"<TASK_1>,<TASK_2>,..",
}

完成这些项目的修改后,您可以运行自己的例如:

deepspeed examples/benchmarking.py \
  --answer_type <ANSWER_TYPE> \
  --use_ram_optimized_load False \
  --model_name_or_path ${model_name} \
  --dataset_name data/<TASK>/<DATASET>\
  --deepspeed examples/ds_config.json \
  --metric nll \
  --prompt_structure "###Human: {input}###Assistant:" \
  | tee ${log_dir}/train.log \
  2> ${log_dir}/train.err 

2. LM评估任务设置#

我们将EleutherAI/lm-evaluation-harness集成到 benchamrk.py中,通过直接执行评估命令。用户 也可以通过简单地修改examples/benchmarking.py的两个项目来使用他们自己的评估。

请参考Eleuther的 task-table 获取确切的名称。

同样地,您可以组合多个任务,首先指定一个组合名称,然后在LM_EVAL_DATASET_MAP中添加类似"":",,.."的键值对。

同时,请记得用,分隔任务:

LM_EVAL_DATASET_MAP ={
    "...":"...",
    "<TASK_COMBINATION>":"<TASK_1>,<TASK_2>,..",
}