# 自托管 AI 模型

# 简介

本指南旨在帮助您设置在 PC 上运行本地 AI 的 SillyTavern(从现在开始我们将使用正确的术语并称之为 LLM)。在用技术支持问题打扰他人之前,请先阅读本指南。

# 什么是最好的大型语言模型?

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

# 什么是最佳配置?

如果有最佳或无需思考的设置,还需要配置吗?最佳配置是对您有效的配置。这是一个试错过程。

# 硬件要求和指南

这是一个复杂的主题,因此我将坚持要点并进行概括。

  • 您可以从互联网下载数千个免费的 LLM,类似于 Stable Diffusion 有大量可用于生成图像的模型。
  • 运行未经修改的 LLM 需要拥有大量 VRAM(GPU 内存)的强大 GPU。比您拥有的要多得多。
  • 可以通过使用量化技术(如 GPTQ 或 AWQ)压缩模型来减少 VRAM 要求。这会使模型的能力略有下降,但大大减少了运行它的 VRAM 要求。突然间,这使拥有像 3080 这样的游戏 GPU 的人能够运行 13B 模型。虽然它不如未经量化的模型好,但仍然很好。
  • 更好的是:还有一种称为 GGUF(以前是 GGML)的模型格式和量化,已成为没有强大 GPU 的普通人的首选格式。这允许您完全不需要 GPU 使用 LLM。它只会使用 CPU 和 RAM。这比使用 GPTQ/AWQ 在 GPU 上运行 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 文件 + 仓库中的所有其他文件(tokenizer、configs 等)来获得完整模型。
  • 截至 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
  • 点击"文件和版本"。您将看到几个文件的列表。这些都是相同的模型,但提供不同的量化选项。点击文件'kunoichi-dpo-v2-7b.Q6_K.gguf',这给我们一个 6 位量化。
  • 点击"下载"按钮。您的下载应该开始。

# 如何识别模型类型

好的模型上传者如 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 在您的 PC 上,我们需要下载一个工具,作为 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,您将立即能够使用模型字段旁边的浏览按钮选择您的 GGUF 模型,如上面链接的那个。
  3. 默认情况下,即使您在 SillyTavern 中设置得更高,KoboldCpp 也以最大 4K 上下文运行,如果您希望以更高上下文运行模型,请确保在启动模型之前调整此屏幕上的上下文滑块。请记住,更多的上下文大小意味着更高的(视频)内存要求,如果您设置得太高或加载对您的系统来说太大的模型,KoboldCpp 将自动开始使用您的 CPU 处理无法放入 GPU 的层,这将慢得多。
  4. 点击启动,如果一切顺利,将打开一个包含 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。这将解锁 Quantized KV Cache 滑块,较低的数字意味着模型的内存/智能较少。
  4. 在较慢的系统上运行 KoboldCpp,处理提示需要很长时间?当您避免使用 Lorebooks、随机化或其他动态更改输入的功能时,Context Shifting 效果最好。保持启用上下文转换 KoboldCpp 将帮助您避免长时间重新处理。

# 安装 Oobabooga

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

  1. git clone https://github.com/oobabooga/text-generation-webui(或在浏览器中下载他们的 repo 为 .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. 点击模型选项卡
  3. 在下拉菜单中,选择我们的 Kunoichi DPO v2 模型。它应该自动选择了 llama.cpp 加载器。
  4. (可选)我们之前多次提到"GPU 卸载":这是此页面上的 n-gpu-layers 设置。如果您想使用它,请在加载模型之前设置一个值。作为基本参考,将其设置为 30 对于 13B 及以下模型仅使用不到 6GB VRAM。(它随模型架构和大小而变化)
  5. 点击加载

# 配置 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。