Czym są Safetensors i dlaczego są lepsze od .ckpt (pickletensor)?

Umieszczono w kategoriach: AI/ML, Open Source Tagi , , , , ,
Save and Share:

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ść.

FormatBezpiecznyZero-copyLazy loadingBrak limitu rozmiaru plikuKontrola układuElastyczność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 FaceEleutherAI, i StabilityAI. Kilka znanych projektów wykorzystujących Safetensors to:

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!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *