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.
Formato | Sicurezza | Zero-copy | Lazy loading | Nessun limite di dimensione del file | Controllo del layout | Flessibilità | 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 Face, EleutherAI, e StabilityAI. Diversi progetti importanti che utilizzano Safetensors includono:
- huggingface/transformers
- AUTOMATIC1111/stable-diffusion-webui
- Llama-cpp
- microsoft/TaskMatrix
- hpcaitech/ColossalAI
- huggingface/pytorch-image-models
- CivitAI
- huggingface/diffusers
- coreylowman/dfdx
- invoke-ai/InvokeAI
- oobabooga/text-generation-webui
- Sanster/lama-cleaner
- PaddlePaddle/PaddleNLP
- AIGC-Audio/AudioGPT
- brycedrennan/imaginAIry
- comfyanonymous/ComfyUI
- LianjiaTech/BELLE
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!