大模型文件格式 Safetensors 和 GGUF
核心摘要
在大型语言模型(LLM)的生态系统中,Safetensors 和 GGUF 是两种至关重要的文件格式,但它们服务于不同的目的,由不同的组织创建,并在模型的生命周期中扮演着互补而非竞争的角色。
| 特性 | Safetensors | GGUF |
|---|---|---|
| 定义组织 | Hugging Face | Georgi Gerganov (llama.cpp 项目) |
| 本质 | 通用的、高效的张量存储格式 | 为特定推理引擎优化的完整模型文件格式 |
| 主要用途 | 在训练和模型分发阶段,安全高效地存储权重文件 | 在推理阶段,为 llama.cpp 等推理引擎提供开箱即用的模型 |
| 文件结构 | 纯张量数据,需配合配置文件使用 | 自包含文件(权重+元数据+词汇表等) |
| 安全性 | 高(无代码执行风险) | 高(基于安全的数据源转换) |
| 量化支持 | 无(存储原始精度权重) | 核心特性(支持多种量化级别) |
Safetensors Hugging Face
类比理解: Safetensors 就像一个高效、安全的"集装箱",专门用于运输"货物"(模型权重)。
是什么?
Safetensors 是 Hugging Face 创建的一种旨在替代传统 PyTorch 或 TensorFlow 权重文件格式的新型张量存储格式。
解决的核心问题:
- 安全性:彻底解决 Pickle 反序列化漏洞,防止恶意代码执行
- 加载速度:实现零拷贝加载,大幅提升大模型加载效率
- 框架无关:支持 PyTorch、TensorFlow、JAX 等多种框架
典型文件结构:
model.safetensors # 模型权重文件
config.json # 模型配置文件
tokenizer.json # 分词器配置
special_tokens_map.json # 特殊令牌映射
总结: Safetensors 是模型生态的"基础设施",专注于安全、高效地存储和分发模型权重。
GGUFGeorgi Gerganov
类比理解: GGUF 就像一辆已经装好货、加好油、调好引擎的"整车",可以直接开(推理)。
是什么?
GGUF(Gerganov Generic Unified Format)是 llama.cpp 项目创建的专门为高效推理优化的模型文件格式。
核心特性:
- 量化支持:核心优势,支持 4-bit、5-bit 等多种量化级别
- 自包含:单一文件包含模型所有权重、配置和元数据
- 硬件优化:为 CPU/GPU 推理特别优化,支持多种后端
- 高效推理:专为资源受限环境设计(个人电脑、移动设备)
典型文件命名:
llama-2-7b-chat.Q4_K_M.gguf
mistral-7b-instruct.Q5_0.gguf
codellama-13b.Q8_0.gguf
总结: GGUF 是推动大模型在终端设备普及的关键技术,专注于高效、实用的推理体验。
工作流程关系:从开发到推理
理解这两种格式的最佳方式是观察一个典型模型的生命周期:
模型训练与分发
开发者使用 Safetensors 格式将训练好的模型安全地上传到 Hugging Face Hub
格式转换
用户下载模型,通过 llama.cpp 工具将 Safetensors 转换为量化的 GGUF 格式
转换实操步骤,可以参考文章: https://mdnice.com/writing/6fb1c124d27c4170bd5691cea327ebf7
本地推理
使用 Ollama 或 llama.cpp 加载 GGUF 文件进行高效推理
1、先从 Hugging Face 格式转换为 GGUF
2、Ollama 加载 GGUF 模型运行
结论
Safetensors 和 GGUF 并非竞争关系,而是在模型生命周期中不同阶段各司其职的互补关系。
Safetensors 作为 Hugging Face 定义的通用安全存储格式,是模型生态的"基础设施"。
GGUF 作为 llama.cpp 定义的推理优化格式,是推动大模型普及的"终端技术"。
理解这种分工有助于我们在正确的场景选择正确的工具,构建更高效、更安全的大模型应用。
(END)
更多推荐
所有评论(0)