ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大语言模型量化精读:从 Q4_K_M 到 FP8,一文读懂 LLM 量化的位宽与命名

大语言模型量化精读:从 Q4_K_M 到 FP8,一文读懂 LLM 量化的位宽与命名 文档教程技术博客大模型人工智能【免费下载链接】one-small-step这是一个简单的技术科普教程项目主要聚焦于解释一些有趣的前沿的技术概念和原理。每篇文章都力求在 5 分钟内阅读完成。项目地址https://gitcode.com/gh_mirrors/on/one-small-step点击查看免费下载量化Quantization是让大语言模型瘦身运行的关键技术通过降低模型参数的数值精度可以成倍压缩模型体积与内存占用让几十 GB 的模型在消费级显卡上跑起来。本篇以 one-small-step 仓库中的《什么是大语言模型量化》为基础系统讲解量化的基本原理、位宽换算、K 量化命名规则如 Q4_K_M并结合困惑度PPL指标与 GGUF/llama.cpp 生态帮你彻底看懂每个量化精度代表什么、如何选择。量化是什么为什么 LLM 需要量化量化是一种通过降低模型参数的数值精度来压缩模型大小的技术。在深度学习中模型参数通常以 32 位浮点数FP32存储通过量化可以将其转换为更低精度的表示形式从而减少模型的内存占用和计算开销。对现代 LLM 而言模型体积主要由参数量和参数字节数共同决定。一个 70 亿参数7B的模型如果全部用 FP32 存储仅权重就需要约 28GB 显存而推理时的 KV Cache、激活值还会叠加更多内存压力。量化正是在模型体积、运行内存、推理速度与生成质量之间寻找平衡点的工程手段——这也是为什么几乎所有本地部署生态GGUF、llama.cpp 等都围绕量化版本展开。位宽与字节量化压缩的基本账理解量化先要理解位bit和字节byte的关系1 字节 8 位。位宽决定了单个参数需要多少个二进制位来存储也直接决定了内存占用。如上图所示FP32 的大小是 4 字节4 字节 × 8bit 32bit而 FP16 的大小是 2 字节2 字节 × 8bit 16bit。数值表示的本质差异在于三个部分如何分配位数精度格式位宽字节数格式构成符号/指数/尾数相对 FP32 的内存占用FP3232 位4 字节1 / 8 / 23100%基准FP1616 位2 字节1 / 5 / 101/2BF1616 位2 字节1 / 8 / 71/2FP88 位1 字节1 / 4 / 3 或 1 / 5 / 21/4INT88 位1 字节1 位符号 7 位数值1/4INT44 位0.5 字节1 位符号 3 位数值1/8这正是大家喜欢用 Q4 量化模型的原因跟 FP1616bit的模型相比Q44bit的模型只有 1/4 的大小运行起来需要的内存也是 1/4。量化的代价是精度的损失——尾数位和指数位被削减后参数的表示精度下降模型输出质量会有轻微退化这正是后文 PPL困惑度指标要度量的东西。训练侧精度格式FP32 / FP16 / BF16 / FP8量化主要服务于推理阶段的部署但训练阶段同样大量使用低精度格式来降低成本FP32单精度浮点传统深度学习的基准精度动态范围和精度都很高兼容性最广但内存占用大、计算开销高。FP16半精度浮点内存和计算相比 FP32 减半动态范围较小约 6e-5 到 65504训练时可能出现上溢或下溢通常需要配合动态损失缩放Dynamic Loss Scaling。BF16脑浮点数动态范围与 FP32 相同解决了 FP16 的溢出问题但尾数精度较低是目前大模型训练最常用的精度格式之一。FP8E4M3 / E5M28 位浮点需要 Hopper 及更新的 GPU 硬件支持。E4M3 精度更高、适合权重和激活值E5M2 动态范围更广、适合梯度计算。现在大多数模型训练都采用 FP16 精度最近出圈的 DeepSeek-V3 则采用了FP8 精度训练能显著提升训练速度和降低硬件成本。从源码结构看仓库中的大模型精度格式一览对 FP32、FP16、BF16、FP8、INT8、INT4 乃至 1-bit 等格式的位数构成、代表模型和适用场景做了更完整的梳理可以作为本节的延伸阅读。Q4_K_M 到底是什么意思K 量化命名解码理解位宽之后剩下的问题就是量化模型文件如Q4_K_M.gguf那一长串后缀到底代表什么这种命名方式一般出现在GGUF / GGML 格式的模型中它们通常采用 K 量化方法格式类似Q4_K_M。命名可以拆解为三段命名段含义示例说明Q 数字量化精度bit 数Q4表示 4bit 量化KK 量化方法由 llama.cpp 社区提出的分块量化方法按块计算缩放因子比早期 Q4_0/Q4_1 精度损失更小S/M/L等模型在尺寸和PPL困惑度之间的平衡度从高到低有0、1、XS、S、M、L等档位以Q4_K_M为例4bit 量化 K 量化方法 中等平衡档位。后缀中的_0、_1如Q4_0、Q5_1属于更早期的基础量化变体而带K的Q4_K_S、Q4_K_M则是 K 量化对精度与速度做了不同权衡的版本K_SSmall偏向更小的体积量化粒度更粗体积更小但 PPL 略高K_MMedium在尺寸和 PPL 之间取平衡是社区中最常用的档位K_LLarge更接近原始精度体积更大但 PPL 损失更小。另外值得注意PPL 是评估语言模型性能的重要指标它衡量模型对下一个词的预测准确程度。PPL 越低代表模型预测越准确、量化带来的质量损失越小因此 K 量化的后缀档位本质上是在用 PPL 作为质量标尺来平衡体积。PPL困惑度衡量量化质量的标尺既然后缀中的平衡度基于 PPL那么 PPL 到底如何评估一次量化的好坏仓库中的什么是 LLM 的困惑度给出了完整定义困惑度是模型对测试集的对数概率的负平均值数学上表示为$$\text{Perplexity} \exp\left(-\frac{1}{N}\sum_{i1}^{N}\log p(x_i)\right)$$其中 N 是测试集中的标记token数量p(x_i) 是模型对标记 x_i 的预测概率。直观理解困惑度可以看作模型在每个位置上平均需要考虑的可能选项数量——困惑度越低预测越确定、越准确。上图直观展示了量化的核心权衡对任意参数规模的模型K 量化都会让模型体积横轴GiB大幅下降而困惑度纵轴仅小幅上升同时参数规模越大的模型量化后的 PPL 也越低。这正是 K 量化以极小质量损失换取巨大体积压缩的核心价值。常见 K 量化版本 PPL 对比表以 7B 模型为例llama.cpp 社区的量化对比基准给出了各 K 量化版本的 PPL 增量、体积和适用建议。表中ppl increase指相对原始模型困惑度的绝对增量ppl 13b to 7b %表示该量化损失相当于把 13B 模型缩到 7B 所带来的困惑度上升的百分比便于直观感受损失的量级typeppl increaseppl 13b to 7b %file sizenoteq2_k0.8698100%2.67GB超大号的模型想要测试可以考虑 Q2 版本比如 unsloth 团队的 DeepSeek-V3-Q2_K_M 量化版本实际测下来是可用的q4_00.249938.3%3.5GB基础 4bit 量化速度较快但 PPL 损失偏高q4_10.184628.3%3.9GB基础 4bit 量化比 Q4_0 略好q4_ks0.114917.6%3.56GBK 量化 4bit 小档位q4_km0.05358.2%3.80GB如果没有提供 Q5 量化版本那么 Q4 量化版本也可以考虑建议至少 Q4_K_M 版本q5_00.079612.2%4.3GB基础 5bit 量化q5_10.04156.36%4.7GB基础 5bit 量化损失更小q5_ks0.03535.41%4.33GBK 量化 5bit 小档位q5_km0.01422.18%4.45GB目前最推荐的量化大小实际体验下来各种模型量化中这个版本是最理想的q6_k0.00440.67%5.15GBPPL 损失几乎可以忽略k8_00.00040.061%6.7GB如果显存十分富裕当然推荐这个数据来自 llama.cpp 社区的量化对比基准测试即社区 PR 1684 中的数据具体全部量化选项可进一步查阅 llama.cpp 源码中的ggml-quants.h头文件。从表中可以读出几条规律量化精度每提升一档PPL 增量快速下降从 Q2 到 Q8体积只翻约 2.5 倍而 PPL 增量从 0.87 一路降到 0.0004压缩近 2000 倍K 量化明显优于同位数的基础量化同为 4bitQ4_K_M0.0535的 PPL 增量远低于Q4_00.2499Q5_K_M 是体积与质量的甜点仅比 Q4_K_M 多约 0.65GBPPL 增量却降低约 3.8 倍这也是作者实测后最推荐的档位。量化版本怎么选从 Q2 到 Q8 的取舍结合上表与部署实际选择量化版本可以参考以下原则显存极紧张如超大模型试运行选Q2_K级别的极限压缩例如 unsloth 团队为 DeepSeek-V3 这类超大模型提供的Q2_K_M量化版本实测是可用的入门底线至少选择Q4_K_M版本——如果模型作者没有提供 Q5 量化版本Q4_K_M 是保证质量与体积平衡的下限质量优先推荐Q5_K_M是绝大多数场景下的最优选实际体验下来各种模型量化中这个版本最理想显存充裕Q6_K0.67% 的等效损失甚至Q8_00.061%几乎无损显存富余时直接选显存非常充裕直接使用 FP16 原始权重彻底避免量化损失。其他量化格式bf16、4bit、int4、fp8 呢除了 GGUF 的 K 量化命名模型社区还有大量其他量化格式它们的命名更直白bf16即 BF1616bit 精度动态范围与 FP32 相同、尾数精度较低主要用于训练而非压缩存储4bit即 4bit 量化通常配合 GPTQ、AWQ 等先进量化算法将浮点数映射到 [-8, 7] 的整数范围压缩率可达 FP32 的 1/8int4 / int8整数量化通过value (int_value - zero_point) * scale的缩放与零点映射实现INT8 在带硬件加速单元的显卡上计算速度极快fp88 位浮点分 E4M3 与 E5M2 两种变体主要出现在训练与新一代 GPU 推理场景。有了 K 量化的经验这类命名很容易猜出来bf16 是 16bit 精度4bit 就是 4bit 精度。同样建议至少使用 4bit 量化的模型除非模型特别大200B——超大模型本身的冗余度更高极限压缩带来的相对损失反而可以接受。在真实项目中落地GGUF 与 llama.cpp量化精度讨论的载体绝大多数是 GGUF 格式的模型文件。GGUFGGML Universal File是专为 LLM 设计的单文件格式将权重、配置和分词器全部打包支持 mmap 快速加载是本地部署生态的事实标准详见仓库中的什么是 GGUF。你可以按照如何本地运行 GGUF 格式的 LLM 模型的完整流程实践一遍核心步骤是下载量化模型在模型仓库中选择自己需要的量化版本如 Q8_0、Q5_K_M只需下载单个.gguf文件无需全部下载编译 llama.cppgit clone https://github.com/ggerganov/llama.cpp cd llama.cpp cmake -B build cmake --build build --config Release -j启动推理服务通过-m指定量化后的 GGUF 文件路径./build/bin/llama-server -m /data/unslouth/DeepSeek-R1-Distill-Qwen-32B-GGUF/DeepSeek-R1-Distill-Qwen-32B-Q8_0.gguf --host 0.0.0.0 --port 9990启动后在浏览器访问指定 IP 和端口如http://192.168.1.2:9990即可对话。整个链路中选择哪个量化版本直接影响你能在多大显存上跑起模型、以及输出质量损失多少——这正是本文前几节所有位宽与 PPL 知识落地的场景。总结量化是 LLM 从数据中心专属走向个人电脑可跑的关键技术。一句话记住本文的核心结论位宽决定体积FP32 占 4 字节/参数FP16 减半4bit 量化进一步压缩到 1/4这是Q4 只有 Q16 的 1/4 大小的根本原因命名即信息Q4_K_M 4bit 精度 K 量化方法 尺寸/PPL 平衡档位0/1/XS/S/M/LPPL 是质量标尺量化后缀的平衡档位本质就是在用困惑度权衡体积与质量选择有梯度显存紧张选 Q2底线至少 Q4_K_M最推荐 Q5_K_M显存充裕上 Q6_K / Q8_0生态可落地GGUF 单文件格式 llama.cpp 一条命令即可把量化模型跑成本地服务。下次再看到Q4_K_M.gguf、bf16、fp8这样的命名时你已经能准确说出它们背后的位宽、方法、权衡逻辑以及它们在你自己的硬件上该怎么选。赞分享文档教程技术博客大模型人工智能【免费下载链接】one-small-step这是一个简单的技术科普教程项目主要聚焦于解释一些有趣的前沿的技术概念和原理。每篇文章都力求在 5 分钟内阅读完成。项目地址https://gitcode.com/gh_mirrors/on/one-small-step点击查看免费下载相关推荐如何一键导出微信聊天记录WeChatMsg完整备份与数据分析终极指南如何一键导出微信聊天记录WeChatMsg完整备份与数据分析终极指南 你是否曾担心珍贵的微信对话会随着手机更换而消失那些与亲友的温馨对话、工作中的重要讨论、大模型量化格式全解析从FP16到GGUF一文读懂模型压缩技术大模型量化格式全解析从FP16到GGUF一文读懂模型压缩技术 在人工智能模型飞速发展的今天大语言模型LLM的参数规模动辄数十亿甚至上千亿这给模型的存人工智能大模型LLM/VLM含推理深度学习BLAST社区贡献指南如何参与开源项目的开发BLAST社区贡献指南如何参与开源项目的开发 BLAST作为开源的VMs as a service项目为开发者提供了高性能的Web浏览AI服务引擎。本指南将上一篇ESP-IDF 异步内存拷贝async memcpy驱动基于 DMA 的高效内存搬运实战指南下一篇es-toolkit isNumber 源码剖析Lodash 兼容版如何同时识别原始数字与 Number 包装对象创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表