В Ntropy (мы нанимаем) мы в настоящее время находимся в процессе оценки различных конвейерных платформ машинного обучения. В этой статье мы рассмотрим Elyra, фреймворк, который позволяет легко создавать конвейеры и запускать их на существующих конвейерных платформах (Kubeflow Pipelines и Apache Airflow на момент написания статьи).

Почему конвейеры машинного обучения

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

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

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

Трубопроводы Kubeflow

Kubeflow — это популярная платформа машинного обучения, которая, помимо прочего, предоставляет серверы для ноутбуков и конвейеры Jupyter. Создание пайплайна осуществляется с помощью Kubeflow Pipelines SDK. Это включает в себя написание кода и в целом не обязательно простой процесс.

Элира

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

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

Настраивать

Начать работу с Elyra на существующей установке Kubeflow относительно просто. Единственное, что нам нужно сделать, это создать новый блокнот в Kubeflow и использовать образ Elyra Dockerhub elyra/kf-notebook. Обратите внимание, что ресурсы, которые мы выбираем здесь, не очень важны, поскольку мы можем указать ресурсы для отдельных шагов конвейера позже.

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

Индивидуальный конвейер классификации транзакций

Наш пайплайн будет состоять из трех шагов:

  1. Получить обучающие и тестовые данные
  2. Обучайте и сохраняйте настроенную модель классификации транзакций
  3. Оценка модели и создание визуализаций

Каждому из шагов будет соответствовать блокнот.

Полный код также доступен на GitHub: https://github.com/ntropy-network/ML-tools/tree/master/elyra

Шаг 1. Получение данных

Данные нашего примера содержат транзакции и соответствующие им метки (например, «программное обеспечение», «дистрибьюторы продуктов питания»). Он находится в общедоступной корзине S3, поэтому мы будем использовать команду wget для его загрузки. Мы будем хранить его в каталогеdata. Позже, когда мы создадим конвейер, нам нужно будет указать Elyra передать эти файлы на следующие шаги.

Шаг 2. Обучение модели

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

Далее мы можем загрузить тренировочные данные, которые мы загрузили на предыдущем шаге.

Теперь мы можем обучить CustomTransactionClassifier на нем с помощью Ntropy SDK. После обучения сохраняем модель в каталог artifacts. Мы должны будем сообщить Elyra об этом каталоге позже, чтобы передать его следующему шагу.

Шаг 3 — Оценка и визуализация

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

Теперь мы можем создавать визуализации, которые позже будут отображаться в конвейере с помощью встроенных визуализаций Kubeflow. Все, что нам нужно сделать, это создать файл JSON с именем mlpipeline-ui-metadata.json со схемой, как описано в документации, и он будет подобран автоматически.

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

Создание пайплайна с помощью Elyra

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

Создание файла конвейера

Мы можем создать конвейер в среде ноутбука Jupyter, открыв панель запуска и выбрав один из типов конвейера. Для нас подойдут пайплайны Generic или Kubeflow.

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

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

  • Образ среды выполнения: образ Docker, который будет использоваться на этом этапе. Вместо того, чтобы устанавливать наши зависимости в блокноты, мы также можем создавать образы докеров с уже установленными.
  • CPU/GPU/RAM: ресурсы для этапа конвейера
  • Выходные файлы: локальный путь к выходным файлам шага. Они будут доступны на следующих шагах. В нашем примере на шаге getdata есть файлы обучения и тестирования, а на шаге train есть файл модели.

Запуск конвейера

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

Конвейеры Kubeflow: где будет работать конвейер, зависит от вашей настройки Kubeflow.

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

Дополнительную информацию можно найти в Документах Элиры.

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

Просмотр наших результатов

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

На этапе оценки мы можем видеть визуализации, созданные нами ранее.

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

Автоматизация конвейера

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

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

Заключение

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

Надеюсь, это дало вам представление о том, на что способны пайплайны, и показало, как легко их создавать с помощью Elyra.