„Safetensors“ yra išskirtinis modelių formatas, sukurtas saugiam tenzorių saugojimui. Jis pasižymi įspūdingu greičiu ir našumu, lyginant su daugeliu alternatyvų šioje srityje. „Safetensors“ yra ne tik neįtikėtinai greitas, bet ir sukurtas su paprastumu bei saugumu savo esmėje, o tai jį išskiria iš daugelio tradicinių formatų, naudojamų mašininiame mokyme.
Kodėl verta rinktis „Safetensors“?
Turint daugybę formatų, prieinamų mašininiam mokymuisi ir duomenų saugojimui, galbūt kyla klausimas, kas išskiria „Safetensors“. Taigi, skirkime šiek tiek laiko palyginti kai kuriuos iš šių formatų, kad suprastume, kaip „Safetensors“ pasižymi pagal pagrindinius parametrus:
- Saugu: ar atsitiktinai atsisiųstas failas nevykdys savavališko kodo?
- Nulinis kopijavimas: ar failo skaitymui reikia daugiau atminties nei originalus failas?
- Tingus įkėlimas: ar failą galima peržiūrėti neįkeliant visko? Ir ar galima įkelti tik kai kuriuos tenzorius jame, neskenuojant viso failo (svarbu paskirstytame nustatyme)?
- Išdėstymo kontrolė: ar galima kontroliuoti tenzorių vietą faile, siekiant užtikrinti greitą prieigą prie atskirų tenzorių?
- Nėra failo dydžio limito: ar yra failo dydžio limitas?
- Lankstumas: ar galima pasirinktinį kodą išsaugoti formatu ir vėliau naudoti be papildomo kodo?
- Bfloat16: ar formatas palaiko gimtąjį bfloat16 be keistų apėjimų?
Kiekvienas simbolis ✔ žymi buvimą, ❌ nebuvimą, ~ dalinį buvimą ir ? nežinomą funkcijos buvimą.
Formatas | Saugu | Nulinis kopijavimas | Tingus įkėlimas | Nėra failo dydžio limito | Išdėstymo kontrolė | Lankstumas | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Iš šio palyginimo galite matyti, kad „Safetensors“ atitinka arba viršija kitų modelių formatų siūlomas funkcijas. Jis ypač vertas dėmesio dėl savo „nulinio kopijavimo“ duomenų manipuliavimo ir tingaus įkėlimo galimybių, kurios gali žymiai padidinti duomenų tvarkymo efektyvumą mašininio mokymo užduotyse.
Kai kurie svarbūs palyginimai
Nors visi formatai turi savo unikalių pranašumų, panagrinėkime, kaip „Safetensors“ pasirodo lyginant su kai kuriais dažniau naudojamais formatais:
- „Pickle“ („PyTorch“): Plačiai naudojamas formatas, tačiau „pickle“ turi reikšmingą trūkumą – jis yra nesaugus, nes leidžia vykdyti savavališką kodą.
- H5 („Tensorflow“): Nors saugus, jis nepalaiko nulinio kopijavimo, funkcijos, kuri yra esminė efektyviam duomenų manipuliavimui.
- „SavedModel“ („Tensorflow“): Šis formatas yra specifinis „Tensorflow“ ir trūksta lankstumo kitoms programoms.
- „Numpy“ (npz): Nors populiarus, šis formatas nepalaiko bfloat16, vis svarbesnės funkcijos ML pasaulyje.
„Safetensors“ viduje
Gilinantis šiek tiek giliau į „Safetensors“, pastebime, kad tai nėra tik duomenų formatas, bet ir apgalvotų dizaino sprendimų derinys, kuris pagerina saugumą, efektyvumą ir naudingumą:
- Nulinis kopijavimas: „Safetensors“ dizainas leidžia tikrą nulinį kopijavimą CPU, jei failas jau yra talpykloje. GPU, nors kopija visada būtina dėl disko talpyklos nebuvimo, dizainas apeina poreikį bet kuriuo metu paskirti visus tenzorius CPU.
- Baitų tvarka: „Safetensors“ naudoja mažąją baitų tvarką, populiarų pasirinkimą duomenų saugojimui.
- Tvarka: Jis naudoja „C“ arba eilutės pagrindo tvarką. Šis pasirinkimas atitinka vyraujantį standartą duomenų saugojime.
- Žingsnis: Žingsniavimas nepalaikomas. Visi tenzoriai turi būti supakuoti prieš serijuojant. Šis dizaino sprendimas buvo priimtas remiantis dabartiniais naudojimo modeliais serijuotuose formatuose.
Papildomas žingsnis
Be to, kad yra efektyvus ir saugus duomenų saugojimo formatas, „Safetensors“ taip pat suteikia keletą papildomų privalumų:
- Apsauga nuo DOS atakų: „Safetensors“ dizainas sumažina galimybę, kad kenkėjiški failai sukels DOS atakas. Yra antraštės dydžio limitas, siekiant išvengti itin didelio JSON analizavimo, ir garantija, kad adresai faile nesutampa, o tai reiškia, kad failo įkėlimas niekada neturėtų viršyti failo dydžio atmintyje.
- Greitesnis įkėlimas: „Safetensors“ apeina papildomą CPU kopiją „PyTorch“, leidžiančią pasiekti itin greitą CPU įkėlimo laiką, palyginti su „pickle“. GPU įkėlimo laikas yra toks pat greitas arba greitesnis nei „PyTorch“ atitikmuo.
- Tingus įkėlimas: Paskirstytuose nustatymuose (kelių mazgų arba kelių GPU), „Safetensors“ leidžia įkelti tik dalį tenzorių, žymiai pagreitindamas modelių įkėlimo laiką ir pagerindamas kūrimo grįžtamojo ryšio ciklus.
Panaudojimas realiame pasaulyje
„Safetensors“ jau plačiai naudojami pirmaujančiose dirbtinio intelekto įmonėse, tokiose kaip Hugging Face, EleutherAI, ir StabilityAI. Tarp žymių projektų, naudojančių „Safetensors“, yra:
- 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
Apibendrinant, „Safetensors“ su savo unikaliu funkcijų ir privalumų rinkiniu yra pasirengęs tapti žaidimo keitikliu mašininio mokymo ir duomenų saugojimo pasaulyje. Taigi, pirmyn, išbandykite – modelių formatų ateitis laukia jūsų!