LangChain+LLM实战---部署本地大模型(基于Langchain)

news2024/11/27 8:33:37

原文:Training Your Own LLM using privateGPT

作者:Wei-Meng Lee

了解如何在不向提供者公开私有数据的情况下训练自己的语言模型

使用公共AI服务(如OpenAI的ChatGPT)的主要问题之一是将您的私人数据暴露给提供商的风险。对于商业用途,这仍然是考虑采用AI技术的公司最担心的问题。

很多时候,您希望创建自己的语言模型,该模型是根据您的数据集(例如销售见解,客户反馈等)进行训练的,但同时您又不希望将所有这些敏感数据暴露给OpenAI等AI提供商。因此,理想的方法是在本地训练自己的LLM(大语言模型),而不需要将数据上传到公网。

在本文中,我将向您展示如何使用一个名为privateGPT的开源项目来利用LLM,以便它可以根据您的自定义训练数据回答问题(如ChatGPT),而不会牺牲数据的隐私性。

值得注意的是,privateGPT目前还处于概念验证阶段,还没有准备好投入生产。

下载privateGPT

要尝试privateGPT,您可以使用以下链接访问GitHub: https://github.com/imartinez/privateGPT.

您可以通过点击Code | download ZIP按钮下载repository:

img

或者,如果你的系统上安装了git,在Terminal中使用以下命令克隆repository:

1
$ git clone https://github.com/imartinez/privateGPT

无论哪种情况,一旦repository下载到您的计算机上,privateGPT目录应该有以下文件和文件夹:

img

安装所需的Python Packages

privateGPT使用许多Python包。它们被封装在requirements.txt文件中:

1
2
3
4
5
6
7
8
9
10
11
12
langchain==0.0.171
pygpt4all==1.1.0
chromadb==0.3.23
llama-cpp-python==0.1.50
urllib3==2.0.2
pdfminer.six==20221105
python-dotenv==1.0.0
unstructured==0.6.6
extract-msg==0.41.1
tabulate==0.9.0
pandoc==2.3
pypandoc==1.11

最方便的方法就是通过 pip/conda:

1
2
3
4
$ cd privateGPT
$ pip install -r requirements.txt 

// $ conda install -r requirements.txt

根据我的经验,执行上述安装时,可能不一定会安装一些必需的Python包。稍后,当您尝试运行摄取.py或privateGPT.py文件时,您就会知道这一点。在这种情况下,只需单独安装丢失的包。

编辑环境(Environment)配置文件

这个example.env文件包含privateGPT使用的几个设置。其内容如下:

1
2
3
4
5
PERSIST_DIRECTORY=db
MODEL_TYPE=GPT4All
MODEL_PATH=models/ggml-gpt4all-j-v1.3-groovy.bin
EMBEDDINGS_MODEL_NAME=all-MiniLM-L6-v2
MODEL_N_CTX=1000
  • PERSIST_DIRECTORY—在加载和处理文档之后将保存本地矢量存储的目录
  • MODEL_TYPE—您正在使用的模型的类型。在这里,它被设置为GPT4All(由OpenAI提供的ChatGPT的免费开源替代品).
  • MODEL_PATH—LLM所在的路径。这里它被设置为models目录,使用的模型是ggml-gpt4all-j-v1.3-groovy.bin(您将在下一节中了解到在哪里下载这个模型)
  • EMBEDDINGS_MODEL_NAME——这指的是转换器模型的名称。这里它被设置为all-MiniLM-L6-v2,它将句子和段落映射到384维的密集向量空间,可以用于聚类或语义搜索等任务。
  • MODEL_N_CTX -嵌入模型和LLM模型的最大令牌限制

example.env 重命名为 .env.

将这个文件变成隐藏模式

下载Model(模型)

为了使privateGPT正常运行起来,它需要预先训练模型(就是LLM)。由于privateGPT使用GPT4All,您可以从https://gpt4all.io/index.html下载LLM。

img

因为默认的环境文件指定了ggml-gpt4all-j-v1.3-groovy.bin LLM,所以下载第一个模型,然后在privateGPT文件夹中创建一个名为models的新文件夹。将ggml-gpt4all-j-v1.3-groovy.bin文件放入models文件夹中:

img

数据预处理

如果你查看一下ingest.py文件,你会注意到下面的代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
".csv": (CSVLoader, {}),
# ".docx": (Docx2txtLoader, {}),
".doc": (UnstructuredWordDocumentLoader, {}),
".docx": (UnstructuredWordDocumentLoader, {}),
".enex": (EverNoteLoader, {}),
".eml": (UnstructuredEmailLoader, {}),
".epub": (UnstructuredEPubLoader, {}),
".html": (UnstructuredHTMLLoader, {}),
".md": (UnstructuredMarkdownLoader, {}),
".odt": (UnstructuredODTLoader, {}),
".pdf": (PDFMinerLoader, {}),
".ppt": (UnstructuredPowerPointLoader, {}),
".pptx": (UnstructuredPowerPointLoader, {}),
".txt": (TextLoader, {"encoding": "utf8"}),

从这个文件上我们可以看到privateGPT支持以下数据文档格式:

  • .csv: CSV
  • .doc: Word文档
  • .docx: Word文档
  • .enex: EverNote
  • .eml: Email
  • .epub: EPub
  • .html: HTML File
  • .md: Markdown
  • .odt: Open Document Text
  • .pdf: PDF
  • .ppt : PPT
  • .pptx : PPTX
  • .txt: Text (UTF-8)

每种类型的文档都使用各自的加载程序来分别加载。例如,你使用UnstructuredWordDocumentLoader类来加载**.doc.docx** 这些Word文档。

默认情况下,privateGPT附带位于source_documents文件夹中的state_of_the_union.txt文件。我将删除它,并用一个名为Singapore.pdf的文档替换它。

img

这个文档创建的内容来自于:https://en.wikipedia.org/wiki/Singapore。您可以通过点击 Tools | Download as PDF 从维基百科下载任何页面:

img

您可以将privateGPT支持的任何文档放入source_documents文件夹中。在本文的例子中,我只放了一个文档。

为文档创建Embeddings

一旦数据文档就位,就可以为文档做embedding了。

创建embedding是指为单词、句子或其他文本单元生成向量表示的过程。这些向量表示捕获关于文本的语义和句法信息,使机器能够更有效地理解和处理自然语言。

在Terminal(终端)中输入以下内容: (ingest.py文件在privateGPT文件夹中)

1
$ python ingest.py 

根据您使用的机器和您放入source_documents文件夹中的文档数量,嵌入处理可能需要相当长的时间才能完成。

完成后,您将看到如下内容:

1
2
3
4
Loading documents from source_documents
Loaded 1 documents from source_documents
Split into 692 chunks of text (max. 500 characters each)
Using embedded DuckDB with persistence: data will be stored in: db

Embedding文件保存在db文件夹中,格式为Chroma db:

img

Chroma 是一个开源的向量数据库。

开始提问题吧

您现在可以提问了!

在Terminal中输入以下命令:

1
$ python privateGPT.py

加载模型需要一段时间。在此过程中,您将看到以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Using embedded DuckDB with persistence: data will be stored in: db
gptj_model_load: loading model from 'models/ggml-gpt4all-j-v1.3-groovy.bin' - please wait ...
gptj_model_load: n_vocab = 50400
gptj_model_load: n_ctx   = 2048
gptj_model_load: n_embd  = 4096
gptj_model_load: n_head  = 16
gptj_model_load: n_layer = 28
gptj_model_load: n_rot   = 64
gptj_model_load: f16     = 2
gptj_model_load: ggml ctx size = 4505.45 MB
gptj_model_load: memory_size =   896.00 MB, n_mem = 57344
gptj_model_load: ................................... done
gptj_model_load: model size =  3609.38 MB / num tensors = 285

Enter a query:

At the prompt, you can type in your question. I asked: “*What is the population in Singapore?*”. It took privateGPT quite a while to come up with the answer. Once it managed to find an answer, it give you the answer and cited the source for the answer:

Enter a query:提示符后面,你可以输入你的问题。问:“新加坡的人口是多少?”。privateGPT可能需要花很长时间才想出了答案。一旦它找到了答案,它就会给出答案并引用答案的来源:

img

你可以继续问后续的问题:

img

总结

虽然privateGPT目前还处于概念验证阶段,但它看起来很有希望,然而,它还没有准备好投入生产。这里有几个问题:

  • 推理缓慢。执行文本嵌入需要一段时间,但这是可以接受的,因为这是一次性的过程。然而,推理很慢,特别是在较慢的机器上。我用的是32GB内存的M1 Mac电脑,仍然花了一段时间才得出答案。
  • 占用内存。privateGPT使用大量内存,在问了一两个问题后,我将得到内存不足的错误,如下所示:

segmentation fault python privateGPT.py. /Users/weimenglee/miniforge3/lib/python3.10/multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be 1 leaked semaphore objects to clean up at shutdown. warnings.warn(‘resource_tracker: There appear to be %d ‘

在privateGPT的作者修复上述两个问题之前,privateGPT仍然是一个实验,以了解如何在不将私有数据暴露给云的情况下训练LLM。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1173005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K8S知识点(三)

(1)环境搭建-环境初始化 Centos的版本是有要求的必须是7.5或以上,否则安装出来的集群是有问题的Node节点可能加入不到集群中来 详细步骤 1.同时连接三台服务器:查看一下版本 是否正确 2.主机名解析,方便节点之间的…

PDF文件解析

一、PDF文件介绍 PDF是英文Portable Document Format缩写,就是可移植的意思,它是以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,PostScript咱也不懂,估计和SVG的原理差不多吧…

视频剪辑技巧:批量合并视频,高效省时,添加背景音乐提升品质

随着社交媒体的兴起,视频制作越来越受到人们的关注。掌握一些视频剪辑技巧,可以让我们轻松地制作出令人惊艳的视频。本文将介绍一种高效、省时的视频剪辑技巧,帮助您批量合并视频、添加背景音乐,并提升视频品质。现在一起来看看云…

Redis那些事儿(二)

文章目录 1. 前言2. 消息队列(发布和订阅)应用场景:消息通知、Websocket集群 3. WebSocket集群示例 1. 前言 接着上一篇Redis那些事儿(一) ,这一篇主要介绍Redis的发布和订阅功能,可以实现高效的…

代码随想录算法训练营第11天|20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

JAVA代码编写 20. 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括…

2024最新mac电脑清理垃圾的软件有哪些?

mac电脑是许多人喜爱的电子产品,它拥有优美的设计、流畅的操作系统和强大的性能。但是,随着使用时间的增长,mac电脑也会积累一些不必要的垃圾文件,这些文件会占用宝贵的存储空间,影响电脑的运行速度和稳定性。因此&…

华为OD机试 - 服务失效判断 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…

第五章:java标识符|关键字|保留字|键盘输入

系列文章目录 文章目录 系列文章目录前言一、标识符二、关键字三、保留字四、键盘输入语句总结 前言 java程序就是对象的操作,对象名要起的好。 一、标识符 标识符命名规范例子包名多单词组成时所有字母都小写: aaa.bbb.ccccom.hsp.crm类名、 接口名多单…

Pycharm的安装与基本使用

Pycharm的安装与基本使用 一、Pycharm介绍1.1 Pycharm简介1.2 Pycharm特点 二、Pycharm软件下载2.1 Pycharm官网2.2 下载Pycharm 三、安装Pycharm3.1 指定安装目录3.2 勾选安装选项3.3 选择菜单目录3.4 安装成功 四、Pycharm的初始配置4.1 新建工程4.2 选择Python解释器4.3 打开…

阅读论文StyleGAN2-ada

在图像分类任务中,使用旋转、噪声等数据增强方法训练图像分类器,可以提高分类器对这些保留语义的扭曲的不变性,这是图像分类器极为期望的一种质量。 引用Bora等人的工作,指出只要增强过程可以表示为概率分布上的可逆变换,那么训练过程中网络可以消除这种增强,找到正确的分布。…

Windows ObjectType Hook 之 OkayToCloseProcedure

1、背景 Object Type Hook 是基于 Object Type的一种深入的 Hook,比起常用的 SSDT Hook 更为深入。 有关 Object Type 的分析见文章 《Windows驱动开发学习记录-ObjectType Hook之ObjectType结构相关分析》。 这里进行的 Hook 为 其中之一的 OkayToCloseProcedure。…

(后续补充)vue+express、gitee pm2部署轻量服务器

首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 关闭防火墙 systemctl stop firewalld 重新载入防火墙使设置生效 firewall-cmd --reload 后端的 pm2.config.cjs …

一文理解JPA中的save()方法为什么有时候只能插入无法更新

总结:使用save()方法更新某一具体的记录(如用户密码),必须要提供该记录的ID。 以常见的用户管理为例,当我们调用userRepository.save()时,这是它背后的逻辑: 如果实体的ID为null或者不在数据库…

C++标准模板(STL)- 类型支持 (类型属性,is_abstract,is_signed,is_unsigned)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

Qt学习:图形视图框架的使用

文章目录 前言一、场景、视图和图形项的介绍二、图形视图框架的坐标系统三、图形视图框架的事件处理四、示例完整代码五、QtCreator官方示例总结 前言 近期重温了一下Qt中的图形视图框架&#xff0c;这里将所学习的内容进行记录总结。这个框架提供了一个基于图形项的模型视图编…

基于match_phrase搜索的分词优化

ES 的match_phrase 搜索需要完整匹配输入的内容&#xff0c;比如我们搜索 ‘中国人民’ &#xff0c;要保证的是doc中必须有 ‘中国人民’ 的内容出现。再比如我们搜索 ‘国人民’ 时&#xff0c;结果集中的 doc 中就要有 ‘国人民’ 的内容。一般在使用match 或 term 搜索的时…

DL Homework 6

目录 一、概念 &#xff08;1&#xff09;卷积 &#xff08;2&#xff09;卷积核 &#xff08;3&#xff09;特征图 &#xff08;4&#xff09;特征选择 &#xff08;5&#xff09;步长 &#xff08;6&#xff09;填充 &#xff08;7&#xff09;感受野 二、探究不同卷…

植物花粉深度学习图片数据集大合集

最近收集了一波有关于植物花粉的图片数据集&#xff0c;可以用于相关深度学习模型的搭建&#xff0c;废话不多说&#xff0c;上数据集&#xff01;&#xff01;&#xff01; 1、23种花粉类型805张花粉图像数据集 关于此数据&#xff1a;花粉种类和类型的分类是法医抱粉学、考…

2023年中国金融控股公司研究报告

第一章 行业概况 1.1 定义 金融控股公司这一术语最初源自美国&#xff0c;特别是在美国的《金融服务法案》关于银行控股公司组织结构的条文中&#xff0c;首次出现了“金融控股公司”&#xff08;Financial Holding Company&#xff09;这一法律术语&#xff0c;尽管法案中并…

2023年【高压电工】报名考试及高压电工最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高压电工报名考试考前必练&#xff01;安全生产模拟考试一点通每个月更新高压电工最新解析题目及答案&#xff01;多做几遍&#xff0c;其实通过高压电工作业考试题库很简单。 1、【单选题】 ()是指继电器不动作时处于…