Safetensors to znakomity format modelu przeznaczony do bezpiecznego przechowywania tensorów, charakteryzujący się imponującą szybkością i wydajnością w porównaniu z wieloma alternatywami w tej dziedzinie. Safetensors jest nie tylko niezwykle szybki, ale także zaprojektowany z myślą o prostocie i bezpieczeństwie, co odróżnia go od wielu tradycyjnych formatów używanych w uczeniu maszynowym.
Dlaczego warto wybrać Safetensors?
Przy tak wielu formatach dostępnych dla uczenia maszynowego i przechowywania danych, możesz się zastanawiać, co wyróżnia Safetensors. Przyjrzyjmy się niektórym z tych formatów, aby zrozumieć, jak Safetensors wypada pod względem kluczowych parametrów:
- Bezpieczeństwo: Czy losowo pobrany plik nie uruchomi dowolnego kodu?
- Zero-copy: Czy odczytanie pliku wymaga więcej pamięci niż sam plik?
- Lazy loading: Czy można sprawdzić plik bez ładowania wszystkiego? Czy można załadować tylko niektóre tensory bez skanowania całego pliku (ważne w środowisku rozproszonym)?
- Kontrola układu: Czy można kontrolować położenie tensorów w pliku, aby zapewnić szybki dostęp do poszczególnych tensorów?
- Brak limitu rozmiaru pliku: Czy istnieje limit rozmiaru pliku?
- Elastyczność: Czy można zapisać niestandardowy kod w formacie i użyć go później bez dodatkowego kodu?
- Bfloat16: Czy format obsługuje natywny bfloat16 bez potrzeby stosowania dziwnych obejść?
Każdy symbol ✔ oznacza obecność funkcji, ❌ jej brak, ~ częściową obecność, a ? nieznaną obecność.
Format | Bezpieczny | Zero-copy | Lazy loading | Brak limitu rozmiaru pliku | Kontrola układu | Elastyczność | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Z tego porównania widać, że Safetensors spełnia lub przewyższa funkcje oferowane przez inne formaty modeli. Jest szczególnie godny uwagi ze względu na możliwość manipulacji danymi typu „zero-copy” i leniwe ładowanie, co może znacząco zwiększyć efektywność przetwarzania danych w zadaniach uczenia maszynowego.
Kilka wartych uwagi porównań
Chociaż wszystkie formaty mają swoje unikalne zalety, przyjrzyjmy się, jak Safetensors wypada w porównaniu z niektórymi z najczęściej używanych:
- Pickle (PyTorch): Powszechnie używany format, ale pickle ma znaczącą wadę – jest niebezpieczny, ponieważ umożliwia wykonanie dowolnego kodu.
- H5 (Tensorflow): Chociaż bezpieczny, nie obsługuje zero-copy, funkcji integralnej dla wydajnej manipulacji danymi.
- SavedModel (Tensorflow): Ten format jest specyficzny dla Tensorflow i brakuje mu elastyczności w przypadku innych zastosowań.
- Numpy (npz): Chociaż popularny, ten format nie obsługuje bfloat16, coraz ważniejszej funkcji w świecie ML.
Co kryje się pod maską Safetensors
Zagłębiając się w Safetensors, odkrywamy, że to nie tylko format danych, ale połączenie przemyślanych wyborów projektowych, które zwiększają bezpieczeństwo, wydajność i użyteczność:
- Zero-copy: Konstrukcja Safetensors umożliwia prawdziwe zero-copy na procesorze, jeśli plik znajduje się już w pamięci podręcznej. W przypadku GPU, chociaż kopia jest zawsze konieczna ze względu na brak pamięci podręcznej dysku, konstrukcja omija potrzebę alokowania wszystkich tensorów na procesorze w dowolnym momencie.
- Kolejność bajtów: Safetensors używa kolejności little-endian, popularnego wyboru w przechowywaniu danych.
- Kolejność: Przyjmuje kolejność „C” lub wierszową. Ten wybór jest zgodny z rozpowszechnionym standardem w przechowywaniu danych.
- Krok: Kroczenie nie jest obsługiwane. Wszystkie tensory muszą zostać spakowane przed serializacją. Ta decyzja projektowa została podjęta na podstawie bieżących wzorców użytkowania w formatach serializowanych.
Krok dalej
Oprócz tego, że jest wydajnym i bezpiecznym formatem przechowywania danych, Safetensors wnosi również kilka dodatkowych zalet:
- Zapobieganie atakom DOS: Konstrukcja Safetensors ogranicza możliwość spowodowania ataków DOS przez złośliwe pliki. Istnieje limit rozmiaru nagłówka, aby zapobiec analizowaniu bardzo dużego JSON, a także gwarancja, że adresy w pliku nie nakładają się, co oznacza, że załadowanie pliku nigdy nie powinno przekroczyć rozmiaru pliku w pamięci.
- Szybsze ładowanie: Safetensors omija dodatkową kopię procesora w PyTorch, umożliwiając niezwykle szybkie czasy ładowania procesora w porównaniu z pickle. Czasy ładowania GPU są tak szybkie lub szybsze niż ich odpowiedniki w PyTorch.
- Lazy Loading: W ustawieniach rozproszonych (wiele węzłów lub wiele GPU) Safetensors umożliwia ładowanie tylko części tensorów, co znacznie przyspiesza czasy ładowania modeli i poprawia pętle informacji zwrotnych dla programistów.
W praktyce
Safetensors zyskuje już szeroką popularność w wiodących przedsiębiorstwach zajmujących się sztuczną inteligencją, takich jak Hugging Face, EleutherAI, i StabilityAI. Kilka znanych projektów wykorzystujących Safetensors to:
- 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
Podsumowując, Safetensors, dzięki swojemu unikalnemu zestawowi cech i zalet, ma wszelkie zadatki na to, by stać się przełomem w świecie uczenia maszynowego i przechowywania danych. Więc śmiało, wypróbuj go – przyszłość formatów modeli czeka na Ciebie!