Safetensors je izvanredan format modela dizajniran za bezbedno skladištenje tenzora, koji se može pohvaliti impresivnom brzinom i performansama u poređenju sa mnogim alternativama u ovoj oblasti. Ne samo da je Safetensors neverovatno brz, već je takođe projektovan sa jednostavnošću i bezbednošću u svom jezgru, što ga izdvaja od mnogih tradicionalnih formata koji se koriste u mašinskom učenju.
Zašto izabrati Safetensors?
Sa mnoštvom formata dostupnih za mašinsko učenje i skladištenje podataka, možda se pitate po čemu se Safetensors izdvaja. Pa, hajde da odvojimo trenutak da uporedimo neke od ovih formata kako bismo razumeli kako Safetensors ispunjava ključne parametre:
- Bezbednost: Da li nasumično preuzet fajl neće pokrenuti proizvoljni kod?
- Nulti kopiranje (Zero-copy): Da li čitanje fajla zahteva više memorije od originalnog fajla?
- Učitavanje na zahtev (Lazy loading): Da li fajl može da se pregleda bez učitavanja svega? I da li mogu da se učitaju samo neki tenzori iz njega bez skeniranja celog fajla (važno u distribuiranom okruženju)?
- Kontrola rasporeda: Da li lokacija tenzora unutar fajla može da se kontroliše kako bi se osigurao brz pristup pojedinačnim tenzorima?
- Bez ograničenja veličine fajla: Da li postoji ograničenje veličine fajla?
- Fleksibilnost: Da li se prilagođeni kod može sačuvati u formatu i koristiti kasnije bez dodatnog koda?
- Bfloat16: Da li format podržava izvorni bfloat16 bez potrebe za čudnim zaobilaznicama?
Svaki simbol ✔ predstavlja prisustvo, ❌ odsustvo, ~ delimično prisustvo i ? nepoznato prisustvo funkcije.
Format | Bezbednost | Nulti kopiranje (Zero-copy) | Učitavanje na zahtev (Lazy loading) | Bez ograničenja veličine fajla | Kontrola rasporeda | Fleksibilnost | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Iz ovog poređenja možete videti da Safetensors ispunjava ili premašuje funkcije koje nude drugi formati modela. Posebno se ističe po svojoj sposobnosti za manipulaciju podacima ‘nultim kopiranjem’ i učitavanje na zahtev, što može značajno da poveća efikasnost rukovanja podacima u zadacima mašinskog učenja.
Neka značajna poređenja
Iako svi formati imaju svoje jedinstvene prednosti, hajde da ispitamo kako se Safetensors nosi sa nekim od češće korišćenih:
- Pickle (PyTorch): Široko rasprostranjen format, ali pickle ima značajan nedostatak – nesiguran je jer omogućava izvršavanje proizvoljnog koda.
- H5 (Tensorflow): Iako je siguran, ne podržava nulti kopiranje, funkciju koja je ključna za efikasnu manipulaciju podacima.
- SavedModel (Tensorflow): Ovaj format je specifičan za Tensorflow i nedostaje mu fleksibilnost za druge primene.
- Numpy (npz): Iako je popularan, ovaj format ne podržava bfloat16, sve važniju funkciju u svetu ML-a.
Ispod haube Safetensors-a
Zaranjajući malo dublje u Safetensors, otkrivamo da to nije samo format podataka, već kombinacija promišljenih dizajnerskih odluka koje poboljšavaju bezbednost, efikasnost i korisnost:
- Nulti kopiranje (Zero-copy): Dizajn Safetensors-a omogućava pravi nulti kopiranje na CPU-u ako je fajl već u kešu. Na GPU-u, iako je kopiranje uvek neophodno zbog odsustva keša na disku, dizajn zaobilazi potrebu za alociranjem svih tenzora na CPU-u u bilo kom trenutku.
- Redosled bajtova (Endianness): Safetensors koristi mali redosled bajtova (little-endian ordering), popularan izbor u skladištenju podataka.
- Redosled (Order): On usvaja ‘C’ ili redosled po redovima (row-major ordering). Ovaj izbor je u skladu sa preovlađujućim standardom u skladištenju podataka.
- Korak (Stride): Korak nije podržan. Svi tenzori moraju biti spakovani pre serijalizacije. Ova dizajnerska odluka je doneta na osnovu trenutnih obrazaca upotrebe u serijalizovanim formatima.
Dodatni napor
Osim što je jednostavno efikasan i siguran format za skladištenje podataka, Safetensors takođe donosi na sto neke dodatne prednosti:
- Sprečavanje DOS napada: Dizajn Safetensors-a ublažava mogućnost da zlonamerni fajlovi izazovu DOS napade. Postoji ograničenje veličine zaglavlja kako bi se sprečilo raščlanjivanje izuzetno velikog JSON-a, i postoji garancija da se adrese u fajlu ne preklapaju, što znači da učitavanje fajla nikada ne bi trebalo da premaši veličinu fajla u memoriji.
- Brže učitavanje: Safetensors zaobilazi dodatno CPU kopiranje u PyTorch-u, omogućavajući izuzetno brzo CPU vreme učitavanja u poređenju sa pickle-om. GPU vremena učitavanja su brza ili brža od njihovog PyTorch ekvivalenta.
- Učitavanje na zahtev (Lazy Loading): U distribuiranom okruženju (više čvorova ili više GPU-ova), Safetensors omogućava učitavanje samo dela tenzora, značajno ubrzavajući vreme učitavanja modela i poboljšavajući razvojne povratne petlje.
U divljini
Safetensors već doživljava široku primenu u vodećim AI preduzećima 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 funkcija i prednosti, spreman je da postane prekretnica u svetu mašinskog učenja i skladištenja podataka. Zato, samo napred, isprobajte ga – budućnost formata modela vas čeka!