От ноутбука к конвейерам Kubeflow с настройкой HP: путешествие в науку о данных

1. Введение

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

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

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

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

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

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

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

В этом практическом занятии вы создадите сложный конвейер обработки данных с настройкой гиперпараметров на 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. Если вы планируете использовать существующий проект GCP, убедитесь, что он соответствует минимальным требованиям, описанным ниже. Первый шаг — открыть менеджер ресурсов в консоли GCP.

Создайте новый проект или выберите существующий:

99b103929d928576.png

Проверьте следующие минимальные требования:

Для получения дополнительной помощи по настройке проекта GCP см. документацию GCP .

После настройки проекта GCP перейдите непосредственно к инструкциям по установке MiniKF.

Откройте свой предварительно выделенный проект GCP.

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

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

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

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

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

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

d6b423c1911ea85a.png

Нажмите кнопку «ЗАПУСК» и выберите свой проект:

7d07439db939b61c.png

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

7d5f7d17a80a1930.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 откройте левое меню, щелкнув значок гамбургера. Нажмите «Снимки» и войдите в Rok, используя имя пользователя и пароль MiniKF.

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

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

В этом разделе вы запустите пример определения породы собаки — проект из программы Udacity AI Nanodegree. Получив изображение собаки, финальная модель оценит её породу.

Создайте сервер ноутбуков в вашем кластере Kubeflow.

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

60825e935fd0f39b.png

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

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

Убедитесь, что вы выбрали следующий образ Docker (обратите внимание, что тег образа может отличаться):

gcr.io/arrikto/jupyter-kale:f20978e

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

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

52f1f8234988ceaa.png

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

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

ab9ac96f1a1f0d09.png

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

cd data/
git clone https://github.com/kubeflow-kale/kale

В клонированном репозитории содержится ряд тщательно отобранных примеров с данными и аннотированными блокнотами.

В боковой панели перейдите в папку data/kale/examples/dog-breed-classification/ и откройте блокнот dog-breed.ipynb .

2bc436465522f65b.png

Изучите код машинного обучения примера определения породы собаки.

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

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

5e2b97ab2512f139.png

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

Выполните следующую ячейку, чтобы установить недостающую библиотеку:

c483da77943a6f01.png

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

376b5203209c2c91.png

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

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

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

7b96241f2ab6c389.png

Включите Kale, щелкнув ползунок на панели развертывания Kale :

804cfbf9d76b7e23.png

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

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

Теперь Kale берет на себя управление и собирает ваш ноутбук, преобразуя его в конвейер Kubeflow Pipelines. Кроме того, поскольку Kale интегрируется с Rok для создания снимков текущего объема данных ноутбука, вы можете отслеживать ход создания снимка. Rok позаботится о версионировании данных и воспроизведении всей среды в том виде, в котором она была на момент нажатия кнопки «Компилировать и запустить» . Таким образом, у вас есть машина времени для ваших данных и кода, и ваш конвейер будет работать в той же среде, где вы разрабатывали свой код, без необходимости создавать новые образы Docker.

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

Интерфейс Kubeflow Pipelines откроется в новой вкладке. Дождитесь завершения выполнения.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

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

5. Перенос обучения с настройкой гиперпараметров.

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

Взгляните на логи этапа обучения сверточной нейронной сети с нуля . (Щелкните по этому этапу на графике в пользовательском интерфейсе Kubeflow Pipelines, затем перейдите на вкладку «Логи» .) На этом этапе вы обучили сверточную нейронную сеть (CNN) с нуля. Обратите внимание, что обученная модель имеет очень низкую точность, и, кроме того, этот этап занял много времени.

62bf0835e9896c67.png

Взгляните на логи шага cnn-vgg16 . На этом шаге вы использовали трансферное обучение на предварительно обученной модели VGG-16 — нейронной сети, обученной группой Visual Geometry Group (VGG). Точность значительно выше, чем у предыдущей модели, но мы все еще можем добиться лучших результатов.

2b45072da65e20ae.png

Теперь взгляните на логи шага cnn-resnet50 . На этом шаге вы использовали трансферное обучение на предварительно обученной модели ResNet-50. Точность значительно выше. Поэтому именно эту модель вы будете использовать до конца этого практического занятия.

a1dc84ea48a87820.png

Настройка гиперпараметров

Вернитесь к серверу ноутбуков в пользовательском интерфейсе Kubeflow и откройте ноутбук с именем dog-breed-katib.ipynb (по пути data/kale/examples/dog-breed-classification/ ). В этом ноутбуке вы будете проводить эксперименты по настройке гиперпараметров модели ResNet-50 с использованием Katib. Обратите внимание, что в начале ноутбука есть одна ячейка для объявления параметров:

87b9f6c98dc1823e.png

В левой панели ноутбука включите функцию HP Tuning with Katib для выполнения настройки гиперпараметров:

a518eba74d341139.png

Затем нажмите «Настроить задание Katib» , чтобы настроить Katib:

f4e34fff6a93aa60.png

Определите пространство поиска для каждого параметра и сформулируйте цель:

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

Следите за ходом эксперимента «Катиб»:

f3514011876564db.png

Нажмите «Просмотреть» , чтобы увидеть эксперимент Катиба:

ab2f5a5edd48e8dc.png

Нажмите «Готово» , чтобы просмотреть результаты выполнения в Kubeflow Pipelines (KFP):

410a843b6f044a4b.png

На странице эксперимента Katib вы увидите новые испытания:

a511dca519580133.png

А в пользовательском интерфейсе KFP вы увидите новые заезды:

43dd34ee2b75018d.png

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

Katib — это компонент Kubeflow для выполнения задач настройки гиперпараметров общего назначения. Katib ничего не знает о задачах, которые он фактически выполняет (в терминологии Katib они называются «пробными заданиями»). Всё, что интересует Kale, — это пространство поиска, алгоритм оптимизации и цель. Katib поддерживает запуск простых заданий (то есть, Pods) в качестве пробных заданий, но Kale реализует промежуточный слой, позволяющий этим пробным заданиям фактически запускать конвейеры в Kubeflow Pipelines, а затем собирать метрики из запущенных конвейеров.

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

3e854d3d4bb766c.png

И ещё несколько запусков в пользовательском интерфейсе KFP:

ffd30dcefa739962.png

После завершения эксперимента Katib вы сможете просмотреть все испытания в пользовательском интерфейсе Katib:

9096ae9caa77e42a.png

А также все результаты забегов в пользовательском интерфейсе KFP:

7acc64dfee4f35a3.png

Если вы вернетесь в блокнот, то увидите кнопку с информацией прямо рядом с экспериментом Katib на панели Kale:

95b092180d71dc80.png

Нажмите на него, и вы увидите наилучший результат и параметры, которые его привели:

3b0ce47e548e5afb.png

6. Уборка

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

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

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

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

Что дальше?

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

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