Экспорт в Unischema/Petastorm из C++
Моя ситуация:
- Довольно новичок в больших данных. Пожалуйста, будьте нежны и ожидайте наивности.
- Создание обучающих данных во многих (тысячах) отдельных облачных рабочих мест.
- Каждое задание генерирует несколько точек данных; одна точка данных - это набор совпадающих тензоров Nd.
- Сами тензоры должны генерироваться кодом C++.
Я хотел бы сериализовать эти точки данных в формате, который будет быстро загружаться в массивы numpy во время поезда. На данный момент я лучше всего предполагаю сериализовать эти тензоры в паркетные таблицы с помощью специальных адаптеров для паркета на стороне C++. Преимущества такого подхода:
- Столбцовое хранилище дает отличное сжатие для данных планшетов (которых у меня много).
- Кажется, это довольно распространенный формат.
- Pyarrow обеспечивает преобразование паркет без копирования -> numpy при определенных условиях , поэтому я могу сделать что-то вроде
pyarrow.parquet.read_table("my/tensor/1.parquet").reshape(...)
- Обучение потоковой передаче моего набора данных должно быть простым, поскольку каждый фрагмент (по одному из каждого облачного задания) существует независимо от всех остальных. Мне не нужно предварительно обрабатывать, собирая их все вместе и рекомбинируя в каком-то другом формате.
Недостатки
- Я не могу напрямую сериализовать тензоры как тензорный объект в C++; Мне нужно написать свой собственный паркетный адаптер тензорной сериализации C++ и изменить его форму после загрузки в обучении.
Petastorm / Unischema кажется потенциально привлекательным инструментом / форматом для прямой сериализации тензоров в Parquet, но похоже, что он не поддерживает C++. Как вы думаете, было бы лучше
- Просто создайте мой собственный формат сериализации на основе паркета для моих тензоров
- Попытайтесь найти способ писать в Unischema на C++ (это кажется потенциально серьезным делом, особенно если я хотел попытаться поделиться своей работой с Petastorm).
- Напишите привязки Python для кода генерации тензора C++; запустить сценарий Python постобработки в моих облачных заданиях, который сериализуется с помощью API Python Petastorm.
# 3 кажется наиболее очевидным выбором, но я ненавижу привязки Python.
Или: есть ли другие инструменты, которые мне следует рассмотреть для этой задачи?