什么是 Safetensors?它为什么比 .ckpt (pickletensor) 更好?

分类:AI/ML开源 标签:
Save and Share:

Safetensors 是一种卓越的模型格式,专为安全存储张量而设计。与该领域的许多替代方案相比,它在速度和性能方面都表现出色。Safetensors 不仅速度极快,而且在设计之初就以简单性和安全性为核心,这使其与机器学习中使用的许多传统格式区分开来。

为什么选择 Safetensors?

由于有大量可用于机器学习和数据存储的格式,你可能会想知道是什么让 Safetensors 与众不同。 那么,让我们花点时间比较一下这些格式,以了解 Safetensors 如何在关键参数上交付:

  • 安全:随机下载的文件是否会运行任意代码?
  • 零拷贝:读取文件是否需要比原始文件更多的内存?
  • 延迟加载:是否可以在不加载所有内容的情况下检查文件? 是否可以仅加载其中的一些张量,而无需扫描整个文件(这在分布式环境中很重要)?
  • 布局控制:可以控制张量在文件中的位置,以确保快速访问单个张量吗?
  • 无文件大小限制:文件大小有限制吗?
  • 灵活性:可以将自定义代码保存在格式中,并在以后无需额外代码即可使用吗?
  • Bfloat16:该格式是否支持原生 bfloat16,而无需进行奇怪的变通方法?

每个符号 ✔ 表示存在,❌ 表示不存在,~ 表示部分存在,? 表示某个功能的存在情况未知。

格式安全零拷贝延迟加载无文件大小限制布局控制灵活性Bfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

从这个比较中,你可以看到 Safetensors 满足或超过了其他模型格式提供的功能。 其“零拷贝”数据操作和延迟加载能力尤其值得注意,这可以显著提高机器学习任务中的数据处理效率。

一些值得注意的比较

虽然所有格式都有其独特的优势,但让我们来看看 Safetensors 与一些更常用的格式相比如何:

  • Pickle (PyTorch):一种广泛使用的格式,但 pickle 有一个显着的缺点——它不安全,因为它允许执行任意代码。
  • H5 (Tensorflow):虽然安全,但它不支持零拷贝,而零拷贝是高效数据操作不可或缺的功能。
  • SavedModel (Tensorflow):此格式特定于 Tensorflow,并且缺乏其他应用程序的灵活性。
  • Numpy (npz):虽然流行,但此格式不支持 bfloat16,这在 ML 领域中正变得越来越重要。

Safetensors 的底层原理

深入了解 Safetensors,我们发现它不仅仅是一种数据格式,而是深思熟虑的设计选择的组合,这些选择增强了安全性、效率和实用性:

  • 零拷贝:Safetensors 的设计允许在 CPU 上进行真正的零拷贝(如果文件已在缓存中)。在 GPU 上,虽然由于缺少磁盘缓存,始终需要复制,但该设计避免了在任何给定时间在 CPU 上分配所有张量的需要。
  • 字节序:Safetensors 使用小端字节序,这是数据存储中的一个流行选择。
  • 顺序:它采用“C”或行优先顺序。 这种选择符合数据存储中的普遍标准。
  • 步长:不支持步长。 所有张量都需要先打包,然后再序列化。 此设计决策基于序列化格式中的当前使用模式。

更进一步

Safetensors 不仅仅是一种高效且安全的数据存储格式,它还带来了一些额外的优势:

  • 防止 DOS 攻击:Safetensors 的设计减轻了恶意文件导致 DOS 攻击的可能性。 标头的大小有限制,以防止解析过大的 JSON,并且保证文件中的地址不重叠,这意味着加载文件永远不应超过内存中的文件大小。
  • 更快的加载速度:Safetensors 绕过了 PyTorch 中的额外 CPU 副本,与 pickle 相比,实现了极快的 CPU 加载时间。 GPU 加载时间与其 PyTorch 等效项一样快或更快。
  • 延迟加载:在分布式设置(多节点或多 GPU)中,Safetensors 能够仅加载部分张量,从而显着加快了模型加载时间并改善了开发反馈循环。

实际应用

Safetensors 已经在领先的 AI 企业中得到广泛采用,例如  Hugging FaceEleutherAI, 和 StabilityAI。 几个使用 Safetensors 的突出项目包括:

总之,Safetensors 凭借其独特的特性和优势,必将在机器学习和数据存储领域掀起一场变革。 所以,继续前进,试一试吧——模型格式的未来在等着你!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注