Safetensors er et bemerkelsesverdig modellformat utviklet for sikker lagring av tensorer, og formatet kan skilte med imponerende hastighet og ytelse sammenlignet med mange av alternativene på markedet. Safetensors er ikke bare utrolig raskt, men det er også konstruert med enkelhet og sikkerhet i kjernen, noe som skiller det fra mange tradisjonelle formater som brukes innen maskinlæring.
Hvorfor velge Safetensors?
Med et vell av formater tilgjengelig for maskinlæring og datalagring, lurer du kanskje på hva som skiller Safetensors ut. La oss ta en titt på noen av disse formatene for å forstå hvordan Safetensors leverer på viktige parametere:
- Sikkert: Vil en tilfeldig nedlastet fil unngå å kjøre vilkårlig kode?
- Null-kopiering: Krever lesing av filen mer minne enn den opprinnelige filen?
- Lat lasing: Kan filen inspiseres uten å laste inn alt? Og kan bare enkelte tensorer i den lastes inn uten å skanne hele filen (viktig i en distribuert setting)?
- Layoutkontroll: Kan plasseringen av tensorer i filen kontrolleres for å sikre rask tilgang til individuelle tensorer?
- Ingen filstørrelsesbegrensning: Er det en begrensning på filstørrelsen?
- Fleksibilitet: Kan tilpasset kode lagres i formatet og brukes senere uten ekstra kode?
- Bfloat16: Støtter formatet native bfloat16 uten behov for rare omveier?
Hvert symbol ✔ representerer tilstedeværelse, ❌ fravær, ~ delvis tilstedeværelse og ? ukjent tilstedeværelse av en funksjon.
Format | Sikkert | Null-kopiering | Lat lasing | Ingen filstørrelsesbegrensning | Layoutkontroll | Fleksibilitet | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Fra denne sammenligningen kan du se at Safetensors oppfyller eller overgår funksjonene som tilbys av andre modellformater. Det er spesielt bemerkelsesverdig for sin evne til «null-kopiering» av datamanipulasjon og lat lasting, noe som kan øke effektiviteten av datahåndtering i maskinlæringsoppgaver betydelig.
Noen bemerkelsesverdige sammenligninger
Selv om alle formatene har sine unike styrker, la oss undersøke hvordan Safetensors klarer seg mot noen av de mer vanlige formatene:
- Pickle (PyTorch): Et mye brukt format, men pickle har en betydelig ulempe – det er usikkert siden det tillater kjøring av vilkårlig kode.
- H5 (Tensorflow): Selv om det er sikkert, støtter det ikke null-kopiering, en funksjon som er avgjørende for effektiv datamanipulasjon.
- SavedModel (Tensorflow): Dette formatet er spesifikt for Tensorflow og mangler fleksibilitet for andre applikasjoner.
- Numpy (npz): Selv om det er populært, støtter ikke dette formatet bfloat16, en stadig viktigere funksjon i ML-verdenen.
Under panseret på Safetensors
Når vi dykker litt dypere inn i Safetensors, finner vi at det ikke bare er et dataformat, men en kombinasjon av gjennomtenkte designvalg som forbedrer sikkerhet, effektivitet og brukervennlighet:
- Null-kopiering: Safetensors sin design tillater ekte null-kopiering på CPU-en hvis filen allerede er i cache. På GPU-en, selv om en kopi alltid er nødvendig på grunn av fraværet av en diskcache, omgår designet behovet for å allokere alle tensorer på CPU-en på et gitt tidspunkt.
- Endianness: Safetensors bruker little-endian-ordning, et populært valg innen datalagring.
- Orden: Det bruker ‘C’ eller radmajor-ordning. Dette valget stemmer overens med den rådende standarden innen datalagring.
- Stride: Striding støttes ikke. Alle tensorer må pakkes før de serialiseres. Denne designbeslutningen ble tatt basert på nåværende brukermønstre i serialiserte formater.
Det lille ekstra
Utover det å bare være et effektivt og sikkert datalagringsformat, bringer Safetensors også noen ekstra fordeler til bordet:
- Forebygge DOS-angrep: Utformingen av Safetensors reduserer muligheten for at ondsinnede filer forårsaker DOS-angrep. Det er en grense for størrelsen på headeren for å forhindre parsing av ekstremt stor JSON, og det er en garanti for at adresser i filen ikke overlapper, noe som betyr at lasting av en fil aldri skal overstige filens størrelse i minnet.
- Raskere lasting: Safetensors omgår den ekstra CPU-kopien i PyTorch, noe som gir ekstremt raske CPU-lastingstider sammenlignet med pickle. GPU-lastingstider er like raske eller raskere enn deres PyTorch-ekvivalent.
- Lat lasting: I distribuerte settinger (multi-node eller multi-gpu) muliggjør Safetensors lasting av bare deler av tensorene, noe som betydelig fremskynder modellastingstider og forbedrer tilbakemeldingssløyfer for utvikling.
I praksis
Safetensors opplever allerede utbredt bruk hos ledende AI-bedrifter som Hugging Face, EleutherAI, og StabilityAI. Flere fremtredende prosjekter som bruker Safetensors inkluderer:
- 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
Avslutningsvis er Safetensors, med sitt unike sett med funksjoner og fordeler, i ferd med å bli en game-changer i verdenen av maskinlæring og datalagring. Så, vær så god, prøv det – fremtiden for modellformater venter på deg!