Hvad er Safetensors, og hvorfor er de bedre end .ckpt (pickletensor)

Kategoriseret som AI/ML, Open Source Mærket , , , , ,
Save and Share:

Safetensors er et bemærkelsesværdigt modelfformat designet til sikker lagring af tensorer, der kan prale af imponerende hastighed og ydeevne sammenlignet med mange af alternativerne på området. Safetensors er ikke kun utroligt hurtigt, men det er også udviklet med enkelhed og sikkerhed i centrum, hvilket adskiller det fra mange traditionelle formater, der bruges inden for maskinlæring.

Hvorfor vælge Safetensors?

Med et væld af formater tilgængelige til maskinlæring og datalagring, kan du måske undre dig over, hvad der adskiller Safetensors. Lad os se nærmere på nogle af disse formater for at forstå, hvordan Safetensors leverer på nøgleparametre:

  • Sikkerhed: Vil en tilfældigt downloadet fil ikke køre vilkårlig kode?
  • Zero-copy: Kræver det mere hukommelse at læse filen end den originale filstørrelse?
  • Lazy loading: Kan filen inspiceres uden at indlæse alt? Og kan kun nogle tensorer i den indlæses uden at scanne hele filen (vigtigt i en distribueret opsætning)?
  • Layoutkontrol: Kan placeringen af tensorer i filen kontrolleres for at sikre hurtig adgang til individuelle tensorer?
  • Ingen filstørrelsesbegrænsning: Er der en grænse for filstørrelsen?
  • Fleksibilitet: Kan brugerdefineret kode gemmes i formatet og bruges senere uden ekstra kode?
  • Bfloat16: Understøtter formatet native bfloat16 uden behov for mærkelige omveje?

Hvert symbol ✔ repræsenterer tilstedeværelse, ❌ fravær, ~ delvis tilstedeværelse og ? ukendt tilstedeværelse af en funktion.

FormatSikkerhedZero-copyLazy loadingIngen filstørrelsesbegrænsningLayoutkontrolFleksibilitetBfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

Ud fra denne sammenligning kan man se, at Safetensors opfylder eller overgår de funktioner, som andre modelfformater tilbyder. Det er især bemærkelsesværdigt for sin evne til ‘zero-copy’ datamanipulation og lazy loading, hvilket markant kan øge effektiviteten af datahåndtering i maskinlæringsopgaver.

Nogle bemærkelsesværdige sammenligninger

Selvom alle formaterne har deres unikke styrker, lad os undersøge, hvordan Safetensors klarer sig i forhold til nogle af de mere almindeligt anvendte:

  • Pickle (PyTorch): Et meget anvendt format, men pickle har en betydelig ulempe – det er usikkert, da det tillader udførelse af vilkårlig kode.
  • H5 (Tensorflow): Selvom det er sikkert, understøtter det ikke zero-copy, en funktion der er afgørende for effektiv datamanipulation.
  • SavedModel (Tensorflow): Dette format er specifikt for Tensorflow og mangler fleksibilitet for andre applikationer.
  • Numpy (npz): Selvom det er populært, understøtter dette format ikke bfloat16, en stadig vigtigere funktion i ML-verdenen.

Bag kulisserne hos Safetensors

Dykker vi lidt dybere ned i Safetensors, finder vi ud af, at det ikke kun er et dataformat, men en kombination af gennemtænkte designvalg, der forbedrer sikkerhed, effektivitet og anvendelighed:

  • Zero-copy: Safetensors’ design muliggør ægte zero-copy på CPU’en, hvis filen allerede er i cachen. På GPU’en, selvom en kopi altid er nødvendig på grund af manglen på en diskcache, omgår designet behovet for at allokere alle tensorer på CPU’en på noget givent tidspunkt.
  • Endianness: Safetensors bruger little-endian ordering, et populært valg inden for datalagring.
  • Rækkefølge: Det anvender ‘C’ eller row-major ordering. Dette valg er i overensstemmelse med den fremherskende standard inden for datalagring.
  • Stride: Striding understøttes ikke. Alle tensorer skal pakkes før serialisering. Denne designbeslutning blev truffet baseret på nuværende brugsmønstre i serialiserede formater.

Det ekstra gear

Udover blot at være et effektivt og sikkert datalagringsformat, bringer Safetensors også nogle yderligere fordele til bordet:

  • Forebyggelse af DOS-angreb: Designet af Safetensors mindsker risikoen for, at ondsindede filer forårsager DOS-angreb. Der er en grænse for headerens størrelse for at forhindre parsing af ekstremt stor JSON, og der er en garanti for, at adresser i filen ikke overlapper, hvilket betyder, at indlæsning af en fil aldrig bør overstige filens størrelse i hukommelsen.
  • Hurtigere indlæsning: Safetensors omgår den ekstra CPU-kopi i PyTorch, hvilket muliggør ekstremt hurtige CPU-indlæsningstider sammenlignet med pickle. GPU-indlæsningstider er lige så hurtige eller hurtigere end deres PyTorch-ækvivalent.
  • Lazy Loading: I distribuerede opsætninger (multi-node eller multi-gpu) muliggør Safetensors indlæsning af kun en del af tensorerne, hvilket markant fremskynder modelindlæsningstider og forbedrer feedbackloops i udviklingen.

I brug

Safetensors oplever allerede bred udbredelse hos førende AI-virksomheder som  Hugging FaceEleutherAI, og StabilityAI. Adskillige fremtrædende projekter, der anvender Safetensors, inkluderer:

Konklusionen er, at Safetensors, med sit unikke sæt af funktioner og fordele, er klar til at blive en game-changer i verdenen af maskinlæring og datalagring. Så prøv det endelig – fremtiden for modelfformater venter på dig!

Skriv kommentar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *