本地部署模型量化选型:从 Model Card 到能跑起来
一句话:领导让你”私有化部署一个大模型”,你的 GPU 可能是 H100、4090、3090、2080Ti、Tesla P40,甚至只是 Apple Silicon。模型能不能跑起来、跑得快不快、智商损失多少,全看一件事——模型的数据精度与量化方法是否匹配你的硬件。这篇是配套地图。
目录
- 1. 决策路径总览
- 2. 第一站:在哪找模型 & Model Card 怎么读
- 3. 第二站:Files 目录里到底都是啥
- 4. 第三站:config.json 字段速查
- 5. 数据精度全景表
- 6. 量化方法全景表
- 7. 按显卡架构选量化方案
- 8. 常见踩坑
- 9. 与本知识库其他章节的关联
- 10. 术语速查
- 11. 来源与评分
1. 决策路径总览
拿到部署需求
│
├─ Step 1:选模型(HuggingFace / ModelScope)
│ └─ 看 Model Card 判断"这是 Dense 还是 MoE,多少参数"
│
├─ Step 2:估算显存
│ └─ 参数量 × 每参数字节数 × 1.2(KV cache 余量)
│
├─ Step 3:选精度
│ └─ 显存够 → 原生 BF16 / FP16
│ └─ 显存差一点 → FP8 / INT8
│ └─ 显存差很多 → INT4(GPTQ / AWQ / GGUF)
│
├─ Step 4:选量化方案
│ └─ 看你的显卡架构能跑哪些(详见 § 7)
│
└─ Step 5:选推理引擎
└─ vLLM / SGLang / llama.cpp / Ollama / LMDeploy / TensorRT-LLM 等
└─ 不在本篇范围(属于推理工程,单开一篇)
2. 第一站:在哪找模型 & Model Card 怎么读
2.1 两大模型托管平台
| 平台 | 网址 | 备注 |
|---|---|---|
| Hugging Face | huggingface.co | 全球最大,国内被墙 |
| HF 镜像 | hf-mirror.com | 国内可访问,配合 Aria2 脚本下载,速度不一定输官方 |
| ModelScope | modelscope.cn | 阿里魔搭,国内首选;偶尔莫名其妙限速 |
模型 ID 通用格式:组织名/模型名,如 Qwen/Qwen3-32B、deepseek-ai/DeepSeek-V3。
2.2 Model Card 关键信息(以 Qwen3-32B 为例)
打开模型主页,第一屏是 Model Card(Markdown 文档)。关键信息片段:
Qwen3-32B has the following features:
* Type: Causal Language Models
* Training Stage: Pretraining & Post-training
* Number of Parameters: 32.8B
* Number of Paramaters (Non-Embedding): 31.2B
* Number of Layers: 64
* Number of Attention Heads (GQA): 64 for Q and 8 for KV
* Context Length: 32,768 natively and 131,072 tokens with YaRN.逐项翻译:
| 字段 | 翻译 | 部署时关心什么 |
|---|---|---|
| Type | 因果语言模型(自回归生成) | 几乎都是这个,没特殊处理 |
| Training Stage | 预训练 + 后训练(SFT/RLHF) | 没”Post-training” = 是 Base 模型,不会聊天 |
| Parameters | 总参数量 | 估显存的核心数字 |
| Non-Embedding | 主干参数(去掉词表) | 词表大 = 多语言支持 |
| Layers | 层数 | 越深越聪明,越慢 |
| GQA 头数 | Q 头 / KV 头 | 详见 Dense与MoE架构对比 § GQA |
| Context Length | 原生 / YaRN 扩展上下文 | 别盲信扩展值,长文质量会下降 |
💡 Dense 还是 MoE 怎么判断:Model Card 不标 Dense/MoE,但有
Number of Experts字段就是 MoE,没有就是 Dense。MoE 还会额外标”Activated Parameters”。
2.3 Model Card 还会看到的东西
- Model tree(右侧):列出量化版本、微调版本、衍生模型(如官方 AWQ、社区 GGUF)—— 部署时优先看 Model tree 找现成量化版,省得自己跑量化
- Usage 代码片段:常用 transformers / vLLM / SGLang 的最小启动示例
- Limitations / Benchmark:作者声明的能力边界与跑分(只能参考,不能信)
3. 第二站:Files 目录里到底都是啥
点 “Files and versions” 进入文件列表。典型大模型仓库包含:
| 文件 | 作用 | 关心点 |
|---|---|---|
*.safetensors 多份分片 | 主权重文件(已替代 .bin / .pt,更安全) | 总大小 = 估算下载量 |
model.safetensors.index.json | 分片索引,告诉加载器每个权重在哪片里 | 通常不用管 |
config.json | 模型架构参数 | 核心,下一节专讲 |
tokenizer.json / tokenizer_config.json | 分词器 + 聊天模板(chat_template) | 决定输入怎么变 token、对话怎么拼 |
generation_config.json | 默认推理参数(temperature / top_p / top_k) | 启动时通常会被覆盖 |
special_tokens_map.json | 特殊 token 映射(BOS/EOS/system 标记) | 偶尔需要排查 |
README.md | Model Card 本体 | 已在第一站看过 |
4. 第三站:config.json 字段速查
config.json 是模型架构的”出生证明”。下面以 Qwen3-32B(Dense)和 Qwen3-30B-A3B(MoE)为例,标 ⭐ 的是部署时一定要关注的:
4.1 通用字段(Dense 和 MoE 都有)
| 字段 | 含义 | 例子(Qwen3-32B) |
|---|---|---|
⭐ architectures | 架构类名,决定加载哪个 Python 类 | ["Qwen3ForCausalLM"] |
⭐ model_type | HuggingFace 内部模型标识 | "qwen3" |
hidden_size | 隐藏层宽度(单 token 向量维度) | 5120 |
intermediate_size | MLP 层(前馈网络)宽度 | 25600 |
head_dim | 单注意力头的子维度 | 128 |
num_attention_heads | 注意力头数(Q) | 64 |
num_key_value_heads | KV 头数 | 8 |
num_hidden_layers | 隐藏层数 | 64 |
hidden_act | 激活函数 | "silu" |
rms_norm_eps | 归一化参数 | 1e-06 |
rope_theta | RoPE 旋转基数 | 1000000 |
⭐ max_position_embeddings | 原生上下文长度 | 40960 |
tie_word_embeddings | 输入嵌入层与输出投影层是否共享权重 | false(不共享,参数翻倍) |
⭐ torch_dtype | 训练 / 默认推理精度 | "bfloat16" |
vocab_size | 词表大小 | 151936 |
bos_token_id / eos_token_id | 起始 / 结束 token id | — |
4.2 MoE 专属字段
| 字段 | 含义 | 例子(Qwen3-30B-A3B) |
|---|---|---|
⭐ num_experts | 总专家数 | 128 |
⭐ num_experts_per_tok | 每个 token 每层激活几个专家 | 8 |
moe_intermediate_size | 每专家的 MLP 宽度 | 768 |
norm_topk_prob | 是否对 top-k 专家概率归一化 | true |
decoder_sparse_step | 多少层用一次稀疏 MoE | 1(每层都用) |
mlp_only_layers | 仅用稠密 MLP 不用 MoE 的层 | [](没有,全 MoE) |
4.3 实战意义
- 看
torch_dtype→ 决定原生最低显存需求(BF16 = 2 字节/参数 × 总参数) - 看
num_hidden_layers+hidden_size→ 决定推理延迟(量级) - 看
architectures→ 决定推理引擎兼容性(vLLM / SGLang 必须支持这个架构名)
5. 数据精度全景表
模型权重的”颗粒度”。颗粒越细,模型越聪明;颗粒越粗,存得越省、跑得越快。
5.1 浮点精度
| 精度 | 别名 | 字节/参数 | 最低可跑架构 | 原生加速架构 | 备注 |
|---|---|---|---|---|---|
| FP64 | 双精度 | 8 | Tesla (GT200) | Fermi | LLM 几乎不用 |
| FP32 | 单精度 | 4 | G80 | Kepler / Maxwell | 极少数训练场景 |
| FP16 (CUDA) | 半精度 | 2 | Pascal | Pascal (GP100) | 消费级 Pascal 跑 FP16 不加速 |
| FP16 (Tensor Core) | 半精度 | 2 | Volta | Volta | V100/Titan V 起可用 Tensor Core 加速 |
| BF16 | Brain Float | 2 | Ampere | Ampere | 30 系是 BF16 起点;Marlin INT4 算子也从这一代开始 |
| FP8 | 浮点量化 | 1 | Ampere(Marlin 模拟 W8A16) | Ada Lovelace / Hopper | 比 FP16 算量砍半、精度损失极小;有的模型原生 FP8 训练 |
| FP4 | 微缩放 | 0.5 | Blackwell | Blackwell | 2026 新一代,目前只有 GPT-OSS 等少数模型支持 |
5.2 整数精度
| 精度 | 别名 | 最低可跑架构 | 原生加速架构 | 备注 |
|---|---|---|---|---|
| INT8 (DP4A) | 整数 SIMD | Pascal | Pascal | P40 / 1080Ti 可用 CUDA 算 INT8 |
| INT8 (Tensor Core) | 整数 TC | Turing | Turing | Turing 起可用 Tensor Core 高速 INT8 |
| INT4 (W4A16) | 4-bit 整数 | Pascal | Ampere | Pascal 限 GPTQ/GGUF;Turing 过渡支持 AWQ |
5.3 W8A8 vs W8A16 是什么
量化方法常出现 W8A8 W4A16 这种表达:
- W = Weight(权重)
- A = Activation(激活值,模型层间传递的中间结果)
- 后面的数字 = 几位
| 表达 | 含义 | 速度 / 精度 |
|---|---|---|
| W16A16 | 权重 16 位、激活 16 位 = 没量化 | 满血 |
| W8A16 | 权重 8 位、激活 16 位 = 仅权重量化 | 计算还是 16 位,省显存不太省算力 |
| W8A8 | 权重 8 位、激活 8 位 = 全量化 | 真正的”INT8 计算”,最快但难做 |
| W4A16 | 权重 4 位、激活 16 位 = 主流 INT4 方案 | 最常见,GPTQ/AWQ 都是这种 |
💡 通常说”FP8 模型” 是指 W8A8,但有些模型其实是 W8A16,跑起来要用对应内核。
5.4 CUDA Compute 速查
不同显卡支持的”算力等级”,决定能跑什么精度。 官方查询表:NVIDIA CUDA GPU 计算能力(含旧款)。
6. 量化方法全景表
量化(Quantization)= 把高精度权重压成低精度,省显存换速度,但会损失一点智商。
| 方法 | 全称 / 类别 | 最低可跑 | 原生加速 | 特点 |
|---|---|---|---|---|
| GGUF | GPT-Generated Unified Format(llama.cpp 家族) | 任何 CPU | Volta | 兼容性之王。KQuants 平衡精度与速度;CPU 用 AVX2/AVX512 加速;ARM 用 NEON |
| GPTQ | Generalized Post-Training Quantization(仅权重) | Pascal | Volta / Turing | 曾经主流。Pascal 上效率极低;Calibration(校准)较慢 |
| AWQ | Activation-aware Weight Quantization(仅权重) | Turing 或部分 AMD | Ampere | 当前主流 INT4 方案。比 GPTQ 泛化好、不易过拟合。有 AWQ 就选 AWQ |
| EXL2 | ExLlamaV2(仅权重) | Pascal | Turing | 推理速度极快,支持混合精度(如 2.5bpw),显存管理极优;社区用得少 |
| HQQ | Half-Quadratic Quantization(仅权重) | Turing | Ampere | 无需校准数据,速度极快,适合在线实时量化 |
| AQLM | Additive Quantization(仅权重) | Ampere | Ampere | 极高压缩率(2-bit 可用),加法码本实现高精度,解码需新架构 |
| SmoothQuant | SmoothQuant(W8A8 全量化) | Turing | Turing | 真正的 INT8 计算,解决激活值量化难点,适合高吞吐(T4 服务器) |
| LLM.int8() | bitsandbytes 8-bit(W8A8 全量化) | Pascal | Turing | 早期无损方案,分离 outliers 保精度,但慢,不推荐追求速度时用 |
| FP8 | Floating Point 8(E4M3/E5M2,原生计算) | Ampere(仅 W8A16) | Ada / Hopper | 硬件原生 FP8,无需反量化。速度最快、精度损失极低;Ampere 可用 Marlin 兼容 FP8 W8A16 |
| NF4 | Normal Float 4(QLoRA 微调专用) | Turing | Ampere | 微调首选。bitsandbytes 核心,让消费级显卡(3090/4090)能微调大模型 |
| MLX | MLX Format(.npz/safetensors,Apple Silicon 专用) | Apple M1 | Apple M1 | Mac 首选。利用统一内存(Unified Memory),支持推理与 LoRA 微调 |
📚 vLLM 官方硬件支持矩阵:Quantization - vLLM
7. 按显卡架构选量化方案
最重要的一节。按硬件直接对号入座:
7.1 Ada Lovelace 及更新(4090 / 4090D / 5090 / H100 / B200)
首选:FP8(原生硬件支持,速度最快)
备选:BF16(原生加速)
低显存:AWQ / SmoothQuant
7.2 Ampere(3090 / 3080 / A6000 / A100 / A40)
首选:BF16(原生加速 Ampere 起点)
低显存:AWQ(主流 INT4 方案)
偶尔:SmoothQuant(高吞吐场景)
⚠️ 不要在 Ampere 上跑大部分原生 FP8 模型——大多数 PTQ FP8 模型用的是 Per-Token 动态量化,Ampere 上的 Marlin 算子只支持 Per-Channel / Per-Tensor,跑不起来。除非文档明说支持,否则失败率非常高。
7.3 Turing(2080Ti 22G / Tesla T4 / Tesla T10)
首选:FP16(Tensor Core 加速)
低显存:AWQ / SmoothQuant
7.4 Volta(V100 / Titan V — 垃圾佬常见配置)
首选:FP16(V100 经典姿势)
低显存:GPTQ(INT4)
7.5 Pascal(Tesla P4 / P40 / 1080Ti — 真·垃圾佬)
能用:GPTQ / BNB / GGUF
心态:跑起来就是胜利
7.6 AMD 显卡
现实:ROCm 大概率搞不定
建议:老老实实用 GGUF(llama.cpp / Ollama)
7.7 Apple Silicon(M1/M2/M3/M4)
首选:MLX(原生统一内存,最快)
备选:GGUF(兼容性最好)
8. 常见踩坑
坑 1:FP8 模型在 Ampere 上不能跑
详见 § 7.2。结论:除非模型卡说”支持 Marlin”,否则在 3090 / A100 上别试 FP8 模型。
坑 2:量化版本的”标号”陷阱
同一个 4-bit 量化,作者用 GPTQ、社区用 AWQ、llama.cpp 用 GGUF 的 Q4_K_M,互相不通用。下载前看清楚目标推理引擎支持哪种格式。
坑 3:模型卡说”支持 128K”,实际跑 64K 就崩
Context Length: 32,768 natively and 131,072 tokens with YaRN 意思是最长可以扩到 128K,不是”128K 内都好用”。详见 Dense与MoE架构对比 § YaRN。
坑 4:显存够装权重,不够装 KV cache
估算公式:
权重显存 = 参数量 × 字节数/参数
KV cache 显存 ≈ 2 × layers × hidden_size × KV头数/总头数 × seq_len × batch × 字节数
实际总显存 ≈ 权重 × 1.2~1.5(含 KV cache、激活缓存、临时缓冲)
举例:Qwen3-32B BF16 = 32B × 2 = 64GB,看起来 80GB 的 A100 够用,但实际跑 32K 上下文时 KV cache 就要十几 GB,会爆。换 AWQ INT4 后 32B × 0.5 = 16GB,宽裕很多。
坑 5:MoE 显存不省
MoE 看起来”激活参数只有 3B”,但所有专家都得加载到显存里(128 个专家随时可能被调用)。Qwen3-30B-A3B 显存占用接近 30B Dense,只是推理快。别被”激活参数”迷惑去低估显存。
9. 与本知识库其他章节的关联
- 架构理论前置:本文假设你知道 Dense/MoE/GQA/YaRN 是什么。详见 Dense与MoE架构对比.md
- Transformer 基础:Transformer.md
- MoE 工程化范例:DeepSeek.md(DeepSeek 是 MoE + FP8 混合精度训练的代表)
- 上下文长度本质:上下文窗口与Token计费.md
- GPU 硬件基础:本篇的 § 7 显卡架构选型,硬件层原理详见 NVIDIA显卡架构与AI算力.md(架构演进、Tensor Core 代际、显存带宽、老黄刀法、NVLink)
- 驱动 / CUDA / PyTorch 环境:NVIDIA驱动-CUDA-PyTorch工程基础.md——五层版本依赖链 + 常见报错诊断
- 选完精度后,决定部署哪个模型:各家LLM模型特点速查.md(16 个家族的能力对比 + 模型 ID 速查表)
- 想用 API 而非自部署:LLM-API选型方法论.md(5 维度框架 + 提供商对比)
- 推理引擎选型(填本节挖的坑):LLM推理引擎选型.md——vLLM / SGLang / llama.cpp / Ollama / LMDeploy / TensorRT-LLM / MLX 横评 + 选型决策树
- 多卡 / 多用户 / 监控的部署架构:HomeLab到中小企业LLM部署架构.md——单 GPU 到 8 卡集群,网关 / 鉴权 / 限流 / 监控
10. 术语速查
| 术语 | 全称 | 含义 |
|---|---|---|
| Model Card | — | 模型主页文档,介绍参数、用法、限制 |
| Hugging Face | — | 全球最大模型托管平台 |
| ModelScope | 魔搭 | 阿里旗下国内模型平台 |
| safetensors | — | 安全格式权重文件,替代旧的 .bin / .pt |
| Quantization | 量化 | 把高精度权重压缩成低精度 |
| PTQ | Post-Training Quantization | 训练后量化(不需要重训) |
| QAT | Quantization-Aware Training | 量化感知训练(训练时就考虑量化) |
| Calibration | 校准 | PTQ 时用少量数据决定量化参数 |
| GPTQ / AWQ / GGUF | — | 三种主流量化格式 |
| Marlin | — | NVIDIA 在 Ampere/Ada 上的 INT4 / FP8 加速算子 |
| W8A8 / W4A16 | Weight-N Activation-M | 量化位宽表达,详见 § 5.3 |
| KV Cache | — | 推理时缓存的注意力 K/V 矩阵,是显存大户 |
| bpw | bits per weight | 平均每个权重几位(EXL2 用) |
| ROCm | — | AMD 显卡的 CUDA 对等方案 |
| MLX | — | Apple Silicon 的机器学习框架 |
| Unified Memory | 统一内存 | Apple Silicon 的 CPU/GPU 共享内存设计 |
11. 来源与评分
来源:LINUX DO @flymyd《简单易懂的 LLM 相关知识梳理 ep.3-1 认识大语言模型》(2026-01-06,文档共建版块)
整体评分:8.5 / 10
采纳的部分:
- ✅ 数据精度全景表(FP64~FP4 + INT8/INT4)
- ✅ 量化方法全景表(GGUF/GPTQ/AWQ/EXL2/HQQ/AQLM/SmoothQuant/LLM.int8/FP8/NF4/MLX 共 11 种)
- ✅ 按显卡架构选量化方案的”对号入座”思路
- ✅ FP8 Marlin 在 Ampere 上的坑(实战出真知)
- ✅ Apple Silicon → MLX 的指引
补充 / 改写的部分:
- ✏️ 增加了”决策路径总览”作为开篇导航
- ✏️ 增加了 W8A8 vs W8A16 的专门解释(原文有提但没解释这个表达)
- ✏️ 增加了”显存估算公式”和”MoE 显存不省”的踩坑(原文没明确警告)
- ✏️ 增加了 KV cache 概念在显存计算中的占比说明
- ✏️ 把架构理论(Dense/MoE/GQA/YaRN)拆到 Dense与MoE架构对比.md,本文专注部署
可商榷处:
- 原文说”有 AWQ 就选 AWQ”——这是经验法则,但在 4090 / H100 上 FP8 通常比 AWQ 还好
- 原文未提推理引擎选型(vLLM vs SGLang vs llama.cpp 等),这块对部署同样关键。待后续单开一篇
— 本笔记整理于 2026-05-24