乐于分享
好东西不私藏

下载了LLM却没法双击运行?揭秘推理引擎背后的’内存魔法

下载了LLM却没法双击运行?揭秘推理引擎背后的’内存魔法

https://www.youtube.com/watch?v=B18zBnjZKmc

一、核心问题:模型文件 ≠ 可执行文件

  • 下载的模型是一组文件(artifacts),包括:
    • model.safetensors
      (约15GB):存储模型权重(类似大型JSON)
    • config.json
      :定义模型架构(注意力头数、层数、词汇表大小等)
  • 不能直接运行,需要推理引擎(如 llama.cppvLLMTGI)来加载和服务模型。

二、推理引擎的差异

引擎
主要语言
特点
llama.cpp
C++
加载快,支持内存映射(mmap)
vLLM
Python
加载慢(几分钟),但调度和并发能力强
TGI
Rust + C++ + Python
速度快,但复杂度高

语言快慢(C++/Rust vs Python)并不直接决定推理速度,因为内存管理和调度策略更重要。


三、模型加载的关键技术:mmap(内存映射)

  • 问题
    :模型权重(15GB)从 SSD → RAM → GPU 可能产生重复内存和拷贝开销。
  • 解决方案
    mmap 让操作系统管理内存:
    • 不立即加载全部权重,而是懒加载(lazy loading)
    • 权重在需要时才从 SSD 调入 RAM
    • 若 RAM 被其他应用占用,OS 可驱逐不活跃的权重,再次访问时重新从 SSD 加载
  • 性能
    • PCIe 带宽约 7 GB/s(NVMe)
    • 假设 15GB 模型中 5%(750MB)被驱逐 → 加载延迟仅约 107 毫秒
  • 实际效果
    • llama.cpp
       加载模型 < 10 秒
    • vLLM
       加载需 几分钟(因为编译和初始化开销大)

四、量化(Quantization)

量化是为了减少模型大小和内存占用,同时尽量保持精度。类比:4K → 1080p → 4K 的压缩与还原。

4.1 常见量化格式

  • RTN(Round to Nearest)
  • AWQ、GGUF(Q4_0, Q4_1, Q4_K, Q4_KM)、EXL2、EXL3、FP8、NVFP4

4.2 量化基本方法

  • 原始精度
    :BF16
  • 目标精度
    :INT4 / INT8
  • 对称量化
    :基于最大值/最小值范围
  • 非对称量化
    :包含偏置(bias)

4.3 分组量化(Group Quantization)

  • 将权重分组(如32个一组),每组内计算 min/max,归一化后取整。
  • 保留16位 scale 用于反量化。

4.4 K-quants(如 Q4_K_S, Q4_K_M)

  • 分层缩放
    :大组(256个权重) + 小组(32个权重)
  • 混合精度
    :不同类型层(embedding, attention, FFN)使用不同位数
    • Q4_K_S:所有层4位(除归一化层)
    • Q4_K_M:输出投影和FFN门用6位

4.5 AWQ(Activation-aware Weight Quantization)

  • 使用校准数据集找出重要权重(salient weights)
  • 通过缩放重要权重来减少量化误差

4.6 EXL2

  • 类似 AWQ,但使用Hessian矩阵(二阶导数)评估权重对误差的敏感度
  • 混合精度存储
    • 高误差组 → 高精度(4–6位)
    • 低误差组 → 低精度(2–3位)
  • 性能优势
    :EXL2 在 tokens/秒 和 困惑度(perplexity)上表现最佳

五、硬件相关量化

格式
支持架构
说明
FP8
Hopper(如 H100)
原生低精度运算
NVFP4
Blackwell(如 B200)
更新的低精度格式

这些需要特定 GPU 才能发挥性能。


六、为什么 GGUF 仍然最流行?

  • 大多数本地运行模型的人内存受限
  • GGUF 支持混合 RAM + GPU 卸载(像双层床一样分层存储)
  • 消费者显卡通常 ≤ 32GB,发烧友 ≤ 70GB

七、后续预告(作者计划)

若观众反馈良好,后续视频将覆盖:

  • Prefill & Decoding
    (预填充与解码)
  • Serving
    (服务调度)
  • Speculative Decoding
    (推测解码)
  • KV Cache 管理
  • Scheduling & Concurrency
    (调度与并发)

八、总结观点

  • 推理引擎的选择影响加载时间、内存使用和最终吞吐量。
  • 量化方法在“精度 vs 速度 vs 内存”之间权衡,没有绝对最优。
  • mmap
     是高效加载的关键技术,尤其适合大模型。
  • 本地推理的瓶颈常常是内存层次结构,而非 CPU/GPU 的原始算力。