Вступ до Safetensors - KDnuggets

Вступ до Safetensors – KDnuggets

Вихідний вузол: 2161256

Введення в Safetensors
Зображення автора

Компанія Hugging Face розробила новий формат серіалізації під назвою Safetensors, спрямований на спрощення та оптимізацію зберігання та завантаження великих і складних тензорів. Тензори є основною структурою даних, яка використовується в глибокому навчанні, і їхній розмір може створювати проблеми, коли йдеться про ефективність.

Safetensors використовують комбінацію ефективних алгоритмів серіалізації та стиснення, щоб зменшити розмір великих тензорів, що робить його швидшим і ефективнішим, ніж інші формати серіалізації, як-от pickle. Це означає, що Safetensors у 76.6 разів швидше на центральному процесорі та в 2 рази швидше на графічному процесорі порівняно з традиційним форматом серіалізації PyTorch, pytorch_model.bin з model.safetensors . Перевірити Порівняння швидкості.

Легкий у використанні

Safetensors мають простий та інтуїтивно зрозумілий API для серіалізації та десеріалізації тензорів у Python. Це означає, що розробники можуть зосередитися на створенні своїх моделей глибокого навчання замість того, щоб витрачати час на серіалізацію та десеріалізацію.

Міжплатформна сумісність

Ви можете серіалізувати в Python і зручно завантажувати отримані файли на різних мовах програмування та платформах, таких як C++, Java та JavaScript. Це дозволяє безперебійно обмінюватися моделями в різних середовищах програмування.

швидкість

Safetensors оптимізовано для швидкості та може ефективно виконувати серіалізацію та десеріалізацію великих тензорів. Як результат, це чудовий вибір для програм, які використовують великі мовні моделі.

Оптимізація розміру

Він використовує поєднання ефективних алгоритмів серіалізації та стиснення для зменшення розміру великих тензорів, що забезпечує швидшу та ефективнішу продуктивність порівняно з іншими форматами серіалізації, такими як pickle.

Безпечний

Щоб запобігти будь-якому пошкодженню під час зберігання або передачі серіалізованих тензорів, Safetensors використовує механізм контрольної суми. Це гарантує додатковий рівень безпеки, гарантуючи, що всі дані, що зберігаються в Safetensors, є точними та надійними. Більше того, це запобігає DOS-атаки

Ляжке навантаження

Працюючи в розподілених налаштуваннях із декількома вузлами або графічним процесором, корисно завантажувати лише частину тензорів у кожну модель. BLOOM використовує цей формат для завантаження моделі на 8 графічних процесорах лише за 45 секунд у порівнянні зі звичайними зважуваннями PyTorch, які займали 10 хвилин. 

У цьому розділі ми розглянемо safetensors API і те, як ви можете зберігати та завантажувати файли тензорів. 

Ми можемо просто встановити safetensors за допомогою pip manager:

pip install safetensors

 

Скористаємося прикладом з Факел ділить тензори щоб створити просту нейронну мережу та зберегти модель за допомогою API safetensors.torch для 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())

 

Як бачимо, ми успішно створили модель. 

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], ...,

 

Тепер ми збережемо модель, надавши об’єкт model та ім’я файлу. Після цього ми завантажимо файл збереження в об’єкт model , створений за допомогою 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], ...,

 

У другому прикладі ми спробуємо зберегти тензор, створений за допомогою torch.zeros . Для цього ми будемо використовувати функцію 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")

 

А щоб завантажити тензори, ми використаємо функцію 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.]])}

 

API safetensors доступний для Pytorch, Tensorflow, PaddlePaddle, Flax і Numpy. Ви можете зрозуміти це, прочитавши Safetensors документація.

 

Введення в Safetensors
Зображення з Torch API

Коротше кажучи, safetensors — це новий спосіб зберігання великих тензорів, який використовується в програмах глибокого навчання. Порівняно з іншими методами, він пропонує швидші, ефективніші та зручніші функції. Крім того, він забезпечує конфіденційність і безпеку даних, підтримуючи різні мови програмування та платформи. Використовуючи Safetensors, інженери машинного навчання можуть оптимізувати свій час і зосередитися на розробці чудових моделей.

Я настійно рекомендую використовувати Safetensors для ваших проектів. Багато провідних AI-компаній, таких як Hugging Face, EleutherAI і StabilityAI, використовують Safetensors для своїх проектів.

Посилання

 
 
Абід Алі Аван (@1abidaliawan) є сертифікованим фахівцем із дослідження даних, який любить створювати моделі машинного навчання. Зараз він зосереджується на створенні контенту та написанні технічних блогів про технології машинного навчання та науки про дані. Абід має ступінь магістра з управління технологіями та ступінь бакалавра в галузі телекомунікаційної інженерії. Його бачення полягає в тому, щоб створити продукт AI з використанням нейронної мережі графа для студентів, які борються з психічними захворюваннями.
 

Часова мітка:

Більше від KDnuggets