LLM推理部署(三):一个强大的LLM生态系统GPT4All

图片

        GPT4All,这是一个开放源代码的软件生态系,它让每一个人都可以在常规硬件上训练并运行强大且个性化的大型语言模型(LLM)。Nomic AI是此开源生态系的守护者,他们致力于监控所有贡献,以确保质量、安全和可持续维护性。

        GPT4All软件旨在优化运行在笔记本电脑、台式机和服务器CPU上的3-13亿参数的大型语言模型的推理性能。

GPT4All的软件生态系由以下部分组成:

  • gpt4all-backend:这是GPT4All的后端部分,维护并提供了一个通用的、性能优化的C API,专为运行具有多亿参数的Transformer解码器的推理而设计。这个C API可以被整合到许多高级编程语言中,如C++、Python、Go等。

  • gpt4all-bindings:这个部分包括实现C API的各种高级编程语言的GPT4All绑定。每个子目录都是一个绑定的编程语言。命令行界面(CLI)也包含在其中。

  • gpt4all-api:GPT4All API(初级开发阶段)公开了一些REST API端点,用于从大型语言模型中提取生成的输出和嵌入。

  • gpt4all-chat:GPT4All Chat是一个在macOS、Windows和Linux平台上运行的原生聊天应用程序。这是在常规硬件上运行本地、注重隐私的聊天助手的最佳方式。你可以在GPT4All网站上下载该应用程序,并在monorepo中查看其源代码。

GPT4All软件生态系兼容以下Transformer架构:

  • Falcon

  • LLaMA (including OpenLLaMA)

  • MPT (including Replit)

  • GPT-J

你可以在官方网站或模型目录中查看支持的模型的完整列表。

        GPT4All的模型是通过神经网络量化过程生成的。一般来说,一个具有多亿参数的Transformer解码器需要30+ GB的显存来执行一个前向传递。但大多数人并没有如此强大的计算机或使用GPU硬件的权限。因此,通过运行训练过的LLM经过量化算法,部分GPT4All模型能够在仅有4-8GB RAM的笔记本电脑上运行,从而让更多人能够使用。更大的模型可能需要更多的RAM。

        所有使用这些架构进行训练的模型都可以被量化,并在所有GPT4All绑定和聊天客户端上本地运行。你还可以通过向gpt4all-backend贡献新的模型来扩大模型种类。

        本地LLM的推理速度取决于两个因素:模型的大小以及作为输入的令牌数量。如果你想使用大于750个令牌的上下文窗口,你可能希望在GPU上运行GPT4All模型,因为大量的上下文提示可能会显著降低本地LLM的推理速度。GPT4All模型的本地GPU支持正在计划中。

       关于推理性能:哪个模型最好?这个问题实际上取决于你的特定用途。LLM遵循指令的能力依赖于其训练的预训练数据的数量和多样性,以及LLM进行微调的数据的多样性、质量和准确性。GPT4All的目标是将最强大的本地助手模型带到你的桌面,而Nomic AI正在积极努力提升它们的性能和质量。

GPT4All Python Generation

        GPT4All的Python生成API为您提供了与C/C++模型后端库的链接功能。源代码及本地构建指南可在此找到。

        首先,您需要将GPT4All的Python包添加到您的项目中,可使用pip安装如下:

pip install gpt4all

         安装完毕后,您可以利用以下示例代码来生成文本:

from gpt4all import GPT4All
model = GPT4All("orca-mini-3b.ggmlv3.q4_0.bin")
output = model.generate("The capital of France is ", max_tokens=3)
print(output)

        除此之外,GPT4All还支持聊天模式,这可以通过重用既有的计算历史来优化本地LLM的对话交互。您可以使用GPT4All的chat_session上下文管理器进行与模型的对话会话:

model = GPT4All(model_name='orca-mini-3b.ggmlv3.q4_0.bin')
with model.chat_session():response = model.generate(prompt='hello', top_k=1)response = model.generate(prompt='write me a short poem', top_k=1)response = model.generate(prompt='thank you', top_k=1)print(model.current_chat_session)

        当在chat_session上下文中运行GPT4All模型时,模型将提供一个与聊天相关的提示模板,同时保留了先前对话历史的内部K/V缓存,从而提升了推理速度。

GPT4All的generate()函数接收以下参数:

  • prompt (str):作为模型的提示语。

  • max_tokens (int):生成的最大令牌数。

  • temp (float):模型的“温度”。值越大,生成的文本越有创意,但可能偏离事实。

  • top_k (int):在每次生成步骤中,从最可能的top_k个令牌中进行随机选取。设置为1以执行贪婪解码。

  • top_p (float):在每次生成步骤中,从总概率为top_p的最可能的令牌中进行随机选取。

  • repeat_penalty (float):对模型重复的惩罚。值越高,生成的文本重复程度越低。

  • repeat_last_n (int):指定在模型生成历史中应用重复惩罚的距离。

  • n_batch (int):并行处理的提示令牌数量。增加此值可以减少延迟,但会增加资源需求。

  • n_predict (Optional[int]):与max_tokens功能相同,主要为了向后兼容。

  • streaming (bool):如果设置为True,此方法将返回一个生成器,此生成器会在模型生成令牌时产生。

       GPT4All还支持流式生成,您可以在生成时使用streaming = True参数与GPT4All的响应进行交互。当在聊天会话中流式传输令牌时,您需要手动处理聊天历史的收集和更新。

GPT4All Python Embeddings

        GPT4All提供了使用CPU优化的对比训练的句子转换器生成不受长度限制的文本文档的高级嵌入的支持。这些嵌入的质量在众多任务上与OpenAI的相媲美。

        首先,你需要安装GPT4All的Python包,具体操作如下,通过pip进行安装:

pip install gpt4all

        接下来,你可以按照下述示例代码来生成嵌入:

from gpt4all import GPT4All, Embed4All
text = 'The quick brown fox jumps over the lazy dog'
embedder = Embed4All()
output = embedder.embed(text)
print(output)

       若嵌入模型尚未安装,系统将自动完成下载。

       下表展示了嵌入生成的速度,这是在Intel i913900HX CPU上,采用DDR5 5600,运行8个线程以稳定负载状态下的文本文档生成速度:

图片

参考文献:

[1] https://zhuanlan.zhihu.com/p/644426780

[2] https://github.com/nomic-ai/gpt4all

[3] https://docs.gpt4all.io/

[4] https://gpt4all.io/index.html

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

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

相关文章

听GPT 讲Rust源代码--src/tools(6)

File: rust/src/tools/rust-analyzer/crates/ide/src/references.rs 在Rust源代码中,references.rs文件位于rust-analyzer工具的ide模块中,其作用是实现了用于搜索引用的功能。 该文件包含了多个重要的结构体、特质和枚举类型,我将逐一介绍它…

node.js-连接SQLserver数据库

1.在自己的项目JS文件夹中建文件:config.js、mssql.js和server.js以及api文件夹下的user.js 2.在config.js中封装数据库信息 let app {user: sa, //这里写你的数据库的用户名password: ,//这里写数据库的密码server: localhost,database: medicineSystem, // 数据…

OpenSSH 漏洞修复升级最新版本

Centos7系统ssh默认版本一般是OpenSSH7.4左右,低版本是有漏洞的而且是高危漏洞,在软件交付和安全扫描上是过不了关的,一般情况需要升级OpenSSH的最新版本 今天详细说下升级最新版本的处理过程(认真看会发现操作很简单&#xff0c…

Best Rational Approximation ——二分

许多微控制器没有浮点单元,但确实有一个(合理)快速整数除法单元。在这些情况下,使用有理值来近似浮点常数可能是值得的. 例如,355/113 3.1415929203539823008849557522124 是 π 3.14159265358979323846 一个很好的近…

【教学类-06-12】20231202 0-9数字分合-房屋样式(一)-下右空-升序-抽7题

作品展示-屋顶分合(0-9之间随机抽取7个不重复分合) 背景需求: 大班幼儿学分合题,通常区角里会设计一个“房屋分合”的样式 根据这种房屋样式,设计0-9内的升序分合题模板 素材准备 WORD样式 代码展示: 2-9…

PlantUML语法(全)及使用教程-用例图

目录 1. 用例图1.1、什么是用例图1.2、用例图的构成1.3、参与者1.4、用例1.4.1、用例基本概念1.4.2、用例的识别1.4.3、用例的要点1.4.3、用例的命名1.4.4、用例的粒度 1.5、应用示例1.5.1、用例1.5.2、角色1.5.3、改变角色的样式1.5.4、用例描述1.5.5、改变箭头方向1.5.6、使用…

AI创作ChatGPT源码+AI绘画(Midjourney绘画)+DALL-E3文生图+思维导图生成

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

C语言——指针(四)

📝前言: 上篇文章C语言——指针(三)对指针和数组进行了讲解,今天主要更深入的讲解一下不同类型指针变量的特点: 1,字符指针变量 2,数组指针变量 3,函数指针变量 &#x1…

Spring boot命令执行 (CVE-2022-22947)漏洞复现和相关利用工具

Spring boot命令执行 (CVE-2022-22947)漏洞复现和相关利用工具 名称: spring 命令执行 (CVE-2022-22947) 描述: Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本(包含)以前存在一处SpEL表达式注入漏洞,当攻击者可以访问A…

2022年8月2日 Go生态洞察:Go 1.19版本发布深度解析

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

6-63.圆类的定义与使用(拷贝构造函数)

本题要求完成一个圆类的定义,设计适当的函数:包括构造函数、拷贝构造函数以及析构函数,从而可以通过测试程序输出样例 在这里给出一组输入。例如: 5 输出样例: 在这里给出相应的输出。例如: Constructo…

本项目基于Spring boot的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ

在业务逻辑的异步处理,系统解耦,分布式通信以及控制高并发的场景下,消息队列有着广泛的应用。本项目基于Spring的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ添加和读取消息的功能。并比较了两种模式&…

osg LOD节点动态调度

1、LOD节点 LOD(level of detail):是指根据物体模型的结点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。在OSG的场景结点组织结构中&…

mongoose学习记录

mongoose安装和连接数据库 npm i mongoose导入mongoose const mongoose require(mongoose) mongoose.set("strictQuery",true)连接数据库 mongoose.connect(mongodb:127.0.0.1:27017/test)设置回调 mongoose.connection.on(open,()>{console.log("连接成…

规则引擎专题---3、Drools组成和入门

Drools概述 drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(例如存放在数据库中),使得业务规则的变更不需要修改项目代码、重启…

numpy实现神经网络

numpy实现神经网络 首先讲述的是神经网络的参数初始化与训练步骤 随机初始化 任何优化算法都需要一些初始的参数。到目前为止我们都是初始所有参数为0,这样的初始方法对于逻辑回归来说是可行的,但是对于神经网络来说是不可行的。如果我们令所有的初始…

手写VUE后台管理系统7 - 整合Less样式

整合LESS 安装使用 Less(Leaner Style Sheets),是一门向后兼容的 CSS 扩展语言。 Less 官网:https://less.bootcss.com/ 安装 yarn add less安装完成就可以直接使用了 使用 以文件形式定义全局样式 在 assets 目录下创建 less …

基于卷积神经网络的肺炎影像分类分割智能诊断系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义: 肺炎是一种常见的呼吸系统感染疾病,其主要病因包括细菌、病毒和真菌等。肺炎的早期诊断对于患者的治疗和预后至关重要。传统的肺炎诊断方…

打造个性化github主页 一

文章目录 概述创建仓库静态美化GitHub 统计信息卡仓库 GitHub 额外图钉仓库 热门语言卡仓库 GitHub 资料奖杯仓库 GitHub 活动统计图仓库 打字特效添加中文网站统计仓库 总结 概述 github作为全球最大的代码托管平台,作为程序员都多多少少,都使用过他。…

【排序】直接插入排序和希尔排序

目录 一、排序思想 1、直接插入排序 2、希尔排序 二、代码实现 三、性能比较 四、排序总结 1、直接插入排序 2、希尔排序 一、排序思想 1、直接插入排序 基本思想:把待排序的序列选取一个整数逐个插入到已经排好的有序序列中,直到所有整数都插入…