Wprowadzenie do Safetensor - KDnuggets

Wprowadzenie do Safetensor – KDnuggets

Węzeł źródłowy: 2161256

Wprowadzenie do Safetensorów
Zdjęcie autora

Hugging Face opracował nowy format serializacji o nazwie Bezpieczniki, mające na celu uproszczenie i usprawnienie przechowywania i ładowania dużych i złożonych tensorów. Tensory są podstawową strukturą danych wykorzystywaną w głębokim uczeniu się, a ich rozmiar może stanowić wyzwanie, jeśli chodzi o wydajność.

Safetensory wykorzystują kombinację wydajnych algorytmów serializacji i kompresji, aby zmniejszyć rozmiar dużych tensorów, dzięki czemu są szybsze i wydajniejsze niż inne formaty serializacji, takie jak marynata. Oznacza to, że Safetensors jest 76.6 razy szybszy na procesorze i 2 razy szybszy na GPU w porównaniu z tradycyjnym formatem serializacji PyTorch, pytorch_model.bin z model.safetensors. Wymeldować się Porównanie prędkości.

Łatwy w użyciu

Safetensory mają prosty i intuicyjny interfejs API do serializacji i deserializacji tensorów w Pythonie. Oznacza to, że programiści mogą skupić się na budowaniu modeli głębokiego uczenia się, zamiast tracić czas na serializację i deserializację.

Kompatybilność między platformami

Możesz serializować w Pythonie i wygodnie ładować powstałe pliki w różnych językach programowania i platformach, takich jak C++, Java i JavaScript. Pozwala to na bezproblemowe udostępnianie modeli w różnych środowiskach programistycznych.

Prędkość

Safetensors jest zoptymalizowany pod kątem szybkości i może skutecznie obsługiwać serializację i deserializację dużych tensorów. W rezultacie jest to doskonały wybór dla aplikacji korzystających z dużych modeli językowych.

Optymalizacja rozmiaru

Wykorzystuje połączenie skutecznych algorytmów serializacji i kompresji, aby zmniejszyć rozmiar dużych tensorów, co skutkuje szybszą i bardziej wydajną wydajnością w porównaniu z innymi formatami serializacji, takimi jak pikle.

Zabezpieczać

Aby zapobiec uszkodzeniom podczas przechowywania lub przesyłania serializowanych tensorów, Safetensors wykorzystuje mechanizm sum kontrolnych. Gwarantuje to dodatkową warstwę bezpieczeństwa, zapewniając, że wszystkie dane przechowywane w Safetensorach są dokładne i niezawodne. Co więcej, zapobiega Ataki DOS-owe

Powolne ładowanie

Podczas pracy w ustawieniach rozproszonych z wieloma węzłami lub procesorami graficznymi warto załadować tylko część tensorów do każdego modelu. BLOOM wykorzystuje ten format do załadowania modelu na 8 procesorów graficznych w zaledwie 45 sekund, w porównaniu do zwykłych wag PyTorch, które zajmowały 10 minut. 

W tej sekcji przyjrzymy się API safetensors oraz sposobom zapisywania i ładowania plików tensorowych. 

Możemy po prostu zainstalować bezpieczniki za pomocą menedżera pip:

pip install safetensors

 

Posłużymy się przykładem z Wspólne tensory palnika zbudować prostą sieć neuronową i zapisać model przy użyciu API safetensors.torch dla PyTorch. 

from torch import nn class Model(nn.Module): def __init__(self): super().__init__() self.a = nn.Linear(100, 100) self.b = self.a def forward(self, x): return self.b(self.a(x)) model = Model()
print(model.state_dict())

 

Jak widać udało nam się stworzyć model. 

OrderedDict([('a.weight', tensor([[-0.0913, 0.0470, -0.0209, ..., -0.0540, -0.0575, -0.0679], [ 0.0268, 0.0765, 0.0952, ..., -0.0616, 0.0146, -0.0343], [ 0.0216, 0.0444, -0.0347, ..., -0.0546, 0.0036, -0.0454], ...,

 

Teraz zapiszemy model podając obiekt model i nazwę pliku. Następnie załadujemy zapisany plik do obiektu model utworzonego przy użyciu nn.Module.

from safetensors.torch import load_model, save_model save_model(model, "model.safetensors") load_model(model, "model.safetensors")
print(model.state_dict())

 

OrderedDict([('a.weight', tensor([[-0.0913, 0.0470, -0.0209, ..., -0.0540, -0.0575, -0.0679], [ 0.0268, 0.0765, 0.0952, ..., -0.0616, 0.0146, -0.0343], [ 0.0216, 0.0444, -0.0347, ..., -0.0546, 0.0036, -0.0454], ...,

 

W drugim przykładzie spróbujemy zapisać tensor utworzony za pomocą torch.zeros. W tym celu użyjemy funkcji save_file. 

import torch
from safetensors.torch import save_file, load_file tensors = { "weight1": torch.zeros((1024, 1024)), "weight2": torch.zeros((1024, 1024))
}
save_file(tensors, "new_model.safetensors")

 

Aby załadować tensory, użyjemy funkcji load_file. 

load_file("new_model.safetensors")

 

{'weight1': tensor([[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]]), 'weight2': tensor([[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]])}

 

Interfejs API Safetensors jest dostępny dla Pytorch, Tensorflow, PaddlePaddle, Flax i Numpy. Można to zrozumieć czytając Bezpieczniki dokumentacja.

 

Wprowadzenie do Safetensorów
Obraz z API latarki

W skrócie, sejftensory to nowy sposób przechowywania dużych tensorów wykorzystywanych w aplikacjach głębokiego uczenia się. W porównaniu do innych technik oferuje szybsze, bardziej wydajne i przyjazne dla użytkownika funkcje. Dodatkowo zapewnia poufność i bezpieczeństwo danych, obsługując różne języki i platformy programowania. Wykorzystując Safetensory, inżynierowie zajmujący się uczeniem maszynowym mogą zoptymalizować swój czas i skoncentrować się na opracowywaniu doskonałych modeli.

Gorąco polecam stosowanie Safetensorów w Twoich projektach. Wiele czołowych firm zajmujących się sztuczną inteligencją, takich jak Hugging Face, EleutherAI i StabilityAI, wykorzystuje Safetensors w swoich projektach.

Numer Referencyjny

 
 
Abid Ali Awan (@ 1abidaliawan) jest certyfikowanym specjalistą ds. analityków danych, który uwielbia tworzyć modele uczenia maszynowego. Obecnie koncentruje się na tworzeniu treści i pisaniu blogów technicznych na temat technologii uczenia maszynowego i data science. Abid posiada tytuł magistra zarządzania technologią oraz tytuł licencjata inżynierii telekomunikacyjnej. Jego wizją jest zbudowanie produktu AI z wykorzystaniem grafowej sieci neuronowej dla studentów zmagających się z chorobami psychicznymi.
 

Znak czasu:

Więcej z Knuggety