Safetensors is een opmerkelijke modelindeling, ontworpen voor het veilig opslaan van tensors. Het biedt indrukwekkende snelheid en prestaties in vergelijking met veel andere formaten in dit vakgebied. Safetensors is niet alleen razendsnel, maar is ook ontwikkeld met eenvoud en veiligheid als kernwaarden, waardoor het zich onderscheidt van veel traditionele formaten die in machine learning worden gebruikt.
Waarom kiezen voor Safetensors?
Met zo veel verschillende formaten beschikbaar voor machine learning en dataopslag, vraagt u zich misschien af wat Safetensors nu zo bijzonder maakt. Laten we eens een aantal van deze formaten vergelijken om te begrijpen waarin Safetensors uitblinkt:
- Veilig: Zal een willekeurig gedownload bestand geen willekeurige code uitvoeren?
- Zero-copy: Vereist het lezen van het bestand meer geheugen dan het originele bestand?
- Lazy loading: Kan het bestand worden geïnspecteerd zonder alles te laden? En kunnen er afzonderlijke tensors worden geladen zonder het hele bestand te scannen (belangrijk in een gedistribueerde omgeving)?
- Layout control: Kan de locatie van tensors in het bestand worden beheerd om snelle toegang tot individuele tensors te garanderen?
- Geen limiet op bestandsgrootte: Is er een limiet aan de bestandsgrootte?
- Flexibiliteit: Kan aangepaste code in het formaat worden opgeslagen en later worden gebruikt zonder extra code?
- Bfloat16: Ondersteunt het formaat native bfloat16 zonder rare workarounds?
Elk symbool ✔ staat voor aanwezigheid, ❌ voor afwezigheid, ~ voor gedeeltelijke aanwezigheid en ? voor onbekende aanwezigheid van een functie.
Formaat | Veilig | Zero-copy | Lazy loading | Geen limiet op bestandsgrootte | Layout control | Flexibiliteit | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Uit deze vergelijking blijkt dat Safetensors de functionaliteiten van andere modelformaten evenaart of overtreft. Het is vooral opmerkelijk vanwege de mogelijkheid tot ‘zero-copy’ datamanipulatie en lazy loading, wat de efficiëntie van dataverwerking in machine learning-taken aanzienlijk kan verbeteren.
Enkele Opmerkelijke Vergelijkingen
Hoewel alle formaten hun eigen sterke punten hebben, laten we eens kijken hoe Safetensors zich verhoudt tot enkele van de meest gebruikte:
- Pickle (PyTorch): Een veelgebruikt formaat, maar pickle heeft een belangrijk nadeel: het is onveilig omdat het de uitvoering van willekeurige code toestaat.
- H5 (Tensorflow): Hoewel veilig, ondersteunt het geen zero-copy, een essentiële functie voor efficiënte datamanipulatie.
- SavedModel (Tensorflow): Dit formaat is specifiek voor Tensorflow en mist flexibiliteit voor andere toepassingen.
- Numpy (npz): Hoewel populair, ondersteunt dit formaat geen bfloat16, een steeds belangrijkere functie in de ML-wereld.
Onder de Motorkap van Safetensors
Als we wat dieper in Safetensors duiken, zien we dat het niet alleen een dataformaat is, maar een combinatie van doordachte ontwerpkeuzes die de veiligheid, efficiëntie en bruikbaarheid ten goede komen:
- Zero-copy: Het ontwerp van Safetensors maakt echte zero-copy op de CPU mogelijk als het bestand al in de cache staat. Op de GPU is een kopie altijd nodig vanwege het ontbreken van een diskcache, maar het ontwerp omzeilt de noodzaak om op enig moment alle tensors op de CPU te alloceren.
- Endianness: Safetensors gebruikt little-endian bytevolgorde, een gangbare keuze in dataopslag.
- Orde: Het gebruikt ‘C’ of rij-majeur ordening. Deze keuze sluit aan bij de heersende standaard in dataopslag.
- Stride: Striding wordt niet ondersteund. Alle tensors moeten worden verpakt voordat ze worden geserialiseerd. Deze ontwerpbeslissing is genomen op basis van de huidige gebruikspatronen in geserialiseerde formaten.
Net dat Beetje Extra
Safetensors is niet alleen een efficiënt en veilig dataopslagformaat, het biedt ook nog een aantal extra voordelen:
- Voorkomen van DOS-aanvallen: Het ontwerp van Safetensors verkleint de kans dat kwaadaardige bestanden DOS-aanvallen veroorzaken. Er is een limiet aan de grootte van de header om te voorkomen dat extreem grote JSON wordt geparseerd, en er is een garantie dat adressen in het bestand elkaar niet overlappen, wat betekent dat het laden van een bestand nooit meer geheugen in beslag mag nemen dan de bestandsgrootte.
- Snellere laadtijd: Safetensors omzeilt de extra CPU-kopie in PyTorch, waardoor extreem snelle CPU-laadtijden mogelijk zijn in vergelijking met pickle. GPU-laadtijden zijn net zo snel of sneller dan hun PyTorch-equivalent.
- Lazy loading: In gedistribueerde omgevingen (multi-node of multi-gpu) maakt Safetensors het mogelijk om slechts een deel van de tensors te laden, waardoor de laadtijden van modellen aanzienlijk worden versneld en de feedbackloops tijdens de ontwikkeling worden verbeterd.
In de Praktijk
Safetensors wordt al op grote schaal gebruikt door toonaangevende AI-bedrijven zoals Hugging Face, EleutherAI, en StabilityAI. Enkele bekende projecten die Safetensors gebruiken zijn:
- 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
Concluderend kunnen we stellen dat Safetensors, met zijn unieke set functies en voordelen, klaar is om een gamechanger te worden in de wereld van machine learning en dataopslag. Probeer het dus gerust eens uit – de toekomst van modelformaten staat voor u klaar!