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.
Создайте новый проект или выберите существующий проект:
Проверьте следующие минимальные требования:
- Убедитесь, что у вас есть роль владельца проекта.
- Убедитесь, что для вашего проекта включена оплата .
- Если вы используете уровень бесплатного пользования GCP или 12-месячный пробный период с кредитом в размере 300 долларов США, обратите внимание, что вы не можете запустить установку MiniKF GCP по умолчанию, поскольку уровень бесплатного пользования не предлагает достаточно ресурсов. Вам необходимо перейти на платную учетную запись .
Дополнительную помощь по настройке проекта GCP см. в документации GCP .
После настройки проекта GCP перейдите непосредственно к инструкциям по установке MiniKF.
Откройте предварительно выделенный проект GCP.
Чтобы открыть предварительно выделенный проект GCP, нажмите кнопку ниже, чтобы перейти в консоль GCP и открыть домашнюю панель, расположенную в меню-гамбургере в левом верхнем углу. Если экран пуст, нажмите «Да» в ответ на запрос, чтобы создать панель мониторинга.
Если проект еще не выбран, нажмите «Выбрать проект» :
Выберите свой проект. У вас должен быть только один:
3. Установите МиниКФ
Создайте экземпляр Compute, включая MiniKF.
На GCP Marketplace найдите «MiniKF».
Выберите виртуальную машину MiniKF от Arrikto:
Нажмите кнопку ЗАПУСК и выберите свой проект:
В окне «Настройка и развертывание» выберите имя и зону для вашего экземпляра MiniKF и оставьте параметры по умолчанию. Затем нажмите кнопку «Развернуть» :
Подождите, пока загрузится экземпляр MiniKF Compute:
Войдите в МиниКФ
Когда виртуальная машина MiniKF заработает, подключитесь и войдите в систему, нажав кнопку SSH . Следуйте инструкциям на экране, чтобы запустить команду minikf
, которая запустит развертывание Minikube, Kubeflow и Rok. Это займет несколько минут.
Войдите в Kubeflow
Когда установка будет завершена и все модули будут готовы, посетите панель управления MiniKF. Войдите в Kubeflow, используя имя пользователя и пароль MiniKF:
Пользователи Chrome увидят этот экран:
Пользователи Firefox увидят этот экран:
Пользователи Safari увидят этот экран:
Войти в Рок
После входа в Kubeflow откройте левое меню, щелкнув значок гамбургера. Нажмите «Снимки» и войдите в Rok, используя имя пользователя и пароль MiniKF.
Поздравляем! Вы успешно развернули MiniKF на GCP. Теперь вы можете создавать блокноты, писать код машинного обучения, запускать Kubeflow Pipelines и использовать Rok для управления версиями и воспроизводимости данных.
4. Запустите конвейер из записной книжки
В этом разделе вы запустите пример идентификации породы собаки — проект в Udacity AI Nanograde. Учитывая изображение собаки, окончательная модель даст оценку ее породы.
Создайте сервер ноутбуков в своем кластере 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
.
Изучите код ML примера идентификации породы собаки.
На данный момент не запускайте ячейки, которые загружают наборы данных, поскольку вы собираетесь использовать некоторые меньшие наборы данных, включенные в репозиторий, который вы только что клонировали. Если вы выполняете этот пример дома в своем темпе, не стесняйтесь загружать наборы данных.
Запустите ячейку imports
, чтобы импортировать все необходимые библиотеки. Обратите внимание, что код не работает, потому что библиотека отсутствует:
Обычно вам необходимо создать новый образ Docker, чтобы иметь возможность запускать этот блокнот в качестве конвейера Kubeflow и включать недавно установленные библиотеки. К счастью, 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. Перенос обучения с настройкой гиперпараметров
Изучите результаты
Взгляните на журналы этапа cnn-с нуля . (Нажмите на шаг на графике в пользовательском интерфейсе 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 с Katib для запуска настройки гиперпараметров:
Затем нажмите «Настроить задание Katib» , чтобы настроить Katib:
Определите пространство поиска для каждого параметра и определите цель:
Нажмите кнопку «Компилировать и запустить задание Katib» :
Следите за ходом эксперимента Катиб:
Нажмите «Просмотр» , чтобы увидеть эксперимент Катиб:
Нажмите «Готово» , чтобы просмотреть запуски в Kubeflow Pipelines (KFP):
На странице эксперимента Катиба вы увидите новые испытания:
И в пользовательском интерфейсе KFP вы увидите новые прогоны:
Давайте раскроем то, что только что произошло. Раньше Kale создавала запуск конвейера из блокнота, а теперь создает несколько запусков конвейера, каждый из которых получает разную комбинацию аргументов.
Katib — это компонент Kubeflow для выполнения заданий по настройке гиперпараметров общего назначения. Katib ничего не знает о работах, которые он на самом деле выполняет (на жаргоне Katib они называются испытаниями). Все, что волнует Кейла, — это пространство поиска, алгоритм оптимизации и цель. Katib поддерживает запуск простых заданий (то есть модулей Pod) в качестве пробных версий, но Kale реализует прокладку, позволяющую пробным версиям фактически запускать конвейеры в Kubeflow Pipelines, а затем собирать метрики из запусков конвейера.
Поскольку эксперимент Katib создает испытания, вы увидите больше испытаний в пользовательском интерфейсе Katib:
И еще несколько запусков в пользовательском интерфейсе KFP:
Когда эксперимент с Катибом будет завершен, вы сможете просмотреть все испытания в пользовательском интерфейсе Катиба:
И все запуски в пользовательском интерфейсе KFP:
Если вы вернетесь в Блокнот, вы увидите информационную кнопку рядом с экспериментом Катиб на панели Кале:
Нажмите на нее, и вы увидите лучший результат и параметры, которые его дали:
6. Очистка
Уничтожить виртуальную машину MiniKF
Перейдите к диспетчеру развертывания в консоли GCP и удалите развертывание minikf-on-gcp
.
7. Поздравления
Поздравляем, вы успешно запустили комплексный рабочий процесс обработки данных с помощью Kubeflow (MiniKF), Kale и Rok!
Что дальше?
Присоединяйтесь к сообществу Kubeflow:
- github.com/kubeflow
- Кубефлоу Слэк
- kubeflow-discuss@googlegroups.com
- Еженедельный звонок сообщества, Slack и другие сведения о сообществе.