GGUF(GPT-Generated Unified Format)
是一种二进制格式文件的规范,原始的大模型预训练结果经过转换后变成 GGUF 格式可以更快地被载入使用,并消耗更低的资源
GGUF 格式介绍
GGUF(GPT-Generated Unified Format)
是由 Georgi Gerganov 定义发布的一种大模型文件格式
- Georgi Gerganov 是著名开源项目 llama.cpp 的创始人,他提出 GGUF 格式是为了解决大模型文件在不同平台和工具之间转换的问题
- GGUF 是 GGML 的替代者
图片转自
GGUF 文件组成如下
- 文件头 (Header)
- GGUF 版本
- 张量数 (Tensor Count)
- 元数据数 (Metadata Key-Value Count)
- 元数据键值对 (Metadata Key-Value Pairs)
- 张量信息 (Tensor Info)
- 张量数据 (Tensor Data)
- 对齐填充 (Alignment Padding)
- 端序标识 (Endianness)
- 扩展信息 (Extension Information)
GGUF 模型示例:https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF
DeepSeek-R1-Distill-Qwen-32B-Q4_K_M 的 GGUF 信息
- 可以看出,该模型基于 qwen2 蒸馏,context_length 为 131072,block_count 有 64 个
GGUF 文件查看工具
- llama.cpp
- GPT4All
- Ollama
- javascript 工具
@huggingface/gguf
将模型转换成 GGUF 格式
GGUF 命名约定
GGUF 命名格式:
<BaseName>-<SizeLabel>-<Active>-<FineTune>-<Version>-<Encoding>-<Type>-<Shard>.gguf
# 示例 https://huggingface.co/Qwen/Qwen3-235B-A22B-GGUF
Qwen3-235B-A22B-Q4_K_M.gguf
Qwen3-235B-A22B-Q4_K_M-00001-of-00005.gguf
BaseName
模型基础类型或架构的描述性名称,从 GGUF 元数据 general.basename
获取
SizeLabel
参数权重,表示为 <专家数量>x<参数数量><量级前缀>
,从 GGUF 元数据 general.size_label
获取,示例为 0x235B
- T:万亿参数
- Q:千万亿参数
- B:十亿参数
- M:百万参数
- K:千参数
- 扩展:Mixtral-8x7B,专家数量 8,参数 7B
Active
运行时激活数量
FineTune
模型微调目标的描述性名称(例如 Chat、Instruct 等),从 GGUF 元数据 general.finetune
获取
Version
表示模型版本号,格式为 v<主版本>.<次版本>
,从 GGUF 元数据 general.version
获取
Encoding
模型的权重编码方案,从 GGUF 元数据 general.file_type
获取
Type
GGUF 文件的类型及其预期用途,默认为典型的 GGUF 张量模型文件
- LoRA GGUF 文件是 LoRA 适配器
- vocab 仅包含词汇数据和元数据的 GGUF 文件
Shard
(可选)指示模型已被拆分为多个分片,格式为 <分片编号>-of-<总分片数>
,示例 00001-of-00005
其他模型格式
.pt
PyTorch 原生训练格式,未量化,依赖 GPU 和 PyTorch 环境,应用与模型训练/微调
.safetensors
HuggingFace 安全序列化格式,未量化,需加载完整模型到内存,云端推理(GPU 加速)
GGML 格式
GGML 是 GGUF 之前的文件格式,由开发人员 Georgi Gerganov 创建
- GGML 是 Gerganov 的名字首字母缩写 (GG) 和机器学习的首字母缩写 ML 的组合
- GGML 是一个张量库,专为在各种硬件平台上实现高性能而设计
- 该格式也是为 OpenAI 的 GPT 人工智能模型制作文件格式的早期尝试,以方便模型的轻松共享和运行
- GGML 的设计目标是明确无误,并包含加载模型所需的所有信息(不建议使用)
ONNX 格式
ONNX(Open Neural Network Exchange)
是微软和 Facebook 提出用来表示 深度学习模型
的开放格式
开放
指 ONNX
定义了一组和环境,平台均无关的标准格式,来增强各种 AI模型
的可交互性
- 无论使用何种训练框架训练模型(如 TensorFlow/Pytorch/OneFlow/Paddle),在训练完毕后都可以将这些框架的模型统一转换为
ONNX
格式进行存储
ONNX
使用 Protobuf 序列化数据结构,来存储神经网络的权重信息
- onnx.proto 定义了 ONNX 数据协议的规则和一些其它信息,核心概念
ModelProto
GraphProto
NodeProto
ValueInfoProto
TensorProto
AttributeProto
- ONNX Runtime 是一种跨平台机器学习模型加速器,具有集成特定硬件库的灵活接口。ONNX Runtime 可与 PyTorch、Tensorflow/Keras、TFLite、scikit-learn 和其他框架的模型一起使用。
- 示例参考