Hugging Face Safetensors 安全審計與預設採用
Safetensors 轉為預設模型格式
Hugging Face 與 EleutherAI 及 Stability AI 合作,正朝著將 safetensors 函式庫設為已保存模型的預設格式前進。此決策是在 Trail of Bits 進行的外部安全審計之後作出的,審計確認該函式庫安全且已準備好廣泛採用。
PyTorch pickle 的安全漏洞
safetensors 的開發目的是取代 PyTorch 中使用的 pickle,因為 pickle 本質上不安全。由於 pickle 允許執行任意程式碼,偽裝成模型的惡意檔案可能在使用者不知情的情況下,讓攻擊者取得對其電腦的完整控制權。
雖然此漏洞在資訊安全領域已有充分文件記錄,且在 PyTorch 文件中亦有說明,但在更廣泛的機器學習社群中並非普遍認知。這對像 Hugging Face Hub 這樣的平臺構成重大風險,因為任何使用者都可以上傳與分享模型。
safetensors 的技術能力
除了安全性之外,safetensors 相較於現有格式還提供了多項技術優勢:
- Framework Agnostic(框架無關): 此函式庫支援在多個框架間儲存與載入張量,包含 PyTorch、TensorFlow、JAX、PaddlePaddle 與 NumPy。
- Performance(效能): 載入速度通常較快,CPU 上的速度可比其他格式快至 100 倍。
- Lazy Loading(延遲載入):
safetensors支援高效的延遲載入,僅載入張量的特定部分。這對於高效的推論函式庫(例如text-generation-inference)而言至關重要,能在各種硬體配置下透過任意切分載入大型語言模型(LLM),如 LLaMA 與 StarCoder。
Trail of Bits 安全審計結果
為了驗證此函式庫的安全保證,Trail of Bits 進行了外部審計。主要發現包括:
- No Critical Flaws(無重大缺陷): 未發現會導致任意程式碼執行的關鍵安全漏洞。
- Specification Fixes(規格修正): 審計發現並修正了規格格式中的不精確之處。
- Validation Improvements(驗證改進): 發現允許「多語言檔案」的問題,並透過加強驗證予以解決。
- Test Suite Enhancements(測試套件增強): 此審計為函式庫的測試套件帶來多項改進。
該函式庫以 Rust 實作,為其本身語言所固有的安全層提供了額外的保護。
實作路線圖
將 safetensors 轉為預設格式的過程將透過以下步驟執行:
在 Transformers 中的整合
在 transformers 函式庫內,Hugging Face 正實作以下序列:
- Creation and Verification(建立與驗證): 確保該格式在延遲載入、跨框架相容性與載入速度方面符合承諾。
- Security Validation(安全驗證): 透過外部審計確認其安全性。
- Core Dependency(核心依賴): 將
safetensors設為transformers函式庫的核心依賴。 - Default Saving Format(預設保存格式): 在數月內將
safetensors轉為預設保存格式,以降低衝擊。
生態系統採用
EleutherAI 已在其 LM Evaluation Harness 中加入對 safetensors 的支援,並正致力於將其整合至 GPT-NeoX 分散式訓練函式庫。此格式亦已被其他生態系工具使用,包括 Civitai、Stable Diffusion Web UI、dfdx 與 LLaMA.cpp.