Одна из самых больших проблем в науке о данных - это возможность быстро развернуть модель в производственной среде. И на этом история не заканчивается. На самом деле, давно хотелось, чтобы блокировка dev-deploy была очень простой, гибкой и всегда правдоподобной, поскольку нам нужно часто обновлять и масштабировать наши модели, а изменения должны быть доступны в производственной среде немедленно и без проблем.

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

В течение некоторого времени я использую платформу Cloud Pak for Data (CPD) и Watson Machine Learning (WML) в качестве среды выполнения для запуска и развертывания моих моделей. И, как только мои модели будут готовы, развертывание начнется просто за несколько щелчков мышью. В качестве альтернативы я использую небольшой фрагмент кода для пользовательских моделей, которые вы можете запускать в блокноте Jupyter или в любом редакторе, который вы предпочитаете для написания кода ML.

Есть несколько других способов построения моделей машинного обучения на CPD - 1) вы можете использовать AutoAI, если у вас есть структурированные данные размером менее 1 ГБ, 2) Если вы работаете с текстовыми данными или тематическим моделированием / LDA, используйте Watson Knowledge Studio для аннотации и развертывания в Watson Понимание естественного языка или Watson Discovery, 3) Если вы работаете с проблемой ответа на вопрос, используйте Watson Discovery Service, 4) Если вы пишете простой старый код Python с помощью scikit, tensorflow, xgboost, lightgbm или других библиотек с открытым исходным кодом, используйте записные книжки, 5) Если написание кода R, использование RStudio, 6) потоки SPSS Modeler от инженерии данных до построения модели. Список длинный, и есть еще много сервисов SaaS, таких как Watson Assistant, Watson Text to Speech, Speech to Text и так далее. поскольку предложения Watson являются наиболее обширными и мощными комплексными услугами ИИ (поддерживаемыми Red Hat Openshift на базе IBM Cloud на базе Kubernetes), доступными сегодня на рынке (https://www.zdnet.com/article/guide-to-enterprise -ai-и-компании-и-приложения-машинного обучения / ).

В этой статье я хотел бы специально поделиться методологией развертывания для автоматизированного ИИ, а также нашими старыми простыми моделями машинного обучения на Python / с открытым исходным кодом. Если вы используете AutoAI, выполните следующие шаги (1–4) из части 1. При создании пользовательских самокодирующихся моделей используйте фрагменты кода из части 2.

Часть 1. Развертывание модели AutoAI

Вы также можете проверить ответы перед интеграцией этих сервисных вызовов в свое приложение, например, используя REST-клиент в качестве почтальона, как показано ниже, или вызывая команды cURL, как в шаге 4 (d) выше.

Часть 2: Развертывание модели с использованием библиотек с открытым исходным кодом в редакторах (блокнот Jupyter, блокнот Zeppelin, RStudio (при использовании кода R) и т. Д.)

У меня был готовый код развертывания моделей xgboost и scikit-learn на CPD 2.5, который я вставляю ниже. Но вы можете использовать любую модель из массива поддерживаемых моделей (spss-modeler, tensorflow, xgboost, scikit-learn, pmml) на WML в соответствии с синтаксисом здесь.

1. Определите службу WML.

from watson_machine_learning_client import WatsonMachineLearningAPIClient
import os

token = os.environ['USER_ACCESS_TOKEN']

wml_credentials = {
   "token": token,
   "instance_id" : "openshift",
   "url": os.environ['RUNTIME_ENV_APSX_URL'],
   "version": "2.5.0"
}
wml_client = WatsonMachineLearningAPIClient(wml_credentials)

2. Для данных в реальном времени можно использовать следующий формат для полей ввода. Я маскирую фактические значения, поскольку это личные данные.

input_fields = [
      {
        "name": "field1",
        "type": "val1"
      },
     {
        "name": "field2",
        "type": "val2"
      },
     ...
     ...
    ]

3. Определите схему обучающих данных.

trn_data_schema = [{
  "connection": {
    "endpoint_url": "",
    "access_key_id": "",
    "secret_access_key": ""
  },
  "location": {
    "bucket": "",
    "path": ""
  },
  "type": "fs",
  "schema": {
    "id": "xxxxxxxxxx",
    "fields" : input_fields,
    "type": "DataFrame"
  }
}]

4а). Определите meta_props для модели случайного леса scikit-learn следующим образом.

model_props = {
    wml_client.repository.ModelMetaNames.NAME: "classification-model--RF",
    wml_client.repository.ModelMetaNames.RUNTIME_UID: "scikit-learn_0.20-py3.6",
    wml_client.repository.ModelMetaNames.TYPE: "scikit-learn_0.20",
    wml_client.repository.ModelMetaNames.TRAINING_DATA_REFERENCES: trn_data_schema
}

4б). Определите meta_props для модели XGBoost следующим образом.

model_props = {
    wml_client.repository.ModelMetaNames.NAME: "classification-model-xgboost",
    wml_client.repository.ModelMetaNames.RUNTIME_UID: "xgboost_0.82-py3.6",
    wml_client.repository.ModelMetaNames.TYPE: "xgboost_0.82",
    wml_client.repository.ModelMetaNames.TRAINING_DATA_REFERENCES: trn_data_schema
}

5. Сохраните модель.

from project_lib import Project
project = Project.access()
project_id = project.get_metadata()["metadata"]["guid"]

wml_client.set.default_project(project_id)
saved_model_details = wml_client.repository.store_model(model=model, meta_props=model_props, \
                                                      training_data=X_train, training_target=y_train, pipeline=pipeline)
wml_client.repository.list_models()

Затем можно выполнить шаг 3 и шаг 4 из части 1 выше, чтобы развернуть сохраненную модель.

Заключительные комментарии

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

Cloud Pak for Data (CPD) - это платформа, которая позволяет масштабировать, развертывать и объяснять ваши модели с помощью нескольких щелчков мышью, всесторонне используя базовую платформу Red Hat Openshift на базе Kubernetes в IBM Cloud. А такие платформы, как CPD, - это необходимость в современном мире, ориентированном на данные.