AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


DREAM:一个分布式RAG实验框架
发布日期:2024-04-28 16:39:06 浏览次数: 1766


本周的文章详细记录怎么从0到1搭建起一个分布式RAG实验框架(作者给它的框架起了个相当有吸引力的名字:DREAM,Distributed RAG Experimentation Framework的缩写,看起来稍微有点儿牵强,但是无伤大雅)。原PO链接小瑞放在文末了,有需求的小伙伴自取哦~



01.

DREAM是什么


DREAM是一个包含了Kubernetes原生架构和示例代码的框架,用于以分布式方式执行RAG实验、评估和跟踪。架构图如下:


该框架包含如下组件:



为了便于阅读,所有组件的相关地址,都放在文末的References部分了,请移步自取~

  • Ray:用于Kubernetes上的分布式计算,包括使用Ray Tune的实验和使用Ray作业的其他分布式任务

  • LlamaIndex:作为处理非结构化数据和执行高级RAG技术的框架

  • ragas:用于生成合成数据生成和进行LLM辅助(LLM-Assisted)评估

  • MinIO:用于存放非结构化数据、黄金数据集以及MLFlow工件

  • MLflow:作为实验跟踪器(PostgreSQL作为辅助数据库,MinIO用于存储)

  • Project Jupyter:作为针对Ray集群执行交互式实验的笔记本

  • Kubernetes:用作容器编排器

  • ArgoCD:用于将工具部署到Kubernetes集群上,并使用GitOps维护集群的状态


关于各组件的详细安装指导,请阅读:

https://github.com/aishwaryaprabhat/goku/blob/main/docs/installation_guide.md



02.

搭框架


第一步:获取完整的代码


代码仓库:https://github.com/aishwaryaprabhat/goku/tree/main/goku/dream



第二步:准备非结构化数据


详细步骤记录在此notebook中:

https://github.com/aishwaryaprabhat/goku/blob/main/goku/dream/1_Unstructued_Data_Preparation.ipynb


将如下链接中的PDF下载到本地:

https://github.com/AI-Maker-Space/DataRepository


然后使用boto3将这些PDF推送到MinIO。




第三步:分布式生成黄金数据集


使用下述链接中的Jypyter笔记本作为Ray驱动器,然后用Ray客户端来提交用于分布式创建黄金数据集的Ray作业:

https://github.com/aishwaryaprabhat/goku/blob/main/goku/dream/2_Distributed_Golden_Dataset_Creation.ipynb


每一个Ray任务上传至多3个PDF文件(从MinIO中),然后使用ragas框架的TestsetGenerator来生成合成测试数据。每个任务会返回一个包含合成数据的Pandas数据框(Dataframe)。


Ray驱动器(即上述Jypyter笔记本)会把返回的数据框合并起来,并将合并后的数据框转换为CSV文件,然后将CSV文件转储到MinIO。



流程示意图



第四步:分布式试验&评估


本次使用的示例代码中使用了:

  • 3种RAG方法(都是LlamaIndex的原生RAG方法):chunks with overlap、sentence window retrieval和automerging retrieval)

  • 两个LLM:gpt-3.5-turbo和gpt-4

  • 两个Embedding模型:text-embedding-3-small和text-embedding-3-large


评估时,使用了ragas 框架提供的一系列指标,包括 (忠实度)、(答案相关性)、(上下文精度)、(上下文召回率)、(答案正确性)和(答案相似度)。



步骤五:开始使用Ray Tune


把如下链接中的Jupyter笔记本作为Ray驱动器,使用Ray客户端来提交Ray Tune作业:

https://github.com/aishwaryaprabhat/goku/blob/main/goku/dream/3_Distributed_RAG_Experimentation_Evaluation.ipynb



调用Ray Tune遍历参数搜索空间的代码



该分布式实验和评估的核心是函数,它将所有辅助函数粘合在一起,从而达到运行主存储过程的目的。



函数的代码。


由于三种RAG方法的结构可能不同,在函数内部对它们进行参数化需要做一个工作:将RAG方法的Pipeline结构化在一个名为的辅助函数中,并使用字符串标识符来选择Pipeline。返回的输出是一个对象。



代码



Embedding模型和LLM的处理方法类似,我们使用字符串来识别预期的模型,并在函数内部调用辅助函数来初始化这些模型。



用于初始化模型的辅助函数的代码



当获得了对象之后,函数将调用辅助函数,代码非常简单。它使用根据黄金数据集推导出上下文和答案,然后使用ragas来评估计算指标。返回每个指标的得分字典,然后使用记录。



函数的代码



第六步:实验记录


最后,我们利用MLflow强大的实验跟踪功能记录实验结果,与黄金数据集建立联系,并可视化实验结果。以下是一系列屏幕截图:



把实验结果记录到MLFlow的代码




实验的表格视图




该平行坐标图展示了分布式RAG实验得到的不同组合及其在各类评估指标上的性能表现




另一个实验的表格视图



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询