Какво представляват Safetensors и защо са по-добри от .ckpt (pickletensor)

Categorized as AI/ML, Open Source Tagged , , , , ,
Save and Share:

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

Защо да изберете Safetensors?

С множеството формати, налични за машинно обучение и съхранение на данни, може би се чудите какво отличава Safetensors. Нека отделим малко време, за да сравним някои от тези формати, за да разберем как Safetensors отговаря на ключовите параметри:

  • Безопасност: Дали произволно изтеглен файл няма да изпълни произволен код?
  • Нулево копиране: Изисква ли четенето на файла повече памет от оригиналния файл?
  • Лениво зареждане: Може ли файлът да бъде инспектиран, без да се зарежда всичко? И може ли да се заредят само някои тензори в него, без да се сканира целият файл (важно при разпределена среда)?
  • Контрол на структурата: Може ли да се контролира местоположението на тензорите във файла, за да се осигури бърз достъп до отделните тензори?
  • Без ограничение на размера на файла: Има ли ограничение за размера на файла?
  • Гъвкавост: Може ли потребителски код да бъде запазен във формата и използван по-късно без допълнителен код?
  • Bfloat16: Поддържа ли форматът native bfloat16 без необходимост от странни заобиколни решения?

Всеки символ ✔ представлява наличието, ❌ – отсъствието, ~ – частично наличие и ? – неизвестно наличие на дадена функция.

ФорматБезопасностНулево копиранеЛениво зарежданеБез ограничение на размера на файлаКонтрол на структуратаГъвкавостBfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

От това сравнение можете да видите, че Safetensors отговаря или надминава функциите, предлагани от други формати за модели. Той е особено забележителен със способността си за манипулиране на данни с „нулево копиране“ и лениво зареждане, което може значително да повиши ефективността на обработката на данни в задачи за машинно обучение.

Някои забележителни сравнения

Въпреки че всички формати имат своите уникални силни страни, нека разгледаме как Safetensors се справя с някои от най-често използваните:

  • Pickle (PyTorch): Широко използван формат, но pickle има значителен недостатък – той е небезопасен, тъй като позволява изпълнението на произволен код.
  • H5 (Tensorflow): Въпреки че е сигурен, той не поддържа нулево копиране – функция, която е неразделна част от ефективната манипулация на данни.
  • SavedModel (Tensorflow): Този формат е специфичен за Tensorflow и му липсва гъвкавост за други приложения.
  • Numpy (npz): Въпреки че е популярен, този формат не поддържа bfloat16, все по-важна функция в света на машинното обучение.

Под капака на Safetensors

Потапяйки се малко по-дълбоко в Safetensors, откриваме, че той не е просто формат за данни, а комбинация от обмислени дизайнерски решения, които подобряват безопасността, ефективността и полезността:

  • Нулево копиране: Дизайнът на Safetensors позволява истинско нулево копиране на CPU, ако файлът вече е в кеша. На GPU, въпреки че копирането винаги е необходимо поради липсата на дисков кеш, дизайнът заобикаля необходимостта от разпределяне на всички тензори на CPU във всеки даден момент.
  • Endianness: Safetensors използва little-endian подредба, популярен избор при съхранение на данни.
  • Подредба: Той приема ‘C’ или row-major подредба. Този избор е в съответствие с преобладаващия стандарт при съхранението на данни.
  • Стъпка: Striding не се поддържа. Всички тензори трябва да бъдат опаковани, преди да бъдат сериализирани. Това дизайнерско решение е взето въз основа на текущите модели на използване в сериализирани формати.

Още нещо

Освен че е ефективен и безопасен формат за съхранение на данни, Safetensors предлага и някои допълнителни предимства:

  • Предотвратяване на DOS атаки: Дизайнът на Safetensors смекчава възможността злонамерени файлове да причинят DOS атаки. Има ограничение за размера на заглавката, за да се предотврати анализирането на изключително голям JSON, и има гаранция, че адресите във файла не се припокриват, което означава, че зареждането на файл никога не трябва да надвишава размера на файла в паметта.
  • По-бързо зареждане: Safetensors заобикаля допълнителното CPU копиране в PyTorch, което позволява изключително бързо време за зареждане на CPU в сравнение с pickle. Времето за зареждане на GPU е толкова бързо или по-бързо от еквивалентното на PyTorch.
  • Лениво зареждане: В разпределени среди (с много възли или много GPU) Safetensors позволява зареждането само на част от тензорите, което значително ускорява времето за зареждане на модела и подобрява цикъла на обратна връзка при разработка.

В действие

Safetensors вече се използва широко във водещи AI компании като  Hugging FaceEleutherAI, и StabilityAI. Няколко известни проекта, използващи Safetensors, включват:

В заключение, Safetensors, със своя уникален набор от функции и предимства, е готов да промени играта в света на машинното обучение и съхранението на данни. Така че, давайте, изпробвайте го – бъдещето на форматите за модели ви очаква!

Leave a comment

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *