.safetensors
是一种用于存储和加载张量(tensor)的文件格式,专为机器学习模型的权重存储而设计。它具有安全性、快速加载和跨平台兼容性等优点,广泛应用于深度学习框架中,如 PyTorch、TensorFlow Lite 和 Stable Diffusion 等。以下是对 .safetensors
格式的详细介绍:
1. 安全性
safetensors
格式的一个核心特点是其安全性。它通过仅存储张量数据(即模型的权重和参数),而不包含任何代码或元数据,从而避免了代码注入的风险。例如,传统的 .ckpt
或 .pth
文件可能包含 Python 代码,这可能导致在加载模型时意外执行恶意代码。而 .safetensors
文件只包含张量数据,因此在加载时不会执行任何代码,从而提高了安全性 。
2. 快速加载
safetensors
格式在加载速度上也表现出色。它支持“零拷贝”(zero-copy)加载,即在加载模型时可以直接从磁盘映射到内存,而不需要额外的复制操作。这种机制显著提高了加载速度,尤其是在处理大型模型时。例如,与 PyTorch 的 pickle
格式相比,safetensors
在 CPU 上的加载速度更快,而在 GPU 上的加载速度与 PyTorch 相当 。
3. 跨平台兼容性
safetensors
格式支持跨语言和跨框架的兼容性。这意味着无论使用哪种编程语言或框架(如 Python、R、C++ 等),都可以轻松地读取和写入 .safetensors
文件。例如,R 语言中的 safetensors
包提供了对 .safetensors
文件的读写支持,而 Python 中的 safetensors
库也提供了类似的接口 。
4. 文件结构
safetensors
文件的结构分为两部分:头部(header)和主体(body)。
- 头部:包含一个 JSON 字符串,描述了文件的元数据,如张量的名称、数据类型、形状、数据偏移量等。头部以 8 个字节开始,用于存储文件的总长度 。
- 主体:包含张量的二进制数据。这些数据按照头部中描述的元数据进行组织,便于快速访问和加载 。
5. 懒加载
safetensors
支持“懒加载”(lazy loading),即在加载模型时,可以先检查文件的元数据,而不需要立即加载所有张量。这种机制在分布式训练和推理中非常有用,因为它可以减少内存占用,并提高加载效率 。
6. 无文件大小限制
safetensors
格式没有文件大小限制,这意味着它可以用于存储非常大的模型。例如,Hugging Face 的 Stable Diffusion 模型就使用 .safetensors
格式来存储其权重,以确保模型的高效加载和运行 。
7. 与传统格式的对比
与传统的 .pth
、.ckpt
或 .pt
文件相比,.safetensors
格式在安全性、加载速度和兼容性方面具有明显优势。例如:
- 安全性:
.safetensors
不包含代码,因此不会在加载时执行恶意代码。 - 加载速度:
.safetensors
支持零拷贝加载,加载速度更快。 - 兼容性:
.safetensors
支持跨语言和跨框架的兼容性,而传统格式通常只支持特定的框架或语言 。
8. 使用场景
safetensors
格式广泛应用于以下场景:
- 移动设备上的模型部署:由于其轻量级和快速加载的特性,
.safetensors
文件非常适合在移动设备上运行模型,如 TensorFlow Lite 的模型 。 - 大型模型的存储和加载:
.safetensors
格式支持高效的加载和存储,适用于大型模型的训练和推理 。 - 分布式训练和推理:
.safetensors
的懒加载特性使其在分布式训练和推理中非常有用,可以减少内存占用并提高效率 。
9. 安装和使用
safetensors
格式可以通过多种方式安装和使用:
- Python:可以通过
pip install safetensors
安装safetensors
库,并使用safe_save_file
和safe_load_file
函数来读写.safetensors
文件 。 - R 语言:可以通过
install.packages("safetensors")
安装safetensors
包,并使用safe_save_file
和safe_load_file
函数来读写.safetensors
文件 。
10. 总结
.safetensors
是一种安全、快速且高效的文件格式,专为存储和加载张量数据而设计。它通过仅存储张量数据,避免了代码注入的风险,并通过零拷贝加载和懒加载机制提高了加载速度。此外,.safetensors
格式支持跨语言和跨框架的兼容性,使其成为深度学习模型存储和加载的理想选择。无论是用于移动设备上的模型部署,还是大型模型的训练和推理,.safetensors
都是一个值得推荐的文件格式 .safetensors格式