Vad är Safetensors och varför är de bättre än .ckpt (pickletensor)

Kategoriserat som AI/ML, Open Source Märkt , , , , ,
Save and Share:

Safetensors är ett framstående modellformat utformat för säker lagring av tensorer, som stoltserar med imponerande hastighet och prestanda jämfört med många av alternativen på området. Safetensors är inte bara otroligt snabbt, utan det har också konstruerats med enkelhet och säkerhet i kärnan, vilket skiljer det från många traditionella format som används inom maskininlärning.

Varför välja Safetensors?

Med ett överflöd av format tillgängliga för maskininlärning och datalagring, kanske du undrar vad som gör Safetensors unikt. Låt oss ta en stund för att jämföra några av dessa format för att förstå hur Safetensors uppfyller viktiga kriterier:

  • Säkert: Kommer en slumpmässigt nedladdad fil inte att köra godtycklig kod?
  • Nollkopiering: Kräver läsning av filen mer minne än den ursprungliga filen?
  • Latent inläsning: Kan filen inspekteras utan att ladda in allt? Och kan endast vissa tensorer i den laddas in utan att skanna hela filen (viktigt i en distribuerad miljö)?
  • Layoutkontroll: Kan platsen för tensorer i filen kontrolleras för att säkerställa snabb åtkomst till enskilda tensorer?
  • Ingen filstorleksbegränsning: Finns det en begränsning av filstorleken?
  • Flexibilitet: Kan anpassad kod sparas i formatet och användas senare utan extra kod?
  • Bfloat16: Stöder formatet native bfloat16 utan behov av udda lösningar?

Varje symbol ✔ representerar närvaro, ❌ frånvaro, ~ partiell närvaro och ? okänd närvaro av en egenskap.

FormatSäkerNollkopieringLatent inläsningIngen filstorleksbegränsningLayoutkontrollFlexibilitetBfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

Av denna jämförelse framgår det att Safetensors uppfyller eller överträffar de funktioner som erbjuds av andra modellformat. Särskilt anmärkningsvärt är dess förmåga till datamanipulation med ’nollkopiering’ och latent inläsning, vilket avsevärt kan öka effektiviteten i datahanteringen inom maskininlärning.

Några anmärkningsvärda jämförelser

Medan alla formaten har sina unika styrkor, låt oss undersöka hur Safetensors jämför sig med några av de mest använda:

  • Pickle (PyTorch): Ett allmänt använt format, men pickle kommer med en betydande nackdel – det är osäkert eftersom det tillåter exekvering av godtycklig kod.
  • H5 (Tensorflow): Även om det är säkert, stöder det inte nollkopiering, en funktion som är avgörande för effektiv datamanipulation.
  • SavedModel (Tensorflow): Detta format är specifikt för Tensorflow och saknar flexibilitet för andra applikationer.
  • Numpy (npz): Även om det är populärt, stöder detta format inte bfloat16, en alltmer avgörande funktion i ML-världen.

Under huven på Safetensors

Om vi granskar Safetensors lite närmare finner vi att det inte bara är ett dataformat, utan en kombination av genomtänkta designval som förbättrar säkerhet, effektivitet och nytta:

  • Nollkopiering: Safetensors design möjliggör äkta nollkopiering på CPU om filen redan finns i cache. På GPU, även om en kopia alltid är nödvändig på grund av avsaknaden av diskcache, kringgår designen behovet av att allokera alla tensorer på CPU vid någon given tidpunkt.
  • Endianness: Safetensors använder little-endian ordning, ett populärt val inom datalagring.
  • Ordning: Det använder ’C’ eller radmajorordning. Detta val är i linje med den gängse standarden inom datalagring.
  • Stride: Striding stöds inte. Alla tensorer måste packas innan de serialiseras. Detta designbeslut fattades baserat på nuvarande användningsmönster i serialiserade format.

Det lilla extra

Utöver att bara vara ett effektivt och säkert datalagringsformat, tillför Safetensors också några extra fördelar:

  • Förebygga DOS-attacker: Safetensors design minskar risken för att skadliga filer orsakar DOS-attacker. Det finns en gräns för storleken på headern för att förhindra parsning av extremt stora JSON-filer, och det finns en garanti för att adresser i filen inte överlappar varandra, vilket innebär att inläsning av en fil aldrig bör överskrida filens storlek i minnet.
  • Snabbare inläsning: Safetensors kringgår den extra CPU-kopian i PyTorch, vilket möjliggör extremt snabba CPU-inläsningstider jämfört med pickle. GPU-inläsningstider är lika snabba eller snabbare än deras PyTorch-ekvivalent.
  • Latent inläsning: I distribuerade miljöer (multi-node eller multi-gpu) möjliggör Safetensors inläsning av endast en del av tensorerna, vilket avsevärt snabbar upp modellinläsningstider och förbättrar utvecklingsfeedbacken.

I det vilda

Safetensors ser redan en stor spridning hos ledande AI-företag som  Hugging FaceEleutherAI, och StabilityAI. Flera framstående projekt som använder Safetensors inkluderar:

Sammanfattningsvis är Safetensors, med sin unika uppsättning funktioner och fördelar, redo att bli en banbrytare inom maskininlärning och datalagring. Så varsågod, ge det en chans – framtiden för modellformat väntar på dig!

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *