ChatGPT可以提供一些令人印象深刻的结果,但有时也会提供一些非常糟糕的建议。但是,虽然理论上与 ChatGPT 交谈是免费的,但通常您最终会收到有关系统容量已满或达到当天最大聊天数量的消息,并提示您订阅 ChatGPT Plus。此外,您的所有查询都在 ChatGPT 的服务器上进行,这意味着您需要互联网并且 OpenAI 可以看到您在做什么。
幸运的是,有多种方法可以使用 GPU 的强大功能在本地 PC 上运行类似 ChatGPT 的 LLM(大型语言模型)。oobabooga文本生成 webui(在新标签页中打开)可能正是您所追求的,所以我们进行了一些测试,以找出它可以做什么,不能做什么!— 做,这意味着我们也有一些基准。
让 webui 运行并不像我们希望的那么简单,部分原因在于 LLM 空间内的一切移动速度有多快。自述文件中有基本说明、一键式安装程序,以及有关如何构建和运行 LLaMa 4 位模型的多个指南(在新标签页中打开). 我们遇到了不同程度的成功/失败,但在 Nvidia 和其他公司的帮助下,我们终于成功了。然后更新了存储库,我们的说明失效了,但今天发布了解决方法/修复程序。再一次,它移动得很快!
这就像运行 Linux 并且只运行 Linux,然后想知道如何玩最新的游戏。有时您可以让它正常工作,有时您会收到错误消息和编译器警告,而您不知道如何解决。我们将在下面为那些想在自己的 PC 上试一试的人提供我们的说明版本。您还可以在LMSys Discord中找到一些有用的人(在新标签页中打开),他们很乐意帮助我解决一些问题。
这可能看起来很明显,但让我们也把它排除在外:如果您想自己运行大型语言模型,您将需要一个具有大量内存的 GPU,可能还需要大量系统内存硬件 – 就在名称中。在单个 GPU(或 CPU)上运行的许多工作都集中在减少内存需求上。
使用具有 16 位数据的基本模型,例如,使用RTX 4090、RTX 3090 Ti、RTX 3090或Titan RTX可以做到最好— 所有具有 24GB VRAM 的卡 — 用于运行具有 70 亿个参数的模型 (LLaMa-7b)。这是一个开始,但很少有家庭用户可能拥有这样的显卡,而且它的性能很差。值得庆幸的是,还有其他选择。
以 8 位精度加载模型可将 RAM 要求减半,这意味着您可以使用许多最好的显卡运行 LLaMa-7b——任何具有至少 10GB VRAM 的显卡都可能足够。更好的是,以 4 位精度加载模型再次将 VRAM 要求减半,从而允许 LLaMa-13b 在 10GB VRAM 上工作。(你还需要相当数量的系统内存,32GB 或更可能——这就是我们使用的,至少。)
获得模型至少不是太困难,但它们可能非常困难大的。例如 LLaMa-13b 包含36.3 GiB 的主要数据下载(在新标签页中打开),然后是另一个6.5 GiB 用于预量化的 4 位模型(在新标签页中打开). 您是否拥有 24GB VRAM 和 64GB 系统内存的显卡?然后是300亿参数模型(在新标签页中打开)只有75.7 GiB下载,另外 15.7 GiB 用于 4 位内容。甚至还有一个 650 亿参数模型,以防你有Nvidia A100 40GB PCIe(在新标签页中打开)方便的卡,以及 128GB 的系统内存(好吧,128GB 的内存加上交换空间)。希望下载这些模型的人在他们的互联网连接上没有数据上限。
测试文本生成 Web UI 性能
理论上,您可以通过 CUDA 在 Nvidia 的 GPU 上运行文本生成 Web UI,或者通过 ROCm 在 AMD 的显卡上运行。后者需要运行 Linux,并且在今年早些时候与这些东西进行了斗争以进行Stable Diffusion基准测试之后,我暂时通过了它。如果您有关于如何让它运行的工作说明(在 Windows 11 下,尽管允许使用 WSL2)并且您希望我尝试它们,请联系我,我会试一试。但现在我坚持使用 Nvidia GPU。
我在尝试在旧的图灵架构卡(如RTX 2080 Ti和Titan RTX)上运行 llama-13b-4bit 模型时遇到了一些有趣的错误。一切似乎都加载得很好,它甚至会吐出响应并给出每秒令牌的统计数据,但输出是垃圾。在运行 Turing GPU 的同时从一个全新的环境开始似乎已经奏效,解决了问题,因此我们拥有三代 Nvidia RTX GPU。
虽然理论上我们可以尝试在 VRAM 小于 10GB 的非 RTX GPU 和卡上运行这些模型,但我们希望使用 llama-13b 模型,因为它应该能提供比 7b 模型更好的结果。查看具有至少 10GB VRAM 的 Turing、Ampere 和 Ada Lovelace 架构卡,我们总共可以测试 11 个 GPU。我们觉得这比限制 24GB GPU 和使用 llama-30b 模型要好。
对于这些测试,我们使用了运行 Windows 11 的 Core i9-12900K。您可以在包装盒中看到完整的规格。我们为大多数 GPU 使用了参考 Founders Edition 模型,尽管 4070 Ti、3080 12GB 或 3060 没有 FE,而且我们只有 Asus 3090 Ti。
从理论上讲,该列表中最快和最慢的 GPU 之间应该存在相当大的差异。实际上,至少使用我们得到的代码,其他瓶颈肯定是一个因素。目前尚不清楚我们是否达到了 VRAM 延迟限制、CPU 限制或其他原因——可能是多种因素的组合——但你的 CPU 肯定发挥了作用。例如,我们在 Core i9-9900K 和 12900K 上测试了 RTX 4090,后者的速度几乎是后者的两倍。
看起来有些工作至少最终主要是单线程 CPU 受限。这可以解释从 9900K 到 12900K 的巨大改进。尽管如此,我们还是希望看到扩展性远远超出我们通过这些初始测试所能达到的水平。
考虑到研究、模型和界面发生的变化速度,可以肯定的是,我们将在未来几天看到大量改进。因此,不要将这些性能指标视为时间快照。我们可能会在未来的某个日期重新访问测试,希望在非 Nvidia GPU 上进行额外的测试。
我们使用以下内容运行 oobabooga 的 Web UI,以供参考。有关如何执行此操作的更多信息,请参见下文。
python server.py --gptq-bits 4 --model llama-13b
文本生成 Web UI 基准 (Windows)
同样,我们想在下面的图表前加上以下免责声明:如果我们考虑 GPU 工作负载的传统扩展,这些结果不一定有很大意义。通常,您最终要么 GPU 计算受限,要么受 GPU 内存带宽限制,或者两者兼而有之。这个特定的 AI 工作负载肯定还有其他因素在起作用,我们有一些额外的图表来帮助解释一些事情。
在 Windows 上运行也可能是一个因素,但考虑到与 Linux 相比,95% 的人可能在运行 Windows,因此这是关于目前预期结果的更多信息。我们想要无需处理 Linux 即可运行的测试,显然这些初步结果更像是事情运行的时间快照,而不是最终裁决。请这样理解。
我们在每个 GPU 上运行测试提示 30 次,最多 500 个标记。我们丢弃了所有少于 400 个标记的结果(因为它们做的工作更少),并且还丢弃了前两次运行(预热 GPU 和内存)。然后我们将结果按速度排序,取剩余十个最快结果的平均值。
一般来说,任何给定 GPU 的响应速度都非常一致,在测试的 GPU 上最多在 7% 的范围内,通常在 3% 的范围内。但是,那是在一台 PC 上;在另一台配备 Core i9-9900K 和 RTX 4090 的 PC 上,我们的性能比 12900K 慢了大约 40%。
我们对以下图表的提示是:“模拟人脑需要多少计算能力?”
我们最快的 GPU 确实是 RTX 4090,但是……它并没有比其他选项快多少。考虑到它的计算能力、内存和内存带宽大约是 RTX 4070 Ti 的两倍,您预计性能会提高 2% 以上。那没有发生,甚至没有发生。
RTX 30 系列卡的情况并没有什么不同。RTX 3090 Ti 是这些 AI 文本生成测试中最快的 Ampere GPU,但考虑到它们的规格,它与最慢的 Ampere GPU RTX 3060 几乎没有区别。10%的优势简直不值一提!
然后看看两张图灵卡,它们实际上比 Ampere GPU 更靠前。如果我们处理 GPU 计算受限的场景,那根本不应该发生。也许当前的软件只是针对 Turing 进行了更好的优化,也许是 Windows 或我们使用的 CUDA 版本中的某些东西,或者可能是其他东西。这很奇怪,我真的只能说。
这些结果不应被视为一个迹象,表明每个有兴趣参与 AI LLM 的人都应该跑出去购买 RTX 3060 或 RTX 4070 Ti 卡,或者特别是旧的 Turing GPU。我们建议恰恰相反,因为具有 24GB VRAM 的卡能够处理更复杂的模型,从而获得更好的结果。与数据中心硬件相比,即使是最强大的消费类硬件仍然相形见绌——Nvidia 的 A100 可以配备 40GB 或 80GB 的 HBM2e,而较新的 H100 默认为 80GB。如果最终我们看到具有 160GB 内存的 H100,我当然不会感到震惊,尽管 Nvidia 并没有说它实际上正在努力。
例如,4090(和其他 24GB 卡)都可以运行 LLaMa-30b 4 位模型,而 10–12 GB 卡在 13b 模型上达到了极限。165b 模型也存在,这将需要至少 80GB 的 VRAM,可能更多,外加大量的系统内存。那只是为了推断;训练工作量需要更多内存!
用于引用的“标记”与“单词”基本相同,除了它可以包含严格意义上不是单词的内容,例如 URL 或公式的一部分。因此,当我们给出 25 个标记/秒的结果时,这就像有人以每分钟大约 1,500 个单词的速度打字。这速度非常快,但很明显,如果您尝试运行来自多个用户的查询,很快就会感到不够用。
这是对各种 GPU 的不同看法,仅使用理论上的 FP16 计算性能。现在,我们实际上在文本生成工作负载上使用 4 位整数推理,但整数运算计算(Teraops 或 TOPS)应该与 FP16 数字类似地扩展。另请注意,当使用 FP8 而不是 FP16 时,Ada Lovelace 卡的理论计算量是原来的两倍,但这不是这里的一个因素。
如果当前文本生成代码效率低下,这些问题可能会在未来几个月内得到解决,届时我们可能会看到 4090 的性能比 4070 Ti 高出一倍,而后者大约是 4070 Ti 的三倍RTX 3060 的性能。我们将不得不等待,看看这些项目如何随着时间的推移而发展。
最后这两个图表只是为了说明当前的结果可能并不代表我们对未来的预期。例如,运行 Stable-Diffusion,RTX 4070 Ti 的 GPU 利用率达到 99-100%,功耗约为 240W,而 RTX 4090 几乎翻了一番——性能也翻了一番。
借助 Oobabooga 文本生成,我们发现产品堆栈越低,GPU 利用率通常越高,这确实有道理:如果瓶颈在于 CPU 或其他某些组件,更强大的 GPU 将不需要那么努力地工作。另一方面,电力使用并不总是符合我们的预期。RTX 3060 是最低功耗是有道理的。另一方面,4080 比(定制的)4070 Ti 使用更少的功率,或者 Titan RTX 比 2080 Ti 消耗更少的功率,只是表明幕后还有更多事情要做。
从长远来看,我们希望各种聊天机器人——或者任何你想称之为“精简版”ChatGPT 体验的东西——能够显着改善。他们会变得更快,产生更好的结果,并更好地利用可用的硬件。现在,让我们谈谈您可以与 text-generation-webui 进行什么样的交互。
使用文本生成 Web UI 聊天
Text Generation 项目并没有声称自己是 ChatGPT 之类的东西,而且也不应该。ChatGPT 至少会尝试写诗歌、故事和其他内容。在其默认模式下,运行 LLaMa-13b 模型的 TextGen 感觉更像是要求一个非常慢的谷歌提供问题的文本摘要。但是上下文可以极大地改变体验。
许多对我们关于模拟人脑的查询的回复似乎来自论坛、Usenet、Quora 或各种其他网站,即使它们不是。当你想到它时,这有点有趣。你问模型一个问题,它认为它看起来像一个 Quora 问题,从而模仿 Quora 的答案——或者至少这是我们的理解。当它在一些文本后加上“Jason,17 岁”之类的东西时,仍然感觉很奇怪,而显然没有 Jason 问这样的问题。
同样,ChatGPT 不是。但是您可以在与默认模式不同的模式下运行它。例如,传递“–cai-chat”会给你一个修改过的界面和一个可以与之聊天的示例角色,Chiharu Yamada。如果你喜欢相对较短的回答,听起来有点像来自青少年,那么聊天可能会通过。至少根据我的经验,它不会提供更多更深入的对话。
也许你可以给它一个更好的字符或提示;那里有例子。还有很多其他的法学硕士;LLaMa 正是我们完成这些初始测试结果的选择。你甚至可以配置软件来响应网络上的人,而且由于它实际上并不是在“学习”——你运行的现有模型没有进行任何培训——你可以放心,它不会突然变成微软的 Tay 4chan 之后的 Twitter 机器人和互联网开始与它交互。只是不要指望它能为您写出连贯的文章。
让 Text-Generation-Webui 运行(在 Nvidia 上)
根据项目主页上的说明(在新标签页中打开),您会认为启动并运行它会非常简单。我在这里要告诉你,至少现在不是,特别是如果你想使用一些更有趣的模型。但这是可以做到的。例如,基本说明告诉您在 Windows 上使用 Miniconda。如果您按照说明进行操作,您很可能会遇到 CUDA 错误。哎呀。
Reddit 上的这套更详细的说明(在新标签页中打开) 应该可以工作,至少对于以 8 位模式加载。CUDA 的主要问题在第 7 步和第 8 步中得到解决,您可以在其中下载 CUDA DLL 并将其复制到一个文件夹中,然后调整几行代码。下载一个合适的模型,你应该希望一切顺利。4 位指令在我第一次尝试时完全失败了(更新:它们现在似乎可以工作,尽管它们使用的 CUDA 版本与我们的指令不同)。lxe 有这些替代指令(在新标签页中打开),这对我也不太管用。
在 Nvidia 和其他公司的帮助下,我最终让一切正常运行。我使用的说明如下…但随后事情在 2023 年 3 月 16 日停止工作,因为 LLaMaTokenizer 拼写更改为“LlamaTokenizer”并且代码失败。值得庆幸的是,这是一个相对容易的修复。但是接下来会发生什么问题,然后在一两天后得到修复?我们只能猜测,但截至 2023 年 3 月 18 日,这些说明适用于几台不同的测试 PC。
1.使用默认选项安装Miniconda for Windows 。 最上面的“Miniconda3 Windows 64-bit”链接应该是正确的下载链接。
2.下载并 安装Visual Studio 2019 Build Tools(在新标签页中打开). 安装时只选择“Desktop Environment with C++”。2023 年 3 月 14 日的版本 16.11.25,内部版本 16.11.33423.256 应该可以工作。
3.为您要放置项目文件和模型的位置创建一个文件夹,例如 C:\AIStuff。
4.启动 Miniconda3 提示符。您可以通过在 Windows 中搜索或在“开始”菜单中找到它。
5.运行此命令,包括它周围的引号。它设置 VC 构建环境以便可以找到 CL.exe,需要步骤 2 中的 Visual Studio 构建工具。
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
6.输入以下命令,一次一个。如果提示在任何这些之后继续,请输入“y”。
conda create -n llama4bit
conda activate llama4bit
conda install python=3.10
conda install git
7.切换到项目文件所在的文件夹(例如 C:\AIStuff)。
cd C:\AIStuff
8.使用 git 克隆文本生成 UI。
git clone https://github.com/oobabooga/text-generation-webui.git
9.进入text-generation-webui文件夹,在其下创建repositories文件夹,改成。
cd text-generation-webui
md repositories
cd repositories
10. Git clone GPTQ-for-LLaMa.git然后上移一个目录。
git clone https://github.com/qwopqwop200/GPTQ-for-LLaMa.git
cd ..
11.输入以下命令安装用于构建和运行项目的几个必需包。这可能需要一段时间才能完成,有时会出错。如有必要,再次运行它,它将从中断的地方继续运行。
pip install -r requirements.txt
12.使用此命令安装更多需要的依赖项。我们在这里使用 CUDA 11.7.0,但其他版本也可以。
conda install cuda pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia/label/cuda-11.7.0
13.检查CUDA Torch是否安装正确。这应该在下一行返回“True”。如果失败,重复第 12 步;如果它仍然失败并且您有 Nvidia 卡,请在评论中发表评论。
python -c "import torch; print(torch.cuda.is_available())"
14.安装ninja和chardet。如果出现提示,请按 y。
conda install ninja
pip install cchardet chardet
15.切换到 GPTQ-for-LLama 目录。
cd repositories\GPTQ-for-LLaMa
16.设置编译代码的环境。
set DISTUTILS_USE_SDK=1
17.输入以下命令。这会产生很多警告和/或注释,尽管它仍然可以编译。可能需要一点时间才能完成。
python setup_cuda.py install
18.返回text-generation-webui文件夹。
cd C:\AIStuff\text-generation-webui
19.下载模型。这是一个 12.5GB 的下载,可能需要一点时间,具体取决于您的连接速度。我们指定了 llama-7b-hf 版本,它应该可以在任何 RTX 显卡上运行。如果您的卡至少有 10GB 的 VRAM,则可以改用 llama-13b-hf(它大约是 36.3GB 的三倍)。
python download-model.py decapoda-research/llama-7b-hf
20.重命名模型文件夹。如果您正在做更大的模型,只需将 7b 替换为 13b。
rename models\llama-7b-hf llama-7b
21.从Hugging Face 下载4位预量化模型“llama-7b-4bit.pt”并将其放置在“models”文件夹中(在前两步的“llama-7b”文件夹旁边,例如“C:\AIStuff\text-generation-webui\models”)。还有 13b 和 30b 型号,但后者需要 24GB 显卡和 64GB 系统内存才能工作。 22.编辑text-generation-webui\models\llama-7b 文件夹中的tokenizer_config.json 文件,将 LLaMATokenizer 更改为 LlamaTokenizer。大写是最重要的。
23.在 C:\AIStuff\text-generation-webui 文件夹中输入以下命令。(如果您下载的是 llama-13b,请将 llama-7b 替换为 llama-13b;还有许多其他模型可能会产生更好或至少不同的结果。)
python server.py --gptq-bits 4 --model llama-7b
您现在将获得一个 IP 地址,您可以在网络浏览器中访问该地址。默认为http://127.0.0.1:7860(在新标签页中打开),但如果 7860 正在使用(即通过Stable-Diffusion),它将搜索一个开放端口。
24.在浏览器中导航到 URL 。
25.尝试在“输入框”中输入您的提示,然后单击“生成”。
26.玩转提示并尝试其他选项,并尝试玩得开心——这是你应得的!
如果此时有些东西不起作用,请检查命令提示符是否有错误消息,或者在评论中联系我们。也许只是尝试退出 Miniconda 命令提示符并重新启动它,激活环境,然后更改到适当的文件夹(步骤 4、6(仅“conda activate llama4bit”部分)、18 和 23)。
同样,我也很好奇如何才能在 AMD 和 Intel GPU 上运行它。如果您有这些的工作说明,请给我写信,我会看看如何测试它们。理想情况下,该解决方案应使用英特尔的矩阵内核;对于 AMD,AI 核心与着色器核心重叠,但总体上可能仍然更快。