Qanything 2 0项目部署启动手把手教程

Qanything 2.0项目部署启动手把手教程

文章转载自:https://www.feifeixu.top/article/4f3a3a70-a05d-47e3-a920-44cc86c39fba

😀 前言:
该项目是以debug的思想启动的,方便后期通过debug了解项目原理,如果想直接启动项目,可以一键运行项目根目录下的run.sh脚本文件。

项目要配置的东西很多,需要有一定的动手能力。

qanything_kernel/configs/model_config.py里面存放了项目需要的配置信息,启动服务的过程中需要修改这里面的配置。

Qanything 2.x版本和1.x版本的其中一个更新就是,在1.x中堆在一起的服务,改成了微服务的架构,将需要用到的很多功能作为服务单独提供出来了。

拿到这个项目,我们也不知道项目的启动入口文件在哪里,应该怎么启动。

  1. 阅读readme,可以看到项目根目录下面有一个run.sh的脚本文件

  2. 阅读这个.sh文件,所有的服务都被编排到了根目录下的docker-compose.yaml文件中,以linux版本为例,打开docker-compose-linux.yaml.

  3. docker-compose-linux.yaml中已经将服务编排好了,在这里面也可以看到依赖的一些镜像的版本、镜像依赖等。可以很方便的根据这个yaml的内容将容器服务启动起来。

  4. 其中qanything服务本身的配置如下:

    通过command可以看到执行的命令是bash scripts/entrypoint.sh

      qanything_local:
        container_name: qanything-container-local
        image: xixihahaliu01/qanything-linux:v1.5.1
        command: /bin/bash -c "cd /workspace/QAnything && bash scripts/entrypoint.sh"
        privileged: true
        shm_size: '8gb'
        volumes:
          - ${DOCKER_VOLUME_DIRECTORY:-.}/:/workspace/QAnything/
        ports:
          - "8777:8777"
        environment:
          - NCCL_LAUNCH_MODE=PARALLEL
          - GPUID=${GPUID:-0}
          - USER_IP=${USER_IP:-localhost}
        depends_on:
          standalone:
            condition: service_healthy
          mysql:
            condition: service_started
          elasticsearch:
            condition: service_healthy
        tty: true
        stdin_open: true
    
  5. 打开scripts/entrypoint.sh文件,有这样一段内容。包含启动rerank服务,embedding服务,ocr服务,pdf解析服务等。其中最后一条命令是python3 -u qanything_kernel/qanything_server/sanic_api.py 启动Qanything服务的核心命令,执行的是sanic_api.py这个文件。

echo "embedding和rerank服务将在CPU上运行"
nohup python3 -u qanything_kernel/dependent_server/rerank_server/rerank_server.py > /workspace/QAnything/logs/debug_logs/rerank_server.log 2>&1 &
PID1=$!
nohup python3 -u qanything_kernel/dependent_server/embedding_server/embedding_server.py > /workspace/QAnything/logs/debug_logs/embedding_server.log 2>&1 &
PID2=$!
nohup python3 -u qanything_kernel/dependent_server/pdf_parser_server/pdf_parser_server.py > /workspace/QAnything/logs/debug_logs/pdf_parser_server.log 2>&1 &
PID3=$!
nohup python3 -u qanything_kernel/dependent_server/ocr_server/ocr_server.py > /workspace/QAnything/logs/debug_logs/ocr_server.log 2>&1 &
PID4=$!
nohup python3 -u qanything_kernel/dependent_server/insert_files_serve/insert_files_server.py --port 8110 --workers 1 > /workspace/QAnything/logs/debug_logs/insert_files_server.log 2>&1 &
PID5=$!
nohup python3 -u qanything_kernel/qanything_server/sanic_api.py --host $USER_IP --port 8777 --workers 1 > /workspace/QAnything/logs/debug_logs/main_server.log 2>&1 &
PID6=$!

📝 项目配置

克隆代码

# 克隆代码到本地
git clone https://github.com/netease-youdao/QAnything.git

# 切换到tag v2.0.0
git checkout v2.0.0

环境配置

conda create -n xxx python=3.10
# 安装项目根目录提供的requirements.txt
pip install requirements.txt

项目的启动文件是sanic_api.py,存放在根目录/qanything_kernel/qanything_server下。直觉告诉我,我直接运行sanic_api.py一定会报错,但其实我也不知道项目缺少哪些依赖,我一般的做法是直接运行,哪里报错解决哪里。

通过上述分析,了解到,python3 -u qanything_kernel/qanything_server/sanic_api.py是项目的启动命令,在pycharm中这样配置一下,正常是script选择module,点击绿色的运行符号。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点了运行符号之后,会有第一个报错,找不到handler,修改源码第18行:

这是因为当前目录没有加入到python的sys.path中,找不到handler,一种方式你加一下,另一种方式修改成下面的代码样式,采用相对路径的方式导模块。

from .handler import *

接下来就是解决其他服务依赖以及配置问题了,大概也能猜到哪些地方会报错:

  1. embedding以及reranker的模型文件缺少
  2. mysql数据库配置
  3. milvus向量数据库配置
  4. 大模型问答接口配置,key的配置
  5. ocr服务配置

模型相关文件提供

首先第一个报错,找不到文件

 File "/tmp/pycharm_project_419/qanything_kernel/utils/general_utils.py", line 231, in <module>
    embedding_tokenizer = AutoTokenizer.from_pretrained(LOCAL_EMBED_PATH, local_files_only=True)
    raise EnvironmentError(
OSError: Incorrect path_or_model_id: '/tmp/pycharm_project_419/qanything_kernel/dependent_server/embedding_server/embedding_model_configs_v0.0.1'. Please provide either the path to a local folder or the repo_id of a model on the Hub.

Process finished with exit code 1
  1. 将有道bce-embedding模型的相关文件放置在qanything_kernel/dependent_server/embedding_server/embedding_model_configs_v0.0.1

    从huggingface或者modelscope下载都可以,这里贴一个modelscope的地址:https://modelscope.cn/models/netease-youdao/bce-embedding-base_v1
    下载命令:
    git clone https://www.modelscope.cn/netease-youdao/bce-embedding-base_v1.git

  2. 将有道bce-reranker模型相关文件放置在qanything_kernel/dependent_server/rerank_server/rerank_model_configs_v0.0.1

    下载命令:
    git clone https://www.modelscope.cn/netease-youdao/bce-reranker-base_v1.git

下面就是一些docker容器的启动了,可以参考官方给的docker-compose-linux.yaml的镜像版本和启动命令:https://github.com/netease-youdao/QAnything/blob/qanything-v2/requirements.txt,直接根据yaml起docker服务一了百了。下面是分开起的。

配置mysql数据库

第二个报错,mysql数据库连接不上

mysql.connector.errors.DatabaseError: 2005 (HY000): Unknown MySQL server host 'mysql-container-local' (-2)
[2024-09-13 19:03:05 +0800] [3147295] [ERROR] Not all workers acknowledged a successful startup. Shutting down.

现在已经步入容器化时代了,直接起mysql的docker容器。安装docker的过程自行google。

docker run --restart=always -d --name qanything-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.4.2

启动好之后在qanything_kernel/configs/model_config.py配置一下mysql的相关信息。

MYSQL_HOST_LOCAL = 'mysql-container-local'
MYSQL_PORT_LOCAL = 3306
MYSQL_USER_LOCAL = 'root'
MYSQL_PASSWORD_LOCAL = '123456'
MYSQL_DATABASE_LOCAL = 'qanything'

配置milvus向量数据库

如何安装参考:https://www.milvus-io.com/getstarted/standalone/install_standalone-docker

milvus服务启动好之后在model_config.py配置一下milvus的相关信息

KB_SUFFIX = '_240625'
MILVUS_HOST_LOCAL = '1.12.xxx.xxx'
MILVUS_PORT = 19530
MILVUS_COLLECTION_NAME = 'qanything_collection' + KB_SUFFIX

配置elasticsearch

es这里用的是7.x的版本,官方用的是8.x的,es一般用不到。

docker run --name elasticsearch -p 8081:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:7.17.7

es服务启动好之后在model_config.py配置一下es的相关信息

ES_URL = 'http://1.94.98.xxx:8081'
ES_USER = None
ES_PASSWORD = None
ES_TOP_K = 30
ES_INDEX_NAME = 'qanything_es_index' + KB_SUFFIX

服务启动成功

配置好这些之后,就没有其他报错了,说明服务已经启动起来了。尽管还有一些要用到的依赖服务没有配置,但是qanything的核心服务已经启动起来了,已经可以调用接口新建知识库、上传文件等操作了,其他一些服务用到了报错在修改就好了。

当然sanic_api中的端口号和workers数量可以根据需要修改,服务器公网暴露了8080端口,所以我改了端口号。

项目启动好之后,根据控制台的提示,浏览器打开http://ip:8080/qanything/就是Qanything的前端界面。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作为一名算法工程师,前端并不是我想要的,所以我会访问http://ip:8080/docs,可以看到接口文档信息,服务启动好之后打断点,debug每个接口,这一套操作下来,对于rag的原理也就吃透了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

🤗 总结归纳

对于这种微服务架构的服务,启动的核心过程就是解决各种服务的配置问题。

项目启动起来之后,接下来就可以愉快的玩耍了。debug的过程是理解Qanything以及RAG原理的核心过程,通过debug可以看到所有变量的值、可以看到一个请求进来之后这个项目的流转过程、可以看到一些很多介绍RAG的blog中忽略的细节信息。

📎 参考文章

OpenStack 部署是一个非常复杂的过程,需要掌握多种技术和工具。以下是一份 OpenStack 部署详细手把手教程,帮助你快速部署 OpenStack。 1. 准备环境 在开始部署 OpenStack 之前,你需要准备一组物理机或虚拟机,并且安装好 CentOS 7 操作系统。这些机器应该之间可以互相通信,你可以使用一个专用的管理网络。此外,你还需要为 OpenStack 分配 IP 地址和域名。 2. 安装必要的软件 在所有节点上安装必要的软件和工具,包括 Python、epel-release、yum-utils、git 等。你可以使用以下命令进行安装: ``` yum install -y python epel-release yum-utils git ``` 3. 安装 MariaDB 数据库 OpenStack 使用 MariaDB 数据库来存储数据,你需要在一个节点上安装 MariaDB,并且创建相应的数据库和用户。你可以使用以下命令进行安装: ``` yum install -y mariadb mariadb-server python2-PyMySQL systemctl enable mariadb systemctl start mariadb mysql_secure_installation ``` 在执行 `mysql_secure_installation` 命令时,你需要输入一个密码来保护你的数据库。 4. 安装 RabbitMQ 消息队列 OpenStack 使用 RabbitMQ 作为消息队列,你需要在一个节点上安装 RabbitMQ。你可以使用以下命令进行安装: ``` yum install -y rabbitmq-server systemctl enable rabbitmq-server systemctl start rabbitmq-server rabbitmqctl add_user openstack RABBIT_PASS rabbitmqctl set_permissions openstack ".*" ".*" ".*" ``` 在执行 `rabbitmqctl add_user` 命令时,你需要输入一个密码来保护你的 RabbitMQ 服务。在执行 `rabbitmqctl set_permissions` 命令时,你需要指定用户的权限。 5. 安装 Memcached 缓存服务 OpenStack 使用 Memcached 缓存服务来提高性能,你需要在所有节点上安装 Memcached。你可以使用以下命令进行安装: ``` yum install -y memcached python-memcached systemctl enable memcached systemctl start memcached ``` 6. 配置 OpenStack 源 在所有节点上配置 OpenStack 源,并且安装相应的软件包。你可以使用以下命令进行配置: ``` yum install -y centos-release-openstack-queens yum-config-manager --enable openstack-queens yum update ``` 7. 配置网络 OpenStack 需要使用 Neutron 网络服务来管理网络,你需要在所有节点上配置网络。具体的配置方法因环境而异,可以参考 OpenStack 的官方文档进行配置。 8. 安装 OpenStack 在所有节点上安装 OpenStack 相关的组件和服务。这个过程比较复杂,需要涉及到多个组件和配置文件。你可以参考 OpenStack 的官方文档进行安装和配置。 以下是一些常用的组件和服务: - Keystone:OpenStack 的身份认证服务,用于管理用户、角色和权限等。 - Glance:OpenStack 的镜像服务,用于管理虚拟机镜像。 - Nova:OpenStack 的计算服务,用于创建和管理虚拟机。 - Neutron:OpenStack 的网络服务,用于管理虚拟网络。 - Cinder:OpenStack 的存储服务,用于管理块存储。 - Swift:OpenStack 的对象存储服务,用于管理对象存储。 9. 验证 OpenStack 在 OpenStack 安装完成后,你需要对其进行验证,确保各个服务都能够正常工作。你可以使用 OpenStack 的 Dashboard 来进行验证,也可以使用命令行工具(如 nova、glance、neutron 等)进行验证。 以上是 OpenStack 部署详细手把手教程的大致步骤,具体的操作方法和步骤因环境而异,需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值