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…...

GCC RISCV 后端 -- C语言语法分析过程
在 GCC 编译一个 C 源代码时,先会通过宏处理,形成 一个叫转译单元(translation_unit),接着进行语法分析,C 的语法分析入口是 static void c_parser_translation_unit(c_parser *parser); 接着就通过类似递…...

UI组件库及antd
什么是UI组件库及antd安装 随着商业化的趋势,企业级产品中需求多且功能复杂,且变动和并发频繁,常常需要设计者与开发者快速做出响应,同时这类产品中有很多类似的页面及组件,可以通过抽象得到一些稳定且高复用性的内容…...

Windows下使用ShiftMediaProject方法编译FFmpeg
Windows SDK 8.1版本不支持dxva vp9! 需要10.0.17134.0!或者把config编译选项去掉 1.下载源码 https://github.com/ShiftMediaProject 2.创建ShiftMediaProject文件夹 把下载好的源码放入source 3.进入SMP执行 project_get_dependencies.bat 自动下载ffmepg依赖项…...

【计算机网络入门】TCP拥塞控制
目录 1. TCP拥塞控制和TCP流量控制的区别 2. 检测到拥塞该怎么办 2.1 如何判断网络拥塞? 3. 慢开始算法 拥塞避免算法 4.快重传事件->快恢复算法 5. 总结 1. TCP拥塞控制和TCP流量控制的区别 TCP流量控制是控制端对端的数据发送量。是局部的概念。 TCP拥…...

无人机遥控器无线传输技术解析!
一、主流无线传输方式 无线电遥控系统(2.4GHz/5.8GHz频段) 频段特性:2.4GHz频段穿透力强、覆盖距离远(可达2公里以上),适合控制信号传输;5.8GHz频段带宽更高,适用于高清视频流&…...

修改hosts文件,修改安全属性,建立自己的DNS
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

MySQL零基础教程16—表连接进阶
复习表别名 之前已经学习过,查询的时候可以使用as来对检索的列进行重命名,这样可以让sql更加简介,增强易读性(as可以省略) 此外,使用表别名还可以支持在一条select语句中,一个表是被多次使用 …...

【软件系统架构】系列三:数据库系统之三
1.数据故障与备份 1.1 安全措施 措施说明用户标识和鉴定最外层的安全保护措施,可以使用用户帐户、口令及随机数检验等方式存取控制对用户进行授权,包括操作类型(如查找、插入、删除、修改等动作)和数据对象(主要是数…...

lamp平台介绍
一、lamp介绍 网站: 静态 动态 php语言 .php 作用:运行php语言编写动态网站应用 lamp Linux Apache MySQL PHP PHP是作为httpd的一个功能模块存在的 二、部署lamp平台 1、测试httpd是否可正常返回PHP的响应 2、测试PHP代码是否可正常连接数据…...

826考研
初试总分第一的hh佬小红书:https://www.xiaohongshu.com/user/profile/64e106aa000000000100fe33 深研院巨佬经验贴:https://zhuanlan.zhihu.com/p/690464528 本部羊神经验贴:https://zhuanlan.zhihu.com/p/689494655 本部学硕佬经验贴&#…...