Safetensors je pozoruhodný formát modelu navrhnutý na bezpečné ukladanie tenzorov, ktorý sa môže pochváliť pôsobivou rýchlosťou a výkonom v porovnaní s mnohými alternatívami v tejto oblasti. Safetensors je nielen neuveriteľne rýchly, ale bol skonštruovaný aj s ohľadom na jednoduchosť a bezpečnosť, čím sa odlišuje od mnohých tradičných formátov používaných v strojovom učení.
Prečo si vybrať Safetensors?
Vzhľadom na množstvo formátov dostupných pre strojové učenie a ukladanie dát sa možno pýtate, čím sa Safetensors odlišuje. Poďme si teda porovnať niektoré z týchto formátov, aby sme pochopili, ako Safetensors spĺňa kľúčové parametre:
- Bezpečný: Nebude náhodne stiahnutý súbor spúšťať svojvoľný kód?
- Bez kopírovania (Zero-copy): Vyžaduje čítanie súboru viac pamäte ako pôvodný súbor?
- Pomalé načítavanie (Lazy loading): Dá sa súbor skontrolovať bez načítania všetkého? A dajú sa načítať len niektoré tenzory bez skenovania celého súboru (čo je dôležité v distribuovanom prostredí)?
- Kontrola rozloženia: Dá sa kontrolovať umiestnenie tenzorov v súbore, aby sa zabezpečil rýchly prístup k jednotlivým tenzorom?
- Žiadny limit veľkosti súboru: Existuje limit veľkosti súboru?
- Flexibilita: Dá sa do formátu uložiť vlastný kód a použiť ho neskôr bez akéhokoľvek ďalšieho kódu?
- Bfloat16: Podporuje formát natívne bfloat16 bez potreby zvláštnych obchádzok?
Každý symbol ✔ predstavuje prítomnosť funkcie, ❌ neprítomnosť, ~ čiastočnú prítomnosť a ? neznámu prítomnosť.
Formát | Bezpečný | Bez kopírovania (Zero-copy) | Pomalé načítavanie (Lazy loading) | Žiadny limit veľkosti súboru | Kontrola rozloženia | Flexibilita | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Z tohto porovnania môžete vidieť, že Safetensors spĺňa alebo prekonáva funkcie, ktoré ponúkajú iné formáty modelov. Je obzvlášť pozoruhodný svojou schopnosťou manipulácie s dátami „bez kopírovania“ a pomalého načítavania, čo môže výrazne zvýšiť efektívnosť spracovania dát v úlohách strojového učenia.
Niektoré pozoruhodné porovnania
Hoci všetky formáty majú svoje jedinečné silné stránky, poďme sa pozrieť na to, ako sa Safetensors darí v porovnaní s niektorými z bežnejšie používaných:
- Pickle (PyTorch): Široko používaný formát, ale pickle má značnú nevýhodu – je nebezpečný, pretože umožňuje vykonávanie svojvoľného kódu.
- H5 (Tensorflow): Hoci je bezpečný, nepodporuje zero-copy, funkciu neoddeliteľnú pre efektívnu manipuláciu s dátami.
- SavedModel (Tensorflow): Tento formát je špecifický pre Tensorflow a postráda flexibilitu pre iné aplikácie.
- Numpy (npz): Hoci je populárny, tento formát nepodporuje bfloat16, čo je čoraz dôležitejšia funkcia vo svete ML.
Pod kapotou Safetensors
Ak sa trochu hlbšie ponoríme do Safetensors, zistíme, že to nie je len dátový formát, ale kombinácia premyslených konštrukčných rozhodnutí, ktoré zvyšujú bezpečnosť, efektivitu a užitočnosť:
- Bez kopírovania (Zero-copy): Dizajn Safetensors umožňuje skutočné zero-copy na CPU, ak je súbor už v cache. Na GPU, hoci je kopírovanie vždy nevyhnutné z dôvodu absencie diskovej cache, dizajn obchádza potrebu alokovať všetky tenzory na CPU v danom bode.
- Endianita: Safetensors používa little-endian poradie bajtov, čo je obľúbená voľba pri ukladaní dát.
- Poradie: Prijíma poradie „C“ alebo row-major. Táto voľba je v súlade s prevládajúcim štandardom pri ukladaní dát.
- Krok (Stride): Krokovanie nie je podporované. Všetky tenzory musia byť pred serializáciou zbalené. Toto konštrukčné rozhodnutie bolo urobené na základe súčasných vzorov používania v serializovaných formátoch.
O krok ďalej
Okrem toho, že je Safetensors efektívny a bezpečný formát na ukladanie dát, prináša so sebou aj niektoré ďalšie výhody:
- Prevencia útokov DOS: Dizajn Safetensors zmierňuje možnosť, že škodlivé súbory spôsobia útoky DOS. Existuje limit na veľkosť hlavičky, aby sa zabránilo parsovaniu extrémne veľkého JSON, a existuje záruka, že adresy v súbore sa neprekrývajú, čo znamená, že načítanie súboru by nikdy nemalo presiahnuť veľkosť súboru v pamäti.
- Rýchlejšie načítanie: Safetensors obchádza extra kópiu CPU v PyTorch, čo umožňuje extrémne rýchle časy načítania CPU v porovnaní s pickle. Časy načítania GPU sú rovnako rýchle alebo rýchlejšie ako ich ekvivalent v PyTorch.
- Pomalé načítavanie (Lazy Loading): V distribuovaných nastaveniach (multi-node alebo multi-gpu) umožňuje Safetensors načítavať len časť tenzorov, čo výrazne urýchľuje časy načítania modelu a zlepšuje vývojové slučky spätnej väzby.
V praxi
Safetensors sa už vo veľkej miere používa v popredných podnikoch v oblasti umelej inteligencie, ako napríklad Hugging Face, EleutherAI, a StabilityAI. Medzi niekoľko významných projektov, ktoré využívajú Safetensors, patria:
- 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
Na záver, Safetensors so svojou jedinečnou sadou funkcií a výhod je pripravený stať sa prevratnou novinkou vo svete strojového učenia a ukladania dát. Takže smelo do toho a vyskúšajte si ho – čaká na vás budúcnosť formátov modelov!