RUC-NLPIR / FlashRAG

⚡FlashRAG: A Python Toolkit for Efficient RAG Research
https://arxiv.org/abs/2405.13576
MIT License
891 stars 69 forks source link

复现论文结果遇到的一些问题 #40

Open LiyiLily opened 2 weeks ago

LiyiLily commented 2 weeks ago

首先感谢作者开源代码,便于对不同方法的公平比较。最近我在尝试运行“FlashRAG/examples/methods/run_exp.py”文件,部分方法根据指南可以直接、或简单修改后运行成功,以下方法遇到一些问题希望可以帮助解答:

  1. LongLLMLingua 和 RECOMP-abstractive 方法out of memory,多次运行发现该问题出现的时间不固定,有时是在加载模型时、有时可以顺利加载模型但在Processed prompts时又报错。我的实验环境用的4张24G的4090,不清楚是不是该硬件环境不支持。

  2. Ret-Robust和flare运行报错 Ret-Robust报错如下: image

flare报错如下: image

查看发现,检索返回的doc_item是字典组成的列表,而不是单一字典

  1. REPLUG 运行报错,参数异常 image branching_pipeline.py line 19:self.generator = get_generator(config, model=model) 而 VLLMGenerator 中 只声明了config,缺少参数model
ignorejjj commented 2 weeks ago

你好, 感谢对我们工作的关注。

  1. LongLLMLingua和RECOMP需要额外运行一个模型,会占用部分显存,可能会导致generator生成的时候出现显存不足的情况。我们更新了代码,在用完refiner之后直接进行删除,释放占用的显存,应该能解决这个问题。(see 590516875421254b08656562895a6426d76ce2a9)
  2. 使用的貌似是旧代码,更新成最新代码就行
  3. replug要修改generator生成logit的逻辑,暂时不支持使用vllm框架,可以换成
LiyiLily commented 1 week ago

@ignorejjj 感谢您的回复,我已下载最新版本代码,但之前的问题仍然存在。

  1. LongLLMLingua 和 RECOMP-abstractive 方法使用4张24G的4090仍然会报out of memory,我查看了LongLLMLingua 原论文实验环境是 一张32GB Tesla V100。
  2. Ret-Robust和flare运行报错,使用最新版代码依旧存在该问题
  3. ”REPLUG 运行报错,参数异常“问题,您的回复我这里显示不全,只看到不支持使用vllm框架,请问您论文中使用的是'hf'还是'fschat'?

此外,关于论文结果复现,我还遇到以下两点问题:

  1. 论文汇报了Naive Generation和Standard RAG,代码中提供zero-shot和naive模式,请问论文中的Standard RAG是否对应代码中的naive、论文中的Naive Generation是否对应代码中的zero-shot?
  2. 我使用最新版本代码,并根据“Guidelines for Reproduction Methods”和“Implementation Details for Benchmarking Experiments”两个文档修改代码,发现大部分实验结果无法复现出论文汇报的结果(yaml文件中的参数均为您提供的默认值、随机种子固定,同时我按照指南修改代码,测试1000条数据)。 例如论文汇报AAR-Contriever-KILT在nq数据集em值0.301,我跑出的结果是0.27; Iter-RetGen | ITRG在nq数据集em值0.368,我跑出来的结果是0.33,其余数据集和能跑通的方法也普遍存在该问题。 请问如何才能复现论文结果呢?
ignorejjj commented 1 week ago

你好,感谢提出的问题。我在最新的代码上进行了一些实验:

  1. longllmlingua使用的摘要模型和generator模型一起运行会占用约30G显存. 我对代码逻辑进行了优化,使用完refiner之后再加载generator,显存占用可以控制在18G左右,拉取最新代码应该可以实现
  2. 我在各种设置下测试了一下flare和ret-robust两种方法,均能正确运行。如果仍然有问题,能否贴出代码片段方便定位问题。
  3. replug使用的是fschat框架
  4. 抱歉这里表述有点重复,standard rag对应naive,naive对应zero-shot
  5. 如果是方法中普遍的结果比论文汇报的低,请检查下面几个方面是否一致: (1) 检索的文档使用的是我们在huggingface仓库提供的文档,建立index时max_length设置为512,并开启了fp16。 (2) 生成模型设置do_sample=False (3) 测试数据选取的是前1000条数据,没有开启random_sample (4) 可以尝试分别使用vllm和fschat两个框架进行测试,不同机器上这两个结果可能有差异

如果仍然有问题,可以将intermediate_data.json以及config.yaml发我邮箱来具体看一下差异(邮箱: jinjiajie@ruc.edu.cn)