对比
GGUF与Safetensors:推理分发与权重管理
GGUF用于向兼容的GGML系实现分发推理模型。Safetensors保存具名张量,模型定义和运行环境需另行提供。
应该选择哪种格式?
在兼容的GGML系环境中推理可考虑GGUF;在兼容的模型实现中使用权重可考虑Safetensors。
适用于 GGUF
为兼容的 GGML 运行时保存和分发推理模型 · 以一种格式管理模型信息与张量
- 使用 llama.cpp 等兼容工具进行本地推理
- 分发运行时支持的量化或未量化模型
适用于 Safetensors
保存和分发机器学习张量权重 · 在受支持的框架间加载权重
- 交换张量和基本元数据而非任意 Python 对象
- 检查并按需加载指定张量的流程
基本信息
| 项目 | GGUF | Safetensors |
|---|---|---|
| 扩展名 | .gguf | .safetensors |
| MIME 类型 | application/octet-stream | application/octet-stream |
| 常见用途 | 为兼容的 GGML 运行时保存和分发推理模型 · 以一种格式管理模型信息与张量 | 保存和分发机器学习张量权重 · 在受支持的框架间加载权重 |
| 打开方式 | 使用支持该模型与张量类型的可信 GGUF 加载器。检查模型架构、运行时版本、量化方法,以及是否需要分片或辅助文件。 | 使用兼容 Safetensors 的库或模型工具。支持的工具可以在将权重全部载入设备前查看张量名称、类型和形状。JSON 头部并不意味着整个文件都是 JSON 文本。 |
| 导出或转换 | 按照源模型及目标运行时的转换说明操作。转换和量化有时是不同步骤。使用有代表性的输入评估质量、速度和内存,不要只按文件大小选择;将所有分片和多模态 mmproj 等必需文件一起保存。 | 通过模型框架支持的 API 保存张量权重。将基于 pickle 的输入转换为该格式时可能需要反序列化输入,因此不要随意加载来源不可信的文件。转换后核对张量名称、形状、类型、元素总数和模型输出。 |
按用途选择
使用 llama.cpp 等兼容工具进行本地推理
为兼容的 GGML 运行时保存和分发推理模型 · 以一种格式管理模型信息与张量
GGUF分发运行时支持的量化或未量化模型
为兼容的 GGML 运行时保存和分发推理模型 · 以一种格式管理模型信息与张量
GGUF交换张量和基本元数据而非任意 Python 对象
保存和分发机器学习张量权重 · 在受支持的框架间加载权重
Safetensors检查并按需加载指定张量的流程
保存和分发机器学习张量权重 · 在受支持的框架间加载权重
Safetensors关键点 1
GGUF包含键值形式的模型元数据和张量描述。
进一步了解差异关键点 2
Safetensors记录张量名称、dtype、shape和数据范围,不包含任意推理代码。
进一步了解差异进一步了解差异
修改扩展名不能互换这两种格式。保留源文件,并选择支持模型架构和张量类型的转换工具及加载器。
- GGUF支持浮点和量化张量类型。量化可能改变数值,并非仅仅是无损压缩;不能只凭格式名判断大小或精度。
- 按分发要求核对Safetensors的配置、分词器及分片索引,以及GGUF的分片和辅助文件。使用相同输入和预处理比较输出、内存和速度。
常见问题
GGUF能完整恢复原始Safetensors文件吗?
不能保证。若量化改变了数值,仅转换格式无法恢复原始精度或训练状态。请保留原始权重和配置。