Введение

Модели машинного обучения могут принести пользу бизнесу только тогда, когда они перенесены из «песочницы» в реальный мир. Однако это легче сказать, чем сделать. Многие предприятия не учитывают сложность производства своих моделей и изо всех сил пытаются развернуть свои модели, что приводит к напрасной трате ресурсов и невыполненным обещаниям о ценности машинного обучения. К счастью, UbiOps и WhyLabs объединились, чтобы упростить развертывание и мониторинг моделей машинного обучения.

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

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

Чтобы продемонстрировать интеграцию, мы обучим модель прогнозировать цену подержанного автомобиля на основе ряда факторов (включая мощность, год выпуска и пробег), развернем ее с помощью UbiOp, а затем будем отслеживать ее в производстве с помощью ПочемуЛабс. Мы используем упрощенную версию этого набора данных Kaggle, из которого мы удалили менее важные функции и сократили количество строк. Мы разделили наш набор данных на кадры данных обучение, тестирование и производство и добавили некоторые возмущения в набор рабочих данных, чтобы подчеркнуть влияние различий между данными песочницы и данными реального мира. Вы можете запустить весь этот код самостоятельно, запустив этот блокнот Jupyter или просто следуя инструкциям в этом посте.

Подготовка нашей среды

Мы советуем вам пройти Быстрый старт UbiOps и Быстрый старт WhyLabs, прежде чем продолжить.

Прежде чем мы приступим к обучению, развертыванию и мониторингу нашей модели, нам нужно создать среду, способствующую этим действиям. Мы можем сделать это, установив определенные зависимости (pandas, sklearn, ubiops и Whylogs) с помощью pip.

import sys
!{sys.executable} -m pip install -U pip
!{sys.executable} -m pip install pandas --user
!{sys.executable} -m pip install sklearn --user
!{sys.executable} -m pip install ubiops --user
!{sys.executable} -m pip install whylogs --user

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

import os

# Set WhyLabs config variables
WHYLABS_API_KEY = "whylabs.apikey"
WHYLABS_DEFAULT_ORG_ID = "org-1"
WHYLABS_DEFAULT_DATASET_ID = "model-1"


# Set ubiops config variables
API_TOKEN = "Token ubiopsapitoken" # Make sure this is in the format "Token token-code"
PROJECT_NAME = "blog-post"

# Set environment variables
os.environ["WHYLABS_API_KEY"] = WHYLABS_API_KEY
os.environ["WHYLABS_DEFAULT_ORG_ID"] = WHYLABS_DEFAULT_ORG_ID
os.environ["WHYLABS_DEFAULT_DATASET_ID"] = WHYLABS_DEFAULT_DATASET_ID

Как только мы все это сделали, мы готовы обучить нашу модель.

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

Мы начинаем с обучения простой линейной регрессии из библиотеки scikit-learn на нашем наборе данных. Наряду с обучением модели мы также создаем журналы данных в форме профилей WhyLogs и отправляем эти профили на платформу WhyLabs. Это позволяет нам создать «базовый уровень» данных, используемых для обучения модели, которые мы можем сравнить с данными в производстве, чтобы гарантировать, что производительность нашей модели не ухудшится.

Мы делаем это, добавляя следующий фрагмент кода вместе с нашим обучающим кодом модели:

writer = WhyLabsWriter("", formats=[],)
session = Session(project="demo-project", pipeline="pipeline-id", writers=[writer])
with session.logger(dataset_timestamp=yesterday) as ylog:
    ylog.log_dataframe(data)

Развертывание с UbiOps

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

Круто то, что мы также можем создавать их, используя нашу клиентскую библиотеку! Таким образом, повторно используя созданные ранее переменные WhyLabs, мы можем сделать что-то вроде этого:

# Create environment variables for whylabs
api.deployment_environment_variables_create(
    project_name=PROJECT_NAME,
    deployment_name=DEPLOYMENT_NAME,
    data=ubiops.EnvironmentVariableCreate(
        name="WHYLABS_API_KEY",
        value=WHYLABS_API_KEY,
        secret=True
    )
)

api.deployment_environment_variables_create(
    project_name=PROJECT_NAME,
    deployment_name=DEPLOYMENT_NAME,
    data=ubiops.EnvironmentVariableCreate(
        name="WHYLABS_DEFAULT_ORG_ID",
        value=WHYLABS_DEFAULT_ORG_ID,
        secret=True
    )
)

api.deployment_environment_variables_create(
    project_name=PROJECT_NAME,
    deployment_name=DEPLOYMENT_NAME,
    data=ubiops.EnvironmentVariableCreate(
        name="WHYLABS_DEFAULT_DATASET_ID",
        value=WHYLABS_DEFAULT_DATASET_ID,
        secret=True
    )
)

Таким образом, клиент WhyLabs можно легко инициализировать, поместив что-то вроде этого, например, в ваш init():

self.wl_session = get_or_create_session()

Мониторинг с WhyLabs

Теперь, когда мы развернули нашу модель и отправляем в нее данные, мы также можем регистрировать те же данные, а также сделанные прогнозы, и отправлять эти журналы в WhyLabs. Как и выше, для создания профилей Whylogs и отправки их в WhyLabs требуется короткий фрагмент кода:

X = pd.read_csv('production_used_cars_data.csv')
Y = pd.read_csv('prediction.csv')
combined = X
combined['price'] = Y['target']
with session.logger() as ylog:
    ylog.log_dataframe(combined)

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

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

Заключение

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

Полное техническое изложение примера интеграции см. в репозитории GitHub.

Если вы заинтересованы в развертывании своего кода для обработки данных, ознакомьтесь с UbiOps. Вы можете попробовать это сегодня бесплатно! Для получения дополнительной технической информации вы также можете посетить страницу документации UbiOps: www.ubiops.com/docs/.

Если вы хотите попробовать платформу WhyLabs, ознакомьтесь с нашей совершенно бесплатной Стартовой версией.

Первоначально опубликовано на https://whylabs.ai.