Safetensors je izvanredan format modela osmišljen za sigurno pohranjivanje tenzora, koji se može pohvaliti impresivnom brzinom i performansama u usporedbi s mnogim alternativama u tom području. Safetensors nije samo nevjerojatno brz, već je i projektiran s jednostavnošću i sigurnošću u svojoj srži, što ga izdvaja od mnogih tradicionalnih formata koji se koriste u strojnom učenju.
Zašto odabrati Safetensors?
S mnoštvom formata dostupnih za strojno učenje i pohranu podataka, možda se pitate po čemu se Safetensors ističe. Pa, odvojimo trenutak da usporedimo neke od tih formata kako bismo razumjeli kako Safetensors ispunjava ključne parametre:
- Sigurnost: Hoće li datoteka preuzeta nasumično pokrenuti proizvoljni kod?
- Zero-copy: Zahtijeva li čitanje datoteke više memorije od izvorne datoteke?
- Lijeno učitavanje: Može li se datoteka pregledati bez učitavanja svega? I mogu li se učitati samo neki tenzori u njoj bez skeniranja cijele datoteke (što je važno u distribuiranom okruženju)?
- Kontrola izgleda: Može li se kontrolirati položaj tenzora unutar datoteke kako bi se osigurao brz pristup pojedinačnim tenzorima?
- Nema ograničenja veličine datoteke: Postoji li ograničenje veličine datoteke?
- Fleksibilnost: Može li se prilagođeni kod spremiti u formatu i koristiti kasnije bez dodatnog koda?
- Bfloat16: Podržava li format izvorni bfloat16 bez potrebe za čudnim zaobilaznim rješenjima?
Svaki simbol ✔ predstavlja prisutnost, ❌ odsutnost, ~ djelomičnu prisutnost, a ? nepoznatu prisutnost značajke.
Format | Sigurnost | Zero-copy | Lijeno učitavanje | Nema ograničenja veličine datoteke | Kontrola izgleda | Fleksibilnost | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Iz ove usporedbe možete vidjeti da Safetensors zadovoljava ili nadmašuje značajke koje nude drugi formati modela. Posebno je vrijedna pažnje njegova sposobnost za “zero-copy” manipulaciju podacima i lijeno učitavanje, što može značajno povećati učinkovitost rukovanja podacima u zadacima strojnog učenja.
Neke značajne usporedbe
Iako svi formati imaju svoje jedinstvene prednosti, pogledajmo kako se Safetensors ponaša u usporedbi s nekim od najčešće korištenih:
- Pickle (PyTorch): Široko korišten format, ali pickle ima značajan nedostatak – nesiguran je jer omogućuje izvršavanje proizvoljnog koda.
- H5 (Tensorflow): Iako je siguran, ne podržava zero-copy, značajku koja je sastavni dio učinkovite manipulacije podacima.
- SavedModel (Tensorflow): Ovaj je format specifičan za Tensorflow i nema fleksibilnost za druge aplikacije.
- Numpy (npz): Iako je popularan, ovaj format ne podržava bfloat16, značajku koja je sve važnija u svijetu strojnog učenja.
Ispod haube Safetensorsa
Zadirući malo dublje u Safetensors, otkrivamo da to nije samo format podataka, već kombinacija promišljenih dizajnerskih izbora koji poboljšavaju sigurnost, učinkovitost i korisnost:
- Zero-copy: Dizajn Safetensorsa omogućuje pravi zero-copy na CPU-u ako je datoteka već u predmemoriji. Na GPU-u, iako je kopija uvijek potrebna zbog nedostatka predmemorije diska, dizajn zaobilazi potrebu za dodjelom svih tenzora na CPU-u u bilo kojem trenutku.
- Endianness: Safetensors koristi little-endian poredak, popularan izbor u pohrani podataka.
- Redoslijed: Usvaja ‘C’ ili row-major poredak. Ovaj je izbor u skladu s prevladavajućim standardom u pohrani podataka.
- Stride: Striding nije podržan. Svi tenzori moraju biti zapakirani prije serijalizacije. Ova je odluka o dizajnu donesena na temelju trenutnih obrazaca upotrebe u serijaliziranim formatima.
Dodatni korak
Osim što je učinkovit i siguran format za pohranu podataka, Safetensors donosi i neke dodatne prednosti:
- Sprečavanje DOS napada: Dizajn Safetensorsa ublažava mogućnost da zlonamjerne datoteke uzrokuju DOS napade. Postoji ograničenje veličine zaglavlja kako bi se spriječilo parsiranje iznimno velikog JSON-a, a postoji i jamstvo da se adrese u datoteci ne preklapaju, što znači da učitavanje datoteke nikada ne bi smjelo premašiti veličinu datoteke u memoriji.
- Brže učitavanje: Safetensors zaobilazi dodatnu kopiju CPU-a u PyTorchu, omogućujući iznimno brzo vrijeme učitavanja CPU-a u usporedbi s pickleom. Vrijeme učitavanja GPU-a jednako je brzo ili brže od ekvivalenta u PyTorchu.
- Lijeno učitavanje: U distribuiranom okruženju (više čvorova ili više GPU-ova), Safetensors omogućuje učitavanje samo dijela tenzora, što značajno ubrzava vrijeme učitavanja modela i poboljšava petlje povratnih informacija o razvoju.
U divljini
Safetensors se već uvelike koristi u vodećim AI tvrtkama kao što su Hugging Face, EleutherAI i StabilityAI. Nekoliko istaknutih projekata koji koriste Safetensors uključuju:
- 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
Zaključno, Safetensors, sa svojim jedinstvenim skupom značajki i prednosti, spreman je postati prekretnica u svijetu strojnog učenja i pohrane podataka. Stoga, samo naprijed i isprobajte ga – budućnost formata modela vas čeka!