From 0291b00bc50aca15b42d06b897937b11bea9d716 Mon Sep 17 00:00:00 2001 From: ylzhangah <1194926515@qq.com> Date: Mon, 9 Sep 2024 17:28:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E7=BD=B2=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E3=80=81=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E3=80=81?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=B7=A5=E5=85=B7=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...50\347\275\262\346\214\207\345\215\227.md" | 194 +++++++++++++----- ...50\347\275\262\346\214\207\345\215\227.md" | 165 ++++++++++----- euler-copilot-helm/chart/values.yaml | 30 +-- euler-copilot-helm/scripts/download_file.sh | 22 +- 4 files changed, 284 insertions(+), 127 deletions(-) diff --git "a/docs/EulerCopilot\346\227\240\347\275\221\347\273\234\347\216\257\345\242\203\344\270\213\351\203\250\347\275\262\346\214\207\345\215\227.md" "b/docs/EulerCopilot\346\227\240\347\275\221\347\273\234\347\216\257\345\242\203\344\270\213\351\203\250\347\275\262\346\214\207\345\215\227.md" index 3343dc77e..e95d5e6ae 100644 --- "a/docs/EulerCopilot\346\227\240\347\275\221\347\273\234\347\216\257\345\242\203\344\270\213\351\203\250\347\275\262\346\214\207\345\215\227.md" +++ "b/docs/EulerCopilot\346\227\240\347\275\221\347\273\234\347\216\257\345\242\203\344\270\213\351\203\250\347\275\262\346\214\207\345\215\227.md" @@ -21,33 +21,38 @@ EulerCopilot是一款智能问答工具,使用EulerCopilot可以解决操作 | 类型 | 版本要求 | 说明 | |------------| -------------------------------------|--------------------------------------| | 操作系统 | openEuler 22.03 LTS及以上版本 | 无 | -| K3s | >= v1.29.0,带有Traefik Ingress工具 | K3s提供轻量级的 Kubernetes集群,易于部署和管理 | -| Docker | >= v25.4.0 | Docker提供一个独立的运行应用程序环境 | -| Helm | >= v3.14.4 | Helm是一个 Kubernetes的包管理工具,其目的是快速安装、升级、卸载Eulercopilot服务 | +| K3s | >= v1.30.2,带有Traefik Ingress工具 | K3s提供轻量级的 Kubernetes集群,易于部署和管理 | +| Helm | >= v3.15.3 | Helm是一个 Kubernetes的包管理工具,其目的是快速安装、升级、卸载Eulercopilot服务 | | python | >=3.9.9 | python3.9.9以上版本为模型的下载和安装提供运行环境 | ### 硬件要求 -| 类型 | 硬件要求 | -|----------------| -----------------------------| -| 服务器 | 1台 | +| 类型 | 硬件要求 | +|----------------| ----------------------------| +| 服务器 | 1台 | | CPU | 鲲鹏或x86_64,>= 32 cores | | RAM | >= 64GB | | 存储 | >= 500 GB | | GPU | Tesla V100 16GB,4张 | -| NPU | 910ProB、910B | +| NPU | 910B | 注意: -1. 若无GPU或NPU资源,建议通过调用openai接口的方式来实现功能。(接口样例:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions) -2. 调用openai接口的方式不需要安装高版本的docker(>= v25.4.0)、python(>=3.9.9) +1. 若无GPU或NPU资源,建议通过调用第三方openai接口的方式来实现功能。(接口样例:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions) 参考链接[API-KEY的获取与配置](https://help.aliyun.com/zh/dashscope/developer-reference/acquisition-and-configuration-of-api-key?spm=a2c4g.11186623.0.0.30e7694eaaxxGa)) +2. 调用第三方openai接口的方式不需要安装python (>=3.9.9) +3. 英伟达GPU对Docker的支持必需要新版本Docker(>= v25.4.0) ### 部署视图 ![EulerCopilot部署图](./pictures/EulerCopilot部署视图.png) ## 获取EulerCopilot -- 从EulerCopilot的官方Git仓库[EulerCopilot](https://gitee.com/openeuler/EulerCopilot)下载最新的部署仓库 +- 从EulerCopilot的官方Git仓库[euler-copilot-framework](https://gitee.com/openeuler/euler-copilot-framework)下载最新的部署仓库 - 如果您正在使用Kubernetes,则不需要安装k3s工具。 +```bash +# 下载目录以home为例 +cd /home +git clone https://gitee.com/openeuler/euler-copilot-framework +``` ## 环境准备 如果您的服务器、硬件、驱动等全部就绪,即可启动环境初始化流程,以下部署步骤在无公网环境执行。 @@ -80,17 +85,26 @@ EulerCopilot是一款智能问答工具,使用EulerCopilot可以解决操作 setenforce 0 ``` ### 2. 文件下载 -- 模型文件下载 - - 需要下载模型文件bge-reranker-large、bge-mixed-model和分词工具text2vec-base-chinese-paraphrase - - bge-mixed-model下载链接:[https://eulercopilot.obs.cn-east-3.myhuaweicloud.com/models/bge-mixed-model.rar] - - bge-reranker-large下载链接: [https://eulercopilot.obs.cn-east-3.myhuaweicloud.com/models/bge-reranker-large.rar] - - text2vec-base-chinese-paraphrase下载链接:[https://eulercopilot.obs.cn-east-3.myhuaweicloud.com/models/text2vec-base-chinese-paraphrase.rar] +- 模型文件bge-reranker-large、bge-mixed-model下载 [模型文件下载链接](https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/) + ```bash + mkdir -p /home/EulerCopilot/models + cd /home/EulerCopilot/models + # 将需要下载的bge文件放置在models目录 + wget https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/bge-mixed-model.tar.gz + wget https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/bge-reranker-large.tar.gz + ``` +- 下载分词工具text2vec-base-chinese-paraphrase [分词工具下载链接](https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/) + ```bash + mkdir -p /home/EulerCopilot/text2vec + cd /home/EulerCopilot/text2vec + wget https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/text2vec-base-chinese-paraphrase.tar.gz + ``` - 镜像包下载 - - arm架构或x86架构的EulerCopilot服务的各组件镜像下载地址单独提供 + - x86或arm架构的EulerCopilot服务的各组件镜像单独提供 ### 3. 安装部署工具 #### 3.1 安装docker -如需要基于GPU/NPU部署大模型,需要检查docker版本是否满足>= v25.4.0 ,如不满足,请升级docker版本 +英伟达GPU环境对Docker的支持必需要新版本Docker(>= v25.4.0),需要检查docker版本是否满足,如不满足,请升级docker版本,其余环境不需要升级docker版本。 #### 3.2 安装K3s并导入镜像 - 安装SELinux配置文件 @@ -134,16 +148,22 @@ EulerCopilot是一款智能问答工具,使用EulerCopilot可以解决操作 ``` #### 3.3 安装Helm工具 -以当前的最新版本“3.15.0”、x86_64架构为例,运行如下命令: +- x86_64架构 ```bash wget https://get.helm.sh/helm-v3.15.0-linux-amd64.tar.gz tar -xzf helm-v3.15.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/sbin rm -rf linux-amd64 ``` +- arm64架构 + ```bash + wget https://get.helm.sh/helm-v3.15.0-linux-arm64.tar.gz + tar -xzf helm-v3.15.0-linux-arm64.tar.gz + mv linux-arm64/helm /usr/sbin + rm -rf linux-arm64 + ``` #### 3.4 大模型准备 -提供openai接口或根据硬件型号进行大模型部署,GPU服务器可参考附录的相关指令进行部署, -NPU910B可参考[stable-diffusionxl模型-推理指导](https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/ACL_PyTorch/)built-in/foundation_models/stable_diffusionxl)进行部署。 +提供第三方openai接口或基于硬件本都部署大模型,本地部署大模型可参考附录部分。 ## EulerCopilot安装 @@ -151,50 +171,52 @@ NPU910B可参考[stable-diffusionxl模型-推理指导](https://gitee.com/ascend ### 1. 编辑配置文件 ```bash -# 进入EulerCopilot仓库目录,该目录包含文档目录和Helm安装配置文件目录 -root@openeuler:~# cd /home/EulerCopilot -root@openeuler:/home/EulerCopilot# ll +# 下载目录以home为例,进入euler-copilot-framework仓库的Helm配置文件目录 +root@openeuler:~# cd /home/euler-copilot-framework +root@openeuler:/home/euler-copilot-framework# ll total 28 drwxr-xr-x 3 root root 4096 Aug 28 17:45 docs/ drwxr-xr-x 5 root root 4096 Aug 28 17:45 euler-copilot-helm/ - -# 进入Helm配置文件目录 -root@openeuler:/home/EulerCopilot# cd euler-copilot-helm/chart -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart# ll +root@openeuler:/home/euler-copilot-framework# cd euler-copilot-helm/chart +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# ll total 28 -rw-r--r-- 1 root root 135 Aug 28 17:45 Chart.yaml drwxr-xr-x 10 root root 4096 Aug 28 17:55 templates/ -rw-r--r-- 1 root root 6572 Aug 30 12:05 values.yaml -# 编辑values.yaml配置文件 -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart# vim values.yaml +# 编辑values.yaml配置文件, 请结合注释部分进行修改 +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# vim values.yaml # 注意事项: # - 修改domain为服务器的实际IP地址。 # - 更新OpenAI的URL、Key、Model和Max Token为部署所需的值。 # - 根据实际部署情况,更新vectorize、rag、framework中的BGE模型路径、文档向量化和分词工具路径。 - # - 如需在内网环境中修改Traefik配置以转发端口,请继续下一步。 -# 进入SSL配置目录,准备修改Traefik配置 -root@openeuler:/home/EulerCopilot/euler-copilot-helm# cd chart_ssl/ -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart_ssl# ll +# 1. 进入SSL配置目录 +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm# cd chart_ssl/ +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart_ssl# ll total 20 -rw-r--r-- 1 root root 250 Aug 28 17:45 traefik-config.yml -rw-r--r-- 1 root root 212 Aug 28 17:45 traefik-secret.yaml -rw-r--r-- 1 root root 175 Aug 28 17:45 traefik-tlsstore.yaml -# 修改traefik-config.yml以转发HTTPS端口(如果需要) -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart_ssl/# vim traefik-config.yml +# 2. 修改traefik-config.yml以转发HTTPS端口(如果需要) +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart_ssl/# vim traefik-config.yml # 修改部分示例: # websecure: # exposedPort: 8080 # 将此处的端口号修改为期望转发的HTTPS端口 -# 应用修改后的Traefik配置 -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart_ssl/# kubectl apply -f traefik-config.yml +# 3. 应用修改后的Traefik配置 +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart_ssl/# kubectl apply -f traefik-config.yml ``` + ### 2. 安装EulerCopilot ```bash -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart_ssl/# cd ../chart -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart# kubectl create namespace -n euler-copilot -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart# helm install -n euler-copilot service . +# 创建namespace +root@openeuler:~# cd /home/euler-copilot-framework/euler-copilot-helm/chart +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# kubectl create namespace euler-copilot +# 设置环境变量 +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +# 安装EulerCopilot +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# helm install -n euler-copilot service . ``` ### 3. 查看pod状态 @@ -210,18 +232,35 @@ rag-deploy-service-5b7887644c-sm58z 2/2 Running 0 110m redis-deploy-service-f8866b56-kj9jz 1/1 Running 0 17d vectorize-deploy-service-57f5f94ccf-sbhzp 2/2 Running 0 17d web-deploy-service-74fbf7999f-r46rg 1/1 Running 0 2d + +# 进入到postgres数据库,执行扩展命令 +root@openeuler:~# kubectl -n euler-copilot exec -it pgsql-deploy-service-86b4dc4899-ppltc -- bash +root@pgsql-deploy-b4cc79794-qn8zd:/tmp# psql -U postgres -d postgres +psql (16.2 (Debian 16.2-1.pgdg120+2)) +输入 "help" 来获取帮助信息. +postgres=# CREATE EXTENSION zhparser; +postgres=# CREATE EXTENSION vector; +postgres=# CREATE TEXT SEARCH CONFIGURATION zhparser (PARSER = zhparser); +postgres=# ALTER TEXT SEARCH CONFIGURATION zhparser ADD MAPPING FOR n,v,a,i,e,l WITH simple; +postgres=# exit +root@pgsql-deploy-b4cc79794-qn8zd:/tmp# exit +exit + +# 注意:如果Pod状态出现失败,建议按照以下步骤进行排查 +# 1.查看Kubernetes集群的事件(Events),以获取更多关于Pod失败的上下文信息 root@openeuler:~# kubectl -n euler-copilot get events -root@openeuler:~# kubectl logs rag-deploy-service-5b7887644c-sm58z -n euler-copilot -# 注意事项: -# 如果Pod状态出现失败,建议按照以下步骤进行排查: -# 检查EulerCopilot的Pod日志,以确定是否有错误信息或异常行为。 -# 验证Kubernetes集群的资源状态,确保没有资源限制或配额问题导致Pod无法正常运行。 -# 查看相关的服务(Service)和部署(Deployment)配置,确保所有配置均正确无误。 -# 如果问题依然存在,可以考虑查看Kubernetes集群的事件(Events),以获取更多关于Pod失败的上下文信息。 +# 2.查看镜像拉取是否成功 +root@openeuler:~# k3s crictl images +# 3.检查EulerCopilot的 rag的Pod日志,以确定是否有错误信息或异常行为。 +root@openeuler:~# kubectl logs rag-deploy-service-5b7887644c-sm58z -n euler-copilot +# 4.验证Kubernetes集群的资源状态,确保没有资源限制或配额问题导致Pod无法正常运行。 +root@openeuler:~# df -h +# 5.如果未拉取成且镜像大小为0,请检查是否是k3s版本未满足要求,低于v1.30.2 +root@openeuler:~# k3s -v ``` ## 验证安装 -访问EulerCopilot Web界面,请在浏览器中输入https://$(host_ip):8080(其中port默认值为8080,若更改则需相应调整)。 +访问EulerCopilot的Web界面,请在浏览器中输入https://$(host_ip):8080(其中port默认值为8080,若更改则需相应调整)。 ### 1. 创建登录账号密码 ``` bash @@ -231,15 +270,15 @@ root@openeuler:~# python3 Python 3.10.12 (main, Mar 22 2024, 16:50:05) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import hashlib ->>> hashlib.sha256("密码".encode('utf-8')).hexdigest() +>>> hashlib.sha256("[密码]".encode('utf-8')).hexdigest() 'f1db188c86b9f7cf154922a525891b807a6df8a44ad0fbace0cfe5840081a507' # 保存生成加密后的密码 # 2.插入账号密码到mysql数据库 root@openeuler:~# kubectl -n euler-copilot exec -it mysql-deploy-service-c7857c7c9-wz9gn -- bash bash-5.1# mysql -uroot -p8ZMTsY4@dgWZqoM6 -# 密码在EulerCopilot/euler-copilot-helm/chart/values.yaml的mysql章节查看 +# mysql的登录密码可在euler-copilot-framework/euler-copilot-helm/chart/values.yaml的mysql章节查看 mysql> use euler_copilot; -mysql> insert into user(user_sub, passwd) values ("用户名", "加密后的密码"); +mysql> insert into user(user_sub, passwd) values ("[用户名]", "[加密后的密码]"); mysql> exit; ``` ### 2. 问答验证 @@ -252,15 +291,16 @@ mysql> exit; ### 1. 构建openEuler专业知识领域的智能问答 1. 修改values.yaml的pg的镜像仓为`pg-data` 2. 修改values.yaml的rag部分的字段`knowledgebaseID: openEuler_2bb3029f` - 3. 将`vim EulerCopilot/euler-copilot-helm/chart/templates/pgsql/pgsql-deployment.yaml`的volume相关字段注释 - 4. 进入`cd EulerCopilot/euler-copilot-helm/chart`,执行更新服务`helm upgrade -n euler-copilot server .` + 3. 将`vim euler-copilot-framework/euler-copilot-helm/chart/templates/pgsql/pgsql-deployment.yaml`的volume相关字段注释 + 4. 进入`cd euler-copilot-framework/euler-copilot-helm/chart`,执行更新服务`helm upgrade -n euler-copilot server .` 5. 进入网页端进行openEuler专业知识领域的问答 ### 2. 构建项目专属知识领域智能问答 -详细信息请参考文档《EulerCopilot本地语料上传指南.md》 +详细信息请参考文档 [EulerCopilot本地语料上传指南](https://gitee.com/openeuler/euler-copilot-framework/blob/master/docs/EulerCopilot%E6%9C%AC%E5%9C%B0%E8%AF%AD%E6%96%99%E4%B8%8A%E4%BC%A0%E6%8C%87%E5%8D%97.md) ## 附录 ### 大模型准备 -#### GPU环境部署模型时,可参考以下推荐方式 +#### GPU环境 +参考以下方式进行部署 ```bash # 1.下载模型文件: huggingface-cli download --resume-download Qwen/Qwen1.5-14B-Chat --local-dir Qwen1.5-14B-Chat @@ -296,4 +336,46 @@ llm: model: qwen1.5 max_tokens: 8192 ``` -#### NPU环境部署模型待补充 +#### NPU环境 +NPU环境部署可参考链接[MindIE安装指南](https://www.hiascend.com/document/detail/zh/mindie/10RC2/whatismindie/mindie_what_0001.html) + +## FAQ +### 1. huggingface使用报错? +```bash +File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn +raise NewConnectionError( +urllib3.exceptions.eanconectionError: : Failed to establish a new conmection: [Errno 101] Network is unreachable +``` +- 解决办法 +```bash +pip3 install -U huggingface_hub +export HF_ENDPOINT=https://hf-mirror.com +``` +### 2. 如何在rag容器中调用获取问答结果的接口? +```bash +# 请先进入到RAG pod +curl -k -X POST "http://localhost:8005/kb/get_answer" -H "Content-Type: application/json" -d '{ + "question": "", + "kb_sn": "default_test", + "fetch_source": true }' +``` +### 3. 执行helm upgrade报错 +```bash +Error: INSTALLATI0N FAILED: Kuberetes cluster unreachable: Get "http:/localhost:880/version": dial tcp [:1:8089: conect: conection refused +``` +- 解决办法 +```bash +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +``` +### 4. 无法查看pod的log? +```bash +[root@localhost euler-copilot]# kubectl logs rag-deployservice65c75c48d8-44vcp-n euler-copilotDefaulted container "rag" out of: rag.rag-copy secret (init)Error from server: Get "https://172.21.31.11:10250/containerlogs/euler copilot/rag deploy"service 65c75c48d8-44vcp/rag": Forbidden +``` +- 解决办法 +```bash +# 如果设置了代理,需要将本机的网络IP从代理中剔除 +[root@localhost agent]# cat /etc/systemd/system/k3s.service.env +http_proxy="http://172.21.60.51:3128" +https_proxy="http://172.21.60.51:3128" +no_proxy=172.21.31.10 # 代理中剔除本机IP +``` diff --git "a/docs/EulerCopilot\347\275\221\347\273\234\347\216\257\345\242\203\344\270\213\351\203\250\347\275\262\346\214\207\345\215\227.md" "b/docs/EulerCopilot\347\275\221\347\273\234\347\216\257\345\242\203\344\270\213\351\203\250\347\275\262\346\214\207\345\215\227.md" index 78d6a9400..eae365002 100644 --- "a/docs/EulerCopilot\347\275\221\347\273\234\347\216\257\345\242\203\344\270\213\351\203\250\347\275\262\346\214\207\345\215\227.md" +++ "b/docs/EulerCopilot\347\275\221\347\273\234\347\216\257\345\242\203\344\270\213\351\203\250\347\275\262\346\214\207\345\215\227.md" @@ -21,9 +21,8 @@ EulerCopilot是一款智能问答工具,使用EulerCopilot可以解决操作 | 类型 | 版本要求 | 说明 | |------------| -------------------------------------|--------------------------------------| | 操作系统 | openEuler 22.03 LTS及以上版本 | 无 | -| K3s | >= v1.29.0,带有Traefik Ingress工具 | K3s提供轻量级的 Kubernetes集群,易于部署和管理 | -| Docker | >= v25.4.0 | Docker提供一个独立的运行应用程序环境 | -| Helm | >= v3.14.4 | Helm是一个 Kubernetes的包管理工具,其目的是快速安装、升级、卸载Eulercopilot服务 | +| K3s | >= v1.30.2,带有Traefik Ingress工具 | K3s提供轻量级的 Kubernetes集群,易于部署和管理 | +| Helm | >= v3.15.3 | Helm是一个 Kubernetes的包管理工具,其目的是快速安装、升级、卸载Eulercopilot服务 | | python | >=3.9.9 | python3.9.9以上版本为模型的下载和安装提供运行环境 | ### 硬件要求 @@ -37,26 +36,30 @@ EulerCopilot是一款智能问答工具,使用EulerCopilot可以解决操作 | NPU | 910ProB、910B | 注意: -1. 若无GPU或NPU资源,建议通过调用openai接口的方式来实现功能。(接口样例:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions) -2. 调用openai接口的方式不需要安装高版本的docker(>= v25.4.0)、python(>=3.9.9) +1. 若无GPU或NPU资源,建议通过调用第三方openai接口的方式来实现功能。(接口样例:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions) 参考链接[API-KEY的获取与配置](https://help.aliyun.com/zh/dashscope/developer-reference/acquisition-and-configuration-of-api-key?spm=a2c4g.11186623.0.0.30e7694eaaxxGa)) +2. 调用第三方openai接口的方式不需要安装python (>=3.9.9) +3. 英伟达GPU对Docker的支持必需要新版本Docker(>= v25.4.0) ### 部署视图 ![EulerCopilot部署图](./pictures/EulerCopilot部署视图.png) ## 获取EulerCopilot -- 从EulerCopilot的官方Git仓库[EulerCopilot](https://gitee.com/openeuler/EulerCopilot)下载最新的部署仓库 +- 从EulerCopilot的官方Git仓库[euler-copilot-framework](https://gitee.com/openeuler/euler-copilot-framework)下载最新的部署仓库 - 如果您正在使用Kubernetes,则不需要安装k3s工具。 - +```bash +# 下载目录以home为例 +cd /home +git clone https://gitee.com/openeuler/euler-copilot-framework +``` ## 环境准备 -设备需联网并符合EulerCopilot的最低软硬件要求。确认服务器、硬件、驱动等准备就绪后,即可开始环境准备工作。请按提供的操作步骤和脚本路径依次执行,以确保初始化成功。 +设备需联网并符合EulerCopilot的最低软硬件要求。确认服务器、硬件、驱动等准备就绪后,即可开始环境准备工作。为了顺利进行后续操作,请按照指引,先进入脚本部署目录`/home/euler-copilot-framework/euler-copilot-helm/scripts`,并且按照提供的操作步骤和脚本路径依次执行,以确保初始化成功。 -| 序号 | 操作内容 | 相关指令 | 说明 | +| 序号 | 步骤内容 | 相关指令 | 说明 | |-------------- |----------|---------------------------------------------|------------------------------------------ | -|1| 环境检查 | `bash EulerCopilot/euler-copilot-helm/scripts/check_env.sh` | 主要对服务器的主机名、DNS、防火墙设置、磁盘剩余空间大小、网络、检查SELinux的设置 | -|2| 文件下载 | `bash EulerCopilot/euler-copilot-helm/scripts/download_file.sh` | 模型bge-reranker-large、bge-mixed-mode(需要单独提供)和分词工具text2vec-base-chinese-paraphrase的下载 | -|3| 安装部署工具 | `bash EulerCopilot/euler-copilot-helm/scripts/install_tools.sh v1.30.2+k3s1 v3.15.3 cn` 注意:cn的使用是使用镜像站,可以去掉不用 | 安装helm、k3s工具 | -|4| docker检查与登录 | `bash EulerCopilot/euler-copilot-helm/scripts/prepare_docker.sh` | docker版本检查与升级、登录镜像仓 | -|5| 大模型准备 | 提供openai接口或基于硬件部署 | 使用官网的openai接口或按照附录建议方式部署 | +|1| 环境检查 | `bash check_env.sh` | 主要对服务器的主机名、DNS、防火墙设置、磁盘剩余空间大小、网络、检查SELinux的设置 | +|2| 文件下载 | `bash download_file.sh` | 模型bge-reranker-large、bge-mixed-mode 和分词工具text2vec-base-chinese-paraphrase的下载 | +|3| 安装部署工具 | `bash install_tools.sh v1.30.2+k3s1 v3.15.3 cn` | 安装helm、k3s工具。注意:cn的使用是使用镜像站,可以去掉不用 | +|4| 大模型准备 | 提供第三方openai接口或基于硬件本都部署大模型 | 本地部署大模型可参考附录部分 | ## EulerCopilot安装 @@ -64,51 +67,52 @@ EulerCopilot是一款智能问答工具,使用EulerCopilot可以解决操作 ### 1. 编辑配置文件 ```bash -# 进入EulerCopilot仓库目录,该目录包含文档目录和Helm安装配置文件目录 -root@openeuler:~# cd /home/EulerCopilot -root@openeuler:/home/EulerCopilot# ll +# 下载目录以home为例,进入euler-copilot-framework仓库的Helm配置文件目录 +root@openeuler:~# cd /home/euler-copilot-framework +root@openeuler:/home/euler-copilot-framework# ll total 28 drwxr-xr-x 3 root root 4096 Aug 28 17:45 docs/ drwxr-xr-x 5 root root 4096 Aug 28 17:45 euler-copilot-helm/ - -# 进入Helm配置文件目录 -root@openeuler:/home/EulerCopilot# cd euler-copilot-helm/chart -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart# ll +root@openeuler:/home/euler-copilot-framework# cd euler-copilot-helm/chart +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# ll total 28 -rw-r--r-- 1 root root 135 Aug 28 17:45 Chart.yaml drwxr-xr-x 10 root root 4096 Aug 28 17:55 templates/ -rw-r--r-- 1 root root 6572 Aug 30 12:05 values.yaml -# 编辑values.yaml配置文件 -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart# vim values.yaml +# 编辑values.yaml配置文件, 请结合YAML中的注释部分进行修改 +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# vim values.yaml # 注意事项: # - 修改domain为服务器的实际IP地址。 # - 更新OpenAI的URL、Key、Model和Max Token为部署所需的值。 # - 根据实际部署情况,更新vectorize、rag、framework中的BGE模型路径、文档向量化和分词工具路径。 - # - 如需在内网环境中修改Traefik配置以转发端口,请继续下一步。 -# 进入SSL配置目录,准备修改Traefik配置 -root@openeuler:/home/EulerCopilot/euler-copilot-helm# cd chart_ssl/ -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart_ssl# ll +# 1. 进入SSL配置目录 +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm# cd chart_ssl/ +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart_ssl# ll total 20 -rw-r--r-- 1 root root 250 Aug 28 17:45 traefik-config.yml -rw-r--r-- 1 root root 212 Aug 28 17:45 traefik-secret.yaml -rw-r--r-- 1 root root 175 Aug 28 17:45 traefik-tlsstore.yaml -# 修改traefik-config.yml以转发HTTPS端口(如果需要) -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart_ssl/# vim traefik-config.yml +# 2. 修改traefik-config.yml以转发HTTPS端口(如果需要) +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart_ssl/# vim traefik-config.yml # 修改部分示例: # websecure: # exposedPort: 8080 # 将此处的端口号修改为期望转发的HTTPS端口 -# 应用修改后的Traefik配置 -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart_ssl/# kubectl apply -f traefik-config.yml +# 3. 应用修改后的Traefik配置 +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart_ssl/# kubectl apply -f traefik-config.yml ``` ### 2. 安装EulerCopilot ```bash -root@openeuler:~# cd /home/EulerCopilot/euler-copilot-helm/chart -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart# kubectl create namespace euler-copilot -root@openeuler:/home/EulerCopilot/euler-copilot-helm/chart# helm install -n euler-copilot service . +# 创建namespace +root@openeuler:~# cd /home/euler-copilot-framework/euler-copilot-helm/chart +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# kubectl create namespace euler-copilot +# 设置环境变量 +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +# 安装EulerCopilot +root@openeuler:/home/euler-copilot-framework/euler-copilot-helm/chart# helm install -n euler-copilot service . ``` ### 3. 查看pod状态 @@ -124,19 +128,35 @@ rag-deploy-service-5b7887644c-sm58z 2/2 Running 0 110m redis-deploy-service-f8866b56-kj9jz 1/1 Running 0 17d vectorize-deploy-service-57f5f94ccf-sbhzp 2/2 Running 0 17d web-deploy-service-74fbf7999f-r46rg 1/1 Running 0 2d +# 进入到pg数据库,执行扩展命令 +root@openeuler:~# kubectl -n euler-copilot exec -it pgsql-deploy-service-86b4dc4899-ppltc -- bash +root@pgsql-deploy-b4cc79794-qn8zd:/tmp# psql -U postgres -d postgres +psql (16.2 (Debian 16.2-1.pgdg120+2)) +输入 "help" 来获取帮助信息. +postgres=# CREATE EXTENSION zhparser; +CREATE EXTENSION +postgres=# CREATE EXTENSION vector; +postgres=# CREATE TEXT SEARCH CONFIGURATION zhparser (PARSER = zhparser); +postgres=# ALTER TEXT SEARCH CONFIGURATION zhparser ADD MAPPING FOR n,v,a,i,e,l WITH simple; +postgres=# exit +root@pgsql-deploy-b4cc79794-qn8zd:/tmp# exit +exit + +# 注意:如果Pod状态出现失败,建议按照以下步骤进行排查 +# 1.查看Kubernetes集群的事件(Events),以获取更多关于Pod失败的上下文信息 root@openeuler:~# kubectl -n euler-copilot get events -root@openeuler:~# kubectl logs rag-deploy-service-5b7887644c-sm58z -n euler-copilot -# 注意事项: -# 如果Pod状态出现失败,建议按照以下步骤进行排查: -# 检查EulerCopilot的Pod日志,以确定是否有错误信息或异常行为。 -# 验证Kubernetes集群的资源状态,确保没有资源限制或配额问题导致Pod无法正常运行。 -# 查看相关的服务(Service)和部署(Deployment)配置,确保所有配置均正确无误。 -# 如果问题依然存在,可以考虑查看Kubernetes集群的事件(Events),以获取更多关于Pod失败的上下文信息。 +# 2.查看镜像拉取是否成功 +root@openeuler:~# k3s crictl images +# 3.检查EulerCopilot的 rag的Pod日志,以确定是否有错误信息或异常行为。 +root@openeuler:~# kubectl logs rag-deploy-service-5b7887644c-sm58z -n euler-copilot +# 4.验证Kubernetes集群的资源状态,确保没有资源限制或配额问题导致Pod无法正常运行。 +root@openeuler:~# df -h +# 5.如果未拉取成且镜像大小为0,请检查是否是k3s版本未满足要求,低于v1.30.2 +root@openeuler:~# k3s -v ``` - ## 验证安装 -访问EulerCopilot Web界面,请在浏览器中输入https://$(host_ip):8080(其中port默认值为8080,若更改则需相应调整)。 +访问EulerCopilot的Web界面,请在浏览器中输入https://$(host_ip):8080(其中port默认值为8080,若更改则需相应调整)。 ### 1. 创建登录账号密码 ``` bash @@ -146,15 +166,15 @@ root@openeuler:~# python3 Python 3.10.12 (main, Mar 22 2024, 16:50:05) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import hashlib ->>> hashlib.sha256("密码".encode('utf-8')).hexdigest() +>>> hashlib.sha256("[密码]".encode('utf-8')).hexdigest() 'f1db188c86b9f7cf154922a525891b807a6df8a44ad0fbace0cfe5840081a507' # 保存生成加密后的密码 # 2.插入账号密码到mysql数据库 root@openeuler:~# kubectl -n euler-copilot exec -it mysql-deploy-service-c7857c7c9-wz9gn -- bash bash-5.1# mysql -uroot -p8ZMTsY4@dgWZqoM6 -# 密码在EulerCopilot/euler-copilot-helm/chart/values.yaml的mysql章节查看 +# mysql的登录密码可在euler-copilot-framework/euler-copilot-helm/chart/values.yaml的mysql章节查看 mysql> use euler_copilot; -mysql> insert into user(user_sub, passwd) values ("用户名", "加密后的密码"); +mysql> insert into user(user_sub, passwd) values ("[用户名]", "[加密后的密码]"); mysql> exit; ``` ### 2. 问答验证 @@ -167,15 +187,16 @@ mysql> exit; ### 1. 构建openEuler专业知识领域的智能问答 1. 修改values.yaml的pg的镜像仓为`pg-data` 2. 修改values.yaml的rag部分的字段`knowledgebaseID: openEuler_2bb3029f` - 3. 将`vim EulerCopilot/euler-copilot-helm/chart/templates/pgsql/pgsql-deployment.yaml`的volume相关字段注释 - 4. 进入`cd EulerCopilot/euler-copilot-helm/chart`,执行更新服务`helm upgrade -n euler-copilot server .` + 3. 将`vim euler-copilot-framework/euler-copilot-helm/chart/templates/pgsql/pgsql-deployment.yaml`的volume相关字段注释 + 4. 进入`cd euler-copilot-framework/euler-copilot-helm/chart`,执行更新服务`helm upgrade -n euler-copilot server .` 5. 进入网页端进行openEuler专业知识领域的问答 ### 2. 构建项目专属知识领域智能问答 -详细信息请参考文档《EulerCopilot本地语料上传指南.md》 +详细信息请参考文档 [EulerCopilot本地语料上传指南](https://gitee.com/openeuler/euler-copilot-framework/blob/master/docs/EulerCopilot%E6%9C%AC%E5%9C%B0%E8%AF%AD%E6%96%99%E4%B8%8A%E4%BC%A0%E6%8C%87%E5%8D%97.md) ## 附录 ### 大模型准备 -#### GPU环境部署模型时,可参考以下推荐方式 +#### GPU环境 +参考以下方式进行部署 ```bash # 1.下载模型文件: huggingface-cli download --resume-download Qwen/Qwen1.5-14B-Chat --local-dir Qwen1.5-14B-Chat @@ -211,4 +232,46 @@ llm: model: qwen1.5 max_tokens: 8192 ``` -#### NPU环境部署模型待补充 +#### NPU环境 +NPU环境部署可参考链接[MindIE安装指南](https://www.hiascend.com/document/detail/zh/mindie/10RC2/whatismindie/mindie_what_0001.html) + +## FAQ +### 1. huggingface使用报错? +```bash +File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn +raise NewConnectionError( +urllib3.exceptions.eanconectionError: : Failed to establish a new conmection: [Errno 101] Network is unreachable +``` +- 解决办法 +```bash +pip3 install -U huggingface_hub +export HF_ENDPOINT=https://hf-mirror.com +``` +### 2. 如何在rag容器中调用获取问答结果的接口? +```bash +# 请先进入到RAG pod +curl -k -X POST "http://localhost:8005/kb/get_answer" -H "Content-Type: application/json" -d '{ + "question": "", + "kb_sn": "default_test", + "fetch_source": true }' +``` +### 3. 执行helm upgrade报错 +```bash +Error: INSTALLATI0N FAILED: Kuberetes cluster unreachable: Get "http:/localhost:880/version": dial tcp [:1:8089: conect: conection refused +``` +- 解决办法 +```bash +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +``` +### 4. 无法查看pod的log? +```bash +[root@localhost euler-copilot]# kubectl logs rag-deployservice65c75c48d8-44vcp-n euler-copilotDefaulted container "rag" out of: rag.rag-copy secret (init)Error from server: Get "https://172.21.31.11:10250/containerlogs/euler copilot/rag deploy"service 65c75c48d8-44vcp/rag": Forbidden +``` +- 解决办法 +```bash +# 如果设置了代理,需要将本机的网络IP从代理中剔除 +[root@localhost agent]# cat /etc/systemd/system/k3s.service.env +http_proxy="http://172.21.60.51:3128" +https_proxy="http://172.21.60.51:3128" +no_proxy=172.21.31.10 # 代理中剔除本机IP +``` diff --git a/euler-copilot-helm/chart/values.yaml b/euler-copilot-helm/chart/values.yaml index 3d31691b1..8f156c2b4 100644 --- a/euler-copilot-helm/chart/values.yaml +++ b/euler-copilot-helm/chart/values.yaml @@ -3,21 +3,21 @@ globals: # 部署实例数 replicaCount: 1 # 镜像仓库 - imageRegistry: "swr.cn-southwest-2.myhuaweicloud.com/euler-copilot" + imageRegistry: "hub.oepkgs.net/neocopilot" # 镜像仓库鉴权 imagePullSecrets: - name: euler-copilot-registry # 镜像拉取策略 imagePullPolicy: IfNotPresent # 部署域名 - domain: "" # 需要修改为域名或内网IP + domain: "" # 需要修改为域名或内网IP # 大模型配置 llm: # 开源大模型,OpenAI兼容接口 openai: - url: "" # 需要根据大模型部署修改 - key: "" # 需要根据大模型部署修改 - model: "Qwen1.5-32B-chat-GPTQ-Int4" # 需要根据大模型部署修改 + url: "http://120.46.78.178:8000/" # 需要根据大模型部署修改URL + key: "sk-123456" # 需要根据大模型部署修改openai_key + model: "Qwen1.5-32B-chat-GPTQ-Int4" # 需要根据大模型部署修改mode_name max_tokens: 8192 # Llama模型,用于部分功能场景 llama: @@ -75,7 +75,7 @@ euler_copilot: # 镜像名 repository: redis # 镜像标签 - tag: alpine # ARM架构tag修改alpine-arm + tag: 7.4-alpine # ARM架构tag修改7.4-alpine-arm # 拉取策略。留空则使用全局设置 imagePullPolicy: "" # 性能限制设置 @@ -96,7 +96,7 @@ euler_copilot: # 镜像设置 image: # 镜像仓库。留空则使用全局设置。 - registry: "hub.oepkgs.net/neocopilot" + registry: "" # 镜像名 repository: pgsql-empty # 带语料的pg镜像名是pgsql-data # 镜像标签 @@ -127,7 +127,7 @@ euler_copilot: # 镜像名 repository: euler-copilot-vectorize-agent # 镜像标签 - tag: "20240430" # ARM架构tag修改20240430-arm + tag: "430-release" # ARM架构tag修改430-release-arm # 拉取策略。留空则使用全局设置。 imagePullPolicy: "" # 容器根目录只读 @@ -137,7 +137,7 @@ euler_copilot: # Volume设置 volume: # bge模型的位置 - models: /home/euler-copilot/models + models: /home/EulerCopilot/models # 需要根据实际下载路径修改 # Service设置 service: # Service类型,ClusterIP或NodePort @@ -153,7 +153,7 @@ euler_copilot: # 镜像设置 image: # 镜像仓库。留空则使用全局设置。 - registry: "hub.oepkgs.net/neocopilot" + registry: "" # 镜像名 repository: euler-copilot-rag # 镜像标签 @@ -173,7 +173,7 @@ euler_copilot: # RAG内知识库名 knowledgebaseID: default_test # 待向量化的文档位置 - docs_dir: "/home/euler-copilot/docs" # 需要修改为语料文档目录 + docs_dir: "/home/EulerCopilot/corpus" # 需要创建此目录作为语料文档目录 # 部署Framework framework: @@ -185,7 +185,7 @@ euler_copilot: # 镜像名 repository: euler-copilot-framework # 镜像标签 - tag: "20240430" # ARM架构tag修改20240430-arm + tag: "430-release" # ARM架构tag修改430-release-arm # 拉取策略。留空则使用全局设置 imagePullPolicy: "" # 容器根目录只读 @@ -199,7 +199,7 @@ euler_copilot: nodePort: # Volume设置 volume: - text2vec: /home/euler-copilot/text2vec-base-chinese-paraphrase + text2vec: /home/EulerCopilot/text2vec/text2vec-base-chinese-paraphrase # 需要根据实际下载路径修改 # JWT Key jwtKey: 6vJZbyFlfJgXFAuNlQaUdOChVLm5aLTC @@ -213,8 +213,8 @@ euler_copilot: # 镜像名 repository: euler-copilot-web # 镜像标签 - tag: "20240430" # ARM架构tag修改20240430-arm - # 拉取策略。留空则使用全局设置 + tag: "430-release" # ARM架构tag修改430-release-arm + # 拉取策略。留空则使用全局设置30 imagePullPolicy: "" # 容器根目录只读 readOnly: true diff --git a/euler-copilot-helm/scripts/download_file.sh b/euler-copilot-helm/scripts/download_file.sh index 265972a6b..03b49d192 100644 --- a/euler-copilot-helm/scripts/download_file.sh +++ b/euler-copilot-helm/scripts/download_file.sh @@ -33,23 +33,35 @@ function check_huggingface { function download_small_model { RERANKER="BAAI/bge-reranker-large"; + text2vec="shibing624/text2vec-base-chinese-paraphrase"; EMBEDDING="bge-mixed-model.tar.gz"; export HF_ENDPOINT=https://hf-mirror.com; + # 下载reranker - huggingface-cli download --resume-download $RERANKER --local-dir $(echo $RERANKER | cut -d "/" -f 2); + huggingface-cli download --resume-download "BAAI/$RERANKER" --local-dir $(echo $RERANKER | cut -d "/" -f 2); if [[ $? -ne 0 ]]; then echo -e "[Error]下载模型权重失败:$RERANKER \033[0m"; return 1; fi - # 解压embedding + + # 下载bge-mixed-model + wget https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/bge-mixed-model.tar.gz; tar -xzf $EMBEDDING; if [[ $? -ne 0 ]]; then - echo -e "[Error]解压模型权重失败:$EMBEDDING \033[0m"; + echo -e "[Error]下载bge-mixed-model失败 \033[0m"; + return 1; + fi + + # 下载分词工具text2vec-base-chinese-paraphrase + huggingface-cli download --resume-download $text2vec --local-dir $(echo $text2vec | cut -d "/" -f 2); + if [[ $? -ne 0 ]]; then + echo -e "[Error]下载分词工具失败:$text2vec \033[0m"; return 1; fi + rm -f $EMBEDDING; - echo -e "\033[32m[Success]Reranker与Embedding模型配置成功\033[0m"; + echo -e "\033[32m[Success]模型配置和分词工具下载成功\033[0m"; return 0; } @@ -71,4 +83,4 @@ function main { fi } -main \ No newline at end of file +main -- Gitee