Safetensors je pozoruhodný formát modelu určený pro bezpečné ukládání tenzorů, který se ve srovnání s mnoha alternativami v oboru pyšní impozantní rychlostí a výkonem. Safetensors je nejen neuvěřitelně rychlý, ale byl také navržen s ohledem na jednoduchost a bezpečnost, což ho odlišuje od mnoha tradičních formátů používaných v oblasti strojového učení.
Proč si vybrat Safetensors?
Vzhledem k množství formátů dostupných pro strojové učení a ukládání dat se možná ptáte, čím se Safetensors liší. Pojďme se na chvíli zastavit a porovnat některé z těchto formátů, abychom pochopili, jak Safetensors obstojí v klíčových parametrech:
- Bezpečný: Spustí náhodně stažený soubor libovolný kód?
- Zero-copy (bez kopírování): Vyžaduje čtení souboru více paměti než původní soubor?
- Lazy loading (líné načítání): Lze soubor zkontrolovat bez načtení všeho? A lze načíst pouze některé tenzory v něm bez prohledávání celého souboru (důležité v distribuovaném prostředí)?
- Kontrola rozložení: Lze řídit umístění tenzorů v souboru, aby byl zajištěn rychlý přístup k jednotlivým tenzorům?
- Žádný limit velikosti souboru: Existuje limit velikosti souboru?
- Flexibilita: Lze do formátu uložit vlastní kód a později ho použít bez jakéhokoli dalšího kódu?
- Bfloat16: Podporuje formát nativně bfloat16 bez nutnosti podivných obezliček?
Každý symbol ✔ představuje přítomnost funkce, ❌ nepřítomnost, ~ částečnou přítomnost a ? neznámou přítomnost.
Formát | Bezpečný | Zero-copy | Lazy loading | Žádný limit velikosti souboru | Kontrola rozložení | Flexibilita | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Z tohoto srovnání je vidět, že Safetensors splňuje nebo překonává funkce nabízené jinými formáty modelů. Zvláště pozoruhodná je jeho schopnost ‚zero-copy‘ manipulace s daty a líného načítání, což může významně zvýšit efektivitu zpracování dat v úlohách strojového učení.
Některá pozoruhodná srovnání
Zatímco všechny formáty mají své jedinečné silné stránky, pojďme se podívat, jak si Safetensors stojí v porovnání s některými běžněji používanými:
- Pickle (PyTorch): Široce používaný formát, ale pickle má významnou nevýhodu – je nebezpečný, protože umožňuje spouštění libovolného kódu.
- H5 (Tensorflow): I když je bezpečný, nepodporuje zero-copy, funkci zásadní pro efektivní manipulaci s daty.
- SavedModel (Tensorflow): Tento formát je specifický pro Tensorflow a postrádá flexibilitu pro jiné aplikace.
- Numpy (npz): I když je populární, tento formát nepodporuje bfloat16, což je stále důležitější funkce ve světě ML.
Pod kapotou Safetensors
Ponoříme-li se trochu hlouběji do Safetensors, zjistíme, že se nejedná jen o datový formát, ale o kombinaci promyšlených konstrukčních rozhodnutí, která zvyšují bezpečnost, efektivitu a užitečnost:
- Zero-copy (bez kopírování): Návrh Safetensors umožňuje skutečné zero-copy na CPU, pokud je soubor již v mezipaměti. Na GPU, i když je kopie vždy nutná kvůli absenci diskové mezipaměti, návrh obchází potřebu alokovat všechny tenzory na CPU v daném okamžiku.
- Endianita: Safetensors používá little-endian pořadí, což je oblíbená volba v ukládání dat.
- Pořadí: Přijímá ‚C‘ neboli řádkové pořadí. Tato volba se shoduje s převládajícím standardem v ukládání dat.
- Krok: Krok není podporován. Všechny tenzory musí být zabaleny před serializací. Toto konstrukční rozhodnutí bylo učiněno na základě současných vzorců použití v serializovaných formátech.
Něco navíc
Kromě toho, že je Safetensors efektivní a bezpečný formát pro ukládání dat, přináší také některé další výhody:
- Prevence útoků DOS: Návrh Safetensors zmírňuje možnost, že by škodlivé soubory mohly způsobit útoky DOS. Existuje limit na velikost hlavičky, aby se zabránilo parsování extrémně velkých souborů JSON, a existuje záruka, že se adresy v souboru nepřekrývají, což znamená, že načtení souboru by nikdy nemělo překročit velikost souboru v paměti.
- Rychlejší načítání: Safetensors obchází extra kopii CPU v PyTorch, což umožňuje extrémně rychlé časy načítání CPU ve srovnání s pickle. Časy načítání GPU jsou stejně rychlé nebo rychlejší než jejich ekvivalent v PyTorch.
- Lazy Loading (líné načítání): V distribuovaných prostředích (víceuzlových nebo vícejádrových GPU) umožňuje Safetensors načítat pouze část tenzorů, což výrazně urychluje časy načítání modelů a zlepšuje zpětnovazební smyčky vývoje.
V praxi
Safetensors se již široce používá u předních podniků v oblasti AI, jako jsou Hugging Face, EleutherAI, a StabilityAI. Mezi významné projekty využívající Safetensors patří:
- 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
Závěrem lze říci, že Safetensors se svým jedinečným souborem funkcí a výhod má všechny předpoklady stát se revoluční novinkou ve světě strojového učení a ukládání dat. Tak neváhejte a vyzkoušejte ho – budoucnost formátů modelů na vás čeká!