Найти тему
Mr. GeeK

Как обучить нейросеть на ноутбуке?

Важнейший этап машинного обучения (ML) – подготовка данных. Их нужно собрать, привести к единому формату, отфильтровать и проверить прежде, чем передать на вход нейросети.

Такая подготовка может растянуться на неопределённое время, поскольку даже среди специалистов по ML единицы владеют современными инструментами обработки больших данных.

Тысячу строк ещё можно «причесать» в Excel, а вот если их миллионы – требуется принципиально другой подход из области Big data.

В статье для TowardsDataScience cтарший специалист по обработке данных в XebiaLabs и соучредитель vaex.io Йован Веляноски (Jovan Veljanoski) показывает на реальном примере, как можно быстро обучить нейросеть на сырой выборке из миллиарда образцов.

Для этого используется обычный ноутбук без каких-либо нейропроцессоров и других специализированных ускорителей. Звучит как фантастика? Вовсе нет, всё дело в рациональном использовании ресурсов.

Перед Йованом была поставлена задача: создать алгоритм ML, предсказывающий продолжительность поездки в такси для оптимизации работы автопарка. Из публичной базы он взял данные обо всех поездках в Нью-Йорке за семилетний период и сохранил их в одну таблицу.

Размер файла получился более 100 Гб, а количество строк в таблице превысило один миллиард. Ни одна программа не способна обработать такой массив за разумное время (а большинство даже не в состоянии открыть).

Проблема в том, что традиционные приложения создают временные файлы и преобразуют все данные в свой формат, затрачивая на это уйму ресурсов. Поэтому Йован использовал нетривиальный инструмент с открытым исходным кодом: Vaex (https://github.com/vaexio/vaex) - библиотеку DataFrame на Python.

Vaex использует memory mapping (динамическое отображение блоков данных в ОЗУ), за счёт чего открывает огромные файлы мгновенно. Трансляция ссылок на блоки данных не требует физического выделения дополнительной памяти до тех пор, пока данные не подвергались модификации. При этом добавление и удаление целых столбцов также происходит за доли секунды, поскольку это виртуальные операции со ссылками, а не запись новых файлов.

Йован применил серию фильтров для удаления отменённых поездок и неполных данных, после чего сразу получил готовую подборку для обучения нейросети из 812 816 595 образцов.

Интересно, что время поездки в ней не хранилось статично в отдельном столбце, а динамически вычислялось как разница между временными штампами окончания и начала заказа. Аналогично рассчитывалось расстояние, поэтому даже при обработке 100-гигабайтного файла требования к объёму ОЗУ и накопителя оставались весьма скромными.

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

Источник