Что такое Safetensors и почему они лучше, чем .ckpt (pickletensor)

В рубрике AI/ML Отмечено ,
Сохранить и поделиться:

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

Почему стоит выбрать Safetensors?

При изобилии форматов, доступных для машинного обучения и хранения данных, вы можете задаться вопросом, что же выделяет Safetensors. Давайте потратим немного времени на сравнение некоторых из этих форматов, чтобы понять, как Safetensors проявляет себя по ключевым параметрам:

  • Безопасность: Не запустит ли случайно скачанный файл произвольный код?
  • Zero-copy (нулевое копирование): Потребуется ли для чтения файла больше памяти, чем размер исходного файла?
  • Ленивая загрузка: Можно ли просмотреть файл, не загружая все содержимое? И можно ли загрузить только некоторые тензоры из него, не сканируя весь файл (важно в распределенной среде)?
  • Управление размещением: Можно ли контролировать расположение тензоров внутри файла, чтобы обеспечить быстрый доступ к отдельным тензорам?
  • Отсутствие ограничения на размер файла: Есть ли ограничение на размер файла?
  • Гибкость: Можно ли сохранить пользовательский код в формате и использовать его позже без дополнительного кода?
  • Bfloat16: Поддерживает ли формат нативный bfloat16 без необходимости в странных обходных путях?

Каждый символ ✔ означает наличие функции, ❌ – отсутствие, ~ – частичное наличие, а ? – неизвестное наличие.

ФорматБезопасностьZero-copyЛенивая загрузкаОтсутствие ограничения на размер файлаУправление размещениемГибкостьBfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

Из этого сравнения видно, что Safetensors соответствует или превосходит функции, предлагаемые другими форматами моделей. Особенно примечательны его возможности «zero-copy» обработки данных и ленивой загрузки, которые могут значительно повысить эффективность обработки данных в задачах машинного обучения.

Некоторые примечательные сравнения

Хотя все форматы имеют свои уникальные сильные стороны, давайте рассмотрим, как Safetensors выглядит на фоне некоторых из наиболее часто используемых:

  • Pickle (PyTorch): Широко используемый формат, но pickle имеет существенный недостаток – он небезопасен, поскольку допускает выполнение произвольного кода.
  • H5 (Tensorflow): Хоть и безопасен, но не поддерживает zero-copy, функцию, неотъемлемую для эффективной обработки данных.
  • SavedModel (Tensorflow): Этот формат специфичен для Tensorflow и не обладает гибкостью для других применений.
  • Numpy (npz): Будучи популярным, этот формат не поддерживает bfloat16, что становится все более важной функцией в мире машинного обучения.

Что скрывается под капотом Safetensors

Погружаясь немного глубже в Safetensors, мы обнаруживаем, что это не просто формат данных, а сочетание продуманных конструктивных решений, которые повышают безопасность, эффективность и полезность:

  • Zero-copy: Дизайн Safetensors обеспечивает настоящее zero-copy на CPU, если файл уже находится в кэше. На GPU, хотя копирование всегда необходимо из-за отсутствия дискового кэша, конструкция обходит необходимость выделять все тензоры на CPU в какой-либо момент времени.
  • Порядок байтов (Endianness): Safetensors использует прямой порядок байтов (little-endian), популярный выбор в хранении данных.
  • Порядок (Order): Он использует ‘C’ или построчный порядок (row-major ordering). Этот выбор соответствует распространенному стандарту в хранении данных.
  • Шаг (Stride): Шаги не поддерживаются. Все тензоры должны быть упакованы перед сериализацией. Это конструктивное решение было принято на основе текущих моделей использования в сериализованных форматах.

Дополнительные преимущества

Помимо того, что Safetensors является эффективным и безопасным форматом хранения данных, он также привносит ряд дополнительных преимуществ:

  • Предотвращение DOS-атак: Конструкция Safetensors снижает вероятность того, что вредоносные файлы вызовут DOS-атаки. Существует ограничение на размер заголовка, чтобы предотвратить разбор чрезвычайно большого JSON, и есть гарантия, что адреса в файле не перекрываются, что означает, что загрузка файла никогда не должна превышать размер файла в памяти.
  • Более быстрая загрузка: Safetensors обходит дополнительное копирование на CPU в PyTorch, обеспечивая чрезвычайно быстрое время загрузки на CPU по сравнению с pickle. Время загрузки на GPU такое же быстрое или быстрее, чем у эквивалента PyTorch.
  • Ленивая загрузка: В распределенных средах (многоузловых или много-GPU) Safetensors позволяет загружать только часть тензоров, что значительно ускоряет время загрузки моделей и улучшает циклы обратной связи при разработке.

В реальных условиях

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

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

В рубрике AI/ML Отмечено ,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *