От ноутбука к конвейерам Kubeflow с MiniKF и Kale

1. Введение

Kubeflow — это набор инструментов для машинного обучения в Kubernetes . Проект посвящен упрощению, переносимости и масштабируемости развертывания рабочих процессов машинного обучения (ML) в Kubernetes. Цель — предоставить простой способ развертывания лучших в своем классе систем с открытым исходным кодом для машинного обучения на различных инфраструктурах.

Как выглядит развертывание Kubeflow?

Развертывание Kubeflow выглядит следующим образом:

  • Портативный — работает на любом кластере Kubernetes, независимо от того, находится ли он на платформе Google Cloud Platform (GCP), локально или у разных провайдеров.
  • Масштабируемость — может использовать изменяющиеся ресурсы и ограничена только количеством ресурсов, выделенных кластеру Kubernetes.
  • Композитный — расширен возможностями сервисных работников для работы в автономном режиме или в сетях с низким качеством связи.

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

В этом практическом занятии вы узнаете, как создать собственное развертывание Kubeflow с помощью MiniKF и запустить рабочий процесс Kubeflow Pipelines из блокнота Jupyter.

Что вы построите

В этом практическом занятии вы создадите сложный конвейер обработки данных с помощью Kubeflow Pipelines, не используя команды CLI или SDK. Вам не понадобятся знания Kubernetes или Docker. По завершении ваша инфраструктура будет включать в себя:

  • Виртуальная машина MiniKF (Mini Kubeflow), которая автоматически устанавливает:
  • Kubernetes (с использованием Minikube)
  • Kubeflow
  • Kale — инструмент для преобразования универсальных блокнотов Jupyter в рабочие процессы Kubeflow Pipelines ( GitHub )
  • Аррикто Рок отвечает за версионирование и воспроизводимость данных.

Что вы узнаете

  • Как установить Kubeflow с MiniKF
  • Как преобразовать ваши Jupyter Notebooks в конвейеры Kubernetes без использования команд CLI или SDK.
  • Как запустить конвейеры Kubeflow из блокнота одним нажатием кнопки
  • Как автоматически версионировать данные в блокноте и на каждом этапе конвейера обработки данных

Что вам понадобится

  • Активный проект GCP, для которого у вас есть права владельца.

Это продвинутый практический урок, посвященный Kubeflow. Для получения более подробной информации и ознакомления с платформой см. документацию «Введение в Kubeflow» . Несущественные концепции и блоки кода опущены и предоставлены для простого копирования и вставки.

2. Настройка среды

Укажите идентификатор вашего проекта GCP и имя кластера.

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

Откройте консоль GCP.

3fdc4329995406a0.png

Если проект еще не выбран, нажмите «Выбрать проект» :

e8952c0b96067dea.png

И выберите свой проект. У вас должен быть только один:

fe25c1925487142.png

3. Установите MiniKF

Создайте экземпляр вычислительных ресурсов.

В GCP Marketplace найдите "MiniKF".

Выберите виртуальную машину MiniKF от Arrikto.

d6b423c1911ea85a.png

Нажмите кнопку «Запустить на Compute Engine» и выберите свой проект.

b5eeba43053db4bd.png

В окне «Настройка и развертывание» выберите имя для вашего экземпляра MiniKF и оставьте параметры по умолчанию. Затем нажмите кнопку «Развернуть» .

dc401e2bb5a884d9.png

Дождитесь загрузки экземпляра MiniKF Compute.

5228086caadc44c6.png

Войдите в MiniKF

После запуска виртуальной машины MiniKF подключитесь и войдите в систему, нажав кнопку SSH. Следуйте инструкциям на экране, чтобы выполнить команду minikf , которая запустит развертывание Minikube, Kubeflow и Rok. Это займет несколько минут.

774e83c3e96cf7b3.png

Войдите в Kubeflow

После завершения установки и подготовки всех модулей перейдите на панель управления MiniKF. Войдите в Kubeflow, используя имя пользователя и пароль MiniKF.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Пользователи Chrome увидят следующий экран:

6258e0f09e46a6c2.png

Пользователи Firefox увидят следующий экран:

8cff90ce2f0670bd.png

Пользователи Safari увидят следующий экран:

1c6fd768d71c0a92.png

Войдите в Rok

После входа в Kubeflow откройте левое меню, щелкнув значок гамбургера. Перейдите в Snapshot Store и войдите в Rok, используя имя пользователя и пароль MiniKF.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

Поздравляем! Вы успешно развернули MiniKF в GCP! Теперь вы можете создавать блокноты, писать код машинного обучения и запускать конвейеры Kubeflow. Используйте Rok для версионирования данных и обеспечения воспроизводимости результатов.

4. Запустите конвейер из своего блокнота.

В этом разделе вы запустите пример с «Титаником» — соревнование на Kaggle, которое предсказывает, какие пассажиры выжили после крушения «Титаника».

Создайте сервер ноутбуков

Перейдите по ссылке «Серверы ноутбуков» на центральной панели управления Kubeflow.

4115cac8d8474d73.png

Нажмите «Новый сервер» .

f9303c0a182e47f5.png

Укажите имя для вашего сервера ноутбуков.

a2343f30bc9522ab.png

Убедитесь, что вы выбрали это изображение:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Создайте новый пустой том данных размером 5 ГБ и назовите его data .

8544d9b05826b316.png

Нажмите «Запустить» , чтобы создать сервер блокнотов.

28c024bcc55cc70a.png

Когда сервер ноутбуков станет доступен, нажмите «Подключиться» , чтобы установить с ним соединение.

2f06041475f45d3.png

Скачайте данные и блокнот.

Откроется новая вкладка с главной страницей JupyterLab. Создайте новый терминал в JupyterLab.

2482011174f7bc75.png

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

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

В этом репозитории собрана серия тщательно отобранных примеров с данными и аннотированными блокнотами. Перейдите в папку data/examples/titanic-ml-dataset/ на боковой панели и откройте блокнот titanic_dataset_ml.ipynb .

c85baf68b36c63b2.png

Изучите код машинного обучения, использованный в проекте «Титаник».

Запустите ноутбук пошагово. Обратите внимание, что код выдает ошибку из-за отсутствия необходимой библиотеки.

bf2451fd7407e334.png

Вернитесь в Терминал и установите недостающую библиотеку.

pip3 install --user seaborn

d90593b21425dd12.png

Перезапустите ядро ​​ноутбука, нажав на значок «Обновить» .

a21f5f563b36ce4d.png

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

Преобразуйте свой ноутбук в конвейер Kubernetes.

Чтобы включить Kale, нажмите на значок Kubeflow в левой панели.

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

Нажмите кнопку «Компилировать и запустить» .

bde5cef34f00e258.png

Следите за процессом создания снимка.

9408f46abb2493f5.png

Следите за ходом работ по прокладке трубопровода.

9edbde68032f5e4b.png

Перейдите по ссылке, чтобы открыть пользовательский интерфейс Kubeflow Pipelines и просмотреть результат выполнения.

a81646a22584e1b9.png

Дождитесь завершения процесса.

44bee7dc0d24ec21.png

d377b6d574a4970.png

Поздравляем! Вы только что запустили сквозной конвейер Kubeflow, начиная с вашего ноутбука!

5. Воспроизводимость с помощью снимков тома.

Изучите результаты.

Взгляните на логи предпоследнего шага конвейера — «Результаты» . Обратите внимание, что все предикторы показывают оценку 100%. Опытный специалист по анализу данных сразу бы счёл это подозрительным. Это хороший признак того, что наши модели не обобщают данные и вместо этого переобучаются на обучающем наборе данных. Вероятно, это вызвано проблемой с данными, используемыми моделями.

2a594032c2dd6ff6.png

Воспроизвести предыдущее состояние

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

4f25ca4560711b23.png

Следуйте инструкциям в Markdown , то есть просмотрите снимок в пользовательском интерфейсе Rok, щелкнув по соответствующей ссылке.

e533bc781da9355a.png

Скопируйте URL-адрес Rok.

d155d19731b5cedd.png

Перейдите по ссылке «Серверы ноутбуков» .

aafeab01f3ef0863.png

Нажмите «Новый сервер» .

f2265a64e8f9d094.png

Вставьте скопированный ранее URL-адрес Rok и нажмите кнопку «Автозаполнение» .

9ba4d4128a3bdeea.png

Укажите название для своего блокнота.

7685c3bf35fc74b2.png

Убедитесь, что вы выбрали это изображение:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Нажмите «Запустить» , чтобы создать сервер блокнотов.

28c024bcc55cc70a.png

Когда сервер ноутбуков станет доступен, нажмите «Подключиться» , чтобы установить с ним соединение.

34955a64ae316de1.png

Обратите внимание, что блокнот открывается точно в той ячейке, которая соответствует этапу конвейера, который вы запустили.

a1f7c81f349e0364.png

В фоновом режиме Kale восстановил состояние блокнота, импортировав все библиотеки и загрузив переменные из предыдущих шагов.

Отладка предыдущего состояния

Добавьте в эту ячейку команду печати:

print(acc_random_forest)

Запустите активную ячейку, нажав Shift + Return , чтобы переобучить случайный лес и вывести результат. Он равен 100.

e2a8a3b5465fcb5d.png

Теперь давайте проверим, нет ли чего-нибудь странного в обучающих данных. Чтобы изучить и исправить эту проблему, добавьте ячейку над разметкой Random Forest, выбрав предыдущую ячейку и нажав значок плюса (+) .

d1077f32dff9620f.png

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

train_df

2854798ff01aed4e.png

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

Добавить исправление ошибки

Чтобы удалить этот столбец, отредактируйте ячейку и добавьте следующую команду:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

Включите Kale и убедитесь, что ячейка, удаляющая метки " Выжившие" , является частью этапа конвейера проектирования объектов (она должна иметь тот же цвет контура).

Запустите конвейер еще раз, нажав кнопку «Компилировать и запустить» .

Перейдите по ссылке, чтобы открыть пользовательский интерфейс Kubeflow Pipelines и просмотреть результат выполнения.

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

8c6a9676b49e5be8.png

6. Уборка

Уничтожьте виртуальную машину MiniKF.

Перейдите в раздел «Диспетчер развертывания» в консоли GCP и удалите развертывание minikf-1 .

7. Поздравляем!

Поздравляем, вы успешно выполнили сквозной рабочий процесс анализа данных с использованием Kubeflow (MiniKF), Kale и Rok!

Что дальше?

Присоединяйтесь к сообществу Kubeflow:

Дополнительная информация