LLMs之LocalGPT:LocalGPT的简介、安装、使用方法之详细攻略
目录
LLMs之RAG之LocalGPT:基于LocalGPT利用LLaMA-2模型实现本地化的知识库(Chroma)并与本地文档(基于langchain生成嵌入)进行对话问答图文教程+代码详解之详细攻略
LocalGPT的简介、安装、使用方法
2023年5月29日,Prompt Engineering发布了LocalGPT项目,主要是受到原始privateGPT的启发。这里的大部分描述都受到原始privateGPT的启发。在这个模型中,我用Vicuna-7B模型替换了GPT4ALL模型,并且我们使用了InstructorEmbeddings,而不是原始privateGPT中使用的LlamaEmbeddings。无论是嵌入还是LLM都将在GPU上运行,而不是CPU。如果您没有GPU,它也支持CPU(请参见下面的说明)。
在没有互联网连接的情况下,使用LLMs的能力向您的文档提问。100%私密,任何时候都不会有数据离开您的执行环境。您可以在没有互联网连接的情况下摄取文档并提问!使用LangChain和Vicuna-7B(加上很多其他内容!)以及InstructorEmbeddings构建。
有关项目的详细概述,请观看以下视频:
>> 详细的代码演示:
https://www.youtube.com/watch?v=MlyoObdIHyo&feature=youtu.be
>> 使用LocalGPT的Llama-2:
https://www.youtube.com/watch?v=lbFmceo4D5E
>> 添加聊天历史记录:
https://www.youtube.com/watch?v=d7otIM_MCZs
1、工作原理是什么?
通过选择合适的本地模型和LangChain的功能,您可以在本地运行整个流程,而不会有任何数据离开您的环境,并且具有合理的性能。
ingest.py使用LangChain工具解析文档并在本地使用InstructorEmbeddings创建嵌入。然后,它使用Chroma向量存储将结果存储在本地向量数据库中。
run_localGPT.py使用本地LLM理解问题并生成答案。答案的上下文是从本地向量存储中提取的,使用相似性搜索来定位来自文档的正确上下文片段。
您可以用HuggingFace中的任何其他LLM替换这个本地LLM。请确保您选择的任何LLM都符合HF格式。
2、如何选择不同的LLM模型?
以下提供了如何选择不同的LLM模型来生成响应的说明:
(1)、在您选择的编辑器中打开constants.py。
(2)、更改MODEL_ID和MODEL_BASENAME。如果您正在使用量化模型(GGML,GPTQ),您需要提供MODEL_BASENAME。对于未量化的模型,请将MODEL_BASENAME设置为NONE
(3)、已经有许多经过测试,可以与原始训练模型(以HF结尾或其“Files and versions”中有.bin的)以及量化模型(以GPTQ结尾或其“Files and versions”中有.no-act-order或.safetensors的)一起运行的示例模型。
(4)、对于以HF结尾或其“Files and versions”中有.bin的模型。
>> 确保选择了model_id。例如 -> MODEL_ID = "TheBloke/guanaco-7B-HF"
>> 如果转到其HuggingFace存储库并转到“Files and versions”,您会注意到以.bin扩展名结尾的模型文件。
>> 任何包含.bin扩展名的模型文件将在找到# load the LLM for generating Natural Language responses的代码时运行。
>> MODEL_ID = "TheBloke/guanaco-7B-HF"
(5)、对于包含GPTQ在名称中的模型,或其“Files and versions”中有.no-act-order或.safetensors扩展名的模型。
>> 确保选择了model_id。例如 -> model_id = "TheBloke/wizardLM-7B-GPTQ"
>> 您还需要选择其模型基本名称文件。例如 -> model_basename = "wizardLM-7B-GPTQ-4bit.compat.no-act-order.safetensors"
>> 如果转到其HuggingFace存储库并转到“Files and versions”,您会注意到一个以.safetensors扩展名结尾的模型文件。
>> 任何包含no-act-order或.safetensors扩展名的模型文件将在找到# load the LLM for generating Natural Language responses的代码时运行。
>> MODEL_ID = "TheBloke/WizardLM-7B-uncensored-GPTQ"
MODEL_BASENAME = "WizardLM-7B-uncensored-GPTQ-4bit-128g.compat.no-act-order.safetensors"
(6)、注释掉所有其他实例的MODEL_ID="其他模型名称",MODEL_BASENAME=其他基本模型名称,以及llm = load_model(args*)
3、Star History
4、免责声明
这是一个测试项目,旨在验证使用LLMs和向量嵌入进行问题回答的完全本地解决方案的可行性。它不适用于生产环境,并且不应该在生产中使用。Vicuna-7B基于Llama模型,因此具有原始Llama许可证。
LocalGPT的安装
1、环境设置
# (1)、使用 git 克隆仓库
git clone https://github.com/PromtEngineer/localGPT.git
# 为虚拟环境管理安装 conda。创建并激活一个新的虚拟环境。
conda create -n localGPT python=3.10.0
conda activate localGPT
# (2)、使用 pip 安装依赖项
要设置运行代码的环境,请先安装所有需求:
pip install -r requirements.txt
# (3)、安装 LLAMA-CPP
LocalGPT 使用 LlamaCpp-Python 来支持 GGML(你需要 llama-cpp-python <=0.1.76)和 GGUF(llama-cpp-python >=0.1.83)模型。
若要运行量化后的 Llama3 模型,请确保已安装版本 0.2.62 或更高版本的 llama-cpp-python。
如果你想使用 BLAS 或 Metal 与 llama-cpp,你可以设置相应的标志:
对于 NVIDIA GPU 支持,使用 cuBLAS
示例:cuBLAS
CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install llama-cpp-python --no-cache-dir
对于 Apple Metal (M1/M2) 支持,使用
示例:METAL
CMAKE_ARGS="-DLLAMA_METAL=on" FORCE_CMAKE=1 pip install llama-cpp-python --no-cache-dir
更多详情,请参阅 llama-cpp
2、Docker部署
在 NVIDIA GPU 上安装用于 GPU 推理所需的软件包,如 gcc 11 和 CUDA 11,可能会与系统中的其他软件包产生冲突。作为 Conda 的替代方案,你可以使用提供的 Dockerfile 来使用 Docker。它包含了 CUDA,你的系统只需要有 Docker、BuildKit、NVIDIA GPU 驱动程序和 NVIDIA 容器工具包即可。使用 docker build -t localgpt . 构建镜像,这需要 BuildKit。Docker BuildKit 目前在构建 docker 时还不支持 GPU,仅在运行 docker 时支持。使用以下命令来运行容器:docker run -it --mount src="$HOME/.cache",target=/root/.cache,type=bind --gpus=all localgpt。如果要在 Intel® Gaudi® HPU 上运行代码,请使用以下 Dockerfile - Dockerfile_hpu。
3、下载并配置测试数据集
(1)、下载测试数据集
为了测试,这个仓库包含了一份美国宪法文件作为示例文件供你使用。
下载地址:https://constitutioncenter.org/media/files/constitution.pdf
(2)、导入你自己的数据
将你的文件放入 SOURCE_DOCUMENTS 文件夹中。你可以在 SOURCE_DOCUMENTS 文件夹内放置多个文件夹,代码会递归地读取你的文件。
(3)、支持的文件格式
LocalGPT 当前支持以下文件格式。LocalGPT 使用 LangChain 加载这些文件格式。在 constants.py 中的代码使用 DOCUMENT_MAP 字典来映射文件格式到对应的加载器。为了添加对另一种文件格式的支持,只需在这个字典中添加文件格式及其对应来自 LangChain 的加载器即可。
DOCUMENT_MAP = {
".txt": TextLoader,
".md": TextLoader,
".py": TextLoader,
".pdf": PDFMinerLoader,
".csv": CSVLoader,
".xls": UnstructuredExcelLoader,
".xlsx": UnstructuredExcelLoader,
".docx": Docx2txtLoader,
".doc": Docx2txtLoader,
}
(4)、导入
运行以下命令以导入所有数据。
T1、如果你的系统上设置了 cuda。
python ingest.py
你会看到类似这样的输出
T2、使用设备类型参数来指定给定设备。要在 CPU 上运行
python ingest.py --device_type cpu
T3、要在 M1/M2 上运行
python ingest.py --device_type mps
python ingest.py --help # 使用帮助查看支持设备的完整列表。
这将创建一个名为 DB 的新文件夹,并将其用于新创建的向量存储。你可以根据需要导入任意数量的文档,所有文档都会累积到本地嵌入数据库中。如果你想从空数据库开始,可以删除 DB 并重新导入文档。
注意:当你第一次运行时,它需要互联网连接来下载嵌入模型(默认:Instructor Embedding)。后续运行中,不会有任何数据离开你的本地环境,你可以无需互联网连接进行数据导入。
4、向您的文档提问,本地方式!
(1)、为了与你的文档聊天,运行以下命令
T1、默认情况下在 cuda 上运行
python run_localGPT.py
T2、你也可以像 ingest.py 一样指定设备类型
python run_localGPT.py --device_type mps # 在 Apple 芯片上运行
T3、在 Intel® Gaudi® hpu 上运行
MODEL_ID = "mistralai/Mistral-7B-Instruct-v0.2" # 在 constants.py 中
python run_localGPT.py --device_type hpu
这将加载已导入的向量存储和嵌入模型。
生成答案后,你可以继续询问另一个问题而不需要重新运行脚本,只需等待再次出现提示即可。
注意:当你首次运行时,它需要互联网连接来下载大语言模型(默认:TheBloke/Llama-2-7b-Chat-GGUF)。之后,即使关闭互联网连接,脚本推断仍然可以工作。没有数据会离开你的本地环境。
输入 exit 以结束脚本。
(2)、使用 run_localGPT.py 的额外选项
你可以使用 --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
5、运行图形用户界面
(1)、打开你喜欢的编辑器中的 constants.py,根据选择添加你想要使用的 LLM。默认情况下,将使用以下模型:
MODEL_ID = "TheBloke/Llama-2-7b-Chat-GGUF"
MODEL_BASENAME = "llama-2-7b-chat.Q4_K_M.gguf"
(2)、打开终端并激活包含从 requirements.txt 安装的依赖项的 Python 环境。
(3)、导航到 /LOCALGPT 目录。
(4)、运行以下命令 python run_localGPT_API.py。API 应该开始运行。
(5)、等待所有内容加载完毕。你应该看到类似于 INFO:werkzeug:Press CTRL+C to quit. 的信息。
(6)、打开第二个终端并激活相同的 Python 环境。
(7)、导航到 /LOCALGPT/localGPTUI 目录。
(8)、运行命令 python localGPTUI.py。
(9)、打开网页浏览器并访问地址 http://localhost:5111/。
6、如何选择不同的 LLM 模型?
要更改模型,你需要同时设置 MODEL_ID 和 MODEL_BASENAME。
(1)、在你喜欢的编辑器中打开 constants.py。
(2)、更改 MODEL_ID 和 MODEL_BASENAME。如果你正在使用量化模型(GGML, GPTQ, GGUF),则需要提供 MODEL_BASENAME。对于未量化的模型,将 MODEL_BASENAME 设置为 NONE。
(3)、有许多来自 HuggingFace 的示例模型已经被测试可以与原始训练模型(以 HF 结尾或在其“文件和版本”中有 .bin)以及量化模型(以 GPTQ 结尾或在其“文件和版本”中有 .no-act-order 或 .safetensors)一起运行。
(4)、对于那些在 HuggingFace 页面上的“文件和版本”中以 HF 结尾或有 .bin 的模型。
确保你已经选择了一个 MODEL_ID。例如 -> MODEL_ID = "TheBloke/guanaco-7B-HF"
前往 HuggingFace 仓库。
(5)、对于名字中包含 GPTQ 或者在 HuggingFace 页面上的“文件和版本”中有 .no-act-order 或 .safetensors 扩展名的模型。
确保你已经选择了一个 MODEL_ID。例如 -> model_id = "TheBloke/wizardLM-7B-GPTQ"
进入相应的 HuggingFace 仓库并选择“文件和版本”。
选择其中一个模型名称,并将其设置为 MODEL_BASENAME。例如 -> MODEL_BASENAME = "wizardLM-7B-GPTQ-4bit.compat.no-act-order.safetensors"
(6)、对于 GGUF 和 GGML 模型,遵循相同步骤。
7、GPU 和显存需求
以下是根据不同大小(参数数十亿计)的不同模型所需的显存量。表中的估计值不包括嵌入模型所使用的显存 - 嵌入模型会根据具体型号额外使用 2GB 到 7GB 的显存。
Mode Size (B) | float32 | float16 | GPTQ 8bit | GPTQ 4bit |
---|---|---|---|---|
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 |
8、系统要求
(1)、Python 版本
要使用此软件,必须安装 Python 3.10 或更高版本。较早版本的 Python 将无法编译。
(2)、C++ 编译器
如果在 pip 安装过程中构建 wheel 时遇到错误,可能需要在你的计算机上安装 C++ 编译器。
(3)、对于 Windows 10/11
要在 Windows 10/11 上安装 C++ 编译器,请按照以下步骤操作:
>> 安装 Visual Studio 2022。
>> 确保选择了以下组件:
通用 Windows 平台开发
Windows 的 C++ CMake 工具
>> 从 MinGW 网站下载 MinGW 安装程序。
>> 运行安装程序并选择 “gcc” 组件。
(4)、NVIDIA 驱动问题
请参考此页面安装 NVIDIA 驱动程序。
LocalGPT的使用方法
1、基础用法
更新中……
LLMs之RAG之LocalGPT:基于LocalGPT利用LLaMA-2模型实现本地化的知识库(Chroma)并与本地文档(基于langchain生成嵌入)进行对话问答图文教程+代码详解之详细攻略
https://yunyaniu.blog.csdn.net/article/details/131693015
2、进阶用法
更新中……