Вы создаете готовую к эксплуатации модель машинного обучения?

Если вы похожи на меня и просмотрели все эпизоды Shark Tank, то, во-первых, привет, новый лучший друг :) и, во-вторых, что более важно, вы на полпути к тому, как ответить на этот (сложный) вопрос интервью!

Один из самых известных вопросов, которые Кевин О’Лири задает любому начинающему предпринимателю: как бы вы расширили свой бизнес? Скажем, например, вас пригласили в Shark Tank (вам повезло, утенок), чтобы рассказать о своей новой идее ресторана, и возникает этот вопрос: они хотят знать, каковы ваши планы по превращению этой идеи в функциональную идея? Вот как это следует интерпретировать:

  • Что происходит, когда популярность моего ресторана растет?
  • Как мне не отставать от кухонной инфраструктуры?
  • Должен ли я найти оптового поставщика продуктовых принадлежностей или придерживаться существующей розничной торговли?
  • А что насчет космоса? Мне следует продолжить аренду или купить недвижимость?
  • Мне нужно больше сотрудников? Есть ли у меня бюджет?
  • Нужно ли вам перейти на тяжелую технику, чтобы выполнять оптовые заказы?

Вот некоторые из вопросов, о которых вы должны думать, когда Кевин задает вам этот вопрос.

Почему интервьюеры любят задавать этот вопрос?

Используя аналогию, аналогичную Shark Tank, когда интервьюер спрашивает вас о ваших планах по масштабированию модели машинного обучения, он хочет знать следующее:

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

И заметьте, это очень важно с точки зрения технической фирмы! Это потому, что написание кода Python для модели прогнозирования в Jupyter Notebook - это одно дело, а их развертывание для практического повседневного использования - совсем другое дело. Посмотрим, как ...

Как мне, как специалисту по данным, ответить на этот вопрос?

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

Масштабирование w.r.t. данные обучения

Как гласит известная пословица: Ваша модель хороша ровно настолько, насколько хороши исходные данные, на которых она обучается, а обычно так и есть. Таким образом, переобучение вашей модели абсолютно необходимо, если исходные предположения об изменении данных меняются. Например, в модели найма, обученной на данных 80-х годов, не было бы много женщин на руководящих должностях, и, как таковая, эта модель сейчас устарела в 21 веке (в лучшем случае) и будет предвзятым против рекомендации женщин на руководящие должности. (в худшем случае).

Масштабирование w.r.t. поток данных

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

Также разумно использовать контрольные точки при переподготовке сериализованных / маринованных моделей. Это сэкономит вам много времени при повторном обучении модели (изначально построенной, скажем, с 1 миллионом строк), поскольку вам не нужно перестраивать ее с нуля только потому, что вы получили дополнительные 10 тысяч строк. Система может просто наверстать упущенное с того места, где вы ее оставили в прошлый раз.

Интересный факт: H2o поддерживает создание контрольных точек для нескольких моделей, включая GBM, DRF, XGBoost и Deep Learning.

Масштабирование w.r.t. фреймворк

Есть несколько вариантов выбора фреймворка (например, SkLearn, Pytorch, Keras, Tensorflow, H2o, Theano) для вашего решения машинного обучения и глубокого обучения, и важно, чтобы вы сделали выбор, который будет хорошо служить вам в долгосрочной перспективе. бег. Выбор может основываться на нескольких факторах.

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

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

Интересный факт: алгоритмы в scikit-learn, хотя они довольно популярны и просты в реализации, не распространяются, но вы все равно можете воспользоваться преимуществами распределенных вычислений для определенных задач машинного обучения с использованием Spark и Databricks.

Пока мы говорим о распределенном машинном обучении, совершенно необходимо тщательно продумать процесс выбора правильных процессоров (ЦП, графических процессоров, TPU) для наших нужд машинного обучения. Это особенно важно, если вы имеете дело с глубоким обучением, поскольку оно включает в себя тяжелое умножение матриц.

Масштабирование w.r.t. Особенности

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

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

На этом этапе я бы также остановился и подумал, волнует ли меня повышение точности на 0,0001% (благодаря добавлению этих новых функций). Это связано с тем, что точность - не единственное, что имеет значение после определенного этапа, и важно знать, когда следует прекратить обучение модели. Повышение точности должно оправдывать увеличение затрат на техническое обслуживание и обучение.

Масштабирование w.r.t. реальные прогнозы

По мере того, как ваша модель становится (или, по прогнозам, станет) все более и более популярной, то есть количество запросов на прогнозы продолжает поступать, пришло время подумать о том, достаточно ли быстро ваша модель производит прогнозы. То есть остерегайтесь медленных моделей, таких как SVM, KNN или NN (нейронные сети), особенно без поддержки GPU.

Наконец, то, как вы развертываете свою модель в реальном мире, чтобы каждый мог ее использовать, также может варьироваться в зависимости от нескольких факторов, таких как пакетное прогнозирование или прогнозирование в реальном времени, переносимость модели и, иногда, конфиденциальность - я уверен Специалист по анализу данных, работающий в сфере безопасности, не был бы в восторге от того, чтобы поделиться своим кодом обнаружения террористов (вместе с матрицей весов) на Kaggle.

Таким образом, вы можете интегрировать свою модель как часть существующего программного обеспечения, создавать контейнеры для развертывания моделей или использовать инструменты оркестровки, такие как Kubernets, которые помогают управлять контейнерами и кластерами.

Интересный факт: ознакомьтесь с замечательными статьями это и это, чтобы узнать о двух уникальных способах развертывания моделей.

Заключение

Подводя итог, сосредоточьтесь на:

  • масштабирование до новых данных, новые функции
  • сериализация и создание контрольных точек
  • выбор подходящего фреймворка и процессора
  • распараллеливание вычислений - распределенное машинное обучение
  • развертывание с использованием серверных API или сделать его доступным для всего мира в виде моделей с аппаратным ускорением в Интернете

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

До скорого :)

Это часть 1 из серии Вопросы для собеседования, которую я недавно начал. В Части 2 мы поговорим о том, как структурированно объяснить ваш проект ML интервьюеру. Следите за обновлениями ...