自托管 AI 模型

简介

本指南旨在帮助您在自己的电脑上使用 SillyTavern 运行本地 AI(从现在开始,我们将使用正确的术语,称之为 LLM)。在询问技术支持问题之前,请先阅读本指南。

哪些大语言模型最好?

这个问题无法回答,因为没有标准化的"最佳"衡量标准。社区在 Reddit 和 Discord 上有足够的资源和讨论,可以形成对首选/常用模型的一些看法。您的体验可能会有所不同。

什么是最佳配置?

如果存在最佳或显而易见的设置,还需要配置吗?最佳配置是适合您的配置。这是一个反复试验的过程。

硬件要求和方向

这是一个复杂的主题,所以我会坚持基本要点并进行概括。

  • 您可以从互联网上下载数千个免费的 LLM,类似于 Stable Diffusion 有大量可用于生成图像的模型。
  • 运行未经修改的 LLM 需要具有大量 VRAM(GPU 内存)的强大 GPU。比您能拥有的还要多。
  • 可以通过使用 GPTQ 或 AWQ 等量化技术来压缩模型,从而减少 VRAM 要求。这使模型的能力略有下降,但大大减少了运行它所需的 VRAM。突然间,这让拥有 3080 等游戏 GPU 的人也能运行 13B 模型。虽然它不如未量化的模型好,但仍然不错。
  • 更好的是:还存在一种称为 GGUF(以前称为 GGML)的模型格式和量化方法,它已成为没有强大 GPU 的普通用户的首选格式。这允许您完全不使用 GPU 就能运行 LLM。它只会使用 CPU 和 RAM。这比在 GPU 上使用 GPTQ/AWQ 运行 LLM 要慢得多(可能慢 15 倍),特别是在提示词处理期间,但模型的能力同样出色。然后 GGUF 创建者通过添加一个配置选项进一步优化了 GGUF,该选项允许拥有游戏级 GPU 的用户将模型的部分内容卸载到 GPU,使他们能够以 GPU 速度运行部分模型(注意,这不会减少 RAM 要求,它只会提高您的生成速度)。
  • 有不同大小的模型,根据它们训练时使用的参数数量命名。您会看到像 7B、13B、30B、70B 等名称。您可以将这些视为模型的大脑大小。来自同一模型系列的 13B 模型将比 7B 更强大:它们在相同的数据上训练,但更大的大脑可以更好地保留知识并思考得更连贯。更大的模型也需要更多的 VRAM/RAM。
  • 有几种量化程度(8 位、5 位、4 位等)。位数越低,模型退化越严重,但硬件要求也越低。因此,即使在性能较差的硬件上,您也可能能够运行所需模型的 4 位版本。甚至还有 3 位和 2 位量化,但在这一点上,您已经在浪费时间了。还有进一步的量化子类型,命名为 k_s、k_m、k_l 等。k_m 比 k_s 好,但需要更多资源。
  • 上下文大小(您的对话在模型丢弃部分内容之前可以变得多长)也会影响 VRAM/RAM 要求。幸运的是,这是一个可配置的设置,允许您使用较小的上下文来减少 VRAM/RAM 要求。(注意:基于 Llama2 的模型的上下文大小是 4k。Mistral 宣传为 8k,但实际上是 4k。)
  • 2023 年的某个时候,NVIDIA 更改了他们的 GPU 驱动程序,如果您需要的 VRAM 超过 GPU 所拥有的,任务不会崩溃,而是会开始使用常规 RAM 作为备用。这会降低 LLM 的写入速度,但模型仍然可以工作并提供相同质量的输出。幸运的是,这种行为可以禁用

考虑到以上所有因素,硬件要求和性能完全取决于模型系列、模型类型、模型大小、量化方法等。

模型大小计算器

您可以使用 Nyx 的模型大小计算器来确定需要多少 RAM/VRAM。

记住,您想要运行可以适应您内存的最大、最少量化的模型,即不会导致磁盘交换

下载 LLM

要开始,您需要下载一个 LLM。找到和下载 LLM 最常见的地方是 HuggingFace。那里有数千个可用的模型。查找 GGUF 模型的好方法是查看 bartowski 的账户页面:https://huggingface.co/bartowski。如果您不想要 GGUF,他会链接到原始模型页面,在那里您可能会找到该模型的其他格式。

在给定模型的页面上,您会找到一堆文件。

  • 您可能不需要所有这些文件!对于 GGUF,您只需要 .gguf 模型文件(通常 4-11GB)。如果您找到多个大文件,通常都是同一模型的不同量化版本,您只需要选择一个。
  • 对于 .safetensors 文件(可以是 GPTQ 或 AWQ 或 HF 量化或未量化),如果您在文件名中看到像 model-00001-of-00003.safetensors 这样的数字序列,那么您需要所有 3 个 .safetensors 文件 + 仓库中的所有其他文件(分词器、配置等)才能获得完整的模型。
  • 截至 2024 年 1 月,Mixtral MOE 8x7B 被广泛认为是本地 LLM 的最新技术。如果您有 32GB 的 RAM 来运行它,一定要尝试一下。如果您的 RAM 少于 32GB,那么使用 Kunoichi-DPO-v2-7B,尽管它的大小较小,但一开始就表现出色。

下载 Kunoichi-DPO-v2-7B 的步骤

我们将在本指南的其余部分使用 Kunoichi-DPO-v2-7B 模型。它是一个基于 Mistral 7B 的出色模型,只需要 7GB RAM,并且表现远超其规模。注意:Kunoichi 使用 Alpaca 提示。

  • 前往 https://huggingface.co/brittlewis12/Kunoichi-DPO-v2-7B-GGUF
  • 点击"Files and versions"。您会看到几个文件的列表。这些都是同一个模型,但提供了不同的量化选项。点击文件"kunoichi-dpo-v2-7b.Q6_K.gguf",这给我们一个 6 位量化。
  • 点击"download"按钮。您的下载应该开始了。

如何识别模型类型

像 TheBloke 这样优秀的模型上传者会给出描述性的名称。但如果他们没有:

  • 文件名以 .gguf 结尾:GGUF CPU 模型(显然)
  • 文件名以 .safetensors 结尾:可以是未量化的,或 HF 量化的,或 GPTQ,或 AWQ
  • 文件名是 pytorch-***.bin:与上面相同,但这是一个较旧的模型文件格式,允许在加载模型时执行任意 Python 脚本,被认为是不安全的。如果您信任模型创建者,或者别无选择,您仍然可以使用它,但如果有选择,请选择 .safetensors。
  • 存在 config.json?查看它是否有 quant_method。
  • q4 表示 4 位量化,q5 是 5 位量化,等等
  • 您看到像 -16k 这样的数字?那是增加的上下文大小(即您的对话在模型忘记聊天开始之前可以变得多长)!注意,更高的上下文大小需要更多的 VRAM。

安装 LLM 服务器:Oobabooga 或 KoboldAI

现在 LLM 在您的电脑上了,我们需要下载一个工具,作为 SillyTavern 和模型之间的中间人:它将加载模型,并将其功能作为本地 HTTP Web API 暴露出来,供 SillyTavern 使用,就像 SillyTavern 与 OpenAI GPT 或 Claude 等付费网络服务通信一样。您使用的工具应该是 KoboldAI 或 Oobabooga(或其他兼容工具)。

本指南涵盖了这两个选项,您只需要一个。

下载和使用 KoboldCpp(无需安装,GGUF 模型)

  1. 访问 https://koboldai.org/cpp,您将看到最新版本和各种可下载的文件。 在撰写本文时,他们列出的最新 CUDA 版本是 cu12,这将在现代 Nvidia GPU 上运行最好,如果您有较旧的 GPU 或不同品牌,您可以使用常规的 koboldcpp.exe。如果您有旧 CPU,KoboldCpp 可能会在您尝试加载模型时崩溃,在这种情况下,尝试 _oldcpu 版本看看是否能解决您的问题。
  2. KoboldCpp 不需要安装,一旦您启动 KoboldCpp,您就可以使用"Model"字段旁边的"Browse"按钮立即选择您的 GGUF 模型,如上面链接的模型。
  3. 默认情况下,KoboldCpp 的最大上下文为 4K,即使您在 SillyTavern 中设置更高,如果您希望以更高的上下文运行模型,请确保在启动模型之前调整此屏幕上的上下文滑块。请记住,更多的上下文大小意味着更高的(视频)内存要求,如果您设置得太高或加载的模型对您的系统来说太大,KoboldCpp 将自动开始使用您的 CPU 来处理无法放入 GPU 的层,这将慢得多。
  4. 点击"Launch",如果一切顺利,将打开一个新的网页,显示 KoboldAI Lite,您可以在那里测试一切是否正常工作。
  5. 打开 SillyTavern 并点击 API 连接(顶部栏中的第二个按钮)
  6. 将 API 设置为"文本补全",API 类型设置为 KoboldCpp。
  7. 将服务器 URL 设置为 http://127.0.0.1:5001/ 或 KoboldCpp 给您的链接(如果它不在同一系统上运行)(您可以激活 KoboldCpp 的远程隧道模式以获取可从任何地方访问的链接)。
  8. 点击连接。它应该成功连接并检测到 kunoichi-dpo-v2-7b.Q6_K.gguf 作为模型。
  9. 与角色聊天以测试它是否工作。

优化 KoboldCpp 速度的提示

  1. Flash Attention 将帮助减少内存要求,根据您的系统,它可能更快或更慢,并且将允许您在 GPU 上放置比默认更多的层。
  2. KoboldCpp 会为其他软件留出一些空间,当它猜测层以防止问题时,如果您打开的程序很少,并且无法将模型完全放入 GPU,您可能可以添加一些额外的层。
  3. 如果模型对上下文大小使用了太多内存,您可以通过量化 KV 来减少这个问题。这将降低输出质量,但可以帮助您在 GPU 上放置更多层。要做到这一点,您需要转到 KoboldCpp 中的 Tokens 标签,然后禁用 Context Shifting 并启用 Flash Attention。这将解锁量化 KV 缓存滑块,数字越低意味着模型的内存/智能越少。
  4. 在较慢的系统上运行 KoboldCpp,处理提示词需要很长时间?当您避免使用知识库、随机化或其他动态更改输入的功能时,Context Shifting 效果最好。保持启用 context shifting,KoboldCpp 将帮助您避免长时间的重新处理。

安装 Oobabooga

这是一个更正确/傻瓜式的安装程序:

  1. git clone https://github.com/oobabooga/text-generation-webui(或在浏览器中将他们的仓库下载为 .zip,然后解压)
  2. 运行 start_windows.bat 或您的操作系统对应的文件
  3. 当被问及时,选择您的 GPU 类型。即使您打算使用 GGUF/CPU,如果您的 GPU 在列表中,现在就选择它,因为它将给您一个称为 GPU 分片的速度优化选项(无需从头重新安装)。如果您没有游戏级 dGPU(NVIDIA、AMD),选择 None。
  4. 等待安装完成
  5. 将 kunoichi-dpo-v2-7b.Q6_K.gguf 放在 text-generation-webui/models 中
  6. 打开 text-generation-webui/CMD_FLAGS.txt,删除里面的所有内容并写入:--api
  7. 重启 Oobabooga
  8. 访问 http://127.0.0.1:5000/docs。它是否加载了一个 FastAPI 页面?如果没有,您在某个地方出错了。

在 Oobabooga 中加载我们的模型

  1. 在浏览器中打开 http://127.0.0.1:7860/
  2. 点击 Model 标签
  3. 在下拉菜单中,选择我们的 Kunoichi DPO v2 模型。它应该已经自动选择了 llama.cpp 加载器。
  4. (可选)我们之前多次提到"GPU 卸载":那就是这个页面上的 n-gpu-layers 设置。如果您想使用它,在加载模型之前设置一个值。作为基本参考,将其设置为 30 对于 13B 及以下的模型使用不到 6GB VRAM。(它随模型架构和大小而变化)
  5. 点击 Load

配置 SillyTavern 与 Oobabooga 通信

  1. 点击 API 连接(顶部栏中的第二个按钮)
  2. 将 API 设置为"文本补全"
  3. 将 API 类型设置为"默认(Oobabooga)"
  4. 将服务器 URL 设置为 http://127.0.0.1:5000/
  5. 点击连接。它应该成功连接并检测到 kunoichi-dpo-v2-7b.Q6_K.gguf 作为模型。
  6. 与角色聊天以测试它是否工作

结论

恭喜,您现在应该有一个正常工作的本地 LLM 了。