跑在笔记本里的大语言模型 - GPT4All

news2024/9/21 21:07:30

何为GPT4All

GPT4All 官网给自己的定义是:一款免费使用、本地运行、隐私感知的聊天机器人,无需GPU或互联网。

从官网可以得知其主要特点是:

  1. 本地运行(可包装成自主知识产权🐶)
  2. 无需GPU(穷人适配)
  3. 无需联网(某国也可运行)
  4. 同时支持Windows、MacOS、Ubuntu Linux(环境要求低)
  5. 是一个聊天工具

模型介绍

GPT4All支持多种不同大小和类型的模型,用户可以按需选择。

序号模型许可介绍
1ggml-gpt4all-j-v1.3-groovy.bin商业许可基于GPT-J,在全新GPT4All数据集上训练
2ggml-gpt4all-113b-snoozy.bin非商业许可基于Llama 13b,在全新GPT4All数据集上训练
3ggml-gpt4all-j-v1.2-jazzy.bin商业许可基于GPT-J,在v2 GPT4All数据集上训练。
4ggml-gpt4all-j-v1.1-breezy.bin商业许可基于GPT-J,在v1 GPT4All数据集上训练
5ggml-gpt4all-j.bin商业许可基于GPT-J,在v0 GPT4All数据集上训练
6ggml-vicuna-7b-1.1-q4_2.bin非商业许可基于Llama 7b,由加州大学伯克利分校、加州大学医学院、斯坦福大学、麻省理工大学和加州大学圣地亚哥分校的团队训练。
7ggml-vicuna-13b-1.1-g4_2.bin非商业许可基于Llama 13b,由加州大学伯克利分校、加州大学医学院、斯坦福大学、麻省理工大学和加州大学圣地亚哥分校的团队训练。
8ggml-wizardLM-7B.q4_2.bin非商业许可基于Llama 7b,由微软和北京大学训练。
9ggml-stable-vicuna-13B.q4_2.bin非商业许可基于Llama 13b和RLHF,由Stable AI训练

GPT4All的模型是一个 3GB - 8GB 的​​文件,目前由Nomic AI进行维护。

nomic.ai 公司

模型的维护公司nomic.ai是怎样一家公司,它为什么要免费开发和维护这些模型呢?它在官网上是这样写的:

现在,由于人工智能的兴起,我们的世界正在发生巨大的变化。现代人工智能模型在互联网规模的数据集上进行训练,并以前所未有的规模制作内容。它们正在迅速渗透到地球上的每一个行业——从国防、医药、金融到艺术。
对这些模型的访问由少数资金充足、越来越隐秘的人工智能实验室控制。如果这种趋势持续下去,人工智能的好处可能会集中在极少数人手中。
我们的 GPT4All 产品实现了前所未有的AI访问,让任何人都能从AI技术中受益,而不受硬件、隐私或地缘政治限制。

一句话来说:担心AI技术被少数人控制,并且对此付诸实际行动。

LLM大语言模型

gpt4all使用的模型是大语言模型(Large Language Model),它采用深度学习方法来理解和生成自然语言文本。这些模型通过在大量文本数据上进行训练,学习到丰富的语言知识和基于上下文的语义理解。一旦训练完成,大语言模型可以用来完成问题回答、文本生成、语言翻译等多种任务。

最常用的大语言模型架构是Transformer,它由Google Brain的一个团队在2017年提出。这种架构采用自注意力机制(Self-Attention Mechanism),能够捕捉文本中长距离的依赖关系。随着模型大小和训练数据量的增加,大语言模型的性能也在不断提高。

例如,OpenAI发布了如GPT(Generative Pre-trained Transformer)等一系列大语言模型。GPT-3是其中的一个代表性模型,拥有1750亿个参数,表现出了强大的生成能力和多任务学习能力。

GPT-J语言模型

gpt4all使用的语言模型主要分两类:GPT-J和LLaMA。

GPT-J 是一个在 Pile 上训练的 60 亿参数开源英语自回归语言模型。由 EleutherAI 在2021年发布,它遵循了GPT-2的架构,在发布时,它是世界上最大的公开可用的 GPT-3 风格语言模型。GPT-J的任务表现和OpenAI的GPT-3版本非常相似,甚至在代码生成水平上还要略胜一筹。

最新版本GPT-J-6B是基于一个开源的825GB精选语言建模数据集The Pile生成。

LLaMA语言模型

LLaMA(Large Language Model Meta AI)是一种大语言模型,它是由Meta AI研究团队2023年开发的,用于自然语言处理任务。LLaMA 使用 transformer 架构。

LLaMA 的开发人员曾报告说,LLaMA使用130亿参数的模型在大多数NLP基准测试中的性能超过了更大的GPT-3(具有1750亿参数)

本地部署的环境要求:AVX

本地部署的环境要求很容易达成,如下:

  1. CPU支持AVX
  2. 4GB内存

AVX是Intel在2011年推出的一种指令集扩展,全称是Advanced Vector Extensions,用于加速浮点运算和整数运算。它扩展了SSE指令集,可以同时对多个数据进行操作。带有AVX的CPU可以获得很大的性能提升,特别是在图像处理、科学计算等方面。支持AVX的CPU可以利用AVX指令集和YMM寄存器来执行更强大和更高效的向量化运算,从而获得更高的性能。

AVX2完全兼容AVX指令集并有所扩展。所以,AVX2特性是向过去兼容AVX的,具有AVX2特性的CPU可以运行使用AVX指令集编译的代码。

要想了解自己的CPU是否支持AVX,可以使用如下命令:

Linux下:

cat /proc/cpuinfo | grep avx

MacOS下:

sysctl -a | grep machdep.cpu|grep AVX

如果输出中包含AVX字样,说明处理器支持AVX技术;如果没有输出,则说明当前主机不支持AVX技术。

本地部署

本地部署有两种方式可选:

  1. 直接运行官方提供的二进制包(需要使用最新的系统)
  2. 源代码本地编译

有AVX2支持

官方提供的bin的编译环境版本非常高,以至于在老一些的系统上均无法运行,所以如果你的系统不够新,推荐使用源码编译的方式。

以支持AVX2的苹果电脑为例:

苹果电脑:系统需要macOS 12.6以上
下载 https://gpt4all.io/installers/gpt4all-installer-darwin.dmg 运行即可

只有AVX支持

git clone --depth=1 https://github.com/zanussbaum/gpt4all.cpp.git
cd gpt4all.cpp
mkdir build; cd build
cmake -D LLAMA_NO_AVX2=1 -D LLAMA_NO_FMA=1 ..
make
wget "https://the-eye.eu/public/AI/models/nomic-ai/gpt4all/gpt4all-lora-quantized.bin"
./chat -m ./gpt4all-lora-quantized.bin

输出

main: seed = 1683710151
llama_model_load: loading model from './gpt4all-lora-quantized.bin' - please wait ...
llama_model_load: ggml ctx size = 6065.35 MB
llama_model_load: memory_size =  2048.00 MB, n_mem = 65536
llama_model_load: loading model part 1/1 from './gpt4all-lora-quantized.bin'
llama_model_load: .................................... done
llama_model_load: model size =  4017.27 MB / num tensors = 291

system_info: n_threads = 4 / 8 | AVX = 1 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | VSX = 0 |
main: interactive mode on.
sampling parameters: temp = 0.100000, top_k = 40, top_p = 0.950000, repeat_last_n = 64, repeat_penalty = 1.300000


== Running in chat mode. ==
 - Press Ctrl+C to interject at any time.
 - Press Return to return control to LLaMA.
 - If you want to submit another line, end your input in '\'.

>

在这里插入图片描述

没有AVX支持

git clone --depth=1 https://github.com/zanussbaum/gpt4all.cpp.git
cd gpt4all.cpp
make
wget "https://the-eye.eu/public/AI/models/nomic-ai/gpt4all/gpt4all-lora-quantized.bin"
./chat -m gpt4all-lora-quantized.bin

实验记录

下面实验下gpt4all的效果。

打个招呼,10分钟就得到了回复,挺好:

> hello
Hello World!

在这里插入图片描述

问个天文问题(双机测试):

> How long does it take for the moon to orbit once?
The Moon takes 27 days, 8 hours and 43 minutes (or about one month) to complete its orbital cycle around Earth. This is because of tidal locking which keeps only half of the lunar surface permanently illuminated by sunlight.

> How long does it take for the moon to orbit once
The time taken by Moon to complete one revolution around Earth is called lunar day and its duration depends on various factors such as distance between Sun, Moon &Earth. On average Lunar Day lasts 27 days but can vary from 24 hours (lunation) or even less than a hour in some cases due to the elliptical orbit of moon around Earth.

AI思考了半个小时后给出了答案,大山侃得不错,科普尚需调教。

在这里插入图片描述

问个编程问题:

> Write a helloworld program using rust
\`\`\`rust
fn main() {
    println!("Hello, world!"); // Outputs "hello" to stdout and exits with status 0 (success)
}
\`\`\`

两个小时给出答案。。。

最后来个中文问题:

> 为什么哪里都有”存在”而没有绝对的虚无?
因为“存在”是一种感知,所以我们能看到其中,但不会说明那个物体或者事件完全停止。这样就算了!

> 为什么哪里都有”存在”而没有绝对的虚无?
因为“存在”是一种概念,不能用于表示真实性或物理地位。 这个概快侧面就像说:绝对的虚无可以有相应的透明度和形状,而“存在”是一种概念,不能用于表示真实性或物理地位。 因此,当人们想象出了绝对的虚无时,他们就会逃过这个问题,而且也是为了保持概念中心主义和不能用于物理地位。

这是个困难的问题,计算机计算了几个小时才输出答案,不过还没有超过750万年。。。[1]

在这里插入图片描述

总结

gpt4all在优秀模型的支持下,也是相当厉害的。但没有高配服务器的话,由于性能问题,又不好弄到生产环境中提供实际服务。大家有什么好的解决方法,欢迎评论区留言。
(GPU服务器会火一波吗?)

附录

[1]. 750万年
在《银河系漫游指南》中,为了回答关于“生命,宇宙以及万事万物的终极问题”的答案,超级计算机“深思”运行了整整750万年才计算出最终的答案。

Reference

  • https://en.wikipedia.org/wiki/LLaMA
  • https://en.wikipedia.org/wiki/EleutherAI#The_Pile
  • https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)
  • https://www.eleuther.ai/
  • https://gpt4all.io/
  • https://github.com/facebookresearch/llama
  • https://github.com/nomic-ai/gpt4all

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

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

相关文章

sort、uniq、tr、cut的使用

管理文件内容的使用 一、sort命令二、uniq命令三、tr命令四、cut命令 一、sort命令 sort命令是以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序,比较原则是从首字符向后,依次按ASCII码进行比较,最后将他们按升序输…

Linux:rpm查询安装 yum安装

环境: 需要插入安装镜像 镜像内有所需的安装库 我这里使用的虚拟机直接连接光盘 连接的光盘挂载在/dev/cdrom 由于我们无法直接进入,所以选择把/dev/cdrom挂载到别的地方即可 mount /dev/cdrom /123 将/dev/cdrom 挂载到 /123 目录下 Packages下就是…

C++笔记—— 第十七篇 智能指针 C++11来了(下)

目录 1. 为什么需要智能指针 2. 内存泄漏 2.1 什么是内存泄漏,内存泄漏的危害 2.2 内存泄漏分类 2.3如何避免内存泄漏 3.智能指针的使用及原理 3.1 RAII 3.2 智能指针的原理 3.3 std::auto_ptr 3.4 std::unique_ptr 3.5 std::shared_ptr shared_ptr的线…

JVM性能调优

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参…

【牛客刷题专栏】0x28:JZ30 包含min函数的栈(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…

【神经网络】tensorflow实验9--分类问题

1. 实验目的 ①掌握逻辑回归的基本原理,实现分类器,完成多分类任务; ②掌握逻辑回归中的平方损失函数、交叉熵损失函数以及平均交叉熵损失函数。 2. 实验内容 ①能够使用TensorFlow计算Sigmoid函数、准确率、交叉熵损失函数等&#xff0c…

(浙大陈越版)数据结构 第二章 线性结构 2.4 多项式的加法和乘法运算实现

目录 2.4.1多项式的加法运算实现 如何设计一个函数分别求两个一元多项式的和? 算法思路:两个指针p1,p2分别指向两个多项式的第一个结点(最高项)并循环 循环: 2.4.2 多项式的乘积 1.多项式的表示 2.程…

IPsec VPN IKE方式协商密钥

实验拓扑 要求pc1与pc2两个网络访问走ipsec隧道互访。 前言: ipsecs 隧道两端的acl规则定义的协议类型要一致,如果一端是ip协议,另一端也必须是ip协议 配置acl的原因是:1,通过acl(permit)指定需…

Metalama released Crack

Metalama released Crack Metalama是一个面向C#的元编程框架。它可以帮助您提高代码质量和生产力。使用Metalama,您可以通过在编译过程中动态生成样板文件来减少样板文件。您的源代码仍然非常清晰。根据体系结构、模式和约定实时验证代码。无需等待代码评审。通过定…

React从入门到实战 - React初体验

文章目录 特点相关JS库步骤准备步骤操作步骤 关于虚拟DOMJSX语法规则函数式组件常见的几种错误正确写法 类式组件 特点 采用组件化模式,声明式编程,提高开发效率及组件复用率在React Native 中使用React语法进行移动端开发使用虚拟DOM优秀的Diffing算法…

Java8 map.getOrDefault()你真的了解吗

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 map.getOrDefault()方法 在Java编程中,Map是一种非常常用的数据结构。Map通常用于存储键值对,其中每个键映射到一个值。当我们尝试访问一个不…

文件一直处于修改状态 git checkout 无法还原的问题解决方法

问题描述 最近在 RT-Thread 时,使用 Git 回退版本验证问题,后来 git pull 拉取最新代码后,发现里面有几个文件,一直为【修改】状态,并且无法还原,git checkout xxx git reset --hard 都用了,依旧…

基于AT89C51单片机的温度控制系统报警器

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87771724?spm1001.2014.3001.5503 源码获取 单片机读取温度传感器当前的温度值并在LCD液晶显示屏上的第一行显示当前的温度值,单片机读取按键状态并通过…

Flask框架之异常处理、请求钩子、上下文的使用

Flask框架之异常处理、请求钩子、上下文的使用 异常处理捕获指定异常状态码捕获指定异常类型抛出HTTP Exception 请求钩子概述基本使用 请求上下文概述应用上下文current_app对象g对象 请求上下文request对象session对象 异常处理 捕获指定异常状态码 可以使用app.errorhandle…

Github的使用

1.基本概念: 仓库(Repository):仓库用来存放项目代码,每个项目对应一个仓库,多个开源项目则有多个仓库 收藏(Star):收藏项目,方便下次查看 复制克隆项目:(Fork&#x…

JVM类加载、类变量初始化顺序

题目 先来看一个题目,以下程序的输出结果是什么 运行结果 关于类加载机制 关于JVM的类加载 《深入理解Java虚拟机》中关于类加载是这样说的: Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化&#x…

【SLAM学习】基于Pangolin绘制运动轨迹

Pangolin是一个轻量级的跨平台视图控制库,主要用于可视化、交互和调试三维数据。该库提供了一系列图形界面工具,包括窗口、OpenGL渲染器、3D相机、图像显示等,可以方便地进行三维数据可视化和交互。 Pangolin库的主要特点如下: 轻…

SpringBoot的多配置文件

文章目录 1.配置文件的命名规则2.配置文件选择3.配置文件的优先级 1.配置文件的命名规则 配置文件一般要求以application开头,可以是.yml结尾的文件,也可以是.properties结尾的文件。 2.配置文件选择 当有多个配置文件,需要指定其中一个生…

关于C语言取余运算的那些大坑

0.前言 您好,这里是limou3434的一篇个人博文,感兴趣的话您也可以看看我的其他文章,本次我想给您带来的是关于C语言操作符‘%’的一些奇怪现象以及背后的原理解释,本章用了一点点python语法(比如在python中“//”是整除…

C++开发环境的搭建-Windows:VSCode+mingw64+CMake

文章目录 一、软件安装1. 网址及下载的软件2. VSCode中配置关于C的最简插件: 二、C调试环境的编译要求1. 在编译时要带-g参数2. 多文件编译需要分步编译 三、VSCode的调试配置如下:1. 单文件调试设置4. 多文件调试设置 一、软件安装 1. 网址及下载的软件…