Обновление (14 августа 2020 г.): это руководство было обновлено, чтобы продемонстрировать сквозной пример работы такси с использованием нового MiniKF (v20200812.0.0)

Сегодня, на Kubecon Europe 2019, Аррикто объявил о выпуске нового MiniKF, в котором используется Kubeflow v0.5. Новый MiniKF позволяет специалистам по данным локально запускать сквозные конвейеры Kubeflow, начиная со своего ноутбука.

Это отличная новость для специалистов по данным, так как до сих пор не было простого способа запустить сквозной пример KFP на месте. Чтобы справиться с некоторыми шагами, нужно хорошо знать Kubernetes. В частности, для стандартного примера такси Чикаго (TFX) Kubeflow, который мы представим в этом посте, следует:

  • Разберитесь в K8s и познакомьтесь с kubectl
  • Понимать и составлять файлы YAML
  • Создание PVC вручную через K8s
  • Прикрепите ПВХ к емкости, чтобы заполнить ее исходными данными

Используя MiniKF и продукт для управления данными Arrikto’s Rok (MiniKF поставляется с бесплатной лицензией Rok для одного узла), мы демонстрируем, как оптимизировать все эти операции, чтобы сократить время и обеспечить гораздо более удобный пользовательский интерфейс. Специалист по анализу данных начинает с записной книжки, строит конвейер и использует Rok для создания моментального снимка локальных данных, которые они подготавливают, одним нажатием кнопки. Затем они могут заполнить конвейер Kubeflow этим моментальным снимком, используя только пользовательские интерфейсы KFP и Rok.

MiniKF значительно расширяет возможности науки о данных, упрощая рабочий процесс пользователей и устраняя необходимость даже намека на знания K8s. Он также представляет первые шаги к унифицированной интеграции Notebooks и Kubeflow Pipelines.

Вкратце, в этом руководстве будут выделены следующие преимущества использования MiniKF, Kubeflow и Rok:

  • Простое выполнение локального / локального примера Kubeflow Pipelines e2e
  • Полная интеграция Notebook и Kubeflow Pipelines с Rok
  • Выполнение рабочего процесса KFP без специальных знаний K8s

Пример локального руководства Kubeflow Chicago Taxi (TFX)

Давайте объединим все вышеперечисленное и посмотрим, как работают MiniKF, Kubeflow и Rok.

Одним из очень популярных примеров в области науки о данных является пример Taxi Cab (или Chicago Taxi), который прогнозирует поездки, в результате которых чаевые превышают 20% от стоимости проезда. Этот пример уже перенесен для работы в качестве конвейера Kubeflow на GCP и включен в соответствующий репозиторий KFP. Мы собираемся продемонстрировать пример такси, работающего локально, с использованием нового MiniKF, а также продемонстрировать интеграцию Rok. Следуйте инструкциям ниже, и вы запустите непрерывный конвейер Kubeflow на своем ноутбуке!

Установить MiniKF

Откройте терминал и запустите:

vagrant init arrikto/minikf
vagrant up

Откройте браузер, перейдите на 10.10.10.10 и следуйте инструкциям, чтобы запустить Kubeflow и Rok.

Для получения дополнительной информации о том, как установить MiniKF, посетите страницу MiniKF:

Https://www.arrikto.com/minikf/

Или официальная документация Kubeflow:

Https://www.kubeflow.org/docs/other-guides/virtual-dev/getting-started-minikf/

MiniKF также доступен на GCP Marketplace, где вы можете установить его одним нажатием кнопки. Вы можете найти это здесь".

Создать сервер записной книжки

На целевой странице MiniKF нажмите кнопку «Подключиться» рядом с Kubeflow, чтобы подключиться к панели инструментов Kubeflow:

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

Оказавшись на панели инструментов Kubeflow, нажмите ссылку «Блокноты» на левой панели, чтобы перейти к пользовательскому интерфейсу диспетчера блокнотов:

Теперь вы находитесь в диспетчере записных книжек Kubeflow, где отображается список серверов записных книжек, который в настоящее время пуст. Нажмите «Новый сервер», чтобы создать новый сервер Notebook:

Введите имя для вашего нового сервера Notebook и выберите Образ, ЦП и ОЗУ.

Убедитесь, что вы выбрали следующий образ Docker:

gcr.io/arrikto/jupyter-kale:v0.5.0-47-g2427cc9

Обратите внимание, что тег изображения может отличаться.

Добавьте новый пустой том данных, например размером 2 ГБ, и назовите его «данные» (вы можете дать ему любое имя, но затем вам придется изменить некоторые команды на более поздних этапах) :

Выбрав все параметры, нажмите «Запустить», чтобы создать Notebook Server, и дождитесь его готовности:

Когда Сервер будет готов, кнопка «Подключиться» станет активной (синий цвет). Нажмите кнопку «Подключиться», чтобы подключиться к новому серверу Notebook Server:

Откроется новая вкладка с целевой страницей JupyterLab:

Добавьте код и данные Pipelines

Создайте новый терминал в JupyterLab:

Принесите заранее заполненный блокнот, чтобы выполнить все необходимые команды:

wget https://raw.githubusercontent.com/arrikto/kubeflow-examples/kubecon-demo/taxi-cab-on-prem/taxi-cab-pipeline-snap.ipynb

Блокнот появится на левой панели JupyterLab:

Дважды щелкните файл записной книжки, чтобы открыть его и запустить ячейки одну за другой:

Запустите первую ячейку, чтобы загрузить код конвейера Arrikto для локального запуска примера Chicago Taxi Cab:

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

Запустите третью ячейку, чтобы переместить полученные данные в том данных записной книжки. (Обратите внимание, что если вы не назвали свой том данных «данные», вам придется немного изменить эту команду):

Запустите четвертую ячейку, чтобы убедиться, что данные существуют внутри тома данных. Обратите внимание, что у вас должен быть каталог taxi-cab-class в каталоге данных, а не только файлы. Теперь у вас есть локальный том данных, заполненный данными, которые требуются коду конвейера (если вы не указали имя «данные» для вашего тома данных, тогда вы должны убедиться, что в вашем томе данных есть эти файлы. ):

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

Запустите шестую ячейку, чтобы проверить вывод скомпилированного конвейера:

Файл, содержащий скомпилированный конвейер, появится на левой панели вашего JupyterLab:

Снимок объема данных

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

Мы будем использовать Rok, который уже включен в MiniKF, чтобы сделать снимок JupyterLab. На левой панели Kubeflow щелкните ссылку «Снимки», чтобы перейти в пользовательский интерфейс Rok. Кроме того, вы можете перейти на целевую страницу MiniKF и нажать кнопку «Подключиться» рядом с Rok:

Это целевая страница Rok UI:

Создайте новую корзину для размещения нового снимка. Нажмите кнопку «+» в левом верхнем углу:

Появится диалоговое окно с запросом имени сегмента. Дайте ему имя и нажмите «Далее». Мы сохраним сегмент «Локальный» для этой демонстрации:

Нажатие «Далее» приведет к появлению новой пустой корзины на целевой странице. Нажмите на ведро, чтобы войти внутрь:

Оказавшись внутри ведра, нажмите кнопку «Камера», чтобы сделать новый снимок:

При нажатии кнопки «Камера» появляется диалоговое окно с запросом ресурса K8s, снимок которого мы хотим сделать. Выберите весь вариант «JupyterLab», а не только один том данных («Набор данных»):

Для удобства большинство полей будут предварительно заполнены значениями автоматически. Выберите свой JupyterLab из раскрывающегося списка:

Укажите заголовок фиксации и сообщение фиксации для этого снимка. Это поможет вам определить версию моментального снимка в будущем, точно так же, как вы бы поступили с фиксацией кода в Git:

Затем выберите имя для вашего снимка:

Сделайте снимок, нажав кнопку «Снимок»:

После завершения операции у вас будет снимок всей вашей JupyterLab. Это означает, что у вас есть снимок тома рабочей области и снимок тома данных, а также все соответствующие метаданные JupyterLab для воссоздания среды одним щелчком мыши. Снимок появится в виде файла внутри вашей новой корзины. Расширение файла позволит вам увидеть снимок тома рабочей области и снимок тома данных:

Теперь, когда у нас есть скомпилированный конвейер и моментальный снимок тома данных, давайте перейдем к запуску конвейера и заполнению его данными, которые мы подготовили.

Загрузите конвейер в KFP

Перед загрузкой конвейера в KFP нам сначала нужно загрузить скомпилированный конвейер локально. Вернитесь в JupyterLab и загрузите скомпилированный конвейер. Для этого щелкните правой кнопкой мыши файл на левой панели JupyterLab и выберите «Загрузить»:

После того, как файл будет загружен на ваш ноутбук, перейдите на панель инструментов Kubeflow и откройте пользовательский интерфейс Kubeflow Pipelines, щелкнув «Pipelines» на левой панели:

Это приведет вас к пользовательскому интерфейсу Kubeflow Pipelines:

Нажмите «+ Загрузить конвейер»:

Выберите название и описание для вашего трубопровода. Затем нажмите «Загрузить файл» и выберите файл .tar.gz, который вы загрузили локально. Наконец, нажмите «Создать».

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

Создать новый экспериментальный прогон

Создайте новый эксперимент, нажав «+ Создать эксперимент»:

Выберите название эксперимента и нажмите «Далее»:

При нажатии «Далее» пользовательский интерфейс KFP отправляет вас на страницу «Начать новый запуск», где вы собираетесь создать новый запуск для этого эксперимента. Введите имя для этого прогона (обратите внимание, что конвейер уже выбран. Если это не так, просто выберите загруженный конвейер):

Обратите внимание, что отображаются параметры конвейера:

Заполните конвейер объемом данных записной книжки

В параметре «rok-url» нам нужно указать снимок тома данных Notebook Server, который мы создали на предыдущем шаге. Нажмите «Выбрать», чтобы открыть средство выбора файлов Rok и выбрать моментальный снимок этого тома данных:

Войдите в корзину, которую вы создали ранее:

Разверните файл внутри ведра:

Найдите снимок тома данных и щелкните его. Убедитесь, что вы выбрали объем данных, а не объем рабочей области:

Затем нажмите «Выбрать»:

URL-адрес Rok, соответствующий снимку тома данных, отображается в соответствующем поле параметра:

Выберите сегмент для хранения моментального снимка конвейера

В параметре «rok-register-url» нам нужно выбрать, где мы будем хранить снимок конвейера. Для этого нам нужно указать сегмент и имя файла (снимка), который будет создан. Мы можем выбрать существующую корзину и существующий файл. Это создаст новую версию этого файла. Здесь мы создадим новую корзину и новый файл. Сначала мы нажимаем кнопку «Выбрать», чтобы открыть средство выбора файлов Rok:

Создаем новое ведро:

Даем ему имя и нажимаем «Далее»:

Затем заходим в ведро:

Создаем новый файл:

Даем ему имя:

И нажимаем «Выбрать»:

URL-адрес Rok, соответствующий снимку состояния конвейера, отображается в соответствующем поле параметра:

Запустить конвейер

Теперь, когда мы определили данные для заполнения конвейера и файл для хранения моментального снимка конвейера, мы можем запустить конвейер. Мы оставляем все остальные параметры как есть и нажимаем «Старт»:

Теперь нажмите на созданный вами прогон, чтобы просмотреть ход конвейера:

По мере запуска конвейера мы видим, что различные шаги выполняются и успешно завершаются. На завершение конвейера потребуется от 10 до 30 минут, в зависимости от характеристик вашего ноутбука. Во время первого шага Rok мгновенно клонирует предоставленный нами снимок, чтобы использовать его в следующих шагах:

Примечание. Если на этапе проверки произошел сбой:

/mnt/taxi-cab-classification/column-names.json; No such file or directory

тогда вы должны убедиться, что вы дали имя «данные» своему объему данных. Если нет, убедитесь, что вы соответствующим образом изменили команду ячейки 3, чтобы данные конвейера сохранялись в вашем томе данных.

Шаг обучения займет несколько минут:

Снимок трубопровода с Rok

В качестве последнего шага Rok автоматически сделает снимок конвейера, чтобы позже мы могли прикрепить его к записной книжке и провести дальнейшее исследование результатов конвейера. Вы можете увидеть этот шаг здесь:

Обновление: в более поздних версиях MiniKF этап развертывания завершится ошибкой. Это происходит, потому что этот шаг предполагает, что конвейер работает внутри пространства имен `kubeflow`.

Если мы вернемся к пользовательскому интерфейсу Rok, мы увидим снимок, сделанный во время выполнения конвейера. Заходим на целевую страницу Rok UI:

Мы находим корзину, которую мы выбрали ранее для хранения снимка, в данном случае «такси-такси-конвейер-снимок»:

И мы видим снимок состояния конвейера, имя которого мы выбрали ранее, в данном случае «моментальный снимок конвейера»:

Изучите результаты конвейера в записной книжке

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

Для этого мы создаем новый Notebook Server и добавляем существующий том данных. Здесь том будет снимком конвейера, который находится внутри Rok. Переходим в интерфейс диспетчера записных книжек и нажимаем «Новый сервер»:

Затем мы вводим имя для нового Notebook Server и выбираем Image, CPU и RAM:

Чтобы добавить существующий том данных, нажмите «Добавить том»:

Затем измените его тип на «Существующий»:

Теперь мы воспользуемся средством выбора файлов Rok, чтобы выбрать моментальный снимок, сделанный во время выполнения конвейера. Этот снимок содержит результаты конвейера. Ноутбук будет использовать клон этого неизменяемого моментального снимка, поэтому вы можете использовать том без потери каких-либо важных данных.

Щелкаем по значку выбора файлов Rok и открываем селектор файлов:

Мы находим корзину, которую мы выбрали ранее для хранения снимка, в данном случае «такси-такси-конвейер-снимок»:

Мы нажимаем на файл (снимок), который мы создали во время выполнения конвейера, в данном случае «конвейерный снимок»:

Затем нажмите «Выбрать»:

URL-адрес Rok, соответствующий этому снимку, отображается в поле «URL-адрес Rok»:

Вы можете изменить название тома, если хотите. Здесь мы меняем его на «анализ»:

Затем нажимаем «Запустить»:

В пользовательском интерфейсе диспетчера записных книжек появится новый сервер Notebook. Нажмите «Подключиться», чтобы перейти в JupyterLab:

Внутри записной книжки вы можете увидеть том данных, который мы создали путем клонирования моментального снимка конвейера:

Внутри тома данных вы можете увидеть входные данные конвейера «классификация такси-такси» и выходные данные конвейера «классификация такси-такси-s9qwx». Обратите внимание, что вы увидите в своем блокноте другую буквенно-цифровую последовательность. Откройте вторую папку, чтобы просмотреть результаты конвейера:

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

Давайте зайдем в папку анализа, чтобы увидеть, как работает модель:

Откройте файл output_display.html:

Нажмите «Доверять HTML», чтобы просмотреть файл:

Вот как работала модель:

Примечание: на этой странице используется импорт HTML, функция спецификации веб-компонентов, которая теперь устарела. Скорее всего, вы не сможете увидеть производительность модели.

Больше руководств по MiniKF

Поговори с нами

Присоединяйтесь к обсуждению на канале Slack #minikf, задавайте вопросы, запрашивайте функции и получайте поддержку MiniKF.

Чтобы присоединиться к рабочему пространству Kubeflow Slack, запросите приглашение.

Посмотреть обучающее видео

Вы также можете посмотреть видео этого урока: