LLM 本地部署核心概念图解
想在自己电脑上跑大模型,你会频繁遇到几个名词:GGUF、量化、推理引擎、llama.cpp、Q4_K_M、tok/s、VRAM……它们分别是什么?之间什么关系?本文用最直白的方式讲清楚。
一次本地推理的全流程
你写一段代码调用本地 API,到收到模型回复,整个过程可以切成 6 步:
1 | |
分层架构总览
所有本地部署方案可以按层级来理解:
1 | |
引擎和模型文件是两层不同的东西——这个区分最重要。用类比来记:
1 | |
同一个推理引擎可以加载不同的模型文件,就像同一个模拟器可以跑不同的游戏 ROM。
核心概念:模型文件格式
什么是模型文件
LLM 本质上是一大堆数字(参数)。训练完成后,这些数字需要保存到硬盘上,于是就有了”格式”问题。不同格式决定了怎么存、怎么读、用什么工具跑。
GGUF(通用格式,llama.cpp 生态)
全称:GPT-Generated Unified Format。可以把它理解成一个”自给自足”的模型打包方案:
- 单文件:一个
.gguf文件包含模型参数 + 分词器 + 元数据(架构名、上下文长度、chat template),拷到 U 盘就能跑 - 内置量化:GGUF 文件本身就是在保存时已经压缩(量化)过的,不需要额外工具
- 兼容性最广:llama.cpp、Ollama、LM Studio 都直接识别
1 | |
怎么找 GGUF 文件:去 HuggingFace 搜索
<模型名>-GGUF,比如Qwen/Qwen3-14B-GGUF,在 Files 页面下载你需要的量化版本。
safetensors(HuggingFace 原生格式,vLLM 生态)
这是 HuggingFace 模型仓库的”标准格式”:
- 安全:不会执行任意代码,比 PyTorch 的 pickle 格式安全
- 分离存储:参数通常分片成多个文件(
model-00001-of-00003.safetensors),需要配合config.json、tokenizer.json等配置文件 - 等效于原始精度:通常保存的是 FP16 精度,体积大,vLLM 在加载时自己做量化
MLX(Apple Silicon 专属格式)
Apple 为 M 系列芯片设计的原生格式:
- 仅 M1+ Mac 可用:不兼容 Intel Mac 或任何其他平台
- 体积更小、速度更快:比同模型 GGUF 版本小约 5-10%,推理速度略快
- 通过
mlx-lm命令行工具或 Ollama/LM Studio 加载
核心概念:量化
量化是用低精度数字代替高精度数字来存储模型参数,从而大幅减少显存占用,同时尽量保持模型质量。
为什么需要量化
70B 参数模型在不同精度下的体积:
| 精度 | 每参数占用 | 70B 模型体积 | 能在家用显卡上跑? |
|---|---|---|---|
| FP32(原始) | 4 字节 | 280 GB | ❌ |
| FP16(推理常用) | 2 字节 | 140 GB | ❌ |
| Q8_0(8位量化) | ~1 字节 | ~70 GB | ❌(需多卡) |
| Q4_K_M(4位量化) | ~0.6 字节 | ~42 GB | ✅ 两张 RTX 4090 |
| Q2_K(2位量化) | ~0.3 字节 | ~23 GB | ✅ 一张 RTX 4090 |
常见量化级别速查
| 量化级别 | 质量损失 | 别名/说明 |
|---|---|---|
| Q8_0 | 几乎无损 | 8-bit,体积是 FP16 的一半,质量几乎不变 |
| Q6_K | 极轻微 | 质量和体积之间的优选 |
| Q4_K_M ⭐ | 轻微可接受 | 最流行的量化级别,黄金标准 |
| Q3_K_M | 明显 | 显存极度紧张时妥协 |
| Q2_K | 较大 | 只求能跑,质量让步 |
量化是怎么做到的
大模型的参数有大量冗余——70 亿个 16 位浮点数里,很多精度位对最终输出影响微乎其微。量化就像一个”智能压缩”:
1 | |
GGUF 的量化还用了分块量化(block-wise):不是整个模型用一个缩放因子,而是每 32 个权重一组、每组独立缩放。这比简单的”四舍五入”更精确。
量化只发生在保存时
量化是离线操作——用 llama-quantize 工具把 FP16 模型转成 GGUF,然后推理引擎加载这个压缩后的文件。推理时不需要再做量化,直接加载、直接推理。
1 | |
核心概念:推理引擎
推理引擎是真正”跑”模型的软件——它负责把模型文件加载到显存、接收输入 token、驱动神经网络逐层计算、输出下一个 token。
llama.cpp(全能基石,119K ⭐)
- 语言:纯 C/C++,零运行时依赖
- 文件:单二进制,下载就能用
- 后端覆盖:Metal(Mac) / CUDA(NVIDIA) / ROCm(AMD) / Vulkan / SYCL / CPU
- 模型格式:GGUF(也只认 GGUF)
- 工具链:
llama-server(API 服务器)、llama-cli(命令行聊天)、llama-quantize(模型量化)
llama.cpp 是整个本地 LLM 生态的”地基”——Ollama 和 LM Studio 底层都是它。
vLLM(生产级服务器,80K ⭐)
- 语言:Python,需要 Docker 或 pip 安装
- 后端:NVIDIA GPU 为主(CUDA),AMD/TPU 实验性
- 模型格式:HuggingFace 原生(safetensors)+ GGUF + FP8
- 核心特性:PagedAttention + Continuous Batching,多用户并发时吞吐量远超 llama.cpp
- API:OpenAI 兼容 + Anthropic Messages API 兼容 + gRPC
- 多 LoRA:几百个微调适配器共享一个基座模型,按请求热切换
MLX / mlx-lm(Apple Silicon 专属)
- Apple 自研的数组计算框架,专为 M1+ 芯片优化
- Mac 上最快的推理和微调路径
- 没有内置 HTTP 服务器,通常被 Ollama 或 LM Studio 包装后提供 API
Ollama(新手首选,175K ⭐)
- llmama.cpp 的”一键安装”封装版,Go 语言编写
- 一条命令拉取模型、一条命令启动服务
- Mac 上已切换为 MLX 后端,比原生 llama.cpp 更快
核心概念:性能指标
tok/s(每秒生成的 token 数量)
token 是模型处理的”最小意义单元”——大约相当于 0.75 个英文单词或 1.5 个中文字。
1 | |
首 token 延迟(TTFT)
Time To First Token——从发送请求到收到第一个回复 token 的时间。大模型需要”读完”整个 prompt 才能开始生成,所以:
- 短 prompt(”你好”)→ TTFT < 0.5 秒
- 长 prompt(几千 token 的上下文)→ TTFT 可能 5-15 秒
- Mac M5 相比 M4 在 TTFT 上提升了 4 倍(Apple 官方数据,得益于 Neural Accelerator)
并发吞吐
单用户时,llama.cpp 和 vLLM 速度几乎一样(~130 tok/s)。差距只在多用户时体现:
| 场景 | llama.cpp (Ollama) | vLLM |
|---|---|---|
| 1 个用户 | ~130-180 tok/s | ~130-180 tok/s |
| 8 个并发用户 | ~82 tok/s | 187 tok/s |
| 满负载峰值 | ~41 tok/s | 793 tok/s |
数据来源:Red Hat 2025 年基准测试(A100 + Llama 3.1-8B)
结论:个人用不需要纠结这个——装上能跑就够快。
其他重要概念
Token / Tokenizer(分词器)
模型不认字,只认数。Tokenizer 把你输入的文字切成 token 序列:
1 | |
每个 GGUF 文件内置了自己的 tokenizer,加载模型时自动匹配。
VRAM(显存)
GPU 上专用的高速内存。模型参数 + 运行时计算中间结果 + KV Cache(上下文缓存)都要占显存。
7B 模型 Q4 量化后约 4.2 GB,13B 约 7.8 GB,70B 约 42 GB。这还不算 KV Cache——聊得越久、上下文越长,额外占用越大。
KV Cache
Transformer 在生成每个新 token 时都要”回顾”前面所有 token。KV Cache 缓存这些中间结果以避免重复计算。代价是吃显存:
- 2K 对话上下文 → 7B 模型 KV Cache ≈ 0.4 GB
- 128K 对话上下文 → 70B 模型 KV Cache ≈ 42+ GB(和模型权重本身差不多大)
OpenAI 兼容 API
几乎所有推理引擎都提供与 OpenAI 格式兼容的 HTTP 接口,这意味着你可以:
1 | |
代码不需要改,换个 URL 就从云端切到本地。
引擎、格式、模型的对应关系
1 | |
三个关键认知
1. 量化发生在保存时,推理时直接加载
你下载的 qwen3-14b-q4_k_m.gguf 已经是压缩好的——不需要任何配置,引擎加载后直接跑。
2. 引擎和模型是解耦的
同一个 qwen3-14b-q4_k_m.gguf 文件,可以被 llama.cpp 跑,也可以被 Ollama 跑、LM Studio 跑。换引擎不换模型。
3. 单用户场景下,选最方便的工具就好
llama.cpp、Ollama、vLLM 在单用户下速度几乎一样。选哪个取决于你的安装偏好和硬件,而不是性能。
想动手搭建本地 API 服务的话,参考 基于 llama.cpp 搭建本地 LLM API 服务。
如果这篇文章对您有帮助,欢迎打赏支持