Safetensors est un format de modèle remarquable, conçu pour stocker les tenseurs en toute sécurité, et qui offre une rapidité et des performances impressionnantes par rapport à de nombreuses alternatives dans le domaine. Non seulement Safetensors est incroyablement rapide, mais il a également été conçu avec la simplicité et la sécurité comme priorités, ce qui le distingue de nombreux formats traditionnels utilisés dans l’apprentissage automatique.
Pourquoi choisir Safetensors ?
Avec la pléthore de formats disponibles pour l’apprentissage automatique et le stockage de données, vous pourriez vous demander ce qui distingue Safetensors. Eh bien, prenons un moment pour comparer certains de ces formats afin de comprendre comment Safetensors répond aux paramètres clés :
- Sécurité : Un fichier téléchargé de manière aléatoire exécutera-t-il du code arbitraire ?
- Copie zéro : La lecture du fichier nécessite-t-elle plus de mémoire que le fichier original ?
- Chargement paresseux : Le fichier peut-il être inspecté sans tout charger ? Et certains tenseurs peuvent-ils être chargés sans scanner tout le fichier (important dans un environnement distribué) ?
- Contrôle de la disposition : L’emplacement des tenseurs dans le fichier peut-il être contrôlé pour garantir un accès rapide aux tenseurs individuels ?
- Aucune limite de taille de fichier : Y a-t-il une limite à la taille du fichier ?
- Flexibilité : Du code personnalisé peut-il être enregistré dans le format et utilisé ultérieurement sans code supplémentaire ?
- Bfloat16 : Le format prend-il en charge le bfloat16 natif sans avoir besoin de solutions de contournement étranges ?
Chaque symbole ✔ représente la présence, ❌ l’absence, ~ la présence partielle et ? la présence inconnue d’une fonctionnalité.
Format | Sécurité | Copie zéro | Chargement paresseux | Aucune limite de taille de fichier | Contrôle de la disposition | Flexibilité | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
D’après cette comparaison, vous pouvez constater que Safetensors répond ou dépasse les fonctionnalités offertes par d’autres formats de modèle. Il est particulièrement remarquable pour sa capacité de manipulation de données en « copie zéro » et de chargement paresseux, ce qui peut considérablement améliorer l’efficacité du traitement des données dans les tâches d’apprentissage automatique.
Quelques comparaisons notables
Bien que tous les formats aient leurs forces uniques, examinons comment Safetensors se compare à certains des formats les plus couramment utilisés :
- Pickle (PyTorch) : Un format largement utilisé, mais pickle présente un inconvénient majeur : il n’est pas sûr car il permet l’exécution de code arbitraire.
- H5 (Tensorflow) : Bien que sécurisé, il ne prend pas en charge la copie zéro, une fonctionnalité essentielle pour une manipulation efficace des données.
- SavedModel (Tensorflow) : Ce format est spécifique à Tensorflow et manque de flexibilité pour d’autres applications.
- Numpy (npz) : Bien que populaire, ce format ne prend pas en charge le bfloat16, une fonctionnalité de plus en plus cruciale dans le monde du ML.
Sous le capot de Safetensors
En approfondissant un peu Safetensors, nous constatons qu’il ne s’agit pas seulement d’un format de données, mais d’une combinaison de choix de conception réfléchis qui améliorent la sécurité, l’efficacité et l’utilité :
- Copie zéro : La conception de Safetensors permet une véritable copie zéro sur le CPU si le fichier est déjà en cache. Sur GPU, bien qu’une copie soit toujours nécessaire en raison de l’absence de cache disque, la conception évite d’avoir à allouer tous les tenseurs sur le CPU à un moment donné.
- Endianness : Safetensors utilise l’ordre little-endian, un choix populaire dans le stockage de données.
- Ordre : Il adopte l’ordre « C » ou row-major. Ce choix s’aligne sur la norme dominante dans le stockage de données.
- Stride : Le striding n’est pas pris en charge. Tous les tenseurs doivent être compressés avant d’être sérialisés. Cette décision de conception a été prise en fonction des modèles d’utilisation actuels dans les formats sérialisés.
Un cran au-dessus
Au-delà d’être simplement un format de stockage de données efficace et sûr, Safetensors apporte également des avantages supplémentaires :
- Prévention des attaques DOS : La conception de Safetensors atténue la possibilité que des fichiers malveillants provoquent des attaques DOS. Il existe une limite à la taille de l’en-tête pour empêcher l’analyse de JSON extrêmement volumineux, et il est garanti que les adresses dans le fichier ne se chevauchent pas, ce qui signifie que le chargement d’un fichier ne devrait jamais dépasser la taille du fichier en mémoire.
- Chargement plus rapide : Safetensors contourne la copie CPU supplémentaire dans PyTorch, ce qui permet des temps de chargement CPU extrêmement rapides par rapport à pickle. Les temps de chargement GPU sont aussi rapides, voire plus rapides, que leur équivalent PyTorch.
- Chargement paresseux : Dans les environnements distribués (multi-nœuds ou multi-gpu), Safetensors permet de ne charger qu’une partie des tenseurs, ce qui accélère considérablement les temps de chargement des modèles et améliore les boucles de rétroaction de développement.
Dans la nature
Safetensors est déjà largement adopté par les principales entreprises d’IA telles que Hugging Face, EleutherAI, et StabilityAI. Plusieurs projets importants utilisant Safetensors incluent :
- 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
En conclusion, Safetensors, avec son ensemble unique de caractéristiques et d’avantages, est bien parti pour devenir un acteur majeur dans le monde de l’apprentissage automatique et du stockage de données. Alors, allez-y, essayez-le – l’avenir des formats de modèle vous attend !