使用说明
大数据分析——学期论文
本杰明·兰布赖特和皮尔罗斯·恩沃克
目标
运行一个简单的RAG风格的信息检索的比较——我们在PySpark上的课堂上是如何做的——与在Docker镜像上运行它来模拟一个简单MCP服务器的比较。
存储库布局(快速概览)
- README.md
- Dockerfile——我为云设置docker镜像的地方
- faiss_index/——在我切换到只使用TF-IDF之前,我使用拥抱脸的现成模型计算了faiss指数。不过,我无法让它在云端工作。
- ingest.py——当我使用FAISS时,该文件在云端无法运行
- client.py-客户端脚本,用于查询已在docker镜像上运行的嵌入空间
- cloudbuild.yaml-构建yaml文件,以便我可以在云终端中运行docker镜像
- query-cntrl.py-控件,assignment4的更简单版本
- query-mcp.py-用于在容器上嵌入文档的应用程序
- 需求.txt
重要说明
以下文件是折旧的(不用于最终草稿),但我保留了它们来向你们展示我的进度:
ingest.py, install-deps.sh名字里有“faiss”的任何东西
这 主要的 脚本是 query-cntrl.py 和 query-mcp.py。所有其他脚本都是支持脚本。有关更多详细信息,请参阅相关章节。
发展与环境(简称)
- 建议使用Python 3.8+。
- 安装依赖项:pip Install-r requirements.txt
- 使用Docker实现可重复运行时(请参阅Docker/Dockerfile)。
query-cntrl.py(占位符)
目的:
- 与任务4类似,使用TF-IDF和PySpark来解析和分块文档并获取嵌入。然后,我使用共符号相似性来查询这些嵌入。
在这里记录什么:
- 您应该能够使用我们的虚拟txt文件在至少有4个节点的集群上运行此程序
- 输入:我们的虚拟txt文件
- 输出:输出结果的路径
- 依赖关系:Pyspark
理想情况下,我会继续使用Huggingface的模型进行最先进的嵌入,然后查询LLM,但经过几个小时的尝试,我们似乎缺乏访问需要互联网的GCP依赖项的权限(因此在这种情况下,下载LLM等模型的权重以在GCP上使用)
docker/Dockerfile
目的:
- 用于可再现地运行组件和模拟基本MCP服务器的容器映像,有关更多详细信息,请参阅再现MCP。
query-mcp.py(占位符)
目的:
- 创建了一个基本的应用程序,它有效地完成了与控件相同的事情,只有检索端被包裹在API调用中,因此我们可以不断地进行新的调用。理论上,您可以向其中添加更多命令来保存结果,以便将其用于其他用途,或者只将其保存在数据库中。
笔记: 我在云中的Docker镜像上使用PySpark时遇到了问题,可能是因为计算问题,但我不是100%确定。学习如何在GCP的Dataproc上构建docker镜像是非常具有挑战性的,所以我必须尽可能地简化它。这就是为什么这个版本甚至不使用PySpark的原因,但它也有助于比较理论上可能是快速的PySpark应用程序与可能较慢的容器化服务器,后者允许您对请求做更多的事情。
复制MCP
下面总结了使用Google Cloud Build和Docker将FastAPI RAG服务器部署到集群上的步骤。
第一阶段:准备和图像构建(通过GCP Cloud Shell)
初始环境设置和图像创建是从Google Cloud Shell终端处理的。你必须把这个放到网站上。
文件上传
所有必需的文件都已上传到Cloud Shell工作目录。GCP中有一个将文件上传到终端的选项:
Dockerfilequery-mcp.pyrequirements.txtcloudbuild.yamlAlices-Adventures-in-Wonderland-by-Lewis-Carroll.txt
添加所有这些后,您可以执行以下命令:
gcloud builds submit --config cloudbuild.yaml --project assignment-4-475110
由此,您应该能够在项目的工件注册中找到作为存储库的图像。单击路径并复制路径。
阶段2:部署和执行(通过SSH到主节点)
构建映像后,启动一个集群,并通过SSH连接到该集群的主节点。
SSH访问
集群的主节点是通过SSH访问的。
停止过期集装箱
在运行新映像之前,之前失败的容器被强制停止并删除(如果有的话):
sudo docker rm -f rag-server
运行新映像
容器以分离模式启动,显式使用最新的图像标签并将容器的端口8080绑定到主节点的端口8080:
sudo docker run \
--detach \
--publish 8080:8080 \
--name rag-server \
<IMAGE_URI>:<TAG>
阶段3:测试和查询实时服务
一旦容器开始运行(docker ps 显示状态为Up),引入我们的客户端脚本运行并实际执行查询。
客户端脚本创建
一个简单的Python客户端脚本(client.py)使用创建 nano:
nano client.py
您只需从github复制并粘贴客户端脚本,然后将其放在此处运行。可能有更好的方法,但这是我发现有效的方法。
执行
最后,您只需运行客户端脚本!
python client.py
# URL: http://localhost:8080/rag
备注
- 作者:本杰明·兰布赖特
