Развертывание моделей машинного обучения в любом месте с помощью одной строки Python

Большая идея Валлару

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

У нас была грандиозная идея: а что, если бы мы могли дать специалистам по данным «большую зеленую кнопку» для производства ИИ?

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

Разверните простую модель линейной регрессии на одном ЦП или сложную модель нейронной сети для работы на сотнях ЦП в кластере, используя один и тот же метод Python. А после развертывания фактическая производительность логического вывода становится невероятно высокой, вы можете получить полный контрольный журнал, а также обновлять и повторно развертывать модель без простоев.

Сейчас есть и другие решения, предоставляющие Python SDK для развертывания моделей, например AWS SageMaker. Разница с Wallaroo в том, что:

  1. Нам все равно, где обучались модели
  2. Вы можете использовать один и тот же SDK для развертывания в различных средах.
  3. Вы получаете гораздо лучшую производительность логического вывода, чем любое другое решение.
  4. Wallaroo очень сосредоточен на том, чтобы быть как можно более простым и мощным.

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

Основные принципы Wallaroo

Прежде чем представить Wallaroo Python SDK, полезно уточнить некоторые основные термины:

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

Вывод (также известный как «прогноз») — это выходные данные Модели, которые возвращаются во внешние бизнес-системы после ввода некоторых данных. Например, модель мошенничества с кредитными картами примет в качестве входных данных детали транзакции и вернет число с плавающей запятой от 0,0 до 1,0, обозначающее вероятность мошенничества в качестве вывода.

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

Эксперимент – особый тип воронки, который позволяет сравнивать несколько моделей, проводить A/B-тестирование и эксперименты. Например, эксперимент «Чемпион/Претендент» может направлять 90 % запросов на логические выводы к «Чемпиону» и 10 % запросов к набору экспериментальных моделей «Претендент». Также возможны более сложные установки, такие как многорукий бандит.

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

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

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

Wallaroo Engine – единица вычислительной мощности (например, 4 процессора), на которой работает программное обеспечение Wallaroo. На виртуальной машине или аппаратном сервере может одновременно работать несколько механизмов.

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

Вот концептуальная схема экземпляра Wallaroo, работающего в клиентской среде:

Быстрый старт Wallaroo Python SDK

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

# Initial one-time set-up - get an instance of Wallaroo (and underlying infrastructure) 
import wallaroo
wl = wallaroo.Client()
# This is the “big green button” - upload and then immediately deploy a model into prod 
# Upload by model name, version, and path; then deploy by a deployment name 
# Returns a deployment handle for later use
dep = wl.upload_model('ccfraud','2021-09-01','./keras_ccfraud.onnx').deploy('My-first-deployment')
# Once deployed we can run inference (or also do an HTTP POST from any language) 
data = {'tensor' = [-1.060329750089797, 2.354496709462385,-3.563878832646437,…]} dep.infer(data)
[InferenceResult({'check_failures': [],
'elapsed': 158201,
'model_id': 'ccfraud',
'model_version': '0001',
'original_data': {'tensor': [[-1.060329750089797,
2.354496709462385,
-3.563878832646437,
5.138734892618555,
-1.23084570186641,
-0.7687824607744093,
-3.588122810891446,
-5.030912501659983,...
0.9204422758154284,
-0.10414918089758483,
0.3229564351284999,
-0.7418141656910608,
0.03841201586730117,
1.099343914614657,
1.2603409755785089,
-0.14662447391576958,
-1.446321243938815]]},
'outputs': [{'Float': {'data': [0.9976416826248169], 'dim': [1, 1], 'v': 1}}], 'pipeline_id': '',
'time': 1631716413635})]
# Here’s running inference using a file and grabbing just the inferences
filename = './dev_smoke_test.json'
inferences = dep.inference_from_file(filename)

SDK также позволяет получать журналы аудита и напрямую работать с моделями и развертываниями в экземпляре Wallaroo.

# You can get the audit log for your deployment, with an optional limit on entries 
logs = dep.logs(limit=10)
# You can get a list back of the models uploaded or deployed to Wallaroo
models = wl.list_models()
models -> {'modelA':modelA-handle}, 'modelB':modelB-handle}
# You can get a list back of the active or previously active deployments in Wallaroo 
deployments = wl.list_deployments()...deployments -> {'depA':depA-handle}, 'depB':depB-handle}
depB = deployments['depB']
# You can replace a model in existing deployment with a new model
model2 = wl.upload_model('ccfraud', '0002', './xgboost_ccfraud.onnx')
dep.replace_model(model2)
# You can deactivate an active deployment with an endpoint
dep.undeploy()

Пример расширенного использования Wallaroo Python SDK

Конечно, как только вы научитесь легко развертывать модели, вам, естественно, захочется приступить к выполнению дополнительных задач, таких как проверка моделей на некоторых тестовых данных, объединение нескольких моделей в конвейер или создание и выполнение A/B-тестов. Итак, мы решили расширить эту «большую зеленую кнопку» до полного Python SDK. Это означает, что специалисты по обработке и анализу данных могут развертывать сложные пайплайны, проводить эксперименты и анализировать результаты — и все это с помощью всего лишь нескольких мощных строк Python (здесь мы даем лишь небольшое представление о мощности и гибкости этого подхода).

Пример: модель мошенничества с кредитными картами

Мы собираемся создать эксперимент с использованием модели мошенничества с кредитными картами.

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

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

Результатом модели является оценка, которая пытается предсказать вероятность того, что данная транзакция является мошеннической.

Прежде чем мы это сделаем, нам нужно иметь возможность загружать модели в Wallaroo и создавать развертывания отдельно. Это связано с тем, что в нашем эксперименте будут задействованы 3 версии модели, развернутые в одном конвейере (здесь есть шаг настройки, который мы объясним в следующем руководстве). Допустим, мы уже обучили эти три версии.

import wallaroo
wl = wallaroo.Client()
# upload a default model with a name/version name/path to Wallaroo returned with a handle 
modelC = wl.model_upload('ccfraud','2021-05-01','./keras_ccfraud.onnx').configure()
# upload the other models to be used in the experiment
modelA = wl.model_upload('modela','2021-05-01','./modela.onnx').configure() 
modelB = wl.model_upload('modelb','2021-05-01','./modelb.onnx').configure()

Wallaroo поддерживает несколько различных типов экспериментов. Здесь мы приведем пример эксперимента «Разделение стоимости». В частности, на основе поля card_type в транзакции мы будем использовать одну из различных моделей для выполнения логического вывода.

# Define a pipeline that will split the data and models according to card_type 
# gold -> modelA; platinum -> modelB, palladium -> modelB, everything else -> modelC 
ABC_config = wl.pipeline.ValueSplitExperiment('ABCtest', 'card_type', modelC, [('gold', modelA),('platinum', modelB),('paladium', modelB)])
# Create a named pipeline based on this config
pipeline = wl.pipeline.build_pipeline('ABC_experiment',ABC_config)
# Now deploy the pipeline and make it active, getting a handle to the deployment 
dep = pipeline.deploy()

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

# Get the last 9000 audit logs for the deployment
logs = dep.logs(limit=9000)
print(f"Got {len(logs)} logs. First Record is...")
logs[0]
Got 9000 logs. First Record is…
{'elapsed': 70386,
'model_name': 'modela',
'model_version': '2021-05-01',
'deployment_name': 'ABC_experiment',
'model_id': 2,
'pipeline_name': 'ABC_experiment',
'original_data': {'card_type': 'gold',
'charge_id': 0,
'tensor': [[1.69305013053613,
-0.591240803715069,
-0.570755875268331,
1.30100162253186,
-0.378400956715303,
0.0686814021318407,
-0.346850572427201,
0.0185936578619029,
0.864171849635227,
0.139136643051482,
-0.98679699671665,
0.258755365127427,
0.314567877319763,
-0.008582600113463,
0.880257478045616,
0.478728686012914,
-0.807302294320094,
0.346728483205089,
-0.820389631256546,
0.0773174653779048,
0.304271301876417,
0.685317938952773,
0.0373228884701886,
0.596997355974024,
-0.116044472361816,
-0.600470593249377,
0.0289245656610305,
0.0005886610640672,
149]]},
'outputs': [{'Float': {'data': [0], 'dim': [1, 1], 'v': 1}}],
'pipeline_id': 'ABC_experiment',
'time': 1621451613004}

Мы можем превратить это в фрейм данных Pandas и запустить всевозможную интересную аналитику.

# Let’s get a Pandas dataframe
df = wl.to_dataframe(logs)
# How often did each model predict fraud?
df['fraud_prediction'] = df['inference'] > 0.50
fraud_predictions = df.groupby('model_name').agg({'model_name': ['count'], 'fraud_prediction' : ['sum']})
fraud_predictions.columns = ['count', 'sum']
fraud_predictions['pct_fraud'] = (fraud_predictions['sum'] / fraud_predictions['count']) * 100 Fraud_predictions
      model_name count sum pct_fraud
      modelC 2958 2 0.067613
      modelA 3014 4 0.132714
      modelB 3028 6 0.198151
# We can visualize this in a bar chart using standard libraries such as seaborn 
import seaborn as sns
ax = sns.barplot(data=fraud_predictions.reset_index(), x='model_name', y='pct_fraud') _ = ax.set_title("Predicted Fraud Percentage")

Подробнее

В этом посте мы продемонстрировали, как использовать Python SDK Wallaroo для быстрого и простого развертывания модели машинного обучения. Мы невероятно рады нашему Python SDK, и мы быстро улучшаем и расширяем его, получая отзывы от пользователей.

Если вы хотите изучить это вместе с нами, например, получить доступ к полному пакету SDK, дать нам конкретные отзывы о функциональности/семантике/интеграции или обсудить, как это может помочь в вашем случае использования, напишите нам по адресу [email protected]. .