Поскольку не только сложность моделей машинного обучения (ML), но и размер наборов данных продолжают расти, растет и потребность в мощности компьютера. В то время как большинство современных ноутбуков могут справиться со значительной рабочей нагрузкой, их производительности часто просто недостаточно для наших целей в dida. В следующей статье мы рассмотрим некоторые из наиболее распространенных узких мест и покажем, как облачные сервисы могут помочь ускорить работу.

Задний план

Обучение сложной модели на достаточно большом наборе данных может занять дни, а иногда и месяцы на обычном ноутбуке, что больше не делает его жизнеспособным вариантом ни с точки зрения аппаратного обеспечения, ни с временными ограничениями. Чтобы смягчить эти проблемы, dida использует инфраструктуру Google Cloud ML, чтобы иметь возможность проводить длительные учебные занятия на настроенном, высокопроизводительном удаленном оборудовании, которое не зависит от рабочего времени, в то же время сохраняя локальное оборудование доступным для наших сотрудников.

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

Наиболее повторяющиеся части наших процессов можно резюмировать следующим образом:

  • получение данных,
  • анализ и предварительная обработка данных,
  • обучение модели на данных,
  • и, наконец, оценка, визуализация и/или распространение обученной модели.

Ниже каждый процесс описан более подробно с подсказками и советами о том, как ускорить работу с помощью облачных сервисов.

Получение данных

Большинство наборов данных, с которыми мы работаем, основаны на тексте и изображениях. Первый обычно имеет относительно небольшой размер, особенно при сжатии, что делает передачу данных довольно тривиальной задачей. Однако наборы данных изображений могут быть огромными, иногда порядка сотен гигабайт. Поскольку некоторые из нас работают удаленно на ноутбуках с ограниченным объемом памяти, загрузка наборов данных на удаленную машину с внешней пропускной способностью 1 Гбит/с — отличный вариант.

Дополнительные ограничения, такие как квоты на загрузку и ограничение скорости, не являются редкостью. Это часто означает, что мы должны сами распространять изображения среди коллег после загрузки из источника, чтобы не выходить за пределы ограничения данных. Облачные диски упрощают эту задачу, особенно с постоянными дисками для хранения данных, которые могут совместно использоваться несколькими вычислительными экземплярами в режиме только для чтения. Если режим только для чтения не подходит для задачи, то всегда есть возможность подключить машины через внутренние IP-адреса. Это дает скорость сети от 2 до 32 Гбит/с в зависимости от конфигурации вашего процессора, что более чем достаточно, учитывая, что скорость чтения/записи на стандартных твердотельных накопителях Cloud Filestore находится где-то между 0,1–1,2 Гбит/с (или 0,8–9,6 Гбит/с). .

Анализ и предварительная обработка данных

Данные бывают разных форм и размеров. Одна вещь, с которой сталкивался почти каждый специалист по данным, заключается в том, что необработанные данные почти всегда попадают в одну или несколько из следующих категорий: плохо отформатированные, неполные, неправильно помеченные, содержащие аномалии, несбалансированные, неструктурированные, слишком маленькие и т. д. Старый лозунг « ваши результаты настолько хороши, насколько хороши ваши данные» определенно имеет некоторую ценность. Поэтому много времени может и будет потрачено на подготовку необработанных данных, чтобы можно было осмысленно обучить модель. Нажмите на ссылку выше, если вы хотите узнать больше о некоторых распространенных ошибках и о том, как их избежать.

Инструмент, который привлек наше внимание после посещения Google Machine Learning Bootcamp в Варшаве, — это инструмент DataPrep, который делает работу с данными, подобными Excel, намного более удобной. Обычный способ обработки неструктурированных табличных данных состоит в том, чтобы просмотреть каждый столбец один за другим в поисках аномалий, дубликатов с ошибками, странных несовместимых форматов дат и вручную запрограммировать правило или исключение для каждой из этих странных записей. Это быстро раздувает кодовую базу, является утомительной задачей и в конечном итоге ее трудно обобщить. DataPrep решает эту проблему более элегантно: с интуитивно понятным графическим обзором вы можете создавать так называемые рецепты и применять их к исходному источнику данных. Эти рецепты шаг за шагом преобразовывают необработанные данные и выводят чистую таблицу данных, которую затем можно передать в модель машинного обучения, готовую для обучения. Если вам интересно узнать, как это работает, и у вас есть несколько свободных минут, мы рекомендуем посмотреть Расширенные методы очистки данных с использованием Cloud Dataprep на мероприятии Cloud Next ’19.

Обучение модели

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

Рассмотрим, например, настройку гиперпараметров. Для любого нового гиперпараметра, введенного в микс, временная сложность может расти экспоненциально. Предположим, у вас есть три гиперпараметра для настройки, скажем: скорость обучения, размер пакета и тип ядра. Если все они имеют четыре разных значения, которые вы хотите протестировать, вы получите 4³ = 64 различных комбинации.

Это не является большой проблемой, когда набор данных невелик, популярный метод перекрестной проверки поиска по сетке часто можно выполнить на ноутбуке ЦП над набором перестановок гиперпараметров, пока не будет найдена оптимальная комбинация в разумные сроки. . Однако по мере роста сложности модели и/или набора данных ситуация быстро обостряется. Предположим, что одна тренировочная сессия занимает в среднем 24 часа, что не редкость: тогда для оптимизации упомянутых выше гиперпараметров потребуется более 2 месяцев обучения.

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

Сегодня ASIC, такие как TPU, специально созданные для этих типов операций, предлагают еще более высокую производительность. Ван, Вей и Брук из Гарвардского университета выполнили бенчмарк глубокого обучения на последних аппаратных конфигурациях, доступных в облаке Google, как показано в таблице ниже, и победитель оказался весьма выдающимся. Графические процессоры выполняли более чем в 60 раз, а ТПУ — более чем в 200 раз больше вычислений, чем их конкурирующие ЦП в единицу времени. В приведенном выше примере продолжительность настройки гиперпараметра может быть сокращена примерно с 2 месяцев до примерно 8 часов. Несмотря на то, что различные задачи могут получить меньше преимуществ от этих аппаратных опций с точки зрения скорости вычислений, такой уровень прироста производительности трудно игнорировать.

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

Распространение модели

Как только модель обучена и оценена, а результат удовлетворительный, пришло время опубликовать ее, чтобы коллеги, клиенты, конечные пользователи и т. д. могли проверить ее на себе. Это, конечно, может быть достигнуто на вашей собственной существующей серверной инфраструктуре, независимо от того, размещена ли она на Amazon AWS, Microsoft Azure или любом другом облачном провайдере, на ваших собственных серверах и т. д. Вариантов хостинга сегодня много, и с помощью Docker и других программных решений, в прошлом мы развертывали индивидуальные проекты на всех типах платформ, убедившись, что они хорошо интегрируются с существующей производственной средой наших клиентов.

Удобным способом распространения модели является запуск веб-экземпляра, который преобразует ввод и вывод вашей модели в REST API, доступный из браузера, мобильного приложения или других серверов. Две библиотеки, которые хорошо подходят для решения этой задачи, — Flask и FastAPI, которые позволяют нам развертывать REST API во всех типах сред. Но для последовательности мы покажем вам, как это делается в Google Cloud: сначала экспортировать вашу модель, затем развернуть вашу модель и, наконец, открыть ее через REST API.

После того, как ваша модель настроена и работает, убедиться, что она автоматически масштабируется для обработки большого количества пользователей, относительно тривиально. Вы можете настроить пороговые значения рабочей нагрузки, при которых автоматически запускаются новые экземпляры. Система снова автоматически масштабируется, когда количество пользователей уменьшается. Подробнее о распределении узлов для онлайн-прогноза читайте здесь.

Вывод

Выше мы дали общий обзор наиболее распространенных этапов машинного обучения в dida: сбор данных, анализ и предварительная обработка данных, обучение модели на данных и, наконец, оценка, визуализация и/или распространение обученной модели. Хотя ваши проекты могут выглядеть иначе, мы надеемся, что поделились с вами некоторыми полезными идеями при разработке собственных проектов в будущем.

Первоначально опубликовано на https://dida.do 2 декабря 2019 г.