#
自托管 AI 模型
本指南基于作者的个人经验和知识,并非绝对真理。所有陈述都应持保留态度。如果您有任何更正或建议,请在 Discord 上联系我们或向 SillyTavern 文档仓库 发送 PR。
#
简介
本指南旨在帮助您设置在 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(或其他兼容工具)。
本指南涵盖两个选项,您只需要一个。
如果您在 Docker 上托管 SillyTavern,请使用 http://host.docker.internal:\<port> 而不是 http://127.0.0.1:\<port>。这是因为 SillyTavern 从在 Docker 容件中运行的服务器连接到 API 端点。Docker 的网络堆栈与主机的网络堆栈是分开的,因此环回接口不共享。
#
下载和使用 KoboldCpp(无需安装,GGUF 模型)
- 访问 https://koboldai.org/cpp,您将看到最新版本,其中包含各种可下载的文件。 在撰写本文时,他们列出的最新 CUDA 版本是 cu12,在现代 Nvidia GPU 上效果最好,如果您有较旧的 GPU 或其他品牌,您可以使用普通的 koboldcpp.exe。如果您有旧的 CPU,KoboldCpp 在尝试加载模型时可能会崩溃,在这种情况下,请尝试 _oldcpu 版本以查看是否能解决您的问题。
- KoboldCpp 不需要安装,一旦启动 KoboldCpp,您将立即能够使用模型字段旁边的浏览按钮选择您的 GGUF 模型,如上面链接的那个。
- 默认情况下,即使您在 SillyTavern 中设置得更高,KoboldCpp 也以最大 4K 上下文运行,如果您希望以更高上下文运行模型,请确保在启动模型之前调整此屏幕上的上下文滑块。请记住,更多的上下文大小意味着更高的(视频)内存要求,如果您设置得太高或加载对您的系统来说太大的模型,KoboldCpp 将自动开始使用您的 CPU 处理无法放入 GPU 的层,这将慢得多。
- 点击启动,如果一切顺利,将打开一个包含 KoboldAI Lite 的新网页,您可以在其中测试一切是否正常工作。
- 打开 SillyTavern 并点击 API 连接(顶部栏中的第二个按钮)
- 将 API 设置为文本完成,API 类型设置为 KoboldCpp。
- 将服务器 URL 设置为 http://127.0.0.1:5001/ 或 KoboldCpp 给您的链接(如果它不在同一系统上运行)(您可以激活 KoboldCpp 的远程隧道模式以获取可从任何地方访问的链接)。
- 点击连接。它应该成功连接并检测到 kunoichi-dpo-v2-7b.Q6_K.gguf 作为模型。
- 与角色聊天以测试其是否工作。
#
优化 KoboldCpp 速度的技巧
- Flash Attention 将帮助减少内存要求,根据您的系统,它可能更快或更慢,并允许您在 GPU 上放置比默认更多的层。
- KoboldCpp 在猜测层时会为其他软件留出一些空间以防止问题,如果您打开的程序很少且无法将模型完全放入 GPU,您可能能够添加一些额外的层。
- 如果模型为上下文大小使用过多内存,您可以通过量化 KV 来减少这一点。这将降低输出质量,但可以帮助您在 GPU 上放置更多层。为此,请转到 KoboldCpp 中的 Tokens 选项卡,然后禁用 Context Shifting 并启用 Flash Attention。这将解锁 Quantized KV Cache 滑块,较低的数字意味着模型的内存/智能较少。
- 在较慢的系统上运行 KoboldCpp,处理提示需要很长时间?当您避免使用 Lorebooks、随机化或其他动态更改输入的功能时,Context Shifting 效果最好。保持启用上下文转换 KoboldCpp 将帮助您避免长时间重新处理。
#
安装 Oobabooga
这是一个更正确/傻瓜式的安装程序:
- git clone https://github.com/oobabooga/text-generation-webui(或在浏览器中下载他们的 repo 为 .zip,然后解压)
- 运行 start_windows.bat 或您的操作系统对应的文件
- 当询问时,选择您的 GPU 类型。即使您打算使用 GGUF/CPU,如果您的 GPU 在列表中,现在就选择它,因为它将为您提供以后使用称为 GPU 分片的速度优化的选项(无需从头重新安装)。如果您没有游戏级 dGPU(NVIDIA、AMD),请选择 None。
- 等待安装完成
- 将 kunoichi-dpo-v2-7b.Q6_K.gguf 放入 text-generation-webui/models
- 打开 text-generation-webui/CMD_FLAGS.txt,删除其中的所有内容并写入:--api
- 重新启动 Oobabooga
- 访问 http://127.0.0.1:5000/docs。它是否加载了 FastAPI 页面?如果没有,您在某处搞错了。
#
在 Oobabooga 中加载我们的模型
- 在浏览器中打开 http://127.0.0.1:7860/
- 点击模型选项卡
- 在下拉菜单中,选择我们的 Kunoichi DPO v2 模型。它应该自动选择了 llama.cpp 加载器。
- (可选)我们之前多次提到"GPU 卸载":这是此页面上的 n-gpu-layers 设置。如果您想使用它,请在加载模型之前设置一个值。作为基本参考,将其设置为 30 对于 13B 及以下模型仅使用不到 6GB VRAM。(它随模型架构和大小而变化)
- 点击加载
#
配置 SillyTavern 与 Oobabooga 通信
- 点击 API 连接(顶部栏中的第二个按钮)
- 将 API 设置为文本完成
- 将 API 类型设置为默认(Oobabooga)
- 将服务器 URL 设置为 http://127.0.0.1:5000/
- 点击连接。它应该成功连接并检测到 kunoichi-dpo-v2-7b.Q6_K.gguf 作为模型。
- 与角色聊天以测试其是否工作
#
结论
恭喜,您现在应该有一个可工作的本地 LLM。