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 Face, EleutherAI, и StabilityAI. Няколко известни проекта, използващи Safetensors, включват:
- 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
В заключение, Safetensors, със своя уникален набор от функции и предимства, е готов да промени играта в света на машинното обучение и съхранението на данни. Така че, давайте, изпробвайте го – бъдещето на форматите за модели ви очаква!