審計顯示safetensors是安全的,可以成為預設格式
Hugging Face與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
,而pickle
本質上是不安全的。(來源:1、2,影片、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
使用者群提供最終測試。自其誕生以來,格式和庫的修改非常少,這是一個穩定性的好兆頭。
我們很高興能讓機器學習離所有人的安全和高效更近一步!