paint-brush
Deep Lake, домик у озера для глубокого обучения: тензорный формат храненияк@dataology
149 чтения

Deep Lake, домик у озера для глубокого обучения: тензорный формат хранения

Слишком долго; Читать

Исследователи представляют Deep Lake, озеро с открытым исходным кодом для глубокого обучения, оптимизирующее сложное хранение и потоковую передачу данных для структур глубокого обучения.
featured image - Deep Lake, домик у озера для глубокого обучения: тензорный формат хранения
Dataology: Study of Data in Computer Science HackerNoon profile picture
0-item

Авторы:

(1) Сасун Амбарцумян, Activeloop, Маунтин-Вью, Калифорния, США;

(2) Абхинав Тули, Activeloop, Маунтин-Вью, Калифорния, США;

(3) Левон Гукасян, Activeloop, Маунтин-Вью, Калифорния, США;

(4) Фариз Рахман, Activeloop, Маунтин-Вью, Калифорния, США;.

(5) Грант Топчян, Activeloop, Маунтин-Вью, Калифорния, США;

(6) Дэвид Исаян, Activeloop, Маунтин-Вью, Калифорния, США;

(7) Марк Маккуэйд, Activeloop, Маунтин-Вью, Калифорния, США;

(8) Микаел Арутюнян, Activeloop, Маунтин-Вью, Калифорния, США;

(9) Татевик Акопян, Activeloop, Маунтин-Вью, Калифорния, США;

(10) Иво Странич, Activeloop, Маунтин-Вью, Калифорния, США;

(11) Давид Буниатян, Activeloop, Маунтин-Вью, Калифорния, США.

Таблица ссылок

3. ТЕНЗОРНЫЙ ФОРМАТ ХРАНЕНИЯ

Наборы данных Deep Lake имеют столбчатую архитектуру хранения, где тензоры представлены в виде столбцов, как показано на рис. 3. Каждый тензор представляет собой набор фрагментов — двоичных объектов, содержащих образцы данных. Карта индексов, связанная с каждым тензором, помогает найти правильный фрагмент и индекс выборки внутри этого фрагмента для данного индекса выборки.

3.1 Набор данных

Выборка в наборе данных представляет собой одну строку, проиндексированную по параллельным тензорам. В отличие от формата хранения документов, элементы выборки логически независимы, что обеспечивает частичный доступ к выборкам для выполнения высокопроизводительных запросов или потоковой передачи выбранных тензоров по сети в обучающие экземпляры графического процессора. Несколько тензоров можно сгруппировать. Группы реализуют синтаксическую вложенность и определяют, как тензоры связаны друг с другом. Синтаксическая вложенность позволяет избежать усложнения формата иерархической структуры памяти. Изменения в схеме набора данных также отслеживаются с течением времени с помощью контроля версий, аналогично изменениям содержимого набора данных.

3.2 Тензоры

Тензоры типизированы и могут быть добавлены или изменены на месте. Доступ по умолчанию к индексу или набору индексов возвращает данные в виде массивов NumPy [55]. Вместо хранения одномерных данных, как это показано в Parquet [79] или серии в Arrow [13], тензоры могут хранить n-мерные данные, где обычно первое измерение соответствует индексному или пакетному измерению. Тензоры могут содержать массивы динамической формы, также называемые неровными тензорами, в отличие от других форматов статически разбитых массивов, таких как Zarr [52].

3.3 Типы

Htype определяет ожидания от выборок в тензоре, такие как тип данных (dtype, как показано в NumPy [55]), форма, количество измерений или сжатие. Типизированные тензоры упрощают взаимодействие с платформами глубокого обучения, обеспечивают проверку работоспособности и эффективное размещение памяти. Наследуя общий тензорный тип htype, мы можем создавать такие типы, как изображение, видео, аудио, bbox, dicom и другие. Например, тензор с изображением htype будет ожидать, что добавляемые к нему образцы будут иметь dtype как uint8 и длину формы 3 (т. е. ширину, высоту и количество каналов). Мы далее расширяем понятие htypes, позволяя использовать метатипы, которые поддерживают хранение последовательностей изображений в тензорах (sequence[image]), ссылки на удаленно сохраненные изображения, сохраняя при этом регулярное поведение тензора изображения (link[image]) или даже возможна кросс-форматная поддержка.


Рисунок 3. Как каждая выборка (строка) хранится в наборе столбчатых тензоров с фрагментами динамического размера.

3.4 Структура памяти

Набор данных Deep Lake содержит файл происхождения в формате JSON и папки для каждого тензора. Тензор содержит фрагменты, кодировщик фрагментов, кодировщик фрагментов и метаданные тензора. Тензоры могут быть опционально скрыты. Например, скрытые тензоры можно использовать для поддержки версий изображений с пониженной дискретизацией или сохранения информации о форме для быстрых запросов.


Тензоры хранятся частями на уровне хранилища. Хотя статическое (предполагаемое) формирование фрагментов позволяет избежать поддержки таблицы карты фрагментов, оно приводит к значительным издержкам пользователя во время спецификации тензора, ограничениям использования пользовательского сжатия, недостаточному использованию хранилища для тензоров динамической формы и неэффективности постобработки. Чанки Deep Lake создаются на основе нижней и верхней границы размера чанка, чтобы соответствовать ограниченному количеству выборок. Это связано с компромиссом в виде сжатой карты индексов, которая сохраняет индекс выборки для сопоставления идентификаторов фрагментов для каждого тензора, в то же время обеспечивая размеры фрагментов в диапазоне, оптимальном для потоковой передачи, при этом вмещая образцы смешанной формы. Подход, использованный в этой статье, можно рассматривать как оптимизированный компромисс между картой страниц файловой системы и определяемой вычислениями системой хранения массивов без карт. По практическим соображениям один кодер фрагментов можно масштабировать до миллиардов изображений, сохраняя при этом кодировщик фрагментов размером 150 МБ на 1 ПБ тензорных данных. Дальнейшее масштабирование можно обеспечить путем сегментирования кодировщика фрагментов. Чанки содержат информацию заголовка, такую как диапазоны байтов, формы семплов и сами данные сэмплов. Если образец превышает верхнюю границу размера фрагмента, что имеет место для больших аэрофотоснимков или изображений, полученных с помощью микроскопа, образец разбивается на фрагменты по пространственным измерениям. Единственным исключением из этого правила являются видео. Видео сохраняется благодаря эффективному сопоставлению кадров с индексами, декомпрессии только ключевых кадров и запросам на основе диапазона во время потоковой передачи.

3.5 Шаблоны доступа

Тензорный формат хранения оптимизирован для глубокого обучения и вывода, включая последовательный и произвольный доступ. Последовательный доступ используется для выполнения запросов сканирования, преобразования тензоров в другие тензоры или выполнения вывода. Варианты использования произвольного доступа включают в себя несколько аннотаторов, записывающих метки к одному и тому же изображению, или модели, сохраняющие обратные прогнозы вместе с набором данных. Пока строгий режим отключен, можно назначать индексы за пределами границ тензора, что позволяет использовать разреженные тензоры. Однако случайное назначение с течением времени приведет к неэффективному хранению фрагментов данных. Чтобы исправить расположение данных, мы реализуем алгоритм повторного разбиения на лету для оптимизации расположения данных. Одним из ключевых шаблонов доступа Deep Lake является перемешиваемый доступ к потокам для обучения моделей машинного обучения. Для этого требуется доступ к произвольному или индивидуальному порядку при потоковой передаче фрагментов в процесс обучения. Это достигается за счет использования запросов на основе диапазона для доступа к подэлементам внутри фрагментов, выполнения сложных запросов перед обучением для определения порядка и поддержания буферного кеша извлеченных и неиспользуемых данных. Это позволяет избежать необходимости использования отдельного вычислительного кластера для выполнения алгоритма перетасовки [50].


Каждый тензор имеет свои собственные фрагменты, а размер фрагмента по умолчанию составляет 8 МБ. Один фрагмент состоит из данных из нескольких индексов, когда отдельные точки данных (изображение, метка, аннотация и т. д.) меньше размера фрагмента. И наоборот, когда отдельные точки данных превышают размер фрагмента, данные разбиваются на несколько фрагментов (плитка). Исключением из логики фрагментирования являются видеоданные.


Формат Deep Lake оптимизирован для максимизации пропускной способности обработки графическим процессором. Он включает в себя предварительную выборку ЦП, распаковку или декодирование, преобразования и передачу памяти графического процессора в ожидаемом макете среды глубокого обучения.

3.6 Поставщики хранилищ

Deep Lake можно подключить к любому поставщику хранилищ, включая объектные хранилища, такие как AWS S3 [1], Google Cloud Storage (GCS) [3], файловые системы, совместимые с POSIX, или локальное хранилище в памяти. Более того, он создает кэширование в памяти путем объединения различных поставщиков хранилища, например, кэша наименее недавно использованного (LRU) удаленного хранилища S3 с локальными данными в памяти.


Этот документ доступен на arxiv под лицензией CC 4.0.