Какой подходящий хранилище данных для последовательных данных переменной длины для использования в PyTorch?

Вопрос или проблема

У меня есть большое количество последовательностей – потенциально сотни тысяч – каждая из которых состоит из 100 до 10 000 элементов, которые, в свою очередь, состоят примерно из 5 вещественных чисел.

Мне нужен хранилище данных, которое может быстро предоставлять эти последовательности партиями для обучения в PyTorch. Я также хочу иметь возможность быстро записывать новые последовательности в хранилище. Это похоже на буфер воспоминаний для обучения с подкреплением, но я хочу хранить каждую отдельную попытку.

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

Лучшее решение кажется HDF5 – либо через h5py, либо через PyTables – за исключением того, что я не знаю, как эффективно обрабатывать переменные длины последовательностей. Дополнения неуместны из-за сильно различающихся длин, и хранить каждую последовательность как отдельный набор данных HDF5 кажется плохой идеей, так как HDF5, похоже, не оптимизирован для огромного количества небольших наборов данных.

Идеи, которые мне приходят на ум, включают мультииндексирование Pandas, ссылки на регионы HDF5 и создание системы индексирования метаданных с нуля. Я не совсем уверен, куда двигаться дальше.

Компактность хранения имеет значение – мне нужно быть достаточно эффективным в использовании моего пространства для хранения.

На данный момент я выбрал упаковку всех образцов в один буфер таблицы HDF5 и ведение отдельной таблицы с метаданными, которая отслеживает позицию буфера и длину каждой отдельной последовательности. Это работает, но я не буду отмечать этот ответ как правильный, потому что я им не удовлетворен. Этот метод хранения очень плохо подходит для редактирования и уязвим к потере, если ошибка приведет к рассинхронизации таблиц.

Ответ или решение

Вопрос, который вы подняли, относится к выбору подходящего хранилища для работы с последовательными данными переменной длины в контексте обучения нейронных сетей с использованием PyTorch. Исходя из указанных вами требований, давайте более подробно рассмотрим несколько возможных решений и их достоинства и недостатки.

Понимание требований

Вы работаете с большим количеством последовательностей, состоящих из 100 до 10,000 элементов, где каждый элемент представляет собой набор из 5 плавающих точек. Кроме того, вам нужно, чтобы:

  • Данные могли быстро загружаться в пакетах для обучения в PyTorch.
  • Обеспечивалась возможность быстрой записи новых последовательностей.
  • Существовал механизм для хранения и выборки структурированных метаданных, чтобы можно было быстро находить и извлекать подмножества последовательностей.
  • Хранение данных было эффективным с точки зрения занимаемого пространства.

Анализ текущего подхода

Вы уже пробовали организовать данные в одном HDF5-таблице и используете отдельную таблицу для метаданных. Этот способ работает, но имеет свои ограничения в плане редактирования и может привести к проблемам синхронизации между таблицами.

Потенциальные решения

  1. HDF5 с использованием переменных длины:

    • Одним из подходов к решению является хранение последовательностей в формате HDF5 с помощью h5py или PyTables, совместно с использованием атрибутов или пользовательских параметров. Однако, стоит учесть, что HDF5 не оптимизирован для большого количества мелких наборов данных. Возможно, стоит обдумать хранение последовательностей в одном массиве и использовать индексирование для доступа, но это приведет к необходимости обработки переменной длины.
  2. Использование NoSQL БД:

    • Рассмотрите возможность использования NoSQL баз, таких как MongoDB, которые способны хранить неструктурированные и полуструктурированные данные и обеспечивать быстрое записывание и извлечение данных. Это также позволит легко работать с метаданными.
    • MongoDB позволяет сохранять массивы и объекты, которые могут хорошо вписаться в вашу модель работы с последовательностями.
  3. Apache Parquet:

    • Формат данных Parquet оптимизирован для хранения больших объемов информации и поддерживает колоночное хранение, что может действительно помочь в ситуациях, где размер памяти имеет значение. Однако, в этом случае вам может потребоваться реализовать механизм для работы с переменной длиной данных, что может добавить сложности.
  4. TFRecords с использованием TensorFlow Tools:

    • В то время как это решение может показаться нестандартным, формат TFRecords может быть интересным вариантом, если вам необходима высокая производительность. Вы можете использовать TensorFlow для создания TFRecord файлов, а затем считывать их в вашем проекте PyTorch.

Рекомендация

Учитывая ваши текущие потребности, возможное решение с использованием NoSQL БД (например, MongoDB) может быть наиболее подходящим. Это предоставит вам необходимую гибкость в обработке и запросе данных, а также можно масштабировать по мере роста объема данных.

Заключение

Выбор подходящего датастора для переменной длины последовательных данных в контексте PyTorch требует тщательного анализа каждой возможности, с учетом их достоинств и недостатков. Предложенные выше варианты должны помочь вам в реализации вашего проекта, обеспечивая при этом эффективность и быструю доступность искомых данных. Ваш текущий подход с HDF5 можно рассмотреть, если вы сможете оптимизировать хранение данных и синхронизацию метаданных. Тем не менее, переход на NoSQL решение, такие как MongoDB, может открыть новые горизонты для обработки и анализа ваших данных.

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

Капча загружается...