论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
人工智能
›
人工智能
›
llama.cpp框架下GGUF格式及量化参数全剖析
llama.cpp框架下GGUF格式及量化参数全剖析
篮之新喜
论坛元老
|
2025-4-4 12:03:28
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
1970
|
帖子
1970
|
积分
5920
前言:
在人工智能领域,语言模型的高效部署和推理不停是研究热门。随着模型规模的不断扩大,如安在有限的硬件资源上实现快速、高效的推理,成为了一个关键问题。`llama.cpp`框架以其出色的性能和机动性,为这一问题提供了有效的解决方案。其中,GGUF格式和模型量化参数是实现高效推理的紧张技术本领。本文将对`llama.cpp`框架下的GGUF格式及量化参数进行具体剖析,帮助读者更好地明白和应用这些技术,提升模型的部署效率和推理性能。
1:GGUF格式是什么?
GGUF(
「GPT-Generated Unified Format」
)是推理框架llama.cpp 中使用的一种专为大语言模型计划的二进制文件格式,旨在实现模型的快速加载和保存,同时易于读取。GGUF格式的特点:
「单文件部署」
:模型可以轻松分发和加载,不需要任何外部文件来提供额外信息。
「可扩展性」
:可以在不粉碎与现有模型的兼容性的情况下,向基于GGML的执行器添加新功能或向GGUF模型添加新信息。
「mmap兼容性」
:可以使用mmap加载模型,以实现快速加载和保存。
「易于使用」
:可以使用少量代码轻松加载和保存模型,无论使用何种语言,无需外部库。
「完整信息」
:加载模型所需的全部信息都包罗在模型文件中,用户无需提供任何额外信息。
GGUF文件的结构如下图所示:
以下是对文件结构的重新形貌:
1. 文件头部(Header):
包罗文件类型标识(GGUF)、版本信息以及张量的数目。
2. 元数据区(Metadata):
接纳类似JSON的格式存储模型干系的信息,以键值对的情势构造。
3. 张量数据区(Tensors):
根据量化方式存储模型的权重数据。
文件整体依照在`general.alignment`元数据字段中界说的全局对齐规则,必要时,文件会通过添加0x00字节来填充至`general.alignment`指定的对齐边界。除非特别指明,全部字段(包罗数组)都将按顺序连续写入文件,且不进行额外的对齐操作。模型数据默认接纳小端字节序,但为了兼容大端字节序的计算机体系,它们也可以以大端字节序的情势存储,在这种情况下,包罗元数据和张量在内的全部数据都将接纳大端字节序。
2:GGUF命名约定
GGUF依照<BaseName><SizeLabel><FineTune><Version><Encoding><Type><Shard>.gguf的命名约定,其中每个组件由-分隔(假如存在),这种命名方式的最终目标是为了让人们能够快速了解模型的关键信息。
每个组件的寄义如下:
「BaseName」
:模型基础类型或架构的形貌性名称。
1可以从gguf元数据general.basename派生,将空格替换为连字符。
「SizeLabel」
:参数权重类别(在排行榜中有用),表现为<专家数目>x<数目><量级前缀>。
Q:千万亿参数。
T:万亿参数。
B:十亿参数。
M:百万参数。
K:千参数。
假如可用,可以从gguf元数据general.size_label派生,假如缺失则进行计算。
支持带有单个字母量级前缀的十进制点的四舍五入,以帮助显示浮点指数,如下所示:
可以根据需要附加额外的-<属性><数目><量级前缀>以指示其他感爱好的属性。
「FineTune」
:模型微调目标的形貌性名称(例如Chat、Instruct等)。
可以从gguf元数据general.finetune派生,将空格替换为连字符。
「Version」
:表现模型版本号,格式为v<主版本>.<次版本>。
假如模型缺少版本号,则假设为v1.0(首次公开发布)。
可以从gguf元数据general.version派生。
「Encoding」
:指示应用于模型的权重编码方案。内容、类型混合和排列由用户代码决定,可以根据项目需求而有所不同。
「Type」
:指示gguf文件的类型及其预期用途。
假如缺失,则文件默认为典范的gguf张量模型文件。
LoRA:GGUF文件是LoRA适配器。
vocab:仅包罗词汇数据和元数据的GGUF文件。
「Shard」
:(可选)指示模型已被拆分为多个分片,格式为<分片编号>-of-<总分片数>。
分片编号始终从00001开始(例如,第一个分片总是从00001-of-XXXXX开始,而不是00000-of-XXXXX)。
「分片编号」
:此模型中的分片位置。必须用零填充为5位数字。
「总分片数」
:此模型中的总分片数。必须用零填充为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命名约定。例如,假如省略版本号,那么编码很容易被误认为是微调。
3:GGUF格式转换
GGUF格式是推理框架llama.cpp使用的格式,但是通常模型是使用PyTorch之类的练习框架练习的,保存的格式一样平常使用HuggingFace的safetensors格式,因此使用llama.cpp进行推理之前需要把其他格式的模型转换为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。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
篮之新喜
论坛元老
这个人很懒什么都没写!
楼主热帖
XtraBackup 搭建从库的一般步骤及 Xtra ...
Docker三剑客之Machine
rustdesk自建服务器总是掉线 未就绪, ...
8行代码实现快速排序,简单易懂图解! ...
[回馈]ASP.NET Core MVC开发实战之商城 ...
通过Go语言创建CA与签发证书 ...
Java毕业设计-音乐管理系统
三天吃透Kafka面试八股文
sqlserver 软件授权
教你几招百度网盘不限速的方法 ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
linux
快速回复
返回顶部
返回列表