Cosa sono i Safetensors e perché sono migliori dei .ckpt (pickletensor)

Categorie: AI/ML, Open Source Taggato , , , , ,
Save and Share:

Safetensors è un formato modello eccezionale progettato per archiviare i tensori in modo sicuro, vantando velocità e prestazioni impressionanti rispetto a molte delle alternative nel campo. Non solo Safetensors è incredibilmente veloce, ma è stato anche progettato con semplicità e sicurezza al centro, distinguendosi da molti formati tradizionali utilizzati nel machine learning.

Perché scegliere Safetensors?

Con una pletora di formati disponibili per il machine learning e l’archiviazione dei dati, potresti chiederti cosa distingue Safetensors. Bene, prendiamoci un momento per confrontare alcuni di questi formati per capire come Safetensors soddisfa i parametri chiave:

  • Sicurezza: un file scaricato a caso non eseguirà codice arbitrario?
  • Zero-copy: la lettura del file richiede più memoria del file originale?
  • Lazy loading: è possibile ispezionare il file senza caricare tutto? E si possono caricare solo alcuni tensori senza scansionare l’intero file (importante in un ambiente distribuito)?
  • Controllo del layout: è possibile controllare la posizione dei tensori all’interno del file per garantire un accesso rapido ai singoli tensori?
  • Nessun limite di dimensione del file: c’è un limite alla dimensione del file?
  • Flessibilità: è possibile salvare codice personalizzato nel formato e utilizzarlo in seguito senza codice aggiuntivo?
  • Bfloat16: il formato supporta nativamente bfloat16 senza la necessità di strane soluzioni alternative?

Ogni simbolo ✔ rappresenta la presenza, ❌ l’assenza, ~ la presenza parziale e ? la presenza sconosciuta di una caratteristica.

FormatoSicurezzaZero-copyLazy loadingNessun limite di dimensione del fileControllo del layoutFlessibilitàBfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

Da questo confronto, puoi vedere che Safetensors soddisfa o supera le caratteristiche offerte da altri formati di modello. È particolarmente degno di nota per la sua capacità di manipolazione dei dati “zero-copy” e lazy loading, che possono aumentare significativamente l’efficienza della gestione dei dati nelle attività di machine learning.

Alcuni confronti degni di nota

Sebbene tutti i formati abbiano i loro punti di forza unici, esaminiamo come Safetensors si comporta rispetto ad alcuni dei più comunemente usati:

  • Pickle (PyTorch): un formato ampiamente utilizzato, ma pickle ha un inconveniente significativo: è pericoloso poiché consente l’esecuzione di codice arbitrario.
  • H5 (Tensorflow): sebbene sicuro, non supporta zero-copy, una caratteristica fondamentale per una manipolazione efficiente dei dati.
  • SavedModel (Tensorflow): questo formato è specifico per Tensorflow e manca di flessibilità per altre applicazioni.
  • Numpy (npz): sebbene popolare, questo formato non supporta bfloat16, una caratteristica sempre più cruciale nel mondo dell’ML.

Sotto il cofano di Safetensors

Scavando un po’ più a fondo in Safetensors, scopriamo che non è solo un formato di dati, ma una combinazione di scelte progettuali ponderate che migliorano la sicurezza, l’efficienza e l’utilità:

  • Zero-copy: il design di Safetensors consente il vero zero-copy sulla CPU se il file è già nella cache. Sulla GPU, sebbene una copia sia sempre necessaria a causa dell’assenza di una cache su disco, il design evita la necessità di allocare tutti i tensori sulla CPU in un dato momento.
  • Endianness: Safetensors utilizza l’ordinamento little-endian, una scelta popolare nell’archiviazione dei dati.
  • Ordine: adotta l’ordinamento “C” o row-major. Questa scelta si allinea allo standard prevalente nell’archiviazione dei dati.
  • Stride: lo striding non è supportato. Tutti i tensori devono essere impacchettati prima di essere serializzati. Questa decisione di progettazione è stata presa in base agli attuali schemi di utilizzo nei formati serializzati.

La marcia in più

Oltre ad essere semplicemente un formato di archiviazione dati efficiente e sicuro, Safetensors porta in tavola anche alcuni vantaggi aggiuntivi:

  • Prevenzione degli attacchi DOS: il design di Safetensors mitiga la possibilità che file dannosi causino attacchi DOS. C’è un limite alla dimensione dell’intestazione per impedire l’analisi di JSON estremamente grandi e c’è la garanzia che gli indirizzi nel file non si sovrappongano, il che significa che il caricamento di un file non dovrebbe mai superare la dimensione del file in memoria.
  • Caricamento più veloce: Safetensors bypassa la copia CPU extra in PyTorch, consentendo tempi di caricamento della CPU estremamente veloci rispetto a pickle. I tempi di caricamento della GPU sono veloci o più veloci del loro equivalente PyTorch.
  • Lazy Loading: in ambienti distribuiti (multi-nodo o multi-gpu), Safetensors consente di caricare solo una parte dei tensori, accelerando significativamente i tempi di caricamento del modello e migliorando i cicli di feedback dello sviluppo.

Nel mondo reale

Safetensors sta già vedendo una diffusa adozione presso le principali aziende di intelligenza artificiale come  Hugging FaceEleutherAI, e StabilityAI. Diversi progetti importanti che utilizzano Safetensors includono:

In conclusione, Safetensors, con il suo set unico di caratteristiche e vantaggi, è destinato a cambiare le carte in tavola nel mondo del machine learning e dell’archiviazione dei dati. Quindi, vai avanti e provalo: il futuro dei formati modello ti aspetta!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *