С момента своего создания RAPIDS cuML предлагал значительно более быстрое обучение и вывод моделей машинного обучения (ML) за счет ускорения графического процессора. Однако, как вам скажет любой специалист по данным, сама модель - это лишь часть того, что нужно для успеха, когда дело доходит до машинного обучения. Часто лучшие решения проблемы машинного обучения включают обширную предварительную обработку входных данных для ускорения сходимости или повышения производительности, а поиск идеального подхода к предварительной обработке требует способности быстро перебирать возможности и проверять их влияние на производительность.

С выпуском RAPIDS v0.16 cuML теперь включает в себя целый ряд новых инструментов для ускорения общих задач предварительной обработки, что позволяет вам быстрее опробовать больше конвейеров предварительной обработки и сузить круг поиска оптимального решения. Важно отметить, что эти новые инструменты означают, что для большинства конвейеров машинного обучения ваши данные никогда не должны покидать графический процессор, что устраняет накладные расходы на копирование между устройством и хостом. На NVIDIA V100 с пропускной способностью локальной памяти графического процессора около 900 ГБ / с, но с пропускной способностью PCIe 32 ГБ / с, эти копии между устройством и хостом могут быть примерно в 30 раз медленнее, чем эквивалентная копия на устройстве. В новом A100 пропускная способность памяти графического процессора составляет 2 ТБ / с, что делает копии на устройстве еще более быстрыми. Увеличенный общий объем памяти A100 также означает, что вы можете иметь до 640 ГБ данных, загруженных в память графического процессора на одном сервере, что позволяет даже относительно большим наборам данных оставаться на устройстве в течение всего рабочего процесса машинного обучения.

В следующем блокноте Jupyter мы рассмотрим несколько новых алгоритмов предварительной обработки cuML и продемонстрируем значительное ускорение хранения ваших данных исключительно на графическом процессоре.

Стоя на плечах гигантов

Прежде чем углубляться в технические детали, стоит признать огромный долг признательности cuML компании Scikit-Learn. Благодаря плавной кривой обучения, продуманному дизайну и активному сообществу Scikit-Learn API стал фактически стандартом для реализаций машинного обучения. Неудивительно, что cuML на раннем этапе принял решение сохранить как можно большую совместимость API с Scikit-Learn, в первую очередь пытаясь предложить ускорение GPU для уже хорошо развитой экосистемы инструментов на основе Scikit-Learn.

Благодаря этому решению команда RAPIDS смогла получить даже больше непосредственной выгоды от Scikit-Learn, чем мы в прошлом, когда мы разрабатывали новые инструменты предварительной обработки, которые мы демонстрируем здесь. Для нового модуля “cuml.experimental.preprocessing” мы смогли напрямую включить код Scikit-Learn (все еще распространяемый по лицензии Scikit-Learn, разумеется) в cuML с помощью лишь небольшого количества логики адаптера, чтобы получить преимущества сквозной Ускорение GPU. Поэтому, если вы используете эти функции в своей работе, помните, что они доступны благодаря самоотверженной работе разработчиков Scikit-Learn, и не забывайте цитировать их.

Меню предварительной обработки

Алгоритмы предварительной обработки, доступные в cuML, можно разделить на пять широких категорий: импортеры, масштабирующие устройства, дискретизаторы, кодировщики и генераторы функций.

  • Импортеры несут ответственность за заполнение недостающих данных на основе тех данных, которые доступны.
  • Масштабирующие устройства можно использовать для повторного центрирования объекта путем удаления его среднего (обычно среднего или медианного) значения и / или масштабирования объекта путем стандартизации его разброса (обычно дисперсии или межквартильного диапазона) или общего диапазона.
  • Дискретизаторы берут количественные характеристики и распределяют их по дискретным категориям или ячейкам.
  • Кодировщики обычно делают нечто противоположное - берут категориальные функции и присваивают им более удобное числовое представление.
  • Генераторы функций создают новые функции, комбинируя существующие.

Полный набор алгоритмов предварительной обработки, доступных в cuML, показан ниже:

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

Пример

Чтобы продемонстрировать некоторые из этих недавно ускоренных алгоритмов, мы создали блокнот Jupyter, который проходит через их приложение в набор данных BNP Paribas Cardif Claims Management. Этот набор данных содержит немногим более 100 000 выборок, каждая из которых содержит около 130 характеристик, как категориальных, так и количественных. Мы выбрали этот набор данных как потому, что он несколько сложен (много отсутствующих значений и нет информации о фактическом значении функций), так и потому, что это хороший размер, чтобы продемонстрировать улучшения времени выполнения cuML, не делая утомительным запуск эквивалента Scikit-Learn. . Цель этой демонстрации - в первую очередь продемонстрировать процесс создания сквозного конвейера с ускорением на GPU; Чтобы получить подробный обзор повышения эффективности классификации в этом наборе данных, ознакомьтесь с ведущими решениями связанной с этим задачи Kaggle.

Если вы хотите попробовать запустить этот ноутбук локально, вы можете сделать это, сначала установив RAPIDS v0.16, а затем загрузив ноутбук отсюда.

Полученные результаты

Последний конвейер в нашей демонстрационной записной книжке включал примеры всех пяти основных категорий алгоритмов предварительной обработки. Ниже приведены средние результаты синхронизации для конвейера с cuML и Scikit-Learn на NVIDIA DGX-1 с использованием одного графического процессора V100.

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

Выводы

С v0.16 RAPIDS теперь стало практичным выполнять каждый шаг сложных конвейеров машинного обучения на графическом процессоре, что приводит к значительному ускорению задач разработки функций. Сквозное ускорение графического процессора с помощью cuML позволяет нам быстрее выполнять итерацию подходов к предварительной обработке и оттачивать именно те функции, которые необходимы для максимизации производительности или времени сходимости.

Чтобы глубже погрузиться в предварительную обработку с помощью cuML для обработки естественного языка, ознакомьтесь с двумя нашими предыдущими сообщениями по этой теме. Чтобы подробнее узнать, как Kaggler воспользовался преимуществами сквозной обработки GPU с помощью RAPIDS, ознакомьтесь с недавней статьей Луизы Фербах об использовании RAPIDS для текущего конкурса Механизмы действия.

Если вам нравится то, что вы здесь видели, вы можете легко установить RAPIDS через conda или Docker и попробовать это на своих собственных данных. Если у вас возникнут какие-либо проблемы, пока эти функции предварительной обработки вышли из экспериментальной, сообщите нам об этом через средство отслеживания ошибок cuML. Вы также можете связаться с нами через Slack, Группы Google или Twitter. Мы всегда ценим отзывы пользователей.