A Safetensors egy figyelemre méltó modellformátum, amelyet a tenzorok biztonságos tárolására terveztek, és amely lenyűgöző sebességet és teljesítményt nyújt a területen található számos alternatívához képest. A Safetensors nemcsak hihetetlenül gyors, hanem egyszerűséggel és biztonsággal is tervezték, ami megkülönbözteti a gépi tanulásban használt hagyományos formátumoktól.
Miért érdemes a Safetensors-t választani?
A gépi tanuláshoz és adattároláshoz rendelkezésre álló formátumok bőségében felmerülhet a kérdés, hogy mi különbözteti meg a Safetensors-t. Nos, szánjunk egy pillanatot néhány ilyen formátum összehasonlítására, hogy megértsük, hogyan teljesít a Safetensors a legfontosabb paraméterek tekintetében:
- Biztonságos: Véletlenszerűen letöltött fájl nem futtat tetszőleges kódot?
- Nulla-másolat: A fájl olvasásához több memóriára van szükség, mint az eredeti fájl?
- Lusta betöltés: A fájl megvizsgálható anélkül, hogy mindent be kellene tölteni? És betölthető belőle csak néhány tenzor anélkül, hogy az egész fájlt be kellene szkennelni (fontos elosztott környezetben)?
- Elrendezés szabályozása: Szabályozható a tenzorok helye a fájlon belül az egyes tenzorokhoz való gyors hozzáférés érdekében?
- Nincs fájlméret-korlát: Van fájlméret-korlát?
- Rugalmasság: Elmenthető egyéni kód a formátumban, és később nulla extra kóddal használható?
- Bfloat16: Támogatja a formátum a natív bfloat16-ot furcsa kerülőutak nélkül?
Minden ✔ szimbólum egy funkció jelenlétét, a ❌ a hiányát, a ~ a részleges jelenlétét, a ? pedig az ismeretlen jelenlétét jelzi.
Formátum | Biztonságos | Nulla-másolat | Lusta betöltés | Nincs fájlméret-korlát | Elrendezés szabályozása | Rugalmasság | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Az összehasonlításból látható, hogy a Safetensors megfelel vagy felülmúlja a többi modellformátum által kínált funkciókat. Különösen figyelemre méltó a „nulla-másolat” adatmanipulációs képessége és a lusta betöltés, amelyek jelentősen növelhetik az adatok kezelésének hatékonyságát a gépi tanulási feladatokban.
Néhány figyelemre méltó összehasonlítás
Bár minden formátumnak megvannak a maga egyedi erősségei, vizsgáljuk meg, hogyan teljesít a Safetensors néhány gyakoribb formátumhoz képest:
- Pickle (PyTorch): Széles körben használt formátum, de a pickle jelentős hátránnyal jár – nem biztonságos, mivel lehetővé teszi tetszőleges kódok végrehajtását.
- H5 (Tensorflow): Bár biztonságos, nem támogatja a nulla-másolatot, ami az hatékony adatmanipuláció elengedhetetlen funkciója.
- SavedModel (Tensorflow): Ez a formátum specifikus a Tensorflowhoz, és hiányzik belőle a rugalmasság más alkalmazásokhoz.
- Numpy (npz): Bár népszerű, ez a formátum nem támogatja a bfloat16-ot, ami egyre fontosabb funkció az ML világában.
A Safetensors motorházteteje alatt
Ha egy kicsit mélyebbre ásunk a Safetensors-ban, azt tapasztaljuk, hogy ez nem csak egy adatformátum, hanem átgondolt tervezési döntések kombinációja, amelyek fokozzák a biztonságot, a hatékonyságot és a hasznosságot:
- Nulla-másolat: A Safetensors tervezése valódi nulla-másolatot tesz lehetővé a CPU-n, ha a fájl már a gyorsítótárban van. GPU-n, bár mindig szükséges másolat a lemezes gyorsítótár hiánya miatt, a tervezés megkerüli azt, hogy minden tenzort a CPU-n kelljen lefoglalni egy adott ponton.
- Bájtsorrend: A Safetensors little-endian bájtsorrendet használ, ami népszerű választás az adattárolásban.
- Sorrend: ‘C’ vagy sorfolytonos rendezést alkalmaz. Ez a választás megfelel az adattárolásban elterjedt szabványnak.
- Lépték: A léptékezés nem támogatott. Minden tenzort csomagolni kell a szerializálás előtt. Ezt a tervezési döntést a szerializált formátumokban jelenleg elterjedt használati minták alapján hozták meg.
A ráadás
Amellett, hogy hatékony és biztonságos adattárolási formátum, a Safetensors további előnyöket is kínál:
- DOS-támadások megelőzése: A Safetensors kialakítása csökkenti a rosszindulatú fájlok által okozott DOS-támadások lehetőségét. A fejléc méretére korlátozás vonatkozik a rendkívül nagy JSON-ok elemzésének megakadályozása érdekében, és garantált, hogy a fájlban lévő címek nem fedik egymást, ami azt jelenti, hogy egy fájl betöltése soha nem haladhatja meg a fájl méretét a memóriában.
- Gyorsabb betöltés: A Safetensors megkerüli az extra CPU-másolatot a PyTorchben, ami rendkívül gyors CPU-betöltési időt tesz lehetővé a pickle-hez képest. A GPU-betöltési idők ugyanolyan gyorsak vagy gyorsabbak, mint a PyTorch megfelelőjüké.
- Lusta betöltés: Elosztott környezetben (több csomópont vagy több GPU), a Safetensors lehetővé teszi a tenzorok csak egy részének betöltését, ami jelentősen felgyorsítja a modell betöltési idejét és javítja a fejlesztési visszacsatolási ciklusokat.
A valóságban
A Safetensors már széles körben elterjedt a vezető mesterséges intelligencia vállalkozásoknál, mint például a Hugging Face, EleutherAI, és StabilityAI. Számos kiemelkedő projekt használja a Safetensors-t, köztük:
- 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
Összefoglalva, a Safetensors egyedi funkcióival és előnyeivel minden adott ahhoz, hogy meghatározó szereplővé váljon a gépi tanulás és az adattárolás világában. Tehát hajrá, és próbálja ki – a modellformátumok jövője várja Önt!