#
自托管 AI 模型
本指南基于作者的个人经验和知识,并不是绝对真理。所有陈述都应该谨慎对待。如果您有任何更正或建议,请在 Discord 上联系我们或向 SillyTavern 文档仓库发送 PR。
#
简介
本指南旨在帮助您在自己的电脑上使用 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(或其他兼容工具)。
本指南涵盖了这两个选项,您只需要一个。
如果您在 Docker 上托管 SillyTavern,请使用 http://host.docker.internal:
#
下载和使用 KoboldCpp(无需安装,GGUF 模型)
- 访问 https://koboldai.org/cpp,您将看到最新版本和各种可下载的文件。 在撰写本文时,他们列出的最新 CUDA 版本是 cu12,这将在现代 Nvidia GPU 上运行最好,如果您有较旧的 GPU 或不同品牌,您可以使用常规的 koboldcpp.exe。如果您有旧 CPU,KoboldCpp 可能会在您尝试加载模型时崩溃,在这种情况下,尝试 _oldcpu 版本看看是否能解决您的问题。
- KoboldCpp 不需要安装,一旦您启动 KoboldCpp,您就可以使用"Model"字段旁边的"Browse"按钮立即选择您的 GGUF 模型,如上面链接的模型。
- 默认情况下,KoboldCpp 的最大上下文为 4K,即使您在 SillyTavern 中设置更高,如果您希望以更高的上下文运行模型,请确保在启动模型之前调整此屏幕上的上下文滑块。请记住,更多的上下文大小意味着更高的(视频)内存要求,如果您设置得太高或加载的模型对您的系统来说太大,KoboldCpp 将自动开始使用您的 CPU 来处理无法放入 GPU 的层,这将慢得多。
- 点击"Launch",如果一切顺利,将打开一个新的网页,显示 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。这将解锁量化 KV 缓存滑块,数字越低意味着模型的内存/智能越少。
- 在较慢的系统上运行 KoboldCpp,处理提示词需要很长时间?当您避免使用知识库、随机化或其他动态更改输入的功能时,Context Shifting 效果最好。保持启用 context shifting,KoboldCpp 将帮助您避免长时间的重新处理。
#
安装 Oobabooga
这是一个更正确/傻瓜式的安装程序:
- git clone https://github.com/oobabooga/text-generation-webui(或在浏览器中将他们的仓库下载为 .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/
- 点击 Model 标签
- 在下拉菜单中,选择我们的 Kunoichi DPO v2 模型。它应该已经自动选择了 llama.cpp 加载器。
- (可选)我们之前多次提到"GPU 卸载":那就是这个页面上的 n-gpu-layers 设置。如果您想使用它,在加载模型之前设置一个值。作为基本参考,将其设置为 30 对于 13B 及以下的模型使用不到 6GB VRAM。(它随模型架构和大小而变化)
- 点击 Load
#
配置 SillyTavern 与 Oobabooga 通信
- 点击 API 连接(顶部栏中的第二个按钮)
- 将 API 设置为"文本补全"
- 将 API 类型设置为"默认(Oobabooga)"
- 将服务器 URL 设置为 http://127.0.0.1:5000/
- 点击连接。它应该成功连接并检测到 kunoichi-dpo-v2-7b.Q6_K.gguf 作为模型。
- 与角色聊天以测试它是否工作
#
结论
恭喜,您现在应该有一个正常工作的本地 LLM 了。