运行本地 AI,GPU/NPU 还是刚需吗?

大模型容器GPU

点击下方 卡片 ,关注“ 慢慢学AIGC ”

picture.image

作者:Andreas Kunar, 原文发表时间: 2024 年 11 月 15 日。

以下为正文。

在本地机器上运行 AI(特别是大语言模型的推理)正变得越来越流行,尤其是随着性能更强的 7B 至 70B 模型的出现。本地 LLM 可以解决某些隐私/GDPR 问题,并更好地控制实验期间的成本。然而,普遍的看法是,本地 LLM 需要 GPU 来加快速度,或者需要 NPU 来降低功耗——因为 CPU 太慢了。但现代 AI 软件真的需要 GPU 吗?

在探讨这个问题之前,我们需要了解一些必要的基础知识。

LLM 推理的瓶颈是什么?

LLM 推理分为两个部分:

  • 预填充阶段,分析提示 (Prompt Processing,简称 PP)。

  • 解码阶段,逐个生成 LLM 的响应 token (Token Generation,简称 TG)。

推理过程中的提示可能很长,可能包含多个部分——例如系统提示和用户提示;或在检索增强生成(RAG)场景下(本地 AI 的主要用例之一,因为您不希望将专有知识上传到云端),提示可能是一长串知识片段,结合系统提示和用户查询组成。

推理需要针对每个新输入 token 执行大量复杂的数学运算(例如巨大的矩阵乘法)。每次计算都涉及所有的输入 token(包括所有先前生成的 token 作为下一步的输入)和所有的模型参数(可能高达数十亿)。

这意味着每次计算都需要将所有参数加载到处理单元(CPU 或 GPU/NPU)中。 尽管现代芯片通常有片上缓存来加速数据访问,但这些缓存无法容纳数十亿参数(缓存大小通常是 MB 级,而不是 GB 级),因此需要非常快速的 RAM 来支持处理。

因此, 在现代计算机中,RAM 带宽是生成 token 过程中的主要瓶颈

例如,NVIDIA 4090 GPU 具有 24 GB RAM,其带宽接近 1 TB/s;苹果 M 系列芯片通过宽 RAM 实现高带宽(例如 M1/M2 标准版为 128 位,带宽 100–120 GB/s;M1/M2 Pro 为 256 位,带宽 200–273 GB/s;M1/M2 Ultra 为 1024 位,带宽 800 GB/s,几乎与 4090 持平)。

为了支持推理,所有 LLM 参数和一些额外的开销都需要适配到处理单元的内存中(独立 GPU 的显存 VRAM 或集成 GPU/CPU/NPU 的统一内存)。 苹果芯片的优势在于较大且相比 NVIDIA 更便宜的 RAM (最大 128/192 GB)。

Prefill 预填充阶段 处理提示(以及模型训练/微调)时, 计算可以批量进行,这减少了内存传输需求 ,此时 计算速度成为主要瓶颈 。 GPU(例如 NVIDIA、AMD)在这种情况下表现出色,但如果提示相对较短,这就不太成问题。

总结: 在 LLM 解码阶段逐步生成 token 时,每次计算都需要加载全部模型参数到处理单元。内存带宽通常是生成 token 的瓶颈。但对于长提示的处理(如 RAG 场景)或模型训练/微调,计算性能(如 GPU 速度)仍然至关重要。

选择模型与量化技术

更大的模型总是更好吗?

这要视情况而定!

如前所述,推理过程中的关键在于内存带宽。此外,所有参数都需要适配到快速 RAM 中,而 RAM 不仅有限且成本高昂。

量化技术是减少内存需求的关键创新 。通过在计算中降低精度,存储每个参数所需的字节数减少。例如,通过量化可以将更大的模型存储到更小的内存中。尽管量化计算有时需要更多努力,但对于相同数量的参数,其 token 生成速度更快,因为从内存到处理器传输的字节更少。但量化会损失一定的精度。例如,将 16 位浮点数(FP16)减少到 4 位量化(Q4_0),可以将模型大小减少 72%,令牌生成速度提升 160%,但准确性仅下降约 5%(基于 LLaMa-2 模型和 llama.cpp 的实验数据)。

最新的量化方法(如 iQuant)通过混合精度优化关键值,进一步提升了精度。此外,还有超快速的 1.58 位/三元量化(仅使用 -1/0/+1 值),这需要特殊微调。

总结: LLM 的量化技术减少了模型大小、提升了速度,同时质量仅略微下降。当前较优的量化方法为 Q5 或 Q4,可在保持较高精度的情况下使用更大的模型。

NPU:碎片化问题影响可用性

NPU(神经网络处理单元)在理论上是非常有吸引力的,它们专注于通过特定硬件降低功耗。然而,实际应用中存在重大问题:编程复杂性和市场碎片化。相比 GPU 编程(如 NVIDIA 的 CUDA 或 Apple 的 Metal),NPU 厂商的 API 常常缺乏标准化、文档支持不足且不可扩展。因此,大多数通用 AI 软件(如 ollama、llama.cpp 等)仍然基于 CPU 或 GPU 运行。

总结:虽然微软和苹果大力推广 NPU,但它们对运行本地 LLM 的实用性非常有限。

CPU 为何仍然适合 AI?

现代 CPU 核心已经支持多次并行运算(如 NEON 指令集或 Intel/AMD 的类似技术)。此外,运行在容器/虚拟机中的AI应用也往往依赖 CPU,因为 GPU/NPU 的虚拟化支持仍然较差。

最近的研究(如 Microsoft/T-MAC 团队的算法)表明,在低位量化(Q2-Q4)情况下,CPU 甚至可以比 GPU/NPU 更快(假设 RAM 带宽相同)。此外,与 GPU 相比,CPU 的功耗更低。

总结:对于集成 GPU 的 PC 或运行在容器/虚拟机中的 AI,CPU 可能是更实际的选择。

总结:我们需要 GPU/NPU 运行本地 AI 吗?

如果可以接受 2-4 位量化精度,使用基于 llama.cpp 的 AI(如 ollama、LM-Studio)并配备快速 RAM,仅用 CPU 即可轻松运行 AI。对于苹果 M 系列芯片或 Copilot+ PC,CPU 的表现甚至可能优于 GPU/NPU。

如果你使用的是搭载 Apple Silicon 芯片的 Mac,并且需要在容器或虚拟机中运行 AI,那么只能依赖 CPU 运行。

附注:在 Apple Silicon 设备上,你可以尝试在 Podman 容器中使用实验性的基于 Vulkan 的 GPU 支持运行 AI,但性能依然远远低于直接使用 CPU运行(参见我之前在 medium.com 上的文章,我本周重新测试了一次,结果仍然太慢)。


扫描下方 二维码 ,关注“ 慢慢学AIGC ”

picture.image

0
0
0
0
关于作者
相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论