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

1. Введение

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

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

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

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

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

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

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

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

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

99b103929d928576.png

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

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

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

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

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

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

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

Создайте экземпляр Compute, включая MiniKF.

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

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

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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

7d5f7d17a80a1930.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.

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

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

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

Создайте сервер ноутбуков в своем кластере 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

Изучите код ML примера идентификации породы собаки.

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

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

5e2b97ab2512f139.png

Обычно вам необходимо создать новый образ Docker, чтобы иметь возможность запускать этот блокнот в качестве конвейера Kubeflow и включать недавно установленные библиотеки. К счастью, 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. Перенос обучения с настройкой гиперпараметров

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

Взгляните на журналы этапа cnn-с нуля . (Нажмите на шаг на графике в пользовательском интерфейсе 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 с Katib для запуска настройки гиперпараметров:

а518eba74d341139.png

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

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

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

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

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

a511dca519580133.png

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

43dd34ee2b75018d.png

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

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

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

3e854d3d4bb766c.png

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

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

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

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

6. Очистка

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

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

7. Поздравления

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

Что дальше?

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

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