🐶Safetensors è stato sottoposto ad una revisione di sicurezza ed è diventato il valore predefinito.

'🐶Safetensors è stato revisionato per la sicurezza ed ora è il valore predefinito.'

Hugging Face, in stretta collaborazione con EleutherAI e Stability AI, ha ordinato un audit di sicurezza esterno della libreria safetensors, i cui risultati consentono a tutte e tre le organizzazioni di procedere verso l’utilizzo della libreria come formato predefinito per i modelli salvati.

I risultati completi dell’audit di sicurezza, eseguito da Trail of Bits, possono essere trovati qui: Report.

Nel seguente post sul blog vengono spiegate le origini della libreria, l’importanza di questi risultati di audit e i prossimi passi.

Cos’è safetensors?

🐶 Safetensors è una libreria per il salvataggio e il caricamento di tensori nei framework più comuni (tra cui PyTorch, TensorFlow, JAX, PaddlePaddle e NumPy).

Per una spiegazione più concreta, useremo 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")

Ha anche una serie di funzionalità interessanti rispetto ad altri formati, in particolare il fatto che il caricamento dei file è sicuro, come vedremo più avanti.

Quando si utilizza transformers, se safetensors è installato, allora quei file verranno già utilizzati preferenzialmente per evitare problemi, il che significa che

pip install safetensors

probabilmente sarà l’unica cosa necessaria per eseguire i file di safetensors in modo sicuro.

In futuro, grazie alla convalida della libreria, safetensors verrà installato di default in transformers. Il prossimo passo è quello di salvare i modelli in safetensors per impostazione predefinita.

Siamo entusiasti di vedere che la libreria safetensors sta già venendo utilizzata nell’ecosistema di ML, tra cui:

  • Civitai
  • Stable Diffusion Web UI
  • dfdx
  • LLaMA.cpp

Perché creare qualcosa di nuovo?

La creazione di questa libreria è stata guidata dal fatto che PyTorch utilizza pickle sotto il cofano, il quale è intrinsecamente insicuro. (Fonti: 1, 2, video, 3)

Con pickle, è possibile scrivere un file malevolo che si finge un modello e che dà il controllo completo del computer dell’utente a un attaccante senza la conoscenza dell’utente, consentendo all’attaccante di rubare tutti i suoi bitcoin 😓.

Anche se questa vulnerabilità in pickle è ampiamente nota nel mondo della sicurezza informatica (ed è riconosciuta nella documentazione di PyTorch), non è una conoscenza comune nella comunità ML più ampia.

Dato che l’Hugging Face Hub è una piattaforma in cui chiunque può caricare e condividere modelli, è importante fare sforzi per evitare che gli utenti vengano infettati da malware.

Stiamo anche adottando misure per assicurarci che i file esistenti di PyTorch non siano malevoli, ma la cosa migliore che possiamo fare è segnalare i file sospetti.

Ovviamente, ci sono anche altri formati di file disponibili, ma nessuno sembrava soddisfare l’insieme completo di requisiti ideali identificati dal nostro team.

Oltre a essere sicuro, safetensors consente il caricamento ritardato e carichi generalmente più veloci (circa 100 volte più veloci sulla CPU).

Il caricamento ritardato significa caricare solo una parte di un tensore in modo efficiente. Questa particolare funzionalità consente la suddivisione arbitraria con librerie di inferenza efficienti, come text-generation-inference, per caricare LLM (come LLaMA, StarCoder, ecc.) su vari tipi di hardware con massima efficienza.

Grazie alla sua velocità di caricamento e alla sua indipendenza dal framework, possiamo persino utilizzare il formato per caricare modelli dallo stesso file in PyTorch o TensorFlow.

L’audit di sicurezza

Dato che il valore principale di safetensors è fornire garanzie di sicurezza, volevamo assicurarci che effettivamente le offrisse. Ecco perché Hugging Face, EleutherAI e Stability AI si sono uniti per ottenere un audit di sicurezza esterno per confermarlo.

Trovate importanti:

  • Non è stata trovata alcuna vulnerabilità critica che porti all’esecuzione di codice arbitrario.
  • Sono state rilevate e corrette alcune imprecisioni nel formato di specifica.
  • Sono state risolte alcune mancanze di validazione che permettevano file poliglotti.
  • Sono state proposte e implementate molte migliorie alla suite di test.

Per amore della trasparenza, tutte le aziende hanno accettato di rendere il rapporto completamente pubblico.

Rapporto completo

Una cosa importante da notare è che la libreria è scritta in Rust. Questo aggiunge un ulteriore livello di sicurezza che deriva direttamente dal linguaggio stesso.

Anche se è impossibile dimostrare l’assenza di difetti, questo rappresenta un passo importante per garantire che safetensors sia effettivamente sicuro da utilizzare.

Prossime mosse

Per Hugging Face, EleutherAI e Stability AI, il piano principale è quello di passare all’utilizzo di questo formato di default.

EleutherAI ha aggiunto il supporto per valutare modelli memorizzati come safetensors nella loro libreria di valutazione LM Evaluation Harness e sta lavorando per supportare il formato nella loro libreria di allenamento distribuito GPT-NeoX.

All’interno della libreria transformers stiamo facendo quanto segue:

  • Creiamo safetensors.
  • Verifichiamo che funzioni e che possa mantenere tutte le promesse (caricamento ritardato per LLM, un unico file per tutti i framework, caricamenti più veloci).
  • Verifichiamo che sia sicuro. (Questo è l’annuncio di oggi.)
  • Rendiamo safetensors una dipendenza principale. (Questo è già stato fatto o è in arrivo.)
  • Rendiamo safetensors il formato di salvataggio predefinito. Questo avverrà tra qualche mese, quando avremo abbastanza feedback per assicurarci che provochi il minor numero di interruzioni possibile e abbastanza utenti abbiano già la libreria per poter caricare nuovi modelli anche su versioni relativamente vecchie di transformers.

Per quanto riguarda safetensors stesso, stiamo valutando l’aggiunta di funzionalità più avanzate per l’allenamento LLM, che presenta una serie di problemi con i formati attuali.

Infine, abbiamo intenzione di rilasciare una versione 1.0 nel prossimo futuro, con la vasta base di utenti di transformers che fornirà l’ultimo passo di test. Il formato e la libreria hanno avuto pochissime modifiche fin dalla loro creazione, il che è un buon segno di stabilità.

Siamo felici di poter avvicinare l’IA un passo più vicino a essere sicura ed efficiente per tutti!