(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.140.100: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.140.100: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.140.100: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.140.100:6006/api/v1/rerank",
"requestAuth": "sk-aaabbbcccdddeeefff"
}
]
重启 fastgpt,知识库使用重排能看到效果
[root@wuxshcstidt06716 fastgpt]# docker compose down
[root@wuxshcstidt06716 fastgpt]# docker compose up -d