Safetensors 通过安全审计并成为默认格式
🐶Safetensors audited as really safe and becoming the default
Hugging Face 联合 EleutherAI 和 Stability AI 委托 Trail of Bits 对 safetensors 库做了外部安全审计,未发现可导致任意代码执行的关键安全漏洞,同时修复了格式规范中的若干不精确之处以及允许 polyglot 文件缺失验证的问题。
安全审计结果支撑 safetensors 成为 transformers 默认依赖与默认保存格式,并给出后续迁移节奏。
HF Mirror 与 EleutherAI 和 Stability AI 紧密合作,已委托对 safetensors 库进行外部安全审计,审计结果使这三家组织能够朝着将该库作为保存模型默认格式的目标迈进。
由 Trail of Bits 执行的安全审计完整结果可在此处查看:报告。
以下博客文章解释了该库的起源、为何这些审计结果很重要,以及后续步骤。
什么是 safetensors?
🐶Safetensors 是一个用于在最常见框架(包括 PyTorch、TensorFlow、JAX、PaddlePaddle 和 NumPy)中保存和加载张量的库。
为了更具体地解释,我们将使用 PyTorch。
import torch
from safetensors.torch import load_file, save_file
weights = {"embeddings": torch.zeros((10, 100))}
save_file(weights, "model.safetensors")
weights2 = load_file("model.safetensors")
与其他格式相比,它还具有许多很酷的功能,最显著的是加载文件是安全的,我们稍后会看到。
当你使用 transformers 时,如果安装了 safetensors,那么这些文件将已经被优先使用以防止问题,这意味着
pip install safetensors
很可能是安全运行 safetensors 文件所需的唯一东西。
今后,得益于该库的验证,safetensors 现在将默认安装在 transformers 中。下一步是默认以 safetensors 保存模型。
我们很高兴看到 safetensors 库已经在 ML 生态系统中得到使用,包括:
为什么要创造新东西?
这个库的诞生是因为 PyTorch 在底层使用了 pickle,而这本质上是不安全的。(来源:1、2,视频、3)
使用 pickle,可以编写一个伪装成模型的恶意文件,在用户不知情的情况下让攻击者完全控制用户的计算机,使攻击者能够窃取他们所有的比特币 😓。
虽然 pickle 中的这个漏洞在计算机安全界广为人知(并且在 PyTorch 文档中也有承认),但在更广泛的 ML 社区中并不常见。
由于 HF Mirror Hub 是一个任何人都可以上传和分享模型的平台,因此努力防止用户被恶意软件感染非常重要。
我们也在采取措施确保现有的 PyTorch 文件不是恶意的,但我们能做的最好的事情就是标记看起来可疑的文件。
当然,还有其他文件格式,但似乎没有一个能满足我们团队确定的完整理想要求。
除了安全之外,safetensors 还允许延迟加载,并且通常加载速度更快(在 CPU 上大约快 100 倍)。
延迟加载意味着以高效的方式仅加载张量的一部分。这一特殊功能使高效推理库(如 text-generation-inference)能够进行任意分片,从而在各种类型的硬件上以最高效率加载 LLM(如 LLaMA、StarCoder 等)。
因为它加载速度如此之快且与框架无关,我们甚至可以使用该格式在 PyTorch 或 TensorFlow 中从同一文件加载模型。
安全审计
由于 safetensors 的主要资产是提供安全保证,我们想确保它确实做到了。这就是为什么 HF Mirror、EleutherAI 和 Stability AI 联手进行外部安全审计来确认这一点。
重要发现:
- 未发现导致任意代码执行的关键安全漏洞。
- 规范格式中发现了一些不精确之处,并已修复。
- 一些缺失的验证允许了 多语言文件,此问题已得到修复。
- 针对测试套件提出了大量改进建议并得以实施。
秉承开放和透明的原则,所有公司同意将报告完全公开。
需要注意的一点是,该库是用 Rust 编写的。这直接源自语言本身,增添了一层额外的安全性。
尽管无法证明不存在缺陷,但这是向确保safetensors确实安全可用迈出的一大步。
未来展望
对于 HF Mirror、EleutherAI 和 Stability AI 而言,其首要计划是转向默认使用此格式。
EleutherAI 已在其 LM 评估工具中增加了对以 safetensors 存储的模型进行评估的支持,并正在努力在其 GPT-NeoX 分布式训练库中支持该格式。
在 transformers 库内部,我们正在进行以下工作:
- 创建
safetensors。 - 验证其可行性,并能兑现所有承诺(针对大语言模型的懒加载、跨框架的单一文件、更快的加载速度)。
- 验证其安全性。(这就是今天的公告。)
- 使
safetensors成为核心依赖项。(此事已完成或即将完成。) - 将
safetensors设为默认保存格式。这将在几个月后实现,届时我们已收集到足够反馈,确保这能尽可能减少干扰,并且已有足够多的用户拥有该库,能够在相对较旧的transformers版本上加载新模型。
至于 safetensors 本身,我们正在研究为其添加更多高级功能以支持大语言模型训练,当前格式在这方面存在一系列问题。
最后,我们计划在不久的将来发布 1.0,由 transformers 庞大的用户群体提供最终的测试环节。该格式及库自诞生以来改动甚少,这是稳定性的良好标志。
我们很高兴能推动机器学习向着对所有人更安全、更高效的方向迈进一步!
来源:Hugging Face Blog · hf-mirror.com