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

1. Введение

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

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

Развертывание Kubeflow — это:

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

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

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

Что ты построишь

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

  • Виртуальная машина MiniKF (Mini Kubeflow), которая автоматически устанавливает:
  • Kubernetes (с использованием Minikube)
  • Кубефлоу
  • Kale , инструмент для преобразования блокнотов Jupyter общего назначения в рабочие процессы Kubeflow Pipelines ( GitHub )
  • Arrikto Rok для управления версиями и воспроизводимости данных

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

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

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

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

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

2. Настройте среду

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

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

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

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. Установите МиниКФ

Создать экземпляр Compute

На GCP Marketplace найдите «MiniKF».

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

d6b423c1911ea85a.png

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

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.png

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

5228086caadc44c6.png

Войдите в МиниКФ

Когда виртуальная машина 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

Войти в Рок

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

а683198ac4ba900d.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

Изучите код ML испытания «Титаник»

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

bf2451fd7407e334.png

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

pip3 install --user seaborn

d90593b21425dd12.png

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

a21f5f563b36ce4d.png

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

Превратите свой ноутбук в конвейер Kubeflow

Включите Kale, щелкнув значок Kubeflow на левой панели.

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

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

bde5cef34f00e258.png

Следите за ходом создания снимка.

9408f46abb2493f5.png

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

9edbde68032f5e4b.png

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

а81646a22584e1b9.png

Подождите, пока оно завершится.

44bee7dc0d24ec21.png

d377b6d574a4970.png

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

5. Воспроизводимость с помощью объемных снимков

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

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

2a594032c2dd6ff6.png

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

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

4f25ca4560711b23.png

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

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

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

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

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

print(acc_random_forest)

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

e2a8a3b5465fcb5d.png

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

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:

Дальнейшее чтение