本地部署模型量化选型:从 Model Card 到能跑起来

一句话:领导让你”私有化部署一个大模型”,你的 GPU 可能是 H100、4090、3090、2080Ti、Tesla P40,甚至只是 Apple Silicon。模型能不能跑起来、跑得快不快、智商损失多少,全看一件事——模型的数据精度与量化方法是否匹配你的硬件。这篇是配套地图。


目录


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 Facehuggingface.co全球最大,国内被墙
HF 镜像hf-mirror.com国内可访问,配合 Aria2 脚本下载,速度不一定输官方
ModelScopemodelscope.cn阿里魔搭,国内首选;偶尔莫名其妙限速

模型 ID 通用格式:组织名/模型名,如 Qwen/Qwen3-32Bdeepseek-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.mdModel Card 本体已在第一站看过

4. 第三站:config.json 字段速查

config.json 是模型架构的”出生证明”。下面以 Qwen3-32B(Dense)和 Qwen3-30B-A3B(MoE)为例,标 ⭐ 的是部署时一定要关注的:

4.1 通用字段(Dense 和 MoE 都有)

字段含义例子(Qwen3-32B)
architectures架构类名,决定加载哪个 Python 类["Qwen3ForCausalLM"]
model_typeHuggingFace 内部模型标识"qwen3"
hidden_size隐藏层宽度(单 token 向量维度)5120
intermediate_sizeMLP 层(前馈网络)宽度25600
head_dim单注意力头的子维度128
num_attention_heads注意力头数(Q)64
num_key_value_headsKV 头数8
num_hidden_layers隐藏层数64
hidden_act激活函数"silu"
rms_norm_eps归一化参数1e-06
rope_thetaRoPE 旋转基数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多少层用一次稀疏 MoE1(每层都用)
mlp_only_layers仅用稠密 MLP 不用 MoE 的层[](没有,全 MoE)

4.3 实战意义

  • torch_dtype → 决定原生最低显存需求(BF16 = 2 字节/参数 × 总参数)
  • num_hidden_layers + hidden_size → 决定推理延迟(量级)
  • architectures → 决定推理引擎兼容性(vLLM / SGLang 必须支持这个架构名)

5. 数据精度全景表

模型权重的”颗粒度”。颗粒越细,模型越聪明;颗粒越粗,存得越省、跑得越快。

5.1 浮点精度

精度别名字节/参数最低可跑架构原生加速架构备注
FP64双精度8Tesla (GT200)FermiLLM 几乎不用
FP32单精度4G80Kepler / Maxwell极少数训练场景
FP16 (CUDA)半精度2PascalPascal (GP100)消费级 Pascal 跑 FP16 不加速
FP16 (Tensor Core)半精度2VoltaVoltaV100/Titan V 起可用 Tensor Core 加速
BF16Brain Float2AmpereAmpere30 系是 BF16 起点;Marlin INT4 算子也从这一代开始
FP8浮点量化1Ampere(Marlin 模拟 W8A16)Ada Lovelace / Hopper比 FP16 算量砍半、精度损失极小;有的模型原生 FP8 训练
FP4微缩放0.5BlackwellBlackwell2026 新一代,目前只有 GPT-OSS 等少数模型支持

5.2 整数精度

精度别名最低可跑架构原生加速架构备注
INT8 (DP4A)整数 SIMDPascalPascalP40 / 1080Ti 可用 CUDA 算 INT8
INT8 (Tensor Core)整数 TCTuringTuringTuring 起可用 Tensor Core 高速 INT8
INT4 (W4A16)4-bit 整数PascalAmperePascal 限 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)= 把高精度权重压成低精度,省显存换速度,但会损失一点智商

方法全称 / 类别最低可跑原生加速特点
GGUFGPT-Generated Unified Format(llama.cpp 家族)任何 CPUVolta兼容性之王。KQuants 平衡精度与速度;CPU 用 AVX2/AVX512 加速;ARM 用 NEON
GPTQGeneralized Post-Training Quantization(仅权重)PascalVolta / Turing曾经主流。Pascal 上效率极低;Calibration(校准)较慢
AWQActivation-aware Weight Quantization(仅权重)Turing 或部分 AMDAmpere当前主流 INT4 方案。比 GPTQ 泛化好、不易过拟合。有 AWQ 就选 AWQ
EXL2ExLlamaV2(仅权重)PascalTuring推理速度极快,支持混合精度(如 2.5bpw),显存管理极优;社区用得少
HQQHalf-Quadratic Quantization(仅权重)TuringAmpere无需校准数据,速度极快,适合在线实时量化
AQLMAdditive Quantization(仅权重)AmpereAmpere极高压缩率(2-bit 可用),加法码本实现高精度,解码需新架构
SmoothQuantSmoothQuant(W8A8 全量化)TuringTuring真正的 INT8 计算,解决激活值量化难点,适合高吞吐(T4 服务器)
LLM.int8()bitsandbytes 8-bit(W8A8 全量化)PascalTuring早期无损方案,分离 outliers 保精度,但,不推荐追求速度时用
FP8Floating Point 8(E4M3/E5M2,原生计算)Ampere(仅 W8A16)Ada / Hopper硬件原生 FP8,无需反量化。速度最快、精度损失极低;Ampere 可用 Marlin 兼容 FP8 W8A16
NF4Normal Float 4(QLoRA 微调专用)TuringAmpere微调首选。bitsandbytes 核心,让消费级显卡(3090/4090)能微调大模型
MLXMLX Format(.npz/safetensors,Apple Silicon 专用)Apple M1Apple M1Mac 首选。利用统一内存(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. 与本知识库其他章节的关联


10. 术语速查

术语全称含义
Model Card模型主页文档,介绍参数、用法、限制
Hugging Face全球最大模型托管平台
ModelScope魔搭阿里旗下国内模型平台
safetensors安全格式权重文件,替代旧的 .bin / .pt
Quantization量化把高精度权重压缩成低精度
PTQPost-Training Quantization训练后量化(不需要重训)
QATQuantization-Aware Training量化感知训练(训练时就考虑量化)
Calibration校准PTQ 时用少量数据决定量化参数
GPTQ / AWQ / GGUF三种主流量化格式
MarlinNVIDIA 在 Ampere/Ada 上的 INT4 / FP8 加速算子
W8A8 / W4A16Weight-N Activation-M量化位宽表达,详见 § 5.3
KV Cache推理时缓存的注意力 K/V 矩阵,是显存大户
bpwbits per weight平均每个权重几位(EXL2 用)
ROCmAMD 显卡的 CUDA 对等方案
MLXApple 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