Meta AI представила OpenZL — это фреймворк с открытым исходным кодом, который создаёт специализированные компрессоры с учётом формата на основе высокоуровневых описаний данных и выдаёт самоописываемый формат передачи данных, который может считывать универсальный декодер. Это позволяет отделить эволюцию компрессоров от внедрения новых версий декодеров.
Насколько высокой будет степень сжатия и пропускная способность, если обучить графовый компрессор с учётом формата и отправлять только самоописывающийся граф на универсальный декодер?
Подход основан на графической модели сжатия, которая представляет конвейеры в виде ориентированных ацикличных графов (DAGs) модульных кодеков.
Что нового в OpenZL?
* OpenZL формализует сжатие в виде вычислительного графа: узлы — это кодеки/графы, рёбра — это типизированные потоки сообщений, а завершённый граф сериализуется вместе с полезной нагрузкой.
* Любой фрейм, созданный любым компрессором OpenZL, может быть распакован универсальным декодером, поскольку спецификация графа передаётся вместе с данными.
* Такая конструкция направлена на то, чтобы объединить преимущества соотношения/пропускной способности специализированных кодеков с операционной простотой единого стабильного двоичного файла декодера.
Как это работает?
1. Описать данные → построить граф. Разработчики предоставляют описание данных; OpenZL объединяет этапы синтаксического анализа/группировки/преобразования/энтропии в DAG, адаптированный к этой структуре.
2. В результате получается самоописывающийся фрейм: сжатые байты плюс спецификация графа.
3. Путь универсального декодирования. Декодирование процедурно следует встроенному графу, устраняя необходимость в отправке новых версий декодеров при эволюции компрессоров.
Инструменты и API
* SDDL (Simple Data Description Language): встроенные компоненты и API позволяют разлагать входные данные на типизированные потоки из предварительно скомпилированного описания данных; доступны в C и Python под openzl.ext.graphs.SDDL.
* Языковые привязки: основная библиотека и привязки выпущены с открытым исходным кодом; репозиторий документирует использование C/C++ и Python, а экосистема уже добавляет привязки сообщества (например, Rust openzl-sys).
Как работает система?
Исследовательская группа сообщает, что OpenZL достигает более высокой степени сжатия и скорости по сравнению с современными кодеками общего назначения на различных реальных наборах данных. Также отмечается внедрение системы в Meta с последовательным улучшением размера и/или скорости и сокращением сроков разработки компрессоров. В публичных материалах не указан единый универсальный числовой коэффициент; результаты представлены как улучшения по Парето, зависящие от данных и конфигурации конвейера.
Комментарии редакции
OpenZL делает сжатие с учётом формата практически осуществимым: компрессоры выражены в виде DAG, встроены в виде самоописывающегося графа в каждый фрейм и декодируются универсальным декодером, что исключает внедрение новых версий декодеров. В целом, OpenZL кодирует DAG кодека в каждом фрейме и декодирует через универсальный считыватель; Meta сообщает об улучшениях по Парето по сравнению с zstd/xz на реальных наборах данных.
1. Какие преимущества предлагает фреймворк OpenZL по сравнению с традиционными методами сжатия данных?
Ответ: OpenZL предлагает несколько преимуществ по сравнению с традиционными методами сжатия данных. Во-первых, он формализует сжатие в виде вычислительного графа, где узлы представляют кодеки или графы, а рёбра — типизированные потоки сообщений. Это позволяет объединить преимущества специализированных кодеков с операционной простотой единого стабильного двоичного файла декодера. Во-вторых, любой фрейм, созданный компрессором OpenZL, может быть распакован универсальным декодером, что исключает необходимость внедрения новых версий декодеров при эволюции компрессоров.
2. Какие инструменты и API предоставляет OpenZL для работы с данными?
Ответ: OpenZL предоставляет несколько инструментов и API для работы с данными. Среди них — SDDL (Simple Data Description Language), который позволяет разлагать входные данные на типизированные потоки из предварительно скомпилированного описания данных. Встроенные компоненты и API доступны в C и Python под openzl.ext.graphs.SDDL. Также выпущены основная библиотека и привязки с открытым исходным кодом, а экосистема уже добавляет привязки сообщества (например, Rust openzl-sys).
3. Какие результаты были достигнуты при использовании OpenZL на реальных наборах данных?
Ответ: Исследовательская группа сообщает, что OpenZL достигает более высокой степени сжатия и скорости по сравнению с современными кодеками общего назначения на различных реальных наборах данных. Однако конкретные числовые коэффициенты не указаны, результаты представлены как улучшения по Парето, зависящие от данных и конфигурации конвейера. Meta сообщает об улучшениях по Парето по сравнению с zstd/xz на реальных наборах данных.
4. Как работает система OpenZL при сжатии данных?
Ответ: Система OpenZL работает следующим образом: разработчики предоставляют описание данных, OpenZL объединяет этапы синтаксического анализа, группировки, преобразования и энтропии в DAG, адаптированный к этой структуре. В результате получается самоописывающийся фрейм: сжатые байты плюс спецификация графа. Декодирование процедурно следует встроенному графу, устраняя необходимость в отправке новых версий декодеров при эволюции компрессоров.
5. Какие перспективы открывает внедрение системы OpenZL в Meta?
Ответ: Внедрение системы OpenZL в Meta открывает перспективы последовательного улучшения размера и/или скорости, а также сокращения сроков разработки компрессоров. Это позволяет Meta оптимизировать процессы сжатия данных и улучшить производительность систем.