llama.cpp: GGUF格式及模型量化参数介绍
GGUF格式介绍
GGUF(GPT-Generated Unified Format)是推理框架llama.cpp 中使用的一种专为大语言模型设计的二进制文件格式,旨在实现模型的快速加载和保存,同时易于读取。GGUF格式的特点:
- 单文件部署:模型可以轻松分发和加载,不需要任何外部文件来提供额外信息。
 - 可扩展性:可以在不破坏与现有模型的兼容性的情况下,向基于
GGML的执行器添加新功能或向GGUF模型添加新信息。 - mmap兼容性:可以使用
mmap加载模型,以实现快速加载和保存。 - 易于使用:可以使用少量代码轻松加载和保存模型,无论使用何种语言,无需外部库。
 - 完整信息:加载模型所需的所有信息都包含在模型文件中,用户无需提供任何额外信息。
 
GGUF文件的结构如下图所示:

主要包括以下几个部分:
- 文件头(
Header):标识文件类型(GGUF)、版本号、张量数量。 - 元数据段(
Metadata):JSON-like键值对存储模型信息。 - 张量数据段(
Tensors):按量化类型存储模型权重。 
它们使用general.alignment元数据字段中指定的全局对齐,如果需要,文件将用0x00字节填充到general.alignment的下一个倍数。除非另有说明,字段(包括数组)将按顺序连续写入,不进行对齐。模型默认为小端序,当然它们也可以是大端序以供大端序计算机使用,在这种情况下,所有值(包括元数据值和张量)也将是大端序。
GGUF命名约定
GGUF遵循<BaseName><SizeLabel><FineTune><Version><Encoding><Type><Shard>.gguf的命名约定,其中每个组件由-分隔(如果存在),这种命名方式的最终目的是为了让人们能够快速了解模型的关键信息。
每个组件的含义如下:
-  
BaseName:模型基础类型或架构的描述性名称。
- 可以从
gguf元数据general.basename派生,将空格替换为连字符。 
 - 可以从
 -  
SizeLabel:参数权重类别(在排行榜中有用),表示为
<专家数量>x<数量><量级前缀>。- 如果可用,可以从
gguf元数据general.size_label派生,如果缺失则进行计算。 - 支持带有单个字母量级前缀的十进制点的四舍五入,以帮助显示浮点指数,如下所示: 
Q:千万亿参数。T:万亿参数。B:十亿参数。M:百万参数。K:千参数。
 - 可以根据需要附加额外的
-<属性><数量><量级前缀>以指示其他感兴趣的属性。 
 - 如果可用,可以从
 -  
FineTune:模型微调目标的描述性名称(例如
Chat、Instruct等)。- 可以从
gguf元数据general.finetune派生,将空格替换为连字符。 
 - 可以从
 -  
Version:表示模型版本号,格式为
v<主版本>.<次版本>。- 如果模型缺少版本号,则假设为
v1.0(首次公开发布)。 - 可以从
gguf元数据general.version派生。 
 - 如果模型缺少版本号,则假设为
 -  
Encoding:指示应用于模型的权重编码方案。内容、类型混合和排列由用户代码决定,可以根据项目需求而有所不同。
 -  
Type:指示
gguf文件的类型及其预期用途。- 如果缺失,则文件默认为典型的
gguf张量模型文件。 LoRA:GGUF文件是LoRA适配器。vocab:仅包含词汇数据和元数据的GGUF文件。
 - 如果缺失,则文件默认为典型的
 -  
Shard:(可选)指示模型已被拆分为多个分片,格式为
<分片编号>-of-<总分片数>。-  
分片编号:此模型中的分片位置。必须用零填充为
5位数字。- 分片编号始终从
00001开始(例如,第一个分片总是从00001-of-XXXXX开始,而不是00000-of-XXXXX)。 
 - 分片编号始终从
 -  
总分片数:此模型中的总分片数。必须用零填充为
5位数字。 
 -  
 
下面是对几个GGUF模型文件名的解释:
Mixtral-8x7B-v0.1-KQ2.gguf:- 模型名称:Mixtral
 - 专家数量:8
 - 参数数量:7B
 - 版本号:v0.1
 - 权重编码方案:KQ2
 
Hermes-2-Pro-Llama-3-8B-F16.gguf:- 模型名称:Hermes 2 Pro Llama 3
 - 专家数量:0
 - 参数数量:8B
 - 版本号:v1.0
 - 权重编码方案:F16
 - 分片:不适用
 
Grok-100B-v1.0-Q4_0-00003-of-00009.gguf:- 模型名称:Grok
 - 专家数量:0
 - 参数数量:100B
 - 版本号:v1.0
 - 权重编码方案:Q4_0
 - 分片:3 out of 9 total shards
 
GGUF命名规则约定所有模型文件都应该有基本名称、大小标签和版本,以便能够轻松验证其是否符合GGUF命名约定。例如,如果省略版本号,那么编码很容易被误认为是微调。
GGUF与其他格式对比
| 格式 | 特点 | 典型场景 | 
|---|---|---|
| GGUF | 专为 CPU 推理优化,支持量化,元数据丰富 | 本地部署(llama.cpp) | 
| PyTorch .pt | 原生训练格式,未量化,依赖 GPU 和 PyTorch 环境 | 模型训练/微调 | 
| HuggingFace .safetensors | 安全序列化格式,未量化,需加载完整模型到内存 | 云端推理(GPU 加速) | 
| ONNX | 跨框架通用格式,支持硬件加速,但量化功能有限 | 跨平台部署 | 
GGUF格式转换
GGUF格式是推理框架llama.cpp使用的格式,但是通常模型是使用PyTorch之类的训练框架训练的,保存的格式一般使用HuggingFace的safetensors格式,因此使用llama.cpp进行推理之前需要把其他格式的模型转换为GGUF格式。
下面以DeepSeek R1的蒸馏模型DeepSeek-R1-Distill-Qwen-7B为例介绍如何将模型转换为GGUF格式。
首先从魔搭社区(或HuggingFace)下载模型:
pip install modelscope
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local_dir DeepSeek-R1-Distill-Qwen-7B
 
下载好的模型是以safetensors格式存放的,可以调用llama.cpp的转换脚本把模型转换为GGUF格式:
# 安装python依赖库
pip install -r requirements.txt
# 转换模型
python convert_hf_to_gguf.py DeepSeek-R1-Distill-Qwen-7B/
 
转换成功后,在该目录下会生成一个FP16精度、GGUF格式的模型文件DeepSeek-R1-Distill-Qwen-7B-F16.gguf。
如果不想自己转模型,也可以在魔搭社区或HuggingFace上找带gguf后缀的模型,或者使用HuggingFace的gguf-my-repo进行转换,网址如下:
https://huggingface.co/spaces/ggml-org/gguf-my-repo
 
在该界面的Hub Modeil ID框中查找你想转的模型,然后Quantization Method中选择你想要的模型量化方式(关于GGUF模型的各种量化参数将在下文进行介绍),最后点击Submit就可以开始模型转换了。

GGUF量化参数介绍
llama.cpp的模型量化方法主要采用了分块量化(Block-wise Quantization)和K-Quantization算法来实现模型压缩与加速,其核心策略包括以下关键技术:
-  
分块量化(Block-wise Quantization)
该方法将权重矩阵划分为固定大小的子块(如32或64元素为一组),每个子块独立进行量化。通过为每个子块分配独立的缩放因子(Scale)和零点(Zero Point),有效减少量化误差。例如,Q4_K_M表示每个权重用4比特存储,且子块内采用动态范围调整。 -  
K-Quantization(混合精度量化)
在子块内部进一步划分更小的单元(称为“超块”),根据数值分布动态选择量化参数。例如,Q4_K_M将超块拆分为多个子单元,每个子单元使用不同位数的缩放因子(如6bit的缩放因子和4bit的量化值),通过混合精度平衡精度与压缩率。 -  
重要性矩阵(Imatrix)优化
通过分析模型推理过程中各层激活值的重要性,动态调整量化策略。高重要性区域保留更高精度(如FP16),低重要性区域采用激进量化(如Q2_K),从而在整体模型性能损失可控的前提下实现高效压缩。 -  
量化类型分级策略
提供Q2_K至Q8_K等多种量化级别,其中字母后缀(如_M、_S)表示优化级别:- Q4_K_M:中等优化级别,平衡推理速度与精度(常用推荐)。
 - Q5_K_S:轻量化级别,侧重减少内存占用
 
 
在GGUF的量化类型命名如 Q4_K_M中,Q4表示模型的主量化精度为4比特,K 和 M 分别代表量化过程中的分块策略(Block-wise Quantization)和混合精度优化级别。以下是详细解释:
K 的含义:分块量化(Block-wise Quantization)
- 核心思想:将权重矩阵划分为多个小块(
Block),对每个块单独进行量化,以降低整体误差。 - 技术细节: 
- 每个块(
Block)的大小通常为32/64/128个权重值(具体数值由量化算法决定)。 - 块内共享量化参数(如缩放因子和零点),减少存储开销。
 
 - 每个块(
 - 优势: 
- 相比全矩阵量化,分块量化能保留更多局部细节,降低信息损失。
 - 提高量化后模型的生成质量和数学能力。
 
 
M 的含义:混合精度优化级别
 GGUF在分块量化的基础上,进一步通过混合不同精度来提升效果,M 表示混合策略的强度等级为中等,另外还有S和L两个等级:
| 后缀 | 全称 | 说明 | 
|---|---|---|
S | Small/Simple | 轻度混合,仅对关键块使用更高精度(如 6-bit),其他块用低精度(如 4-bit) | 
M | Medium | 中等混合,更多块使用高精度,平衡速度和精度(推荐默认选择) | 
L | Large | 高度混合,最大化高精度块比例,接近原始模型精度(速度最慢) | 
以下是关于 GGUF 量化方法选择策略的详细解析,包含不同场景下的量化建议和性能对比:
GGUF量化方法分类与特性
| 量化类型 | 比特数 | 内存占用(以7B模型为例) | 推理速度 | 精度保持 | 适用场景 | 
|---|---|---|---|---|---|
| Q2_K | 2-bit | ~2.8GB | 最快 | 低 | 极低资源设备(手机) | 
| Q3_K_M | 3-bit | ~3.3GB | 快 | 中低 | 快速测试/简单问答 | 
| Q4_0 | 4-bit | ~3.8GB | 快 | 中等 | 平衡型通用场景 | 
| Q4_K_M | 4-bit | ~4.0GB | 中等 | 中高 | 推荐默认选择 | 
| Q5_0 | 5-bit | ~4.5GB | 中等 | 高 | 复杂任务(代码生成) | 
| Q5_K_M | 5-bit | ~4.7GB | 中等 | 很高 | 高质量生成(推荐首选) | 
| Q6_K | 6-bit | ~5.5GB | 较慢 | 接近原始 | 学术研究/最小精度损失 | 
| Q8_0 | 8-bit | ~7.0GB | 最慢 | 无损 | 基准测试/对比实验 | 
选择建议
- 优先选择 
_K_M后缀:在相同比特数下,质量和速度平衡最佳。 - 极端资源场景:可用 
_K_S牺牲少量质量换取更快速度。 - 研究用途:使用 
_K_L或非混合量化(如Q6_K)作为基准。 
按硬件资源选择:
- 手机/嵌入式设备: 
- 首选 
Q4_0或Q3_K_M(内存 <4GB) - 示例:在 iPhone 14 上运行 
Q4_K_M的 7B 模型,推理速度约 20 tokens/s 
 - 首选 
 - 低配 PC(8GB 内存): 
- 选择 
Q4_K_M或Q5_K_M(7B 模型占用约4-5GB) 
 - 选择 
 - 高性能 CPU(服务器/工作站): 
- 使用 
Q5_K_M或Q6_K以获得最佳质量 
 - 使用 
 
只要理解了 K 和 M 的含义,我们就可以更精准地根据硬件和任务类型选择合适的量化模型了。
参考资料
- https://github.com/ggml-org/ggml/blob/master/docs/gguf.md
 - https://huggingface.co/docs/hub/gguf
 - DeepSeek关于GGUF的介绍
 
相关文章:
llama.cpp: GGUF格式及模型量化参数介绍
GGUF格式介绍 GGUF(GPT-Generated Unified Format)是推理框架llama.cpp 中使用的一种专为大语言模型设计的二进制文件格式,旨在实现模型的快速加载和保存,同时易于读取。GGUF格式的特点: 单文件部署:模型…...
PGlite:浏览器中运行的PostgreSQL
PGlite 是一款基于 WebAssembly(WASM)构建的轻量级 PostgreSQL 数据库引擎,旨在简化开发者在浏览器、Node.js、Bun 或 Deno 环境中运行 PostgreSQL。PGlite 无需复杂的安装或配置,特别适合开发测试、本地化应用及快速原型设计。 一…...
【C++】vector(上):vector的常用接口介绍
文章目录 前言一、vector的介绍二、vector的常用接口介绍1.vector类对象的常见构造2.vector iterator 的使用3.vector类对象的容量操作3.1 size、capacity 和 empty的使用3.2 reserve的使用3.3 resize的使用 4.vector类对象的访问(包含data:返回底层数组…...
【算法】二分查找(上)
目录 一、写好二分查找的四个步骤 二、在排序数组中查找元素的第一个和最后一个位置 三、搜索插入位置 四、x的平方根 通过上篇文章【手撕二分查找】,我们知道了二分查找的【四要素】:初始值、循环条件、mid的计算方式、左右边界更新语句。 循环条件…...
【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?
前言 2025年,人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角,AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型,从技术背景、应用领域、性能、成本效益等多个方…...
linux nginx 安装后,发现SSL模块未安装,如何处理?
?? 主页: ?? 感谢各位大佬 点赞?? 收藏 留言?? 加关注! ?? 收录于专栏:运维工程师 文章目录 前言SSL模块安装 前言 nginx 安装后,发现SSL模块未安装,如果不需要配置SSL域名,就无关紧要。但是很多时候客户后…...
蓝桥杯 - 每日打卡(类斐波那契循环数)
题目: 解题思路: 假设输入数值为number 分析题目,如果想要解决这个问题,我们需要实现两个方法,第一个检查number是否是类斐波那契,第二个是模拟1e7 - 0的过程,因为是求最大的,那么我们从1e7开始…...
深入探索C++17文件系统库:std::filesystem全面解析
前言 在C编程中,文件系统操作是许多应用程序的基础功能之一。无论是读写文件、创建目录,还是遍历文件系统,文件系统操作几乎无处不在。然而,在C17之前,标准库并没有提供一个统一、高效且易用的文件系统操作接口。开发…...
LLM | 论文精读 | GIS Copilot : 面向空间分析的自主GIS代理
论文标题:GIS Copilot: Towards an Autonomous GIS Agent for Spatial Analysis 作者:Temitope Akinboyewa,Zhenlong Li,Huan Ning,M. Naser Lessani等 来源:arXiv DOI:10.48550/arXiv.2411.…...
Unity 适用Canvas 为任一渲染模式的UI 拖拽
RectTransformUtility-ScreenPointToWorldPointInRectangle - Unity 脚本 API 将一个屏幕空间点转换为世界空间中位于给定RectTransform 平面上的一个位置。 实现 获取平面位置。 parentRT transform.parent as RectTransform; 继承IPointerDownHandler 和IDragHandler …...
基于遗传算法的无人机三维路径规划仿真步骤详解
基于遗传算法的无人机三维路径规划仿真步骤详解 一、问题定义 目标:在三维空间内,寻找从起点到终点的最优路径,需满足: 避障:避开所有障碍物。路径最短:总飞行距离尽可能短。平滑性:转折角度不宜过大,降低机动能耗。输入: 三维地图(含障碍物,如立方体、圆柱体)。起…...
windows下使用Hyper+wsl实现ubuntu下git的平替
文章目录 前言一、安装Hyper、wsl1. 安装Hyper2. 安装wsl 二、配置Hyper三、安装并使用git总结 前言 众所周知,Ubuntu下安装git只需执行sudo apt install git即可使用默认终端拉取代码,但是Windows上使用git既没有linux便捷,又没有MacOS优雅…...
基于Java+SpringCloud+Vue的前后端分离的房产销售平台
基于JavaSpringCloudVue的前后端分离的房产销售平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接&#x…...
以影像技术重构智能座舱体验,开启驾乘互动新纪元
在汽车智能化浪潮席卷全球的今天,座舱体验早已突破传统驾驶功能的边界,成为车企竞争的核心赛道。美摄科技凭借其在图像处理与AI算法领域的深厚积累,推出全链路智能汽车图像及视频处理方案,以创新技术重新定义车载影像系统…...
deepseek在pycharm 中的配置和简单应用
对于最常用的调试python脚本开发环境pycharm,如何接入deepseek是我们窥探ai代码编写的第一步,熟悉起来总没坏处。 1、官网安装pycharm社区版(免费),如果需要安装专业版,需要另外找破解码。 2、安装Ollama…...
LLM大型语言模型(一)
1. 什么是 LLM? LLM(大型语言模型)是一种神经网络,专门用于理解、生成并对人类文本作出响应。这些模型是深度神经网络,通常训练于海量文本数据上,有时甚至覆盖了整个互联网的公开文本。 LLM 中的 “大” …...
尚庭公寓项目记录
数据库准备 保留图像时,保存图像地址就可以数据表不是越多越好,可以用中间表来实现俩个表之间的联立这样方便查数据但是却带来性能问题而减少表的jion但是提高性能,以冗余来换去性能采用MySQL,InnoDB存储引擎物理删除和逻辑删除逻…...
飞算JavaAI编程工具集成到idea中
AI插件介绍 飞算AI的插件下载地址,里边也有安装步骤: JavaAI 以上图是不是看着很牛的样子,一下成为高手确实说的太夸张了点, 一键生成后端JavaWeb项目还是挺方便的。 飞算JavaAI插件安装 Idea->>file->>setting-&…...
【每日八股】计算机网络篇(二):TCP 和 UDP
目录 TCP 的头部结构?TCP 如何保证可靠传输?1. 确认应答机制2. 超时重传3. 数据排序与去重4. 流量控制5. 拥塞控制6. 校验和 TCP 的三次握手?第一次握手第二次握手第三次握手 TCP 为什么要三次握手?问题一:防止历史连接…...
课程《MIT Introduction to Deep Learning》
在Youtubu上,MIT Introduction to Deep Learning (2024) | 6.S191 共8节课: (1) MIT Introduction to Deep Learning (2024) | 6.S191 (2) MIT 6.S191: Recurrent Neural Networks, Transformers, and Attention (3) MIT 6.S191: Convolutional Neural N…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
