GGUF、Safetensors、ONNX三种格式
GGUF
GGUF 格式的模型文件可以用于各种应用场景,例如:
- 本地部署 LLM: GGUF 格式使得在消费级计算机硬件(包括 CPU 和 GPU)上运行 LLM 成为可能。
- 移动设备上的 LLM 推理: 由于其高效的存储和加载特性,GGUF 也适用于在移动设备上进行 LLM 推理。
- 快速原型开发: GGUF 使得开发者可以更快速地加载和测试不同的 LLM 模型。
总而言之,GGUF 是一种重要的 LLM 文件格式,它通过提高存储效率、加载速度和兼容性,简化了 LLM 的使用和部署,并有望成为未来大模型文件标准格式之一。
本地运行GGUF格式的 LLM 模型
参考:https://github.com/karminski/one-small-step/blob/main/20250122-how-to-run-gguf-LLM-model/how-to-run-gguf-LLM-model.md
Safetensors
- 安全性优先: 彻底解决了 pickle 格式的远程代码执行(RCE)漏洞风险, 通过限制反序列化操作仅加载张量数据, 从根本上杜绝了恶意代码注入的可能性.
- 快速加载: 采用零拷贝(zero-copy)技术实现, 在CPU上, 如果文件已缓存, 则可以完全0拷贝(需满足张量连续存储条件)
- 跨框架支持: 原生支持 PyTorch、TensorFlow、JAX 等主流深度学习框架, 支持多 GPU 设备间的无缝数据共享.
- 轻量高效: 文件体积与性能经过优化, 支持与 LZ4/Zstandard 等压缩算法配合使用(注意:格式本身不包含压缩功能)
- 类型安全: 通过严格的元数据校验确保数据类型和形状的一致性, 避免因类型错误导致的运行时崩溃.
ONNX
(图片来自 ultralytics.com)
- ONNX(Open Neural Network Exchange)是一种开放的神经网络交换格式。
- 它由微软和Facebook于2017年共同推出,现由Linux基金会的LF AI托管,旨在解决不同深度学习框架之间的互操作性问题,实现模型在不同平台和工具链之间的无缝迁移。
核心区别与关系
特性 | GGUF | Safetensors | ONNX |
---|---|---|---|
开发方 | GGML 团队 (llama.cpp) | Hugging Face | 微软/Facebook (现属 Linux 基金会) |
设计目标 | 轻量级本地推理 (CPU/GPU) | 安全高效的张量存储 | 跨框架模型交换与推理优化 |
主要用途 | 本地运行量化后的 LLM | 安全分发模型权重 | 跨框架训练/部署流水线 |
安全性 | 无已知风险 | 专防 pickle 的 RCE 漏洞 | 依赖运行时环境 |
硬件支持 | 优先 CPU,部分 GPU 优化 | 框架相关 (PyTorch/TF/JAX) | 多硬件后端 (CPU/GPU/FPGA) |
典型文件体积 | 极小 (4-8bit 量化) | 原始权重大小 | 中等 (含计算图元数据) |
关系:
- 互补性:三者面向不同场景——GGUF 专注本地 LLM 推理,Safetensors 解决权重存储安全,ONNX 打通框架壁垒。
- 可组合使用:例如用 Safetensors 存储原始权重 → 转换为 ONNX 进行跨框架部署 → 量化成 GGUF 本地运行。
如何选择格式?
- 本地运行 LLM:GGUF(CPU 友好)或 TensorRT-LLM(NVIDIA GPU)。
- 安全共享权重:Safetensors(Hugging Face 生态首选)。
- 跨框架部署:ONNX → 进一步转换为目标硬件格式(如
.engine
或.tflite
)。 - 移动端:Core ML(Apple)或 TFLite(Android/嵌入式)。
- 用 Safetensors:当需要安全共享、快速加载、跨框架兼容时(尤其是 Hugging Face 生态)。
- 不用 Safetensors:纯本地训练或目标平台强制要求其他格式时。
趋势观察
- GGUF 正成为开源 LLM 本地化的标准格式(如 Llama 3 社区量化版本)。
- Safetensors 在 Hugging Face 模型库的渗透率已超 90%(截至 2024)。
- ONNX 仍是企业级跨平台部署的核心中间件,但面临 PyTorch 2.0 直接导出方案的竞争。
参考资料
- https://github.com/karminski/one-small-step/blob/main/20250113-what-is-gguf/what-is-gguf.md
- https://github.com/karminski/one-small-step/blob/main/20250122-how-to-run-gguf-LLM-model/how-to-run-gguf-LLM-model.md
- https://github.com/karminski/one-small-step/blob/main/20250210-what-is-safetensors/what-is-safetensors.md
- https://github.com/karminski/one-small-step/blob/main/20250211-what-is-onnx/what-is-onnx.md