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.
Создайте новый проект или выберите существующий:

Проверьте следующие минимальные требования:
- Убедитесь, что у вас есть роль владельца проекта.
- Убедитесь, что для вашего проекта включена функция выставления счетов .
- Если вы используете бесплатный тариф GCP или 12-месячный пробный период с кредитом в 300 долларов, обратите внимание, что вы не сможете запустить стандартную установку MiniKF в GCP, поскольку бесплатный тариф не предоставляет достаточных ресурсов. Вам необходимо перейти на платный аккаунт .
Для получения дополнительной помощи по настройке проекта GCP см. документацию GCP .
После настройки проекта GCP перейдите непосредственно к инструкциям по установке MiniKF.
Откройте свой предварительно выделенный проект GCP.
Чтобы открыть предварительно выделенный проект GCP, нажмите кнопку ниже, чтобы перейти в консоль GCP и открыть панель «Главная», расположенную в меню-гамбургере в левом верхнем углу. Если экран пуст, нажмите «Да» в появившемся запросе, чтобы создать панель мониторинга.

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

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

3. Установите MiniKF
Создайте экземпляр вычислительных ресурсов, включающий MiniKF.
В GCP Marketplace найдите "MiniKF".
Выберите виртуальную машину MiniKF от Arrikto:

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

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

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

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

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


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

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

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

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


Поздравляем! Вы успешно развернули MiniKF в GCP. Теперь вы можете создавать ноутбуки, писать код машинного обучения, запускать конвейеры Kubeflow и использовать Rok для версионирования данных и обеспечения воспроизводимости результатов.
4. Запустите конвейер из своего ноутбука.
В этом разделе вы запустите пример определения породы собаки — проект из программы Udacity AI Nanodegree. Получив изображение собаки, финальная модель оценит её породу.
Создайте сервер ноутбуков в вашем кластере Kubeflow.
Перейдите по ссылке «Блокноты» на центральной панели управления Kubeflow.

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

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

Убедитесь, что вы выбрали следующий образ Docker (обратите внимание, что тег образа может отличаться):
gcr.io/arrikto/jupyter-kale:f20978e
Создайте новый пустой том данных размером 5 ГБ и назовите его data .

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

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

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

В окне терминала выполните следующие команды, чтобы перейти в папку с данными и загрузить блокнот и данные, которые вы будете использовать до конца лабораторной работы:
cd data/ git clone https://github.com/kubeflow-kale/kale
В клонированном репозитории содержится ряд тщательно отобранных примеров с данными и аннотированными блокнотами.
В боковой панели перейдите в папку data/kale/examples/dog-breed-classification/ и откройте блокнот dog-breed.ipynb .

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6. Уборка
Уничтожьте виртуальную машину MiniKF.
Перейдите в раздел «Диспетчер развертывания» в консоли GCP и удалите развертывание minikf-on-gcp .
7. Поздравляем!
Поздравляем, вы успешно выполнили сквозной рабочий процесс анализа данных с использованием Kubeflow (MiniKF), Kale и Rok!
Что дальше?
Присоединяйтесь к сообществу Kubeflow:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- Еженедельные встречи сообщества, Slack и другая информация о сообществе.
