Суперпродукт Kubeflow для специалистов по данным

TL; DR: Kale позволяет развертывать блокноты Jupyter, которые работают на вашем ноутбуке или в облаке, в Kubeflow Pipelines, не требуя каких-либо шаблонов Kubeflow SDK. Вы можете определить конвейеры, просто пометив ячейки кода Notebook и нажав кнопку развертывания в пользовательском интерфейсе Jupyter. Кале позаботится о преобразовании Notebook в действующее развертывание Kubeflow Pipelines, позаботится о разрешении зависимостей данных и управлении жизненным циклом конвейера.

Вступление

Kale был представлен сообществу Kubeflow во время телеконференции 14 мая (запись) как инструмент для беспрепятственного развертывания аннотированных блокнотов Jupyter в Kubeflow Pipelines. Идея заключалась в том, чтобы позволить специалистам по машинному обучению сосредоточиться на своем коде, сохраняя при этом возможность использовать Kubeflow Pipelines.

С тех пор мы много работали над этим проектом, чтобы предоставить инструмент, который действительно может упростить повседневную разработку машинного обучения и снизить барьер для входа в экосистему Kubeflow. Во-первых, у Kale теперь есть собственная организация GitHub (github.com/kubeflow-kale), где вы можете найти основной репозиторий Kale с внутренней реализацией, выделенный репозиторий для нового пользовательского интерфейса JupyterLab (подробнее об этом позже в пост) и тщательно подобранный набор примеров, демонстрирующих силу капусты.

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

Мотивация

Наука о данных по своей сути представляет собой конвейерный рабочий процесс, от подготовки данных до обучения и развертывания, каждый проект машинного обучения организован в эти логические этапы. Без обеспечения строгой конвейерной структуры для проектов Data Science часто слишком легко создать беспорядочный код со сложными зависимостями данных и кода, а также с трудом воспроизвести результаты. Kubeflow Pipelines - отличный инструмент, побуждающий специалистов по обработке данных принять дисциплинированный («конвейерный») образ мышления при разработке кода машинного обучения и его масштабировании в облаке.

SDK Python от Kubeflow Pipelines - отличный инструмент для автоматизации создания этих конвейеров, особенно при работе со сложными рабочими процессами и производственными средами. Тем не менее, представляя эту технологию исследователям машинного обучения или специалистам по данным, не обладающим значительным опытом разработки программного обеспечения, KFP может показаться слишком сложным и трудным в использовании. Наука о данных часто сводится к созданию прототипов новых идей, изучению новых данных и моделей, быстрому и итеративному экспериментированию. В этих сценариях можно было бы просто запустить грубый код и проанализировать результаты, а не настраивать сложные рабочие процессы с помощью определенного SDK.

По нашему опыту, эта фаза экспериментов часто происходит непосредственно в Jupyter Notebooks, где специалист по данным использует возможности интерактивности и визуализации Jupyter. Затем преобразование запутанного Notebook в организованный конвейер KFP может оказаться сложной и трудоемкой задачей.

Капуста

Kale был разработан для решения этих проблем, предоставляя инструмент для упрощения процесса развертывания Jupyter Notebook в рабочих процессах Kubeflow Pipelines. Перевод Jupyter Notebook непосредственно в конвейер KFP гарантирует, что все строительные блоки обработки хорошо организованы и независимы друг от друга, а также позволяет использовать отслеживание экспериментов и организацию рабочих процессов, предоставляемые Kubeflow «из коробки».

Интересный факт:

Когда Kale становился больше, чем просто прототипом, мы задавались вопросом, какое имя мы могли бы дать этому новому проекту. Мы хотели, чтобы он резонировал с Jupyter, поэтому мы изучили спутники и спутники Jupyter (планеты). Кале (произносится / keɪliː /), одна из маленьких и неслыханных лун Юпитера, стала нашим лучшим выбором благодаря подходящей аббревиатуре. Во время нерабочего рабочего дня логотип появился после того, как мы обнаружили (к нашему полному недоумению), что капуста на самом деле тоже овощ! Очевидно, что многие люди начали называть капусту ее (правильным) овощным произношением, вместо изначально предполагаемого имени луны Jupyter. Таким образом, мы смирились с тем, что просто «суперпродуктом» для специалистов по данным остается, и оставили любую связь с планетами и греческими божествами в нашей памяти.

Основная идея Kale - использовать JSON-структуру записных книжек для аннотирования их как на уровне записной книжки (метаданные записной книжки), так и на уровне отдельной ячейки (метаданные ячейки). Эти аннотации позволяют:

  1. Назначение ячеек кода конкретным компонентам конвейера
  2. Объединить несколько ячеек в один компонент конвейера
  3. Определите (выполнение) зависимости между ними

Kale берет в качестве входных данных аннотированный Jupyter Notebook и генерирует автономный скрипт Python, который определяет конвейер KFP с использованием легких компонентов на основе аннотаций Notebook и Cells.

Аннотирование записной книжки становится чрезвычайно простым с расширением Kale JupyterLab. Расширение предоставляет удобную левую панель для Kubeflow, где пользователь может устанавливать метаданные конвейера и назначать ячейки Notebook конкретным этапам конвейера, а также определять зависимости и объединять несколько ячеек вместе. Таким образом, специалист по данным может перейти от прототипирования на локальном ноутбуке к рабочему процессу Kubeflow Pipelines, даже не взаимодействуя с командной строкой или дополнительными SDK.

Передача данных

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

Кейл выполняет серию статических анализов исходного кода Python Notebook, чтобы определить, где переменные и объекты сначала объявляются, а затем используются. Таким образом, Kale создает внутреннее графическое представление, описывающее зависимости данных между этапами конвейера. Используя эти знания, Kale внедряет код в начало и в конец каждого компонента, чтобы упорядочить эти объекты в общий PVC во время выполнения. Как маршаллинг, так и подготовка общего PVC полностью прозрачны для пользователя.

Модуль маршаллинга очень гибок в том смысле, что он может отправлять сериализацию переменных встроенным функциям во время выполнения в зависимости от типа данных объекта. Это также происходит при десериализации путем чтения расширения файла. Когда тип объекта не сопоставлен с собственной функцией сериализации, Кейл возвращается к использованию пакета dill, производительной библиотеки Python для сериализации общего назначения (надмножество pickle), гарантирующей высокую производительность с точки зрения дискового пространства и времени вычислений.

Модульность и гибкость

Результатом Kale является автономный исполняемый скрипт Python, написанный с помощью KFP Python DSL для объявления облегченных компонентов, которые в конечном итоге становятся этапами конвейера. Вся необходимая генерация кода выполняется с помощью шаблонов Jinja2 - создание Python с помощью Python!

Это решение делает Kale очень гибким и простым для обновления до новых API SDK и критических изменений. Все модули, которые читают аннотированный блокнот, разрешают зависимости данных и строят граф выполнения, в целом не зависят от KFP и Kubeflow. Как ни странно, Kale можно довольно легко адаптировать к любой среде выполнения рабочего процесса, которая делает доступным Python SDK для определения рабочих процессов в терминах функций Python.

Установка и развертывание

В: Как установить Kale в кластер Kubeflow / MiniKF?

Kale не требует установки каких-либо спецификаций кластера или новой службы. Фактически, все, что вам нужно для начала, - это образ Docker! В частности, нужно просто взять образ NotebookServer (используемый для запуска новых серверов Notebook в Kubeflow) и расширить его с помощью расширения Kale и Kale JupyterLab:

FROM <notebook-image>:<tag>
# Install Kale python package globally
RUN pip install kubeflow-kale
# Install Kale JupyterLab extension
RUN jupyter labextension install kubeflow-kale-launcher

Расширение Jupyter - это код, который выполняется в браузере пользователя независимо от того, где находится кластер. По этой причине всякий раз, когда требуется взаимодействие с кластером или бэкэндом Kale Python, мы создаем новое ядро ​​Python в фоновом режиме и выполняем вызов метода rpc для Kale, чтобы выполнить некоторый вход в систему внутри контейнера NotebookServer.

Последние разработки

Мы упорно трудились, чтобы сделать Kale самым простым способом приблизиться к Kubeflow Pipelines. Вот (неполный) список основных новых функций, представленных за последние несколько месяцев:

1. Обновленное управление метаданными

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

2. Передача данных

Kale автоматически подготавливает новый PV или использует существующий том рабочей области для сохранения данных маршала.

3. Возможность повторного использования

Кодовая база была переработана для использования в качестве импортированной библиотеки. Каждый этап преобразования Notebook в развертывание можно программно вызвать как API.

4. Параметры трубопровода

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

5. Контроль версий данных и снимки

Интеграция с клиентом Rok при запуске Kale внутри MiniKF. Kale может поддерживать такие рабочие процессы:

  • Определите существующие тома рабочей области / данных в Notebook Server, сделайте их снимок и подключите к этапам конвейера. Таким образом, рабочая область Notebook пользователя (установленные библиотеки, данные, исходные файлы и т. Д.) Сохраняется в работающем конвейере.
  • Снимок произвольных томов в конце конвейера.
  • Тома моментальных снимков в начале каждого шага запуска, обеспечивая удобный способ восстановления состояния записной книжки (данных) до сбоя шага для отладки.

6. Расширение JupyterLab

  • Левая панель для применения метаданных конвейера (эксперимент, имя, тома) и запуска компиляции, загрузки и выполнения команд из пользовательского интерфейса.
  • Пользовательский интерфейс запускает Kale в фоновом режиме, выдавая команды Python в работающем ядре через специальный модуль rpc, встроенный в Kale.
  • Элемент управления пользовательского интерфейса метаданных ячейки помещается в верхнюю часть каждой ячейки записной книжки, а для повышения удобочитаемости рабочего процесса KFP в верхней части записной книжки предоставляются подсказки с цветовой кодировкой.
  • Операции загрузки, запуска и моментального снимка выполняются асинхронно и предоставляют пользователю информацию о ходе выполнения.

7. Пакеты

  • Kale упаковывается и загружается в PyPi как kubeflow-kale.
  • Расширение Kale JupyterLab упаковано и загружено в npm как kubeflow-kale-launcher

Витрина

Кале будет продемонстрировано на KubeCon San Diego на следующей неделе . Обязательно ознакомьтесь с руководством:

От Notebook к конвейерам Kubeflow - сквозной процесс обработки данных - в четверг, 21-го числа

Мы продемонстрируем непрерывный рабочий процесс машинного обучения на MiniKF, обеспечивая беспроблемную интеграцию Kale с Arrikto’s Rok для управления версиями данных.

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

Обновление после конференции: ссылка Codelab

Для получения дополнительной информации о проекте, документации по установке и использованию перейдите в Kale github organization.

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

Спасибо Илиасу Катсакиорису, Костису Лолосу и Тасосу Алексиу (Аррикто) за их потрясающий вклад в проект, Крису Павлу (Аррикто), Теа Ламкин и Джереми Леви (Google) за участие в этой публикации.
Глубоко благодарен Валерио Маджио, Чезаре Фурланелло (MPBA - Fondazione Bruno Kessler) за помощь в концептуализации и развитии Кале.