diff --git a/README.md b/README.md index e79a30b..9d48c99 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ * [2. 下载模型至本地](README.md#2.-下载模型至本地) * [3. 设置配置项](README.md#3.-设置配置项) * [4. 知识库初始化与迁移](README.md#4.-知识库初始化与迁移) - * [5. 启动 API 服务或 Web UI](README.md#5.-启动-API-服务或-Web-UI) - * [6. 一键启动](README.md#6.-一键启动) + * [5. 一键启动API服务或WebUI服务](README.md#6.-一键启动) + * [6. 分步启动 API 服务或 Web UI](README.md#5.-启动-API-服务或-Web-UI) * [常见问题](README.md#常见问题) * [路线图](README.md#路线图) * [项目交流群](README.md#项目交流群) @@ -216,20 +216,97 @@ embedding_model_dict = { 当前项目的知识库信息存储在数据库中,在正式运行项目之前请先初始化数据库(我们强烈建议您在执行操作前备份您的知识文件)。 - 如果您是从 `0.1.x` 版本升级过来的用户,针对已建立的知识库,请确认知识库的向量库类型、Embedding 模型与 `configs/model_config.py` 中默认设置一致,如无变化只需以下命令将现有知识库信息添加到数据库即可: - + ```shell $ python init_database.py ``` - - 如果您是第一次运行本项目,知识库尚未建立,或者配置文件中的知识库类型、嵌入模型发生变化,或者之前的向量库没有开启 `normalize_L2`,需要以下命令初始化或重建知识库: - + ```shell $ python init_database.py --recreate-vs ``` -### 5. 启动 API 服务或 Web UI +### 5. 一键启动API 服务或 Web UI -#### 5.1 启动 LLM 服务 +#### 5.1 启动命令 + +一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务,示例代码: + +```shell +$ python startup.py -a +``` + +并可使用 `Ctrl + C` 直接关闭所有运行服务。如果一次结束不了,可以多按几次。 + +可选参数包括 `-a (或--all-webui)`, `--all-api`, `--llm-api`, `-c (或--controller)`, `--openai-api`, +`-m (或--model-worker)`, `--api`, `--webui`,其中: + +- `--all-webui` 为一键启动 WebUI 所有依赖服务; +- `--all-api` 为一键启动 API 所有依赖服务; +- `--llm-api` 为一键启动 Fastchat 所有依赖的 LLM 服务; +- `--openai-api` 为仅启动 FastChat 的 controller 和 openai-api-server 服务; +- 其他为单独服务启动选项。 + +#### 5.2 启动非默认模型 + +若想指定非默认模型,需要用 `--model-name` 选项,示例: + +```shell +$ python startup.py --all-webui --model-name Qwen-7B-Chat +``` + +更多信息可通过 `python startup.py -h`查看。 + +#### 5.3 多卡加载 + +项目支持多卡加载,需在 startup.py 中的 create_model_worker_app 函数中,修改如下三个参数: + +```python +gpus=None, +num_gpus=1, +max_gpu_memory="20GiB" +``` + +其中,`gpus` 控制使用的显卡的ID,例如 "0,1"; + +`num_gpus` 控制使用的卡数; + +`max_gpu_memory` 控制每个卡使用的显存容量。 + +注:server_config.py的FSCHAT_MODEL_WORKERS字典中也 + +#### 5.4 PEFT 加载(包括lora,p-tuning,prefix tuning, prompt tuning,ia3等) + +本项目基于 FastChat 加载 LLM 服务,故需以 FastChat 加载 PEFT 路径,即保证路径名称里必须有 peft 这个词,配置文件的名字为 adapter_config.json,peft 路径下包含.bin 格式的 PEFT 权重,peft路径在startup.py中create_model_worker_app函数的args.model_names中指定,并开启环境变量PEFT_SHARE_BASE_WEIGHTS=true参数。 + +注:如果上述方式启动失败,则需要以标准的fastchat服务启动方式分步启动,分步启动步骤参考第六节,PEFT加载详细步骤参考[加载lora微调后模型失效](https://github.com/chatchat-space/Langchain-Chatchat/issues/1130#issuecomment-1685291822), + +#### **5.5 注意事项:** + +**1. startup 脚本用多进程方式启动各模块的服务,可能会导致打印顺序问题,请等待全部服务发起后再调用,并根据默认或指定端口调用服务(默认 LLM API 服务端口:`127.0.0.1:8888`,默认 API 服务端口:`127.0.0.1:7861`,默认 WebUI 服务端口:`本机IP:8501`)** + +**2.服务启动时间示设备不同而不同,约 3-10 分钟,如长时间没有启动请前往 `./logs`目录下监控日志,定位问题。** + +**3. 在Linux上使用ctrl+C退出可能会由于linux的多进程机制导致multiprocessing遗留孤儿进程,可通过shutdown_all.sh进行退出** + +#### 5.6 启动界面示例: + +1. FastAPI docs 界面 + +![](img/fastapi_docs_020_0.png) + +2. webui启动界面示例: + +- Web UI 对话界面: + ![img](img/webui_0813_0.png) +- Web UI 知识库管理页面: + ![](img/webui_0813_1.png) + +### 6 分步启动 API 服务或 Web UI + +注意:如使用了一键启动方式,可忽略本节。 + +#### 6.1 启动 LLM 服务 如需使用开源模型进行本地部署,需首先启动 LLM 服务,启动方式分为三种: @@ -241,7 +318,7 @@ embedding_model_dict = { 如果启动在线的API服务(如 OPENAI 的 API 接口),则无需启动 LLM 服务,即 5.1 小节的任何命令均无需启动。 -##### 5.1.1 基于多进程脚本 llm_api.py 启动 LLM 服务 +##### 6.1.1 基于多进程脚本 llm_api.py 启动 LLM 服务 在项目根目录下,执行 [server/llm_api.py](server/llm_api.py) 脚本启动 **LLM 模型**服务: @@ -249,7 +326,7 @@ embedding_model_dict = { $ python server/llm_api.py ``` -项目支持多卡加载,需在 llm_api.py 中修改 create_model_worker_app 函数中,修改如下三个参数: +项目支持多卡加载,需在 llm_api.py 中的 create_model_worker_app 函数中,修改如下三个参数: ```python gpus=None, @@ -263,7 +340,7 @@ max_gpu_memory="20GiB" `max_gpu_memory` 控制每个卡使用的显存容量。 -##### 5.1.2 基于命令行脚本 llm_api_stale.py 启动 LLM 服务 +##### 6.1.2 基于命令行脚本 llm_api_stale.py 启动 LLM 服务 ⚠️ **注意:** @@ -303,14 +380,14 @@ $ python server/llm_api_shutdown.py --serve all 亦可单独停止一个 FastChat 服务模块,可选 [`all`, `controller`, `model_worker`, `openai_api_server`] -##### 5.1.3 PEFT 加载(包括lora,p-tuning,prefix tuning, prompt tuning,ia等) +##### 6.1.3 PEFT 加载(包括lora,p-tuning,prefix tuning, prompt tuning,ia3等) 本项目基于 FastChat 加载 LLM 服务,故需以 FastChat 加载 PEFT 路径,即保证路径名称里必须有 peft 这个词,配置文件的名字为 adapter_config.json,peft 路径下包含 model.bin 格式的 PEFT 权重。 详细步骤参考[加载lora微调后模型失效](https://github.com/chatchat-space/Langchain-Chatchat/issues/1130#issuecomment-1685291822) ![image](https://github.com/chatchat-space/Langchain-Chatchat/assets/22924096/4e056c1c-5c4b-4865-a1af-859cd58a625d) -#### 5.2 启动 API 服务 +#### 6.2 启动 API 服务 本地部署情况下,按照 [5.1 节](README.md#5.1-启动-LLM-服务)**启动 LLM 服务后**,再执行 [server/api.py](server/api.py) 脚本启动 **API** 服务; @@ -325,10 +402,10 @@ $ python server/api.py 启动 API 服务后,可访问 `localhost:7861` 或 `{API 所在服务器 IP}:7861` FastAPI 自动生成的 docs 进行接口查看与测试。 - FastAPI docs 界面 - + ![](img/fastapi_docs_020_0.png) -#### 5.3 启动 Web UI 服务 +#### 6.3 启动 Web UI 服务 按照 [5.2 节](README.md#5.2-启动-API-服务)**启动 API 服务后**,执行 [webui.py](webui.py) 启动 **Web UI** 服务(默认使用端口 `8501`) @@ -349,50 +426,14 @@ $ streamlit run webui.py --server.port 666 ``` - Web UI 对话界面: - - ![](img/webui_0813_0.png) + ![](img/webui_0813_0.png) - Web UI 知识库管理页面: - + ![](img/webui_0813_1.png) --- -### 6. 一键启动 - -更新一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务,示例代码: - -```shell -$ python startup.py -a -``` - -并可使用 `Ctrl + C` 直接关闭所有运行服务。如果一次结束不了,可以多按几次。 - -可选参数包括 `-a (或--all-webui)`, `--all-api`, `--llm-api`, `-c (或--controller)`, `--openai-api`, -`-m (或--model-worker)`, `--api`, `--webui`,其中: - -- `--all-webui` 为一键启动 WebUI 所有依赖服务; -- `--all-api` 为一键启动 API 所有依赖服务; -- `--llm-api` 为一键启动 Fastchat 所有依赖的 LLM 服务; -- `--openai-api` 为仅启动 FastChat 的 controller 和 openai-api-server 服务; -- 其他为单独服务启动选项。 - -若想指定非默认模型,需要用 `--model-name` 选项,示例: - -```shell -$ python startup.py --all-webui --model-name Qwen-7B-Chat -``` - -更多信息可通过 `python startup.py -h`查看。 - -**注意:** - -**1. startup 脚本用多进程方式启动各模块的服务,可能会导致打印顺序问题,请等待全部服务发起后再调用,并根据默认或指定端口调用服务(默认 LLM API 服务端口:`127.0.0.1:8888`,默认 API 服务端口:`127.0.0.1:7861`,默认 WebUI 服务端口:`本机IP:8501`)** - -**2.服务启动时间示设备不同而不同,约 3-10 分钟,如长时间没有启动请前往 `./logs`目录下监控日志,定位问题。** - -**3. 在Linux上使用ctrl+C退出可能会由于linux的多进程机制导致multiprocessing遗留孤儿进程,可通过shutdown_all.sh进行退出** - ## 常见问题 参见 [常见问题](docs/FAQ.md)。 @@ -401,14 +442,14 @@ $ python startup.py --all-webui --model-name Qwen-7B-Chat ## 路线图 -- [x] Langchain 应用 - - [x] 本地数据接入 - - [x] 接入非结构化文档 - - [x] .md - - [x] .txt - - [x] .docx +- [X] Langchain 应用 + - [X] 本地数据接入 + - [X] 接入非结构化文档 + - [X] .md + - [X] .txt + - [X] .docx - [ ] 结构化数据接入 - - [x] .csv + - [X] .csv - [ ] .xlsx - [ ] 分词及召回 - [ ] 接入不同类型 TextSplitter @@ -417,24 +458,24 @@ $ python startup.py --all-webui --model-name Qwen-7B-Chat - [ ] 本地网页接入 - [ ] SQL 接入 - [ ] 知识图谱/图数据库接入 - - [x] 搜索引擎接入 - - [x] Bing 搜索 - - [x] DuckDuckGo 搜索 + - [X] 搜索引擎接入 + - [X] Bing 搜索 + - [X] DuckDuckGo 搜索 - [ ] Agent 实现 -- [x] LLM 模型接入 - - [x] 支持通过调用 [FastChat](https://github.com/lm-sys/fastchat) api 调用 llm +- [X] LLM 模型接入 + - [X] 支持通过调用 [FastChat](https://github.com/lm-sys/fastchat) api 调用 llm - [ ] 支持 ChatGLM API 等 LLM API 的接入 -- [x] Embedding 模型接入 - - [x] 支持调用 HuggingFace 中各开源 Emebdding 模型 +- [X] Embedding 模型接入 + - [X] 支持调用 HuggingFace 中各开源 Emebdding 模型 - [ ] 支持 OpenAI Embedding API 等 Embedding API 的接入 -- [x] 基于 FastAPI 的 API 方式调用 -- [x] Web UI - - [x] 基于 Streamlit 的 Web UI +- [X] 基于 FastAPI 的 API 方式调用 +- [X] Web UI + - [X] 基于 Streamlit 的 Web UI --- ## 项目交流群 -二维码 +二维码 🎉 langchain-ChatGLM 项目微信交流群,如果你也对本项目感兴趣,欢迎加入群聊参与讨论交流。