paint-brush
Обзор ландшафта загрузчиков данных: загрузчики данныхк@serialization

Обзор ландшафта загрузчиков данных: загрузчики данных

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

В этой статье исследователи выделяют загрузчики данных как ключ к улучшению обучения машинному обучению, сравнивая библиотеки по функциональности, удобству использования и производительности.
featured image - Обзор ландшафта загрузчиков данных: загрузчики данных
The Serialization Publication HackerNoon profile picture
0-item

Авторы:

(1) Ясон Офейдис, факультет электротехники и Йельский институт сетевых наук, Йельский университет, Нью-Хейвен {равный вклад};

(2) Диего Кидански, факультет электротехники и Йельский институт сетевых наук, Йельский университет, Нью-Хейвен {равный вклад};

(3) Леандрос Тассиулас Левон Гукасян, Activeloop, Маунтин-Вью, Калифорния, США, факультет электротехники и Йельский институт сетевых наук, Йельский университет, Нью-Хейвен.

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

2. ЗАГРУЗЧИКИ ДАННЫХ

В процессе обучения модели глубокого обучения набор данных необходимо прочитать из памяти и предварительно обработать, прежде чем его можно будет передать в качестве входных данных в модель. Эта операция требует одновременной загрузки данных в память. В большинстве случаев и особенно при больших наборах данных возникает нехватка памяти из-за ограниченного ее объема, доступного в системе, что также ухудшает время отклика системы. Это узкое место в библиотеках глубокого обучения часто устраняется с помощью так называемого загрузчика данных. Эта структура позволяет перебирать набор данных, используя параллельную обработку, предварительную выборку, пакетную обработку и другие методы, чтобы максимально сократить время загрузки данных и затраты памяти (Paszke et al., 2019).


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


Следующая спецификация компонента загрузчика данных в основном ориентирована на PyTorch (torch.DataLoader() (PyTorch Core Team)), тогда как его аналог TensorFlow (tf.Dataset() (Abadi et al., 2015)), хотя и не тот, имеет большое сходство.


При использовании загрузчика данных, помимо предоставления набора данных для ввода, пользователь имеет возможность настроить ряд гиперпараметров с учетом его потребностей и ресурсов. Общим параметром, доступным во всех загрузчиках данных, является размер пакета, который, как упоминалось ранее, определяет количество образцов, которые будут использоваться перед обновлением внутренних параметров модели. Этот параметр неразрывно связан с концепцией «мини-пакета» в стохастическом градиентном спуске (Hinton et al., 2012) и, следовательно, это один из первых параметров, который обычно подвергается точной настройке, когда необходимо добиться лучших результатов обучения. .


Во-вторых, пользователь может определить подход к выборке, который определяет стратегию отбора выборок из набора данных и вставки их в пакет. Это может включать отбор выборок на основе конкретных критериев, а также распределения вероятностей. На этом этапе существует опция перетасовки, при которой образцы можно переставлять перед каждой итерацией набора данных, обычно цель состоит в том, чтобы улучшить обобщение модели обучения. Другим параметром является функция сопоставления/заполнения, которая по существу определяет процесс объединения всех отдельных выборок внутри пакета (представьте себе объединение векторов в тензор), чтобы сформировать один элемент, который будет подан в качестве входных данных в обучающую модель. . Более того, загрузчик данных можно настроить на автоматическое сохранение выбранных образцов данных в закрепленной (с блокировкой страниц) памяти, что обеспечивает более быструю передачу данных на устройства с поддержкой CUDA.


Загрузчики данных поставляются с компонентом, называемым рабочими, целью которого является оптимизация процесса передачи данных. Рабочие процессы определяются как подпроцессы, ответственные за асинхронную загрузку данных. При создании экземпляра загрузчика данных пользователь имеет возможность указать количество рабочих процессов, которые будут созданы и будут контролировать эту операцию. Если количество воркеров равно нулю, подпроцессы создаваться не будут, что, в свою очередь, означает, что выборка данных происходит синхронно в одном процессе и, таким образом, вычислительным блокам (GPU) приходится ждать загрузки данных. необходимо завершить (PyTorch Core Team). И наоборот, будут сгенерированы подпроцессы, равные количеству воркеров, что предотвратит блокировку вычислительного кода при загрузке данных. Это достигается за счет предварительной выборки будущих пакетов, чтобы они были готовы при необходимости.


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