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

Проблема

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

Поскольку система машинного обучения продолжает увеличиваться в размерах, зрелости и сложности, у традиционного «линейного» процесса потенциально могут быть 3 проблемы:

· Дублирование кода: многие модели могут иметь одни и те же функции, но все функции каждый раз создаются с нуля.

· Трудно отслеживать: по мере роста количества моделей и сложности моделей стало трудно отслеживать все функции, используемые в моделях.

· Пустая трата времени: Всегда тратьте время на ожидание обработки одних и тех же данных из процесса ETL.

Концепция магазина функций

Хранилище функций — это центральное место, где мы можем создавать и обновлять группы функций из нескольких источников данных. После этого группы функций будут готовы для использования в различных целях аналитики и обучения моделей. Хранилище функций управляет и предоставляет доступ к историческим и текущим данным функций. Согласно HOPSWORK в Feature Stores для ML, хранилище функций предоставляет высокопроизводительный пакетный API для создания правильных обучающих данных на определенный момент времени и извлечения функций для пакетных прогнозов, а также API с низкой задержкой для получения функций для онлайн-прогнозов. Хранилище функций помогает обеспечить согласованные вычисления функций в пакетных и обслуживающих API.

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

Что такое Hopsworks?

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

Один из примеров пайплайнов Hopsworks Feature приведен ниже:

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

Почему полезно? — Hopsworks в примере системы рекомендаций фильмов

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

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

Давайте проясним это, представив демонстрацию реализации кода:

  1. Установка Hopsworks: Подробнее в документации по установке.
wget https://raw.githubusercontent.com/logicalclocks/karamel-chef/3.0/hopsworks-installer.sh
chmod +x hopsworks-installer.sh
./hopsworks-installer.sh

2. Создание учетной записи: Создайте бесплатную учетную запись на app.hopsworks.ai. Войдите в пользовательский интерфейс и получите свой закрытый ключ API в настройках учетной записи.

3. Загрузите набор данных и выполните разработку признаков
Для простоты здесь мы загрузим CSV-файл напрямую в Jupyter Notebook, чтобы имитировать более «критическую» фазу процесса разработки признаков. Мы не начинаем с нуля с подключения к хранилищу — Kafka Streams выполняет всю очистку данных из журналов.

В блокноте Jupyter убедитесь, что вы запустили

!pip install -U hopsworks --quiet

4. Создайте и обновите группы функций из модели 1.

import hopsworks

project = hopsworks.login() # Paste your private API key in the output when you run the cell

fs = project.get_feature_store()

Сначала мы инициализируем группу функций:

movie_fg = fs.get_or_create_feature_group(
    name="movie_feature_group",
    version=1, #if not specified, the func will increment it by 1
    description="movie features",
    primary_key=['movie_id'],
    online_enabled=True #enable faster online access
)

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

movie_fg.insert(movie_features)

Давайте также добавим больше описаний к функциям, чтобы мы знали, чему они соответствуют:

movie_feature_descriptions = [
    {"name": "tmdb_id", "description": "tmdb id of the movie"},
    {"name": "imdb_id", "description": "imdb id of the movie"},
    {"name": "title", "description": " Title of the movie"},
    {"name": "adult", "description": " Boolean value to see if it is an adult movie"},
    {"name": "genre_ids", "description": "genres of the movie"},
    {"name": "original_language", "description": "Original language of the model"},
    {"name": "movie_id", "description": "Movie id - primary key"},    
]

for desc in movie_feature_descriptions: 
    movie_fg.update_feature_description(desc["name"], desc["description"])

5. Посмотрите на группу функций 1, теперь мы можем легко увидеть схему и описание группы функций фильма. Мы также можем проверить функции, нажав «Проверить данные» в правом верхнем углу.

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

7. Просмотр функций и обучение модели

Следующим шагом мы можем получить группы функций и подготовить их к обучению!

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

# get the data by joining by its primary key : movie_id
ds_query = movie_fg.select_all().join(user_fg.select_all())
#create movie feature view and user feature view
try:
    feature_view = fs.get_feature_view(name='movie_feature_group', version=1)
except: 
    feature_view = fs.create_feature_view(
    name='movie_feature_view',
    version=1,
    query=ds_query,
    transformation_functions=transformation_functions
)

try:
    feature_view = fs.get_feature_view(name='user_feature_group', version=1)
except: 
    feature_view = fs.create_feature_view(
    name='user_feature_view',
    version=1,
    query=ds_query,
    transformation_functions=transformation_functions
)

Затем мы создадим обучающий набор данных:

uf_mar_version, uf_job = user_feature_view.create_training_data(
        start_time = "20220301000001",
        end_time = "20230331235959",
        description = 'Users ratings in 2023 March',
        data_format = "csv",
        coalesce = True,
        write_options = {'wait_for_job': True},
 )

Затем набор обучающих данных будет готов для перехода к этапу обучения. Дополнительные инструкции относительно обучения модели см. в ее документации.

8. Больше возможностей? Откройте для себя мониторинг моделей!

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

Вывод по демо:

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

Сильные стороны и недостатки Hopsworks

Мы можем сделать вывод о некоторых сильных сторонах Hopsworks благодаря концепции продукта и нашему тесту с системой рекомендаций фильмов:

· Воспроизводимость: сокращает дублирование и обеспечивает немедленный поиск.

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

· Плавная интеграция: Hopsworks хорошо работает с некоторыми основными источниками данных, такими как Snowflake, Databricks и mangoDB; платформы машинного обучения, такие как Amazon Sagemaker, Azure ML, dataiku и Vertex AI; фреймворки машинного обучения, такие как python, Apache Airflow, Weight и Biases.

· Подробная документация. Hopsworks предлагает исчерпывающую документацию с различными демонстрационными примерами, которые помогут пользователям начать работу.

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

·Сообщество. Hopsworks поддерживает активное сообщество пользователей: свой GitHub и общедоступный канал в Slack, где можно рассказывать о прогрессе продукта, впечатлениях от продукта и отзывах пользователей.

Однако одним из ограничений Hopsworks является то, что бесплатная версия по умолчанию не является полностью мощной. Бесплатная версия позволяет использовать только 5 онлайн-групп функций и хранилище до 25 ГБ, что минимально для любой крупномасштабной задачи разработки. Для более масштабных задач машинного обучения пользователи могут обратиться за дополнительной помощью к команде Hopsworks. Кроме того, ожидается, что он будет хорошо работать с новыми инструментами машинного обучения, которые принесут пользу пользователям.

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

Цель этого сообщения в блоге — служить отправкой задания для курса «Машинное обучение в производстве» в Университете Карнеги-Меллона. Спасибо за чтение!

Некоторые ссылки, которые меня очень вдохновили на содержание: