【完全指南】如何在本地运行LLM模型:提高模型性能与运行速度
00 分钟
2023-7-28
2023-8-26
type
status
slug
summary
date
tags
category
password
Text
AI summary
AI custom autofill
Multi-select
Status
URL
hashtag
勘误
标签
标题
类型
贴文
🪄
icon
Meta 刚刚发布了 Llama 2 [1],这是一个允许免费研究和商业使用的大型语言模型(LLM)。预计它将引发另一波本地LLM在此基础上进行微调的浪潮。
自 2 月底 Llama 的第一个版本发布后,开源社区一直非常积极地尝试构建开放且本地可访问的 LLM,作为 ChatGPT 的替代品。
我一直在密切关注这一趋势——我已经运行并测试了数十个可以在商业硬件上运行的本地LLM,因为我真正期待未来每个人都可以拥有自己的个人LLM助理,而不受中央提供商的限制。对于以LLM为基础构建产品的企业来说,这些模型也可以是更加私密、安全和可定制的选择。
在这篇文章中,我将分享我对这些本地LLM的了解,包括您的(最佳)选择是什么、如何运行它们以及如何为您的用例选择正确的设置。我将解释加载和运行模型所需了解的所有内容,无论您是否有编程经验。我还将为这些 LLM 分享一些现成的 Google Colab WebUI,您可以自己尝试一下。
(如果您只是有兴趣尝试这些模型,可以访问此存储库,其中我包含了 WebUI Colab Notebooks。)
notion image
一些本地LLM和 Colab WebUI 链接的列表

为什么我们需要本地LLM

如果您不熟悉本地LLM,您可能会想,“如果我们已经拥有强大的 ChatGPT,为什么我们需要本地LLM?” 我承认,当我第一次听说 ChatGPT 的本地替代品时,我也持怀疑态度。但当我与 ChatGPT 和其他托管LLM(如 Anthropic 的 Claude 或 Google 的 Bard)进行更多互动时,我意识到本地LLM除了文本生成功能之外还提供一些独特的优势——数据隐私、安全性、离线可用性、定制以及减少对外部服务的依赖。使用LLM时的所有重要方面。
如果您关心隐私或经营的企业与关心隐私的用户交互,那么将您或您客户的数据发送给 OpenAI 或其他提供商可能不是一个非常明智的主意。通过在您自己的设备或服务器上运行本地LLM,您可以保持对数据的完全控制。
如果您的互联网连接不可靠或位于 OpenAI/Claude/Google 禁止使用的地区,本地LLM可能是一个很好的选择,可以完全离线工作。无论您身在何处,都可以享受人工智能的帮助。
如果您正在寻找不受限制或未经审查的使用,那么您可以使用本地 LLM 实现比 ChatGPT/Claude 更大的定制,特别是当这些模型给出越来越多的以“作为 AI 语言模型,我……”开头的响应时。
notion image
诚然像ChatGPT或Claude这样的模型很强大,但是当你遇到上述情况时,当地的LLM就成为了救星。从我的测试来看,其中一些实际上还不错。
在接下来的部分中,我将深入介绍本地 LLM 的详细信息,包括您需要了解的模型格式、绑定、UI、参数等所有信息,以帮助您找到最适合您的选择。

常见模型格式

人们共享这些本地大型语言模型的一个常见网站是HuggingFace这最初是一个致力于基于 Transformer 架构的模型的网站,但后来扩展到其他人工智能模型。Transformer 架构是 ChatGPT 和大多数开源本地大型语言模型的基础结构。
(如果您有兴趣了解 ChatGPT 或 Transformer 架构,可以阅读这篇文章:ChatGPT 的工作原理,为非技术人员解释
您可能会在此站点上发现许多不同的模型格式并感到困惑。让我介绍一些最常见的模型格式以及何时应该选择哪种格式。
第一种格式是pytorch 或 pt这种格式的模型的文件名中通常包含 pytorch。PyTorch 是一个开源框架,用于构建和训练神经网络模型。这种格式的模型通常是基于 Transformer 的 LLM 的原始版本。您可能会看到其中一些模型的名称中包含 fp16 或 fp32,这意味着“Float16”或“Float32”,表示模型的“精度”。数字越小,精度越低。但降低精度也可以减少模型的内存使用和存储,使它们更容易在消费类硬件上访问。
第二种常见的格式是GGML它基于 Georgi Gerganov(因此称为“gg”)开发的库,该库最初允许模型在 CPU 和 RAM 上运行。这种格式使用大型语言模型的“量化”,通过近似模型权重来进一步减少其大小和资源需求,以便它们可以在消费类硬件上运行。这种格式仍在积极开发中,并经历了一些主要的版本更改。目前,该格式允许模型在CPU或CPU+GPU上运行,最新的稳定版本是“ggmlv3”。
GGML 模型支持许多不同的量化,例如 q2、q3、q4_0、q4_1、q5、q_6、q_8 等。您还可能会看到它们的名称中有扩展名,例如“K_M”或“K_S”。q 数字表示使用多少位来近似模型(即我们前面提到的精度)。K 表示新的量化技术,“M”和“S”表示模型大小。目前,平衡质量和资源需求的最佳选择是Q5_K_M、Q5_K_S和Q4_K_M。精度较低的模型质量损失较高,而精度较高的模型尺寸太大。
第三种格式是GPTQ格式,这是生成预训练 Transformer (GPT) 的另一种量化格式 [4]。它们通常以“.safetensors”扩展名进行分发。这种格式的模型通常是 4 位量化的(有些是 3 位的),您可以使用 GPU 加速来运行这些模型,以获得非常快的推理速度。
由于LLM领域的一切都是新的,人们正在积极开发新技术,因此还有许多其他模型格式,例如ONNX。这些只是目前更常见和最广泛支持的格式。
对我来说,一般的经验法则是,对于相同的模型,如果我可以将其完全加载到我的 GPU 中(即我的 GPU VRAM 比模型大),我将选择 GPTQ 格式,因为它允许非常快速的推理。如果我无法完全加载它并且必须使用 CPU,我会选择带有 Q5_K_M 的 GGML 格式,以便在推理速度和质量之间取得更好的平衡。

使用本地 LLM 的模型加载器、绑定和 UI

选择模型后,您还可以找到一种通过编程语言绑定或通过 UI(如果您不知道如何编码)来加载和运行模型(也称为执行推理)的方法。在本节中,我将快速介绍程序员和非技术读者最常见的选项。
对于 GPTQ 格式模型,最常见的运行方法是使用GPTQ-for-LLaMa [5]、AutoGPTQ [6] 和ExLlama/ExLlama-HF [7]。这些用于模型的量化和加载模型以进行推理。如果您的 GPU 上有足够的 VRAM,ExLlama 加载程序可提供最快的推理速度。
对于 GGML 格式模型,最常见的选择是llama.cpp,许多 UI 都是基于此实现构建的。这允许在消费类硬件甚至移动电话上快速推断LLM。有许多基于 llama.cpp 的编程绑定,包括用于 Python [9] 的 llama-cpp-python、用于 Node.js [10] 的 llama-node、用于 Go [11] 的 go-llama.cpp 等等。
对于非技术读者来说,一个简单的入门方法是选择一个围绕加载器/绑定的 UI。以下是一些最常见且易于使用的 UI:
  • GPT4All[12]:基于 llama.cpp 的 UI,适用于可在 Windows、MacOS 或 Linux 上运行的 GGML 模型。
  • Kobold.cpp[13]:基于 llama.cpp 的 GGML 模型 UI,旨在使用 LLM 进行编写。
  • LM Studio[14]:您可以在该软件中基于 llama.cpp 发现、下载和运行本地 GGML LLM。
notion image
用于运行本地 LLM 模型的不同 UI

使用参数和预设自定义模型输出

现在,您已经选择了模型和工具来运行它。您可能会惊讶地发现这些本地LLM为您提供了更多可配置的参数。这就是本地LLM的优点——您可以完全控制模型,并且可以配置它以最适合您的特定任务。
对LLM输出质量影响较大的参数/设置是top-p、top-k、温度、repetition_penalty和turn templates。
您可以认为Top-pTop-k在推理时控制大型语言模型的“词汇量”。由于这些模型通过计算可用单词的概率来预测下一个标记(单词),因此我们可以控制模型在可能存在多个标记时如何选择下一个标记。top-p 参数选择累积概率超过阈值的标记。top-k 参数仅选择概率最高的 k 个标记。
使用较低的 top-p 值(例如 0.15),您可以允许出现概率较低的更罕见的标记,但是使用较高的 top-p 值(例如 0.8),您基本上可以将它们从生成词汇表中删除。使用像 1 这样的小 top-k,您只采样最可能的单词;top-k 越大,您将获得更多不同的结果。
在通过 top-p或top-k 选择可能的标记后,温度就会出现使用top-p或top-k选择潜在代币池后,您可以使用温度来控制结果的随机性。温度的作用实际上是改变令牌的概率——温度越高,池中任何单词被抽取的概率就越均等,因此结果就越随机。
重复惩罚是一个参数,告诉模型在生成文本时应该多久使用相同的标记。如果重复惩罚很高,则模型不太可能重复过去说过的话或陷入重复同一句子的循环中。
次模板告诉模型应该如何处理对话。由于这些模型是文本生成模型,如果我们想与它们进行对话,我们本质上是要求它继续根据机器人和人类(你)之间的对话脚本生成文本。每个模型可以在其训练数据中使用不同的回合模板。使用模型时,最好使用模型训练所用的相同转弯模板,以产生最佳结果。
如果您对所有这些参数感到困惑,请不要担心。一些UI如Oobaboogas文本生成UI已经保存了一个配置文件,可以根据模型自动设置模板。他们通常还提供一些预设参数选择。Oobabooga 的创建者举办了一场比赛来比较 241 种不同的预设,发现以下内容受到许多用户的青睐(如果您想自己尝试,这是一个很好的起点):
如果您想写奇幻作品或想要更多创意结果,您可以尝试更高的温度、更低的 top_p、更大的 top_k 和更高的重复惩罚。如果您正在寻找更具确定性的聊天机器人,您可以尝试较低的温度、较高的 top_p 和较小的 top_k。

轻松选择最适合您的用例的型号

开源社区在创建和微调模型方面非常出色,每天都会有数十个新模型问世。如果您只查看所有模型并且不可能下载并尝试每个模型,您可能会感到不知所措。
我尝试了许多可以在消费类硬件上运行的模型(我的是 i5 CPU、32GB RAM 和 8GB VRAM),并根据一系列测试问题对模型进行了粗略排名。您可以在此 GitHub 存储库中找到我的结果: https: //github.com/Troyanovsky/Local-LLM-comparison我还将不断添加新模型。您可以选择排名较高的模型来开始玩。
目前,我选择的一般推理和聊天模型是 Llama-2–13B-chat 和 WizardLM-13B-1.0;对于未经审查的聊天/角色扮演或故事写作,您可能会幸运地尝试 Nous-Hermes-13B。但我强烈建议您尝试这些模型,看看它们是否适合您。
为了让你的生活更轻松,我为模型制作了 Colab WebUI,这样你只需点击几下就可以使用 Google 提供的免费 GPU 来测试模型。只需选择一个模型,单击“在 Colab 中打开”,运行笔记本,然后单击底部出现的 UI 链接。
notion image
只需运行单元格即可获取 WebUI
notion image
单击出现的链接以打开 UI

要点

我相信读完这篇文章后,您在当地经营自己的LLM不会有任何问题,我希望它能对您的生活和工作有所帮助。以下是本文主要内容的快速回顾:
与 ChatGPT/Claude/Bard 等托管服务相比,本地LLM可以提供数据隐私、安全性、离线可用性、定制等更多功能。
现在最常见的格式是 pytorch、GGML(用于 CPU+GPU 推理)、GPTQ(用于 GPU 推理)和 ONNX 模型。
有许多绑定和 UI 可以让您轻松尝试本地 LLM,例如 GPT4All、Oobabooga、LM Studio 等。
您可以使用 top-p、top-k、重复惩罚和温度等参数自定义本地 LLM 的输出。
您可以在这里轻松尝试使用 Coab WebUI 的LLM。

相关链接和参考资料:

 
 

作者:赵国栋

评论