本地运行大语言模型(LLMs)

用例

像PrivateGPT、llama.cpp、Ollama、GPT4All、llamafile 等项目的流行度凸显了本地(在您自己的设备上)运行大型语言模型(LLMs)的需求。

这至少有两个重要的好处:

1.隐私:您的数据不会发送给第三方,也不会受到商业服务的服务条款的约束2.成本:没有推理费用,这对于需要大量令牌的应用(例如,长期运行的模拟、摘要)很重要

概述

在本地运行一个LLM需要几样东西:

1.开源LLM:可以自由修改和共享的开源LLM2.推理:在您的设备上以可接受的延迟运行此LLM的能力

开源LLMs

用户现在可以接触到快速增长的开源LLM集合。

这些LLM至少可以通过两个维度进行评估(见图):

1.基础模型:基础模型是什么,它是如何训练的?2.微调方法:基础模型是否经过了微调,如果是,使用了哪些指令集?

图片

推理

已经出现了一些框架,用于在各种设备上支持开源LLM的推理:

1.llama.cpp:带有权重优化/量化的llama推理代码的C++实现2.gpt4all:优化的C后端用于推理3.Ollama:将模型权重和环境捆绑到设备上运行的应用程序中,并提供LLM4.llamafile:将模型权重和运行模型所需的一切捆绑到一个单一文件中,允许您从这个文件本地运行LLM,无需任何额外的安装步骤

通常,这些框架会做几件事:

1.量化:减少原始模型权重的内存占用2.高效的推理实现:支持在消费级硬件上进行推理(例如,CPU或笔记本电脑GPU)

特别是,请参阅这篇(https://finbarr.ca/how-is-llama-cpp-possible/)关于量化重要性的优秀文章。

LLaMa权重所需的内存

参数数量 (B)浮点32位所需的RAM (GB)半精度浮点数所需的RAM (GB)8位整数所需的RAM (GB)4位整数所需的RAM (GB)
72814735
1352261365
32.51306532.516.25
65.2260.8130.465.232.6

通过减少精度,我们大幅减少了存储LLM所需的内存。

此外,我们可以看到GPU内存带宽表的重要性!

一个Mac M2 Max由于拥有更大的GPU内存带宽,在推理上比M1快5-6倍。

图片

快速开始

Ollama是在macOS上轻松运行推理的一种方式。

这里的说明提供了详细信息,我们总结如下:

•下载并运行应用程序•从命令行,从这个选项列表中获取模型:例如,ollama pull llama2•当应用程序运行时,所有模型都会自动在 localhost:11434 上提供服务

在这里插入图片描述

' The first man on the moon was Neil Armstrong, who landed on the moon on July 20, 1969 as part of the Apollo 11 mission. obviously.'

生成它们被创建时的流令牌。

from langchain_core.callbacks import CallbackManager, StreamingStdOutCallbackHandler

llm = Ollama(
    model="llama2", callback_manager=CallbackManager([StreamingStdOutCallbackHandler()])
)
llm.invoke("The first man on the moon was ...")

环境

推理速度是本地运行模型时的挑战(见上文)。

为了最小化延迟,最好在GPU上本地运行模型,许多消费级笔记本电脑都配备了GPU,例如苹果设备。

即使有GPU,可用的GPU内存带宽(如上所述)也很重要。

运行苹果 silicon GPU

Ollamallamafile 将自动利用苹果设备上的GPU。

其他框架要求用户设置环境以利用苹果GPU。

例如,llama.cpp Python绑定可以通过Metal配置为使用GPU。

Metal是苹果创建的一种图形和计算API,提供接近直接访问GPU的权限。

请参见此处的llama.cpp设置以启用此功能。

特别是,确保conda使用的是您创建的正确虚拟环境(miniforge3)。

例如,对我来说:

conda activate /Users/rlm/miniforge3/envs/llama

确认上述情况后,然后:

CMAKE_ARGS="-DLLAMA_METAL=on" FORCE_CMAKE=1 pip install -U llama-cpp-python --no-cache-dir

LLMs

有多种方法可以获得量化模型权重的访问权限。

1.HuggingFace - 许多量化模型可供下载,并可使用llama.cpp等框架运行。您也可以从HuggingFace下载llamafile格式的模型。2.gpt4all - 模型浏览器提供了一个排行榜,列出了可用的量化模型的指标和相关下载。3.Ollama - 可以通过pull直接访问几种模型。

Ollama

使用Ollama,通过 ollama pull : 获取模型:

•例如,对于Llama-7b:ollama pull llama2 将下载模型的最基本版本(例如,参数数量最少和4位量化)。•我们还可以指定模型列表中的特定版本,例如:ollama pull llama2:13b。•查看API参考页面上的完整参数集。

在这里插入图片描述

' Sure! Here's the answer, broken down step by step:\n\nThe first man on the moon was... Neil Armstrong.\n\nHere's how I arrived at that answer:\n\n1. The first manned mission to land on the moon was Apollo 11.\n2. The mission included three astronauts: Neil Armstrong, Edwin "Buzz" Aldrin, and Michael Collins.\n3. Neil Armstrong was the mission commander and the first person to set foot on the moon.\n4. On July 20, 1969, Armstrong stepped out of the lunar module Eagle and onto the moon's surface, famously declaring "That's one small step for man, one giant leap for mankind."\n\nSo, the first man on the moon was Neil Armstrong!'

Llama.cpp

Llama.cpp与广泛的模型兼容。

例如,我们在HuggingFace下载的4位量化的llama2-13b上运行推理。

如上所述,请参见API参考以获取完整的参数集。

从lamma.cpp API参考文档中,有一些值得评论的:

n_gpu_layers:要加载到GPU内存中的层数

•值:1•意义:通常只将模型的一层加载到GPU内存中(1通常足够)。

n_batch:模型应该并行处理的令牌数量

•值:n_batch•意义:建议选择1到n_ctx(在这个案例中设置为2048)之间的值。

n_ctx:令牌上下文窗口

•值:2048•意义:模型每次将考虑2048个令牌的窗口。

f16_kv:模型是否应该对键/值缓存使用半精度

•值:True•意义:模型将使用半精度,这可能更节省内存;Metal只支持True。

在这里插入图片描述

from langchain_community.llms import LlamaCpp
from langchain_core.callbacks import CallbackManager, StreamingStdOutCallbackHandler

llm = LlamaCpp(
    model_path="/Users/rlm/Desktop/Code/llama.cpp/models/openorca-platypus2-13b.gguf.q4_0.bin",    
    n_gpu_layers=1,    
    n_batch=512,    
    n_ctx=2048,    
    f16_kv=True,    
    callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),    
    verbose=True,
)

控制台日志将显示以下内容,以指示Metal已正确启用:

ggml_metal_init: allocatin
gggml_metal_init: using MPS
llm.invoke("The first man on the moon was ... Let's think step by step")

GPT4All

我们可以使用从GPT4All模型浏览器下载的模型权重。

与上面显示的类似,我们可以运行推理并使用API参考来设置感兴趣的参数。

llamafile

使用llamafile在本地运行LLM的最简单方法是:

  1. 从HuggingFace下载一个llamafile 2) 使文件可执行 3) 运行文件

llamafiles将模型权重和一个特别编译版本的llama.cpp捆绑到一个单一文件中,可以在大多数计算机上运行,无需任何额外依赖。它们还带有一个内置的推理服务器,提供与您的模型交互的API。

以下是一个简单的bash脚本,显示所有3个设置步骤:

# 从HuggingFace下载一个llamafile
wget https://huggingface.co/jartine/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/TinyLlama-1.1B-Chat-v1.0.Q5_K_M.llamafile

# 使文件可执行。在Windows上,改为将文件重命名为以".exe"结尾。
chmod +x TinyLlama-1.1B-Chat-v1.0.Q5_K_M.llamafile

# 启动模型服务器。默认监听 http://localhost:8080。
./TinyLlama-1.1B-Chat-v1.0.Q5_K_M.llamafile --server --nobrowser

运行上述设置步骤后,您可以使用LangChain与模型交互:

在这里插入图片描述

提示

一些LLM将从特定提示中受益。

例如,LLaMA将使用特殊标记。

我们可以使用ConditionalPromptSelector根据模型类型设置提示。

使用案例

鉴于从一个以上模型创建的llm,您可以将其用于许多用例。

例如,这里有一份使用本地LLM进行RAG的指南。

一般来说,本地LLM的用例可以由至少两个因素驱动:

隐私:用户不想共享的私有数据(例如,日记等)•成本:文本预处理(提取/标记)、摘要和代理模拟是使用大量令牌的任务

此外,这里还有一个关于微调的概述,可以利用开源LLM。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mars3d实现汽车尾气粒子效果从汽车屁股开始发射效果

本身的汽车尾气粒子效果:在汽车模型的中间发射的↓↓↓↓↓↓↓↓↓↓↓ Mars3d实例中是使用transY偏移值实现汽车尾气粒子效果从汽车屁股开始发射效果: // 动态运行车辆的尾气粒子效果 function addDemoGraphic4(graphicLayer) {const fixedRoute new…

【odoo】如何开启开发者模式,开启有什么作用?

概要 在 Odoo 中,开发者模式(Developer Mode)是一种专门为开发和调试提供的模式。启用开发者模式可以让开发人员访问到更多的功能和信息,从而更方便地进行模块开发、调试和测试。 启用方式(主要两种) 1.设…

windows实现python串口编程

一、windows安装python Welcome to Python.org 根据windows是64位找到对应的版本下载 下载完后直接安装即可! 打开cmd查看python版本 $ python --version #查看版本 二、串口编程 1、安装pyserial库 pyserial是Python中的一个库,用于处理串口通信。 cmd…

DDP算法之线性化和二次近似(Linearization and Quadratic Approximation)

DDP算法线性化和二次近似 在DDP算法中,第三步是线性化系统动力学方程和二次近似代价函数。这一步是关键,它使得DDP能够递归地处理非线性最优控制问题。通过线性化和二次近似,我们将复杂的非线性问题转换为一系列简单的线性二次问题,逐步逼近最优解。通过这些线性化和二次近…

如何解决 NumPy 无法计算其中一个 5 元素列表的标准差的问题

问题背景 在使用 NumPy 计算统计结果时发现,NumPy 能够接受原始数据列表来计算标准差,却无法接受经过计算后的结果列表。尝试将 std(f10) 替换为 std(solf10),但引发了错误:AttributeError: Float object has no attribute sqrt。…

vue页面前端初始化表格数据时报错TypeError: data.reduce is not a function

这是初始化表格数据时报的错 。 [Vue warn]: Invalid prop: type check failed for prop "data". Expected Array, got Object found in---> <ElTable> at packages/table/src/table.vue<List> at src/views/org/List.vue<Catalogue> at src/v…

Java毕业设计 基于SSM助学贷款管理系统

Java毕业设计 基于SSM助学贷款管理系统 SSM 助学贷款管理系统 功能介绍 学生&#xff1a;登录 修改密码 学生信息 贷款项目信息 申请贷款 留言信息 公告 学校负责人&#xff1a;登录 修改密码 学生管理 学校负责人信息 贷款项目 贷款申请审批 留言信息 公告 银行负责人&…

媒体邀约人物访谈,如何有效提升品牌影响力?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 品牌选择媒体邀约人物专访的形式来背书&#xff0c;可以带来以下好处&#xff1a; 增强品牌权威性&#xff1a;通过知名媒体的专访&#xff0c;品牌可以借助媒体的权威性来提升自身的信誉…

“运动过量”?想多了,普通骑友没那能力和意志力,好好骑车吧

最近听到“运动过量”这个词挺多的&#xff0c;身为骑行爱好者的校长&#xff0c;感觉又好笑又无奈&#xff0c;所以想写点东西&#xff0c;这篇文通过分析普通骑友的运动习惯、能力和意志力&#xff0c;探讨了“运动过量”这一概念在骑行领域中的适用性。文章指出&#xff0c;…

vue2实现一个简易实用的日历(可特殊标记多个日期)

效果如下&#xff1a; <template><div class"calendar"><div class"header"><button click"previousMonth"><</button><h2>{{ currentYear }}-{{ currentMonth }} </h2><button click"nex…

会员收银系统源码

会员营销是一种基于会员管理的营销方法&#xff0c;通过提供会员专属的优惠、服务和体验&#xff0c;吸引和保留客户&#xff0c;促进客户的持续消费。与直接打折相比&#xff0c;会员营销具有以下优势&#xff1a; 1.增强客户忠诚度 会员营销可以通过提供个性化的服务和专属…

【面试八股文】谈一谈你对TCP和UDP的区别是怎么理解的?

文章目录 一、TCP和UDP的区别,使用打电话和写信来类比1.1 TCP就像打电话1.2 UDP就像写信1.3 总结二、专业的讲解`TCP`和`UDP`的区别2.1 TCP和UDP的概念2.2 是否面向连接2.3 从连接对象个数来看2.3.1 UDP:UDP支持一对一、一对多、多对一、多对多的通信。2.3.3 TCP:TCP是一对一…

快速了解接口测试

1、定义 什么是接口测试&#xff1f; 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 接口测…

第一次创建next.js项目

当前环境和版本&#xff1a; 创建命令&#xff1a; npx create-next-applatest test-nextjs 下载过程&#xff1a; 虽然下载过程有warning&#xff0c;但是还是下载成功了 node.js稳定版本号&#xff1a;http://t.csdnimg.cn/WokUx 因为它前面warn说要> 18.17.0 所以下载了…

正则表达式常用表示

视频教程&#xff1a;10分钟快速掌握正则表达式 正则表达式在线测试工具&#xff08;亲测好用&#xff09;&#xff1a;测试工具 正则表达式常用表示 限定符 a*&#xff1a;a出现0次或多次a&#xff1a;a出现1次或多次a?&#xff1a;a出现0次或1次a{6}&#xff1a;a出现6次a…

如何避免WordPress更新导致的网站崩溃

我查阅过很多关于如何确保 WordPress 网站安全的建议&#xff0c;其中最常提到的就是及时更新 WordPress。 我按照建议更新了网站&#xff0c;结果却导致网站崩溃。 网站的瘫痪后&#xff0c;我甚至连WordPress仪表板都无法登陆&#xff0c;只留下了一条让我困惑的错误信息&a…

mysql数据库中触发器的使用

一、修改分隔符号 delimiter $$或者是//或者~~都行 二、创建触发器函数名称 create trigger 函数名 三、什么样的操作出发&#xff0c;操作那个表 after&#xff1a;.....之后触发 befor&#xff1a;.....之前触发 insert&#xff1a; 插入触发 update&#xff1a;修改被触发 d…

【Java】已解决java.lang.UnsupportedOperationException异常

文章目录 问题背景可能出错的原因错误代码示例正确代码示例注意事项 已解决java.lang.UnsupportedOperationException异常 在Java编程中&#xff0c;java.lang.UnsupportedOperationException是一个运行时异常&#xff0c;通常表示尝试执行一个不支持的操作。这种异常经常发生…

以太坊智能合约不能调用:一定注意智能合约地址,每次部署地址都会变化;nonce值 什么作用,是什么;在交易中调用智能合约添加附加信息

目录 以太坊智能合约不能调用 一定注意智能合约地址,每次部署地址都会变化 Transaction must include these fields: %r" % missing_keys 缺少nonce nonce值 什么作用,是什么 在交易中调用智能合约添加附加信息 1. 定义智能合约 2. 部署并调用智能合约 注意事项…

集合进阶:增强for循环和lambda表达式

一.增强for遍历 1.增强for的底层是迭代器,为了简化迭代器的代码书写的。 2.他是JDK5之后出现的,其内部原理就是一个lterrator迭代器。 3.所有的单列集合和数组才能用增强for进行遍历 二.格式 for(元素的数据类型 变量名;数组或者集合){} 三.代码 Collection<String>…