[简体中文] / English


如何本地部署 LLM

 

社团分享用内容, 归档在此. LLM 迭代迅速, 可能很快就会过时, 请注意灵活使用搜索技能获取最新信息.


引言

在几年前, LLM 还没有横空出世时, 很多的小模型可以轻易的在各种设备上运行.

比如, 随手搓一个不到 1000 参数的 CNN, 在 MNIST 上训练只要一分钟, 在手写数字识别的任务上达到 94% 的准确率, 在现代显卡上, 无需费心优化就能跑到 10000+ 图片/秒的处理速率.

一共 786 个参数的超 mini CNN一共 786 个参数的超 mini CNN

现在你学会了使用 CNN, 只要把它加深加宽亿点点, 加大 16000 倍来到 13.5M 个参数, 你就能继续加强它的识别能力. 比如, 你可以用它来识别验证码.

纯属走个形式的验证码纯属走个形式的验证码

这个验证码识别是我整的油猴插件 lyc8503/ddddocr_web, 使用了 ONNX Wasm, 直接在浏览器里进行识别. 使用很普通的笔记本 CPU 计算, 也能在 0.2s 内完成验证码的识别, 正确率在 95% 以上.

前 LLM 时代, 常用的 SOTA 级别的模型 (BERT/ResNet) 的尺寸也基本停留在 100M 以下.

LLM 时代

2022 年 11 月, OpenAI 推出了 ChatGPT 系列模型. GPT-3 又 scale 了 1000 倍, 达到了恐怖的 175B, 仅仅是权重就要占用 350 GB 的空间, 这无疑给本地部署带来了巨大的难题.

图来自 bbycroft.net/llm图来自 bbycroft.net/llm

为什么我们需要可本地部署的 open-weight LLM

  1. 透明与一致性
  2. 更低的成本及防止垄断
  3. 绕过在线内容审查 (“数据安全”)
  4. 可以进行 Finetune/Hack

如何三步把大象塞进冰箱里运行 LLM

  1. 找一套合适的硬件
  2. 下载模型权重文件
  3. 安装合适的推理框架并运行

Qwen3-Next-80B-A3B 本地部署, 46token/sQwen3-Next-80B-A3B 本地部署, 46token/s

模型选择

每个模型发布的时候都是 SOTA, 到底选哪个呢, 我一般会参考赛博斗蛐蛐榜单: https://lmarena.ai/leaderboard

对于小众模型, 也可以在 HuggingFace 或者 r/LocalLLama 等论坛搜索, 一天就能出好几个新模型.

以模型推理时的激活参数区分, 模型可以被分为:

  • 稠密模型
  • MoE 模型

以模型是否有思考过程区分, 模型可以被分为:

  • Thinking
  • Instruct
  • 混合

硬件选购

按经验对各个部分的重要度排序:

  1. VRam (显存大小)
    决定性因素, 显存不足的话模型需要 Offload 到内存甚至硬盘, 会成倍的影响速度
    NVIDIA H100: 80GB
    NVIDIA A100: 40GB/80GB
    RTX 4090: 24GB

  2. 显存带宽
    巨大的模型本身需要高速访问所有参数才能高效计算
    H100: ~2 TB/s
    A100: ~1.5 TB/s
    RTX 4090: ~1 TB/s
    CPU DDR5: ~100 GB/s (PCIe 4.0 x16 ~32GB/s)

  3. 计算力 (BF16/FP16)
    H100 (BF16 Tensor): ~200 TFLOPS
    A100 (BF16 Tensor): ~78 TFLOPS
    RTX 4090 (FP16): ~83 TFLOPS
    EPYC 9654: 理论估算 ~4TFLOP

  4. 多显卡 (如有) 互联带宽
    NVLink: 56GB/s
    PCIe: 32GB/s, 延迟高

  5. CPU Offload 时 CPU 的 RAM 带宽/计算力
    DDR5 >> DDR4, 多通道 >> 单通道

  6. SSD 读取速度
    PCIe 4.0 x4: 7GB/s

如果你想要自己选购硬件, 可以尝试”捡垃圾” 2080ti/MI50/V100 等显卡.

框架选择及常用的优化手段

量化

模型通常在 FP16 精度下训练, 发布的权重文件也多为该精度. 推理时, 可以通过降低浮点数精度的方式大幅降低显存开销.

经验结论: Q6 (6-bit) 及以上的量化, 例如 Q7/FP8, 对模型最终效果无可感知的影响. Q5 影响轻微, Q4 影响较为明显, Q3 及以下完全可以认为是另一个模型.

Unsloth 会发布很多主流模型的量化模型.

CPU Offload

将模型的部分层放置在 CPU 上, CPU 与 GPU 一同计算.

对激活很稀疏的 MoE 模型有奇效.

推荐框架: llama.cpp

https://github.com/ggml-org/llama.cpp

优点: 为 CPU/GPU 混合推理优化, 为移动端优化, 非常主流, 得到了大量模型支持

缺点: 不支持张量并行, 对多 GPU 利用率差

推荐框架: fastllm

https://github.com/ztxz16/fastllm

优点: 国人制作, 兼容的硬件设备多样, 对 CPU/GPU 混合推理支持好, 做了一些独特的性能优化

缺点: 支持的模型相对少, 资料较少, 有时候有些 Bug

本文采用 CC BY-NC-SA 4.0 许可协议发布.

作者: lyc8503, 文章链接: https://blog.lyc8503.net/post/local-llm/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬