在 Habr 上,感觉就像一个组在本地使用 LLM,另一个组通过外部 API 使用 LLM。
而第三个还没决定,她时不时地会有以下问题:
-
如果我在 CPU 而不是 GPU 上运行 LLM 会发生什么情况?速度会下降很多吗?
-
它如何取决于模型的大小?
-
而且原来的 DeepSeek 非常大 - 如果它不适合 RAM,你能从磁盘中抽出它吗?
总的来说,我在评论中回答了这些问题好几次 - 但由于我不时地一次又一次地偶然发现这些问题,所以我决定写这篇短文。
TLDR:我制作了一个小型 HTML 应用程序,可以直观地了解不同安装中的生成速度。如果不清楚什么是什么,那么最好阅读这篇文章。
在本地运行 LLM
通常,各种 LLM 网络都是使用 Ollama 或 LM Studio 等程序在本地启动的 - 它们都从 Internet 下载所需的网络并在您的站点上运行。
他们通常有三个启动选项:
-
该模型完全适合 GPU(通常是 Nvidia)的内存 - 这是最快的选择
-
模型完全适合 RAM - 这是一个可以接受的选项
-
该模型通过交换定期从 SSD 加载(它运行得非常慢,您可以稍后查看示例 - 恕我直言,无法使用)
型号有不同的尺寸 - Llama 7B、70B、Mistral Nemo 12B 等。我们将其命名为 SIZEB。
了解这一点:原始模型权重存储在 float32(4 字节)中 - 因此,如果您想运行原始模型,您将需要大约 SIZEB x 4 GB 的内存。即 28 GB,即使对于不太严重的 7B 型号也是如此。
当然,这些都是对硬件非常严格的要求,人们想出了一个小窍门:他们开始量化权重——即用更少的位(少于 32 个原始位)对它们进行编码。当然,这会导致模型生成的准确性和质量下降——但是......这取决于量化的水平。
这种量化权重现在通常以 gguf 格式分发(如果您从站点下载,可以看到它)。通常认为:
-
q8 的量化(每个权重 8 位)对模型的质量几乎没有影响。同时,该模型在内存中占用了大约 SIZEB GB
-
量化 q4 (每个权重 4 位) 对模型的质量有相当大的影响,但总的来说,它仍在使用中。(该模型占用 SIZEB/2 GB 的内存)
还有其他选项(6 位、2 位、1 位、不同层的不同量化)——但其他时间会介绍它们。
无论如何,在工作时,您总是可以通过每个权重的位数(但不超过 q8,即每个权重 8 位)下载最大模型,该模型适合您的设备内存 - VRAM 或 RAM。
例如:
-
第 4 季度的 13B 是 13/2 = 6.5 GB - 适合具有 8 GB VRAM 的显卡。但在第 8 季度,它已经占用了 13 GB - 它将不再适合同一个视频卡,只能放在 RAM 中。
-
Q4 中的 70B 是 35GB - 它不再适合任何消费类显卡 - 但如果你有很多它,它可能会适合 RAM。
发电速率
现在,实际上,最有趣的是网络在特定安装中的运行速度有多快?
以下是近似数字(从我前段时间自己的实验结果中获得):
-
本地模型(放置在 GPU/VRAM 上)
-
7-13B:20 个代币/秒
-
14-40B:15 个代币/秒
-
70-700B:10 个代币/秒
-
-
本地模型 (CPU/RAM)
-
7B:8 个令牌/秒
-
14B:5 个令牌/秒
-
20-40B:3 个令牌/秒
-
70-700B:1.5 个代币/秒
-
-
通过 API 进行远程模型
-
7B-13B:50 个令牌/秒
-
14B-40B:35 个令牌/秒
-
70B:25 个代币/秒
-
200-700B:18 个令牌/秒
-
-
其他选项
-
API FAST 模型:200 个令牌/秒
-
从 32B 开始的本地,SSD 上传:0.2 个令牌/秒
-
实际上,它们可能会有两倍的不同 - 因为这完全取决于处理器、视频卡等,但它们给出了一个近似的理解。
交互式选项
为了不仅查看数字,而且为了了解其工作原理,我制作了一个小型 HTML 应用程序:
用户体验
凭直觉,我从用户的角度发展出以下速度概念:
-
每秒 50 个令牌 - 感觉很快
-
每秒 10 个令牌及以上 - 感觉正常
-
每秒 5 个令牌是等待时可接受的最小选项,但尚未令人痛苦
由此可见,根据我的感受:
-
如果模型适合 VRAM,则可以使用它,感觉正常
-
如果它适合 RAM,那么使用最大 7B 的型号的正常感觉,有条件地您可以使用最大 13B 的型号;上面 - 非常慢。
-
从磁盘加载大约有 0.2 t/s - 您可以直接在应用程序中尝试这种感觉,以免:)现场尝试
当然,您可以更愉快地使用 API:
-
大多数模型每秒释放 20 个令牌
-
轻量级模型 - OpenAI gpt-4o-mini、Google Flash 2.0 - 每秒发出 50-100 个令牌,这感觉是一个非常快的响应。
-
有时,您可以找到以惊人的速度托管模型的提供商 - 例如,我发现 DeepSeek 0324 的速度为每秒 200 个令牌。当然,感觉一切都在飞翔。(但是,这是有代价的 - 使用此选项,上下文限制为 8,000 个令牌,而不是常规 DeepSeek 中的 128,000 个)
通常,如果:
-
您需要的模型不是由任何人提供的
-
或者您对数据处理的隐私有严格的要求
... 使用本地模型。否则,在我看来,使用远程 API 要好得多。
PS:再一次,一个指向应用程序的链接,您可以在其中戳并感受速度的差异。
如果此出版物激发了您的灵感,并且您想支持作者 - 请随时点击按钮