(RAG 系列)重排序模型部署以及接入 fastgpt 平台

重排序模型部署以及接入 fastgpt 平台

背景

限制要求

在服务器(无外网)部署重排序模型,需要从 windows 本地拉取镜像上传到服务器;

传输过程中有文件大小限制,需要作拆分;

版本对应的问题

fastgpt : v4.6.7
rerank 模型镜像 :luanshaotong/reranker:v0.1

fastgpt : v4.8.10
rerank 模型镜像 :registry.cn-hangzhou.aliyunccs.com/fastgpt/bge-rerank-base:v0.1

PS:其他如果尝试不兼容可以去看 GitHub 官网项目 具体版本的源码 rerank 部分文档或者改源码

备注

只看操作步骤的可以跳过过程分析部分,直接拉到结论部分

过程

1、(windows 本地下)

docker pull 拉取 registry.cn-hangzhou.aliyunccs.com/fastgpt/bge-rerank-base:v0.1,

docker pull registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1

然后用 docker save 保存镜像为 tar 文件,

docker save -o D:\rerank.tar registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1

直接用工具解压,手动做镜像文件拆分,分别上传到服务器再手动合并

(服务器下)

压缩成 tar 文件,

tar -cvf rerank.tar rerank

但是直接 docker load 报错

docker load -i /root/xi_deploy/rerank.tar
open /var/lib/docker/tmp/docker-import-015081684/rerank/json: no such file or directory

采用 cat 方法可以导入

cat /root/xi_deploy/rerank.tar | docker import - registry.cn-hangzhou.aliyunccs.com/fastgpt/bge-rerank-base:v0.1

docker images 也能看到镜像

docker images

但是 dokcer run 启动失败

docker run -d -it --name reranker -p 6006:6006 -e ACCESS_TOKEN=sk-aaabbbcccdddeeefff registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1
docker: Error response from daemon: No command specified.
See 'docker run --help'.

尝试添加启动命令还是失败,没有启动脚本文件,怀疑是镜像本身存在问题

docker run -d -it --name reranker -p 6006:6006 -e ACCESS_TOKEN=sk-aaabbbcccdddeeefff registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1 /bin/sh -c 'python3 app.py'
5051c0d3871ad6a5f9bfa21d647d64054c87bf1dd2c8ec0009fce794e0d
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/bin/sh": stat /bin/sh: no such file or directory:
unknown.

2、排查镜像问题:

(1) 推测—— windows 环境下的 docker 镜像在 linux 下不能运行,但是告知 windows 下 docker 采用 WSL (在 windows 上就可以运行本来只能在 linux 下运行的各种软件和应用程序)打包的镜像就是适用于 linux 环境的

(2) 推测——拆分方法有误,不能直接拆分,于是使用 split 命令作拆分

(windows 本地下)

打开 git 使用 split 命令对镜像切分成合适大小(一个 2G),文件 7G 多

split -b 2048m rerank.tar "split_file_"

(服务器下)

分别传输到服务器,再使用 cat 命令合并分块

cat split_file_aa split_file_ab split_file_ac split_file_ad > rerank.tar

并用 md5sum 校验上传前后的文件,确认无误

md5sum rerank.tar > rerank.md5

采用 docker load 成功保存镜像

[root@wuxshcstidt06716 xi_deploy]# docker load -i /root/xi_deploy/rerank.tar

并用 docker run 能够成功运行

docker run -d --name reranker -p 6006:6006 -e ACCESS_TOKEN=sk-aaabbbcccdddeeefff  registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1

本地 curl 测试成功,能看到返回结果,说明模型部署成功

curl -X 'POST' 'http://10.32.xx.xx:6006/v1/rerank' -H 'Authorization: Bearer sk-aaabbbcccdddeeefff' -H 'Content-Type: application/json' --data '{"query": "who are you","documents": ["I want to go to sleep", "I am Bob","Today is Friday"]}'

说明是镜像拆分有问题

3、将模型接入 fastgpt

更改 fastgpt 配置文件

"reRankModels": [
        {
            "model": "bge-reranker-base",
            "name": "reranker", 
            "charsPointsPrice": 0,
            "requestUrl": "http://10.32.xx.xx:6006/v1/rerank",
            "requestAuth": "sk-aaabbbcccdddeeefff"
        }
    ]

重启 fastgpt,知识库使用重排没有看到效果,查看 reranker 容器日志有报错,模型没有正常返回

报错:
object of type 'NoneType' has no len()
INFO:    172.17.0.1:36218 - "POST /v1/rerank HTTP/1.1" 200 OK

4、分析报错,要么是配置没改对,要么是 rerank 模型版本跟 fastgpt 版本不匹配。前者确认没问题,后者需要提高 fastgpt 版本或者找到适配 fastgpt 的 rerank 模型版本(该 rerank 模型版本在我 windows 本地的高版本 fastgpt 是可以使用的)。

(1) 提高 fastgpt 版本——①一步步升级版本,但是考虑服务器环境并不能直接拉取镜像,需要把数据做迁移,迁移完版本升级后再搬到服务器上面;
②放弃知识库数据,直接拉取新版本镜像搬到服务器;

(2) 找到适配 fastgpt 的 rerank 模型版本;

(1)方案成本的比较高,失败不容易恢复;(2)方案可能需要多一些尝试,相对安全简单,先考虑该方案去解决;

5、尝试另一个镜像 registry.cn-hangzhou.aliyuncs.com/fastgpt/rerank:v0.2,但是失败。

查看 fastgpt v4.6.7 版本的源码 rerank.md 文件,其中就有相关的 rerank 模型部署。

上传镜像 luanshaotong/reranker:v0.1

更改 fastgpt 配置文件

"reRankModels": [
        {
            "model": "bge-reranker-base",
            "name": "reranker", 
            "charsPointsPrice": 0,
            "requestUrl": "http://10.32.xx.xx100:6006/api/v1/rerank",
            "requestAuth": "sk-aaabbbcccdddeeefff"
        }
    ]

重启 fastgpt,知识库使用重排能看到效果

[root@wuxshcstidt06716 fastgpt]# docker compose down 
[root@wuxshcstidt06716 fastgpt]# docker compose up -d

!g-emlTurzo-1728972473596)

结论

(windows 本地下)

docker pull 拉取 ,

docker pull luanshaotong/reranker:v0.1

然后用 docker save 保存镜像为 tar 文件,

docker save -o D:\rerank.tar luanshaotong/reranker:v0.1

打开 git 使用 split 命令对镜像切分成合适大小(一个 2G),文件 7G 多

split -b 2048m rerank.tar "split_file_"

(服务器下)

分别传输到服务器,再使用 cat 命令合并分块

cat split_file_aa split_file_ab split_file_ac split_file_ad > rerank.tar

并用 md5sum 校验上传前后的文件,确认无误

md5sum rerank.tar > rerank.md5

采用 docker load 成功保存镜像

docker load -i /root/xi_deploy/rerank.tar

并用 docker run 能够成功运行

docker run -d --name reranker -p 6006:6006 -e ACCESS_TOKEN=sk-aaabbbcccdddeeefff luanshaotong/reranker:v0.1

更改 fastgpt 配置文件 config.json

"reRankModels": [
        {
            "model": "bge-reranker-base",
            "name": "reranker", 
            "charsPointsPrice": 0,
            "requestUrl": "http://10.32.xx.xx:6006/api/v1/rerank",
            "requestAuth": "sk-aaabbbcccdddeeefff"
        }
    ]

重启 fastgpt,知识库使用重排能看到效果

[root@wuxshcstidt06716 fastgpt]# docker compose down 
[root@wuxshcstidt06716 fastgpt]# docker compose up -d
### RAG模型中的文本重排序技术 在RAG(Retrieval-Augmented Generation)模型中,文本重排序是一个重要的环节,其目的是优化生成的文档结构,使其更加连贯和逻辑清晰。通常情况下,这种操作涉及自然语言处理领域内的多种技术和工具。 #### 文本重排序的核心概念 文本重排序可以被理解为一种排列组合问题,在此过程中,输入片段会被重新安排顺序以形成更流畅的叙述[^1]。为了实现这一目标,研究人员常采用基于机器学习的方法或者依赖于预定义规则的技术栈。 #### 常见的文本重排序方法 以下是几种常见的文本重排序方法: 1. **序列到序列模型 (Seq2Seq Models)** 使用编码器-解码器架构来捕捉上下文关系并预测最佳次序。例如Transformer-based models能够很好地建模长距离依赖项,从而改善最终输出质量。 2. **图神经网络 (Graph Neural Networks, GNNs)** 将句子视为节点构建语义图谱,通过分析边权重决定最优路径即理想的文章布局方式。这种方法特别适用于多段落级别的重组任务。 3. **强化学习框架下的策略优化** 利用奖励信号指导代理选择最合适的动作——交换两个相邻部分的位置直到整体达到满意状态为止。此类算法可能需要大量训练数据以及精心设计的目标函数才能取得良好效果。 #### 实现这些功能的相关库推荐 对于希望实践上述理论的研究者来说,下面列举了一些流行的开源项目可供参考: - PyTorch 和 TensorFlow 提供了强大的支持创建复杂的深度学习管道; - Hugging Face Transformers 库包含了众多经过微调后的大型语言模型实例可以直接应用于各种NLP子域之中; - AllenNLP 是另一个专注于研究级应用开发平台,其中也涵盖了丰富的示例代码帮助开发者快速上手。 ```python from transformers import pipeline reorder_pipeline = pipeline('text-generation', model="facebook/bart-large-cnn") def reorder_text(text_segments): reordered_output = reorder_pipeline(" ".join(text_segments)) return reordered_output[0]['generated_text'] ``` 以上展示了一个简单的例子利用BART模型来进行基本形式上的调整尝试。当然实际部署时还需要考虑更多细节因素如性能瓶颈等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小白_鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值