localGPT
2024-10-26 19:35
LocalGPT是一项开源计划,它允许用户与文档进行交流而不会泄露隐私。由于一切都在本地运行,可以放心,没有任何数据会离开用户的计算机。使用 LocalGPT 深入了解安全的AI本地文档交互世界。
最高程度的隐私:您的数据保留在您的计算机上,确保 100% 的安全。
多种模型支持:无缝集成多种开源模型,包括HF、GPTQ、GGML和GGUF。
多样化的嵌入:从一系列开源嵌入中进行选择。
重复使用您的 LLM:下载后,可重复使用您的 LLM,无需重复下载。
聊天记录:记住您之前的对话(在会话中)。
API:LocalGPT 有一个 API,您可以使用它来构建 RAG 应用程序。
图形界面:LocalGPT 带有两个 GUI,一个使用 API,另一个是独立的(基于 streamlit)。
GPU、CPU 和 MPS 支持:开箱即用,支持多种平台,使用等
CUDA
与您的数据聊天!CPU
MPS
通过选择正确的本地模型和功能,LangChain
您可以在本地运行整个 RAG 管道,而无需任何数据离开您的环境,并且具有合理的性能。
ingest.py
使用LangChain
工具解析文档并使用在本地创建嵌入InstructorEmbeddings
。然后使用向量存储将结果存储在本地向量数据库中Chroma
。run_localGPT.py
使用本地 LLM 来理解问题并创建答案。答案的上下文是从本地向量存储中提取的,使用相似性搜索从文档中找到正确的上下文。您可以使用 HuggingFace 的任何其他 LLM 替换此本地 LLM。请确保您选择的 LLM 为 HF 格式。
该项目的灵感来自于原始的privateGPT。
📥 使用 git 克隆 repo:
git clone https://github.com/PromtEngineer/localGPT.git
🐍 安装conda进行虚拟环境管理。创建并激活新的虚拟环境。
conda create -n localGPT python=3.10.0
conda activate localGPT
🛠️使用 pip 安装依赖项
要设置环境来运行代码,首先安装所有要求:
pip install -r requirements.txt
安装LLAMA-CPP:
LocalGPT 使用LlamaCpp-Python用于 GGML(您将需要 llama-cpp-python <=0.1.76)和 GGUF(llama-cpp-python >=0.1.83)模型。
要运行量化的 Llama3 模型,请确保安装了 llama-cpp-python 版本 0.2.62 或更高版本。
如果您想将 BLAS 或 Metal 与llama-cpp一起使用,您可以设置适当的标志:
对于NVIDIA
GPU 支持,请使用cuBLAS
# Example:
cuBLASCMAKE_ARGS="-DLLAMA_CUBLAS=on"
FORCE_CMAKE=1
pip install llama-cpp-python --no-cache-dir
要获得 Apple Metal ( M1/M2
) 支持,请使用
# Example:
METALCMAKE_ARGS="-DLLAMA_METAL=on"
FORCE_CMAKE=1
pip install llama-cpp-python --no-cache-dir
更多细节请参考llama-cpp
在 NVIDIA GPU 上安装 GPU 推理所需的软件包(如 gcc 11 和 CUDA 11)可能会与系统中的其他软件包发生冲突。作为 Conda 的替代方案,您可以将 Docker 与提供的 Dockerfile 一起使用。它包括 CUDA,您的系统只需要 Docker、BuildKit、您的 NVIDIA GPU 驱动程序和 NVIDIA 容器工具包。构建为,需要 BuildKit。Docker BuildKit目前在docker 构建docker build -t localgpt .
期间不支持 GPU ,仅在docker run期间支持 GPU 。以 运行。docker run -it --mount src="$HOME/.cache",target=/root/.cache,type=bind --gpus=all localgpt
将文件放入SOURCE_DOCUMENTS
文件夹中。您可以在文件夹中放置多个文件夹SOURCE_DOCUMENTS
,代码将递归读取您的文件。
LocalGPT 目前支持以下文件格式。LocalGPT 用于LangChain
加载这些文件格式。中的代码constants.py
使用字典将文件格式映射到相应的加载器。为了添加对另一种文件格式的支持,只需从LangChainDOCUMENT_MAP
中添加包含文件格式和相应加载器的字典即可。
DOCUMENT_MAP = {
".txt": TextLoader,
".md": TextLoader,
".py": TextLoader,
".pdf": PDFMinerLoader,
".csv": CSVLoader,
".xls": UnstructuredExcelLoader,
".xlsx": UnstructuredExcelLoader,
".docx": Docx2txtLoader,
".doc": Docx2txtLoader,
}
运行以下命令来提取所有数据。
如果您cuda
的系统上已经设置。
python ingest.py
你将看到如下输出:
使用设备类型参数指定给定的设备。要运行cpu
python ingest.py --device_type cpu
运行M1/M2
python ingest.py --device_type mps
使用帮助获取受支持设备的完整列表。
python ingest.py --help
这将创建一个名为 的新文件夹DB
,并将其用于新创建的向量存储。您可以根据需要提取任意数量的文档,所有文档都将累积在本地嵌入数据库中。如果您想从空数据库开始,请删除DB
并重新提取您的文档。
注意:首次运行此程序时,需要互联网访问来下载嵌入模型(默认值Instructor Embedding
:)。在后续运行中,不会有任何数据离开您的本地环境,您可以在没有互联网连接的情况下提取数据。
为了与您的文档聊天,请运行以下命令(默认情况下,它将在 上运行cuda
)。
python run_localGPT.py
您还可以指定设备类型,就像ingest.py
python run_localGPT.py --device_type mps # to run on Apple silicon
这将加载摄取的向量存储和嵌入模型。您将看到一个提示:
> Enter a query:
输入问题后,按回车键。LocalGPT 将根据您的硬件需要一些时间。您将收到如下所示的回复。
一旦答案生成,您就可以提出另一个问题,而无需重新运行脚本,只需再次等待提示。
注意:首次运行此程序时,需要网络连接来下载 LLM(默认值TheBloke/Llama-2-7b-Chat-GGUF
:)。之后,您可以关闭网络连接,脚本推理仍将有效。不会有任何数据流出您的本地环境。
键入exit
以完成脚本。
您可以使用--show_sources
带有标志的标签run_localGPT.py
来显示嵌入模型检索了哪些块。默认情况下,它将显示 4 个不同的源/块。您可以更改源/块的数量
python run_localGPT.py --show_sources
另一个选项是启用聊天历史记录。
注意:默认情况下此功能处于禁用状态,可以使用 --use_history
标志启用。上下文窗口是有限的,因此请记住启用历史记录将使用它并且可能会溢出。
python run_localGPT.py --use_history
您可以将用户问题和带有标志的模型响应存储--save_qa
到 csv 文件中/local_chat_history/qa_log.csv
。每次交互都将被存储。
python run_localGPT.py --save_qa
在您选择的编辑器中打开
constants.py
,并根据选择添加要使用的 LLM。默认情况下,将使用以下模型:MODEL_ID = "TheBloke/Llama-2-7b-Chat-GGUF"MODEL_BASENAME = "llama-2-7b-chat.Q4_K_M.gguf"
打开一个终端并激活包含从 requirements.txt 安装的依赖项的 python 环境。
导航到
/LOCALGPT
目录。运行以下命令
python run_localGPT_API.py
。API 应该开始运行。等到所有内容都加载完毕。您应该会看到类似的内容
INFO:werkzeug:Press CTRL+C to quit
。打开第二个终端并激活相同的 python 环境。
导航到
/LOCALGPT/localGPTUI
目录。运行命令
python localGPTUI.py
。打开网络浏览器并转到地址
http://localhost:5111/
。
要更改模型,您需要设置MODEL_ID
和MODEL_BASENAME
。
constants.py
在您选择的编辑器中打开。更改
MODEL_ID
和MODEL_BASENAME
。如果您使用的是量化模型(GGML
,,),则需要提供。对于非量化模型,请GPTQ
设置为GGUF
MODEL_BASENAME
MODEL_BASENAME
NONE
HuggingFace 中有许多示例模型已经过测试,可以与原始训练模型(以 HF 结尾或在其“文件和版本”中包含 .bin)和量化模型(以 GPTQ 结尾或在其“文件和版本”中包含 .no-act-order 或 .safetensors)一起运行。
对于以 HF 结尾或其 HuggingFace 页面上的“文件和版本”内包含 .bin 的模型。
确保您已
MODEL_ID
选择。例如 ->MODEL_ID = "TheBloke/guanaco-7B-HF"
对于名称中包含 GPTQ 或在其 HuggingFace 页面上的“文件和版本”中具有 .no-act-order 或 .safetensors 扩展名的模型。
确保您已
MODEL_ID
选择。例如 -> model_id ="TheBloke/wizardLM-7B-GPTQ"
转到相应的HuggingFace Repo并选择“文件和版本”。
选择一个模型名称并将其设置为
MODEL_BASENAME
。例如 ->MODEL_BASENAME = "wizardLM-7B-GPTQ-4bit.compat.no-act-order.safetensors"
GGUF
对和模型执行相同的步骤GGML
。
以下是不同模型根据其大小(数十亿个参数)对 VRAM 的要求。表中的估算值不包括嵌入模型使用的 VRAM - 嵌入模型根据模型使用额外的 2GB-7GB VRAM。
模式尺寸 (B) | float32 | float16 | GPTQ 8位 | GPTQ 4位 |
---|---|---|---|---|
7B | 28 GB | 14 GB | 7 GB 至 9 GB | 3.5 GB 至 5 GB |
13B | 52 GB | 26 GB | 13 GB 至 15 GB | 6.5 GB 至 8 GB |
32B | 130 GB | 65 GB | 32.5 GB 至 35 GB | 16.25 GB - 19 GB |
65B | 260.8 GB | 130.4 GB | 65.2 GB – 67 GB | 32.6 GB - 35 GB |
要使用此软件,您必须安装 Python 3.10 或更高版本。早期版本的 Python 无法编译。
如果您在构建轮子的过程中遇到错误pip install
,则可能需要在计算机上安装 C++ 编译器。
要在 Windows 10/11 上安装 C++ 编译器,请按照以下步骤操作:
安装 Visual Studio 2022。
确保选择了以下组件:
通用 Windows 平台开发
适用于 Windows 的 C++ CMake 工具
从MinGW 网站下载 MinGW 安装程序。
运行安装程序并选择“gcc”组件。
按照此页面安装 NVIDIA 驱动程序。