審計顯示safetensors是安全的,可以成為預設格式

釋出於 2023 年 5 月 23 日
在 GitHub 上更新

Hugging FaceEleutherAIStability 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,而pickle本質上是不安全的。(來源:12,影片3

使用 pickle,攻擊者可以編寫一個偽裝成模型的惡意檔案,在使用者不知情的情況下完全控制使用者的電腦,從而盜取使用者的所有比特幣 😓。

儘管 pickle 的這一漏洞在計算機安全領域廣為人知(並在 PyTorch 的文件中有所提及),但在更廣泛的機器學習社群中並不普及。

Hugging Face Hub 是一個任何人都可以上傳和分享模型的平臺,因此努力防止使用者感染惡意軟體非常重要。

我們還在採取措施確保現有的 PyTorch 檔案沒有惡意,但我們能做的最好就是標記可疑檔案。

當然,還有其他檔案格式,但似乎沒有一種能完全滿足我們團隊確定的理想要求

除了安全性,safetensors還支援惰性載入,並且通常載入速度更快(在 CPU 上快約 100 倍)。

惰性載入意味著以高效的方式僅載入張量的一部分。這個特殊功能使得能夠透過高效的推理庫(例如text-generation-inference)進行任意分片,從而以最高效率在各種硬體型別上載入大型語言模型(如 LLaMA、StarCoder 等)。

因為它載入速度快且與框架無關,我們甚至可以使用該格式在 PyTorch 或 TensorFlow 中從同一個檔案載入模型。

安全審計

由於safetensors的主要優點是提供安全保障,我們希望確保它確實能做到這一點。這就是為什麼 Hugging Face、EleutherAI 和 Stability AI 聯手進行外部安全審計以確認其安全性。

重要發現

  • 未發現導致任意程式碼執行的嚴重安全漏洞。
  • 檢測並修復了規範格式中的一些不精確之處。
  • 修復了由於缺少驗證而允許多語言檔案的問題。
  • 提出了並實施了對測試套件的大量改進。

本著開放和透明的精神,所有公司同意將報告完全公開。

完整報告

需要注意的一個重要事項是該庫是用 Rust 編寫的。這直接從語言本身增加了額外的安全層。

雖然無法證明沒有缺陷,但這是朝著確保safetensors確實可以安全使用邁出的重要一步。

未來展望

對於 Hugging Face、EleutherAI 和 Stability AI 來說,主要計劃是預設轉向使用這種格式。

EleutherAI 已在他們的 LM Evaluation Harness 中增加了對儲存為safetensors格式的模型的評估支援,並且正在努力在他們的 GPT-NeoX 分散式訓練庫中支援該格式。

transformers庫中,我們正在進行以下工作:

  • 建立safetensors
  • 驗證它是否有效,並能兌現所有承諾(對 LLM 的惰性載入,所有框架的單一檔案,更快的載入)。
  • 驗證其安全性。(這是今天的公告。)
  • 使safetensors成為核心依賴項。(這已經完成或即將完成。)
  • 使safetensors成為預設儲存格式。這將在幾個月後進行,屆時我們將獲得足夠的反饋,以確保它造成的干擾儘可能小,並且足夠多的使用者已經安裝了該庫,即使在相對較舊的transformers版本上也能載入新模型。

至於safetensors本身,我們正在研究為 LLM 訓練新增更高階的功能,這在現有格式中存在自身的問題。

最後,我們計劃在不久的將來發布1.0版本,由龐大的transformers使用者群提供最終測試。自其誕生以來,格式和庫的修改非常少,這是一個穩定性的好兆頭。

我們很高興能讓機器學習離所有人的安全和高效更近一步!

社群

註冊登入評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.