产品亮点
全面且可定制的RAG框架,集成检索器、重排序器、生成器和压缩器等核心组件,提供36个基准数据集和9种先进算法,辅以高效预处理脚本,简化流程,轻松实现复杂RAG场景下的模型测试与验证。
2. PaddleNLP: 超大Batch嵌入表示学习和多硬件高性能推理
PaddleNLP提供一站式大语言模型解决方案,支持超大Batch嵌入学习,多硬件高性能推理,涵盖了INT8/INT4量化技术,以及PageAttention、FlashDecoding等高效的注意力机制优化和TensorCore深度优化,从而大幅提升训练与推理效率,全方位满足多样化的应用需求。
3. FlashRAG & PaddleNLP:检索增强生成结合高性能推理,更准更快,提升用户体验
基于飞桨框架3.0版本,PaddleNLP内置了全环节算子融合等技术,使得FlashRAG推理性能相较于transformers动态图推理实现了70%以上的显著提升,结合检索增强知识,输出结果更加准确,为FlashRAG框架使用者带来了敏捷高效的使用体验。
FlashRAG-Paddle框架
全面且可定制的框架:包含RAG场景所需的核心组件,如检索器、重排序器、生成器和压缩器,可灵活组合成复杂的流程。
综合基准数据集:包含36个经过预处理的RAG基准数据集,用于测试和验证RAG模型的性能。
预实现的先进RAG算法:提供9种先进的RAG算法,可在不同设置下轻松复现结果。
高效的预处理阶段:通过提供各种脚本,如用于检索的语料库处理、检索索引构建以及文档的预检索,简化了RAG工作流程的准备工作。
检索器(Retriever):负责从知识库中检索与查询最相关的文档。FlashRAG支持使用embedding模型以及基于词项匹配的BM25方法等。
生成器(Generator):根据给定的文本(通常是查询和检索结果的拼接)生成最终的回复。框架支持使用各类LLM模型,并支持FastChat、vllm等加速方案。
重排器(Reranker):对检索结果进行重新排序,以进一步提升与查询的相关性。重排器分为交叉编码器和双塔编码器两种类型。
精炼器(Refiner):对输入的文本进行进一步的精炼和压缩,去除冗余信息。目前已支持抽取式、生成式、基于LLMLingua和基于Selective-Context的多种精炼器。
Sequential:顺序执行retriever、refiner、reranker、generator等组件,是最基础的RAG流程。
Conditional:通过judger模块判断不同类型的查询,并选择不同的执行路径。
Branching:并行执行多条路径,并将各路径的生成结果进行整合,代表工作如REPLUG、SuRe等。
Loop:通过迭代的方式交替执行retriever和generator,代表工作如Self-Ask、Self-RAG、FLARE、IRCoT等。
PaddleNLP:
超大Batch嵌入表示学习和多硬件高性能推理
助力检索增强生成
模型组网简化与参数多样:PaddleNLP通过统一分布式表示与自动并行技术,显著简化了组网开发的流程,减少了分布式核心代码量50%以上,结合多种并行策略Llama 3.1 405B等超大规模模型能够开箱即用。此外,PaddleNLP预置了80多个主流模型的训练、压缩、推理全流程方案,满足了不同应用场景下的多样化需求。
精调与对齐性能提升:借助飞桨框架独有的FlashMask高性能变长注意力掩码计算机制和Zero Padding零填充数据流优化技术,PaddleNLP有效减少了无效数据填充带来的计算资源浪费,显著提升了精调和对齐的性能。以Llama 3.1 8B模型为例,其性能相较于LLaMA-Factory方案实现了1.2倍的提升,单机即可轻松完成128K长文的SFT/DPO任务。
硬件适配广泛与高效:PaddleNLP基于飞桨插件式松耦合统一硬件适配方案(CustomDevice),仅需适配30余个接口即可实现大模型的基础适配,支持英伟达GPU、昆仑芯XPU、昇腾NPU、燧原GCU和海光DCU等多款主流芯片的大模型训练和推理。依托框架提供的多种算子接入模式和自动并行调优技术,PaddleNLP实现了框架与芯片间的软硬协同性能优化,为用户提供了更加高效、稳定的模型训练和推理体验。
超大Batch嵌入表示学习
其中 是第个文本和第个文本之间的余弦相似度, 是匹配样本的相似度。从公式中可以看出随着batch size的增大,模型能接触并学习更多负样本,进而提取出更具判别性的特征。因此在大模型训练过程中,需要更大的Batch提升模型性能。
PaddleNLP构建了大模型高性能推理方案,支持Llama 3.0、Llama 3.1、Mixtral等一系列大语言模型推理。当前支持技术包含:
Weight Only INT8及INT4推理,支持权重、激活、Cache KV进行INT8、FP8量化的推理;
注意力机制支持PageAttention、FlashDecoding等优化;
支持基于TensorCore深度优化。
特点二:多硬件大模型推理支持
在硬件支持方面,飞桨推理引擎展现出了强大的兼容性和灵活性。当前在支持完美支持英伟达GPU的基础上,还支持了国产及国际领先的AI芯片生态,包括昆仑XPU、昇腾NPU、海光DCU、燧原GCU、英特尔X86 CPU等多种硬件的大模型推理,不同硬件的推理入口保持统一,仅需修改device即可支持不同硬件推理。
PaddleNLP的这一特性强化了RAG在更广泛的多硬件环境下的部署场景,满足不同用户的多样化需求,推动RAG在更多实际业务中的应用与落地。
FlashRAG + PaddleNLP 快速打造RAG文档问答应用
RAG(检索增强生成)技术巧妙融合了信息检索与先进的生成模型,通过从丰富的外部知识库中精准检索相关信息,为大型语言模型提供强有力的回答辅助。这一创新技术充分发挥了信息检索的精准性与生成模型的创造力,能够自动生成既高质量又准确,同时紧密贴合上下文的文档总结。接下来,我们将为您详细介绍如何仅需三步,即可轻松构建RAG文档总结应用。
构建自己的语料数据库
步骤1:准备语料
jsonl
以下格式,{"id": "0", "contents": "contents for building index"}
{"id": "1", "contents": "contents for building index"}
更多语料制作细节,请前往链接查看。
https://github.com/RUC-NLPIR/FlashRAG-Paddle
步骤2:索引
python -m flashrag.retriever.index_builder \
--retrieval_method e5 \
--model_path intfloat/e5-base-v2/ \
--corpus_path indexes/sample_corpus.jsonl \
--save_dir indexes/ \
--use_fp16 \
--max_length 512 \
--batch_size 256 \
--pooling_method mean \
--faiss_type Flat
对于稀疏检索方法,基于Pyserini或bm25s,依据词频将语料构建为Lucene的倒排索引。
python -m flashrag.retriever.index_builder \
--retrieval_method bm25 \
--corpus_path indexes/sample_corpus.jsonl \
--bm25_backend bm25s \
--save_dir indexes/
步骤1: 配置检索模型和生成模型
# 定义一个配置字典,包含所有必要的设置
config_dict = {
"save_note": "demo", # 保存备注,用于标识这次配置
"model2path": { # 模型名称及其对应的路径
"e5": "intfloat/e5-base-v2", # 检索模型e5的路径
"llama3-8B-instruct": "meta-llama/Meta-Llama-3-8B-Instruct" # 生成模型llama3-8B-instruct的路径
},
"retrieval_method": "e5", # 指定使用的检索模型
"generator_model": "llama3-8B-instruct", # 指定使用的生成模型
"corpus_path": "indexes/general_knowledge.jsonl", # 知识库文件的路径,检索模型会从这里查找信息
"index_path": "indexes/e5_Flat.index", # 索引文件的路径,用于加速检索过程
}
# 使用配置字典和一个配置文件路径来初始化配置对象
config = Config("my_config.yaml", config_dict=config_dict)
步骤2: 定义对话模板
# 定义一个带有引用信息(reference)的系统提示,AI在回应时会参考这些信息
system_prompt_rag = (
"你是一个友好的AI助手。"
"像人类一样回应输入,如果输入中有指令,请遵循指令进行回应。"
"\n以下是一些提供的参考信息。你可以使用这些信息来回答问题。\n\n{reference}"
)
# 定义用户输入的基本模板,{question}会被实际的问题所替换
base_user_prompt = "{question}"
# 使用前面定义的配置和模板,创建一个带有引用信息的对话模板对象
prompt_template_rag = PromptTemplate(config, system_prompt=system_prompt_rag, user_prompt=base_user_prompt)
步骤3: 加载检索模型和生成模型
在配置好对话模板之后,接下来我们需要加载之前配置的检索模型和生成模型。这两种模型在PaddleNLP库中已经集成,所以我们可以直接调用它们,无需从头开始训练或编写复杂的代码。
# 根据配置加载检索模型,这是RAG用于从知识库中查找信息的模型
retriever = load_retriever(config)
# 根据配置加载生成模型,这是RAG用于生成输出的模型
generator = load_generator(config)
通过这段代码,RAG首先使用检索模型根据用户的查询找到最相关的文档。然后,它将这些文档信息整合到对话模板中,形成一个包含引用信息的输入提示。最后,使用生成模型根据这个输入提示来生成智能化的回应,并打印出来。
# 使用检索模型,根据用户的查询(query)来检索最相关的topk个文档
retrieved_docs = retriever.search(query, num=topk)
# 将检索到的文档信息整合到对话模板中,形成带有引用信息的输入提示
input_prompt_with_rag = prompt_template_rag.get_string(question=query, retrieval_result=retrieved_docs)
# 使用生成模型,根据带有引用信息的输入提示来生成回应
# 这里可以设置一些生成参数,如temperature控制生成的随机性,max_new_tokens控制生成的最大长度
response_with_rag = generator.generate(
input_prompt_with_rag, temperature=temperature, max_new_tokens=max_new_tokens
)[0]
# 打印生成的回应
print(response_with_rag)
总结
FlashRAG-Paddle这一工具包不仅有助于现有 RAG 技术的复现,还支持新方法的开发,更重要的是,它为基于国产硬件和软件的AI应用提供了更广泛、更灵活的开发和部署选项,从而推动了AI技术的自主创新和国产化进程。
FlashRAG和FlashRAG-Paddle的所有资源已开源,我们诚挚邀请国内外的研究人员和开发者使用、复现和贡献代码,共同推动RAG技术的发展和国产化进程!
FlashRAG论文链接
FlashRAG-Paddle 链接
PaddleNLP 链接
精彩课程预告
为了帮助您迅速且深入地了解FlashRAG-Paddle,中国人民大学高瓴人工智能学院与百度高级研发工程师将在12月3日(周二)19:00,为您详细解读FlashRAG-Paddle框架如何帮助研究人员高效地在RAG领域进行复现、基准测试和开发新算法。机会难得,立即扫描下方二维码预约吧!