Увеличение повторного использования функций в DataOps с помощью магазинов функций

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

Позвольте мне начать с рассказа о трех событиях из реального мира:

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

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

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

Болевые точки

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

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

Проблемы вычисления функций

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

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

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

Проблемы с обслуживанием функций

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

Сегодня одна из распространенных проблем заключается в том, что модель хорошо работает на обучающем наборе данных, но не в производственной среде. Хотя этому может быть несколько причин, ключевая проблема называется утечкой этикеток. Это возникает в результате того, что для функций модели используются неверные значения на определенный момент времени. Найти правильные значения характеристик непросто. Для иллюстрации: Заноян и др. рассмотрите пример, показанный на рисунке. Он показывает значения характеристик, выбранные при обучении для прогнозирования в момент времени T1. Показаны три функции: F1, F2, F3. Для предсказания P1 необходимо выбрать значения 7, 3, 8 признаков для обучающих признаков F1, F2, F3 соответственно. Вместо этого, если используются постпрогнозирование значений признаков (например, значение 4 для F1), произойдет утечка признаков, поскольку значение представляет собой потенциальный результат прогнозирования и неправильно представляет высокую корреляцию во время обучения.

Реализация магазина функций

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

Услуги магазина функциональных возможностей становятся все более популярными: Uber's Michelangelo, Airbnb's Zipline, Gojek’s Feast, Comcast's Applied AI, Logical Clock’s Hopsworks, Netflix’s Fact Store и Pinterest’s Galaxy - вот некоторые из популярных примеров сервисов функциональных магазинов с открытым исходным кодом. Хороший список новых магазинов функций доступен на сайте featurestore.org.

Дополнительное обсуждение этой темы и шаблонов для самообслуживания хранилищ функций можно найти в моей книге Дорожная карта самообслуживания.