Авторы:
(1) Ясон Офейдис, факультет электротехники и Йельский институт сетевых наук, Йельский университет, Нью-Хейвен {равный вклад};
(2) Диего Кидански, факультет электротехники и Йельский институт сетевых наук, Йельский университет, Нью-Хейвен {равный вклад};
(3) Леандрос Тассиулас Левон Гукасян, Activeloop, Маунтин-Вью, Калифорния, США, факультет электротехники и Йельский институт сетевых наук, Йельский университет, Нью-Хейвен.
Загрузчики данных, отвечающие за перемещение данных из хранилища в графические процессоры при обучении моделей машинного обучения, могут стать ключом к значительному повышению производительности обучающих заданий. Последние достижения оказались многообещающими не только благодаря значительному сокращению времени обучения, но и благодаря предложению новых функций, таких как загрузка данных из удаленного хранилища, такого как S3. В этой статье мы первыми выделили загрузчик данных как отдельный компонент рабочего процесса глубокого обучения (DL) и очертили его структуру и особенности. Наконец, мы предлагаем всестороннее сравнение различных доступных библиотек загрузки данных, их компромиссов с точки зрения функциональности, удобства использования и производительности, а также выводы, полученные на их основе.
Для обучения модели (глубокого) машинного обучения требуется набор данных, модель и аппаратное обеспечение, которое для реальных задач включает один или несколько графических процессоров.
Мы всегда заинтересованы в сокращении общего вычислительного времени, необходимого для обучения модели. Это желательно по нескольким причинам: более низкие затраты, более простая итерация и более доступная для небольших команд.
Связь между основными компонентами конвейера машинного обучения и временем выполнения часто очевидна: больший набор данных занимает больше времени, более крупная модель требует больше времени, а более быстрый графический процессор сокращает общее время работы. Одна из ключевых частей головоломки, которую часто упускают из виду, — это связующее звено между всеми этими частями: загрузчик данных. Загрузчик данных отвечает за загрузку данных из постоянного хранилища (ОЗУ, диск или сеть), применение необходимых преобразований и отправку преобразованных данных на соответствующее устройство, чтобы модель могла их принять.
Большинство разработчиков предполагают, что загрузчик данных по умолчанию в их соответствующей среде машинного обучения (Pytorch, Tensorflow, Jax) уже оптимизирован для их приложения, и не часто полагаются на сторонние загрузчики данных. Интересно, что недавно было показано, что загрузчики данных могут быть одним из наиболее серьезных узких мест конвейеров машинного обучения (Mohan et al., 2020). В результате мы увидели множество новых библиотек и исследовательских проектов, посвященных оптимизации и улучшению производительности загрузчика данных.
Например, FFCV (Leclerc et al., 2022), новая библиотека с открытым исходным кодом, разработанная исследовательской группой Массачусетского технологического института, сумела обучить ImageNet за долю времени, которое потребовалось бы при использовании стандартного загрузчика данных PyTorch. Такие выгоды могут значительно снизить эксплуатационные расходы компаний и исследовательских групп, которые зависят от инфраструктуры как услуги (IaaS), таких как Amazon Web Services (AWS) и Google Cloud Platform (GPC).
Еще одна многообещающая функция, предлагаемая загрузчиками данных, — это возможность загружать данные, хранящиеся удаленно; например, из корзины S3. Это имеет много практических преимуществ: экономится время на локальную настройку набора данных, уменьшается требуемая емкость диска на вычислительной машине и снижается риск использования членами команды разных версий одного и того же набора данных. Естественным недостатком потоковой передачи данных во время обучения является то, что обычно скорость сетевой передачи ниже, чем скорость дискового ввода-вывода, и в результате обучение модели должно занять больше времени. Интересно, что мы заметили, что некоторые библиотеки, такие как Hub (Team, 2022a) и Deep Lake (Hambardzumyan et al., 2022), для некоторых сценариев достигают более высокой производительности в сети, чем стандартный загрузчик данных Pytorch, считывающий данные локально. Это возможно, поскольку загрузчику данных удается предварительно получить необходимые данные до того, как они потребуются графическому процессору. Более подробное обсуждение мы дадим в разделе 5.
Не все библиотеки поддерживают удаленную загрузку, а те, которые поддерживают, не обязательно интегрируются с одними и теми же службами удаленного хранения. Поскольку число доступных библиотек, реализующих загрузчики данных, растет, мы решили создать комплексный тест, чтобы осветить текущее состояние дел, какие проблемы, кажется, уже решены, и обнаружить наиболее многообещающие области для улучшения в будущем. исследовать.
Здесь следует отметить, что одно конкретное отличие наших экспериментов от других работ, таких как (Kumar & Sivathanu, 2020), (Mohan et al., 2020), заключается в том, что мы фокусируемся на заданиях, которые выполняются на небольших и средних рабочих станциях с ограниченная емкость (GPU, RAM, SSD). Они, скорее всего, отражают аппаратное обеспечение, доступное большинству отдельных лиц и небольших групп в отрасли, для которых бюджет не позволяет использовать крупномасштабные кластеры.
Мы можем резюмировать наш вклад следующим образом:
• Код с открытым исходным кодом. Мы создали тест с открытым исходным кодом, который сравнивает самые популярные библиотеки загрузки данных в Pytorch[1]. Проект останется доступным для сообщества, поэтому по мере роста интереса к ним можно будет добавлять новые библиотеки и наборы данных. Мы также ожидаем обновления числовых результатов, полученных в этих тестах, после любых крупных обновлений любой из библиотек, тестируемых в этой статье.
• Жизнеспособность дистанционного обучения: мы показываем, что при разумных обстоятельствах можно обучать модель машинного обучения, используя поток данных через общедоступное подключение к Интернету. В частности, мы отмечаем влияние вычислений, обслуживающих данные. Наш результат отличается от результата (Mohan et al., 2020), поскольку мы не предполагаем, что набор данных кэшируется локально после загрузки.
• Оптимизация гиперпараметров для повышения скорости. Традиционные подходы с использованием гиперпараметров направлены на повышение общей точности обучаемой модели. В этой статье мы покажем, как мы можем также оптимизировать скорость (обработанные образцы с течением времени) как показатель общего времени работы. Эта оптимизация зависит от оборудования, поэтому имеет смысл выполнять ее перед длительными заданиями. Этот процесс должен быть как минимум на порядок быстрее, чем эквивалентные показатели времени достижения точности.
Этот документ доступен на arxiv под лицензией CC 4.0.
[1] Репозиторий Github: https://github.com/smartnets/dataloaderbenchmarks.