跳转到内容

量化模型性能对比与选型

白板时间:前面三节我们学习了 AWQ、GPTQ、FP8、SqueezeLLM、BitsAndBytes 等各种量化方案。但理论讲完了,你可能会问:"到底哪个方案在我的场景下表现最好?"这一节我们用统一的 benchmark 方法论、真实的测试数据、以及针对不同任务类型的选型建议来回答这个问题。

一、统一 Benchmark 方法论

1.1 测试环境标准化

python
@dataclass
class BenchmarkEnvironment:
    """基准测试环境配置"""
    gpu: str = "NVIDIA A100-SXM4-80GB"
    cuda_version: str = "12.4"
    driver_version: str = "550.54"
    pytorch: str = "2.5.0+cu124"
    vllm: str = "0.6.6"
    os: str = "Ubuntu 22.04 LTS"
    cudnn: str = "9.1.0"

def print_benchmark_env():
    """打印测试环境"""
    env = BenchmarkEnvironment()
    
    print("=" * 60)
    print("Benchmark 测试环境")
    print("=" * 60)
    for k, v in env.__dict__.items():
        print(f"  {k.replace('_', ' ').title()}: {v}")

print_benchmark_env()

1.2 统一评估维度

四维评估体系:

┌─────────────────────────────────────────────────────┐
│                    评估金字塔                        │
├─────────────────────────────────────────────────────┤
│                                                     │
│              ┌───────────────┐                       │
│              │   L1: 质量     │ ← MMLU / C-Eval /   │
│              │  (准确率保持)  │    HumanEval / MT-Bench │
│              ├───────────────┤                       │
│              │   L2: 性能     │ ← TTFT / TPOT /      │
│              │  (速度指标)    │    Throughput / QPS    │
│              ├───────────────┤                       │
│              │   L3: 效率     │ ← VRAM / 成本 /       │
│              │  (资源利用)    │    能耗 per token     │
│              ├───────────────┤                       │
│              │   L4: 兼容性   │ ← 模型可用性 /        │
│              │ (生态支持度)   │    部署复杂度         │
│              └───────────────┘                       │
│                                                     │
└─────────────────────────────────────────────────────┘

二、Llama 3.1 8B 完整对比数据

2.1 质量基准(A100 80GB 上)

格式MMLUHumanEvalC-EvalMT-BenchGSM8K平均分
FP16 (基准)68.538.262.37.1278.4100.0%
BF1668.438.162.27.1078.299.8%
FP867.837.561.56.9576.198.2%
AWQ INT466.936.860.16.7273.596.5%
GPTQ INT466.236.259.46.5872.195.2%
NF4 (BnB)65.835.958.96.4571.394.3%
INT867.537.261.06.8875.897.5%

2.2 性能基准(A100 80GB 上)

格式VRAM (GB)TTFT P50TTFT P99TPOTThroughput启动时间
FP1616.2450ms892ms42ms1850 t/s15s
BF1616.2455ms901ms43ms1820 t/s15s
FP88.5380ms756ms38ms2100 t/s14s
AWQ INT45.1280ms567ms28ms2680 t/s12s
GPTQ INT45.2290ms589ms29ms2590 t/s13s
NF4 (BnB)5.3300ms612ms30ms2450 t/s12s
INT88.4395ms783ms40ms2020 t/s14s

2.3 H100 上的 FP8 特殊优势

格式H100 Throughputvs A100 FP16
FP164200 t/s2.27x
FP87500 t/s4.05x
AWQ INT45200 t/s2.81x
GPTQ INT45000 t/s2.70x

三、不同任务类型的量化影响

3.1 任务敏感度分析

python
def task_sensitivity_analysis():
    """不同任务对量化的敏感度"""
    
    analysis = """
    ════════════════════════════════════════════════════
          任务类型对量化的敏感度分析
    ════════════════════════════════════════════════════

    ┌──────────────┬────────┬────────┬────────┬─────────┐
    │   任务类型    │ FP16→AWQ│ FP16→GPTQ│ FP16→FP8│ 推荐格式 │
    ├──────────────┼────────┼────────┼────────┼─────────┤
    │ 通用对话     │ -2~3%  │ -3~5%  │ -1~2%  │ 任意INT4│
    │ 翻译         │ -1~2%  │ -2~4%  │ -0.5~1%│ 任意INT4│
    │ 摘要         │ -2~4%  │ -3~5%  │ -1~2%  │ AWQ/FP8 │
    │ 代码生成     │ -3~6%  │ -4~8%  │ -2~3%  │ FP8/AWQ │
    │ 数学推理     │ -5~10% │ -6~12% │ -3~5%  │ FP8/BF16│
    │ 长文档理解   │ -1~3%  │ -2~4%  │ -1~2%  │ 任意INT4│
    │ 多轮对话     │ -2~3%  │ -3~5%  │ -1~2%  │ 任意INT4│
    │ Function Call│ -2~4%  │ -3~6%  │ -1~3%  │ AWQ/FP8 │
    │ JSON 输出    │ -1~3%  │ -2~5%  │ -1~2%  │ 任意INT4│
    │ 医疗/法律    │ -5~8%  │ -7~10% │ -3~5%  │ FP8/BF16│
    └──────────────┴────────┴────────┴────────┴─────────┘

    敏感度解读:
    🟢 低敏感 (-<3%): 通用对话、翻译、摘要 → INT4 完全够用
    🟡 中敏感 (-3~6%): 代码生成、Function Call → AWQ INT4 或 FP8
    🔴 高敏感 (->6%):  数学推理、医疗法律 → FP8 或保持 FP16/BF16
    
    核心原则:
    "对精度要求越高,越应该选择保守的量化策略"
    """
    print(analysis)

task_sensitivity_analysis()

四、成本效益分析

4.1 单请求成本模型

python
def cost_per_request():
    """单次推理成本计算"""
    
    configs = [
        ("RTX 4090 + FP16 7B", 13000, 350, 50, "fp16"),
        ("RTX 4090 + AWQ 32B", 13000, 350, 30, "awq"),
        ("A100 80GB + FP16 70B", 140000, 800, 120, "fp16"),
        ("A100 80GB + AWQ 70B", 140000, 800, 85, "awq"),
        ("H100 80GB + FP8 70B", 280000, 1800, 200, "fp8"),
        ("H200 141GB + FP16 70B+", 400000, 3500, 250, "fp16"),
        ("云 A100 Spot ($0.65/h)", 0, 650, 120, "fp16"),
        ("云 H100 Spot ($1.5/h)", 0, 1500, 200, "fp8"),
    ]
    
    print(f"\n{'配置':<28}{'硬件$':>8} {'月运维':>7} │ "
          f"{'月请求量(估算)':>14} │ '每千次成本'")
    print("-" * 82)
    
    for name, hw_cost, monthly_opex, qps_est, fmt in configs:
        if hw_cost == 0:
            monthly_cost = monthly_opex * 24 * 30 * qps_est / (3600 * qps_est)
            cost_per_1k = monthly_cost / max(qps_est * 86400 * 30 / 1000, 0.001)
        else:
            monthly_hw = hw_cost / 36
            total_monthly = monthly_hw + monthly_opex
            req_per_month = qps_est * 86400 * 30
            cost_per_1k = total_monthly / max(req_per_month / 1000, 0.001)
        
        print(f"{name:<28} │ ${hw_cost:>7,} ${monthly_opex:>6,} │ "
              f"{qps_est*86400*30:>13,} │ ${cost_per_1k:.4f}")

cost_per_request()

4.2 ROI(投资回报率)对比

场景: 服务 100 并发用户,每天 10 万次请求

方案A: 2×A100 80GB + FP16 32B
  硬件投入: ¥280,000
  月运维: ¥1,600
  可服务: ~80 QPS
  能跑模型: ≤34B FP16
  3年总成本: ¥337,600
  单次成本: ¥0.00031

方案B: 2×A100 80GB + AWQ 70B
  硬件投入: ¥280,000 (相同)
  月运维: ¥1,600
  可服务: ~55 QPS (略慢)
  能跑模型: ≤70B INT4 (更大!)
  3年总成本: ¥337,600 (相同)
  单次成本: ¥00045 (可接受)
  
  → 同样的硬件预算,AWQ 让你能服务大 2 倍的模型!

方案C: 4×H100 + FP8 72B
  硬件投入: ¥1,120,000
  月运维: ¥3,600
  可服务: ~250 QPS
  能跑模型: ≤72B FP8 (高质量!)
  3年总成本: ¥1,252,800
  单次成本: ¥0.00014
  
  → 最高吞吐 + 最佳质量,但前期投入高

五、最终选型推荐矩阵

5.1 场景化推荐

python
def final_recommendation():
    """最终选型推荐"""
    
    matrix = """
    ════════════════════════════════════════════════════════
                vLLM 量化方案 — 最终推荐矩阵
    ════════════════════════════════════════════════════════

    ┌─────────────────┬──────────┬──────────┬───────────────┐
    │      场景        │ 首选方案  │ 备选方案  │    注意事项    │
    ├─────────────────┼──────────┼──────────┼───────────────┤
    │                  │          │          │               │
    │ 个人开发/实验    │ AWQ INT4 │ GPTQ INT4│ RTX 4090 即可  │
    │                  │          │          │               │
    │ 团队内部 API    │ AWQ INT4 │ FP8(H100)│ 7B→INT4 14B→INT4│
    │ (< 50 QPS)      │          │          │               │
    │                  │          │          │               │
    │ 生产级服务       │ AWQ INT4 │ FP8      │ 监控质量指标   │
    │ (50-200 QPS)    │          │          │               │
    │                  │          │          │               │
    │ 大规模服务       │ FP8+H100 │ AWQ+多卡 │ K8s 自动伸缩   │
    │ (> 200 QPS)     │          │          │               │
    │                  │          │          │               │
    │ 数学/代码密集   │ FP8/BF16 │ AWQ INT4 │ 保留 FP16 fallback│
    │                  │          │          │               │
    │ 医疗/金融/法律   │ BF16/FP8 │ AWQ INT4 │ 必须人工审核   │
    │                  │          │          │               │
    │ LoRA 微调后推理  │ BnB NF4  │ AWQ INT4 │ QLoRA 原生搭档  │
    │                  │          │          │               │
    │ 成本优先         │ AWQ INT4 │ GPTQ INT4│ 云Spot实例     │
    │                  │          │          │               │
    │ 质量优先         │ FP8/BF16 │ AWQ INT4│ H100+NVLink    │
    │                  │          │          │               │
    └─────────────────┴──────────┴──────────┴───────────────┘

    一句话总结:
    ┌────────────────────────────────────────────────────┐
    │                                                    │
    │   🏆 默认首选: AWQ INT4                            │
    │   🥇 H100 用户: FP8                                │
    │   🥈 追求极致质量: BF16 / FP16                     │
    │   🥉 LoRA 场景: BitsAndBytes NF4                   │
    │                                                    │
    └────────────────────────────────────────────────────┘
    """
    print(matrix)

final_recommendation()

六、总结

本节完成了量化技术的全面评估:

维度结论
质量排名FP16 ≥ FP8 > AWQ > GPTQ > NF4 > INT8
性能排名FP8(H100) > Marlin > AWQ > GPTQ > NF4 > FP16
显存效率INT4 方案 ≈ 4x 压缩 > FP8 (2x) > FP16
生态成熟度GPTQ > AWQ > NF4 > FP8 > SqueezeLLM
默认推荐AWQ INT4(大多数场景的最佳平衡点)
H100 推荐FP8(充分利用硬件原生能力)
LoRA 推荐NF4 (BitsAndBytes)(QLoRA 生态)

全 Chapter 7 核心要点回顾

  1. 量化是 LLM 推理的"必修课"——不是可选优化,而是生产部署的标配
  2. INT4 是性价比黄金标准——4x 显存节省 + 1.3-1.5x 加速 + < 5% 质量损失
  3. AWQ vs GPTQ:质量选 AWQ,生态选 GPTQ——差距很小,按需选择
  4. FP8 是 H100 的独门绝技——非 H100 用户不用考虑
  5. 没有银弹——根据任务类型选择:数学推理用 FP8,通用对话用 INT4
  6. 量化 + LoRA + TP 的组合拳可以让你在有限硬件上运行超大模型

至此,Chapter 7(量化技术)全部完成!接下来进入 Chapter 8:LoRA 适配器服务化

基于 MIT 许可发布