Анкит Рай

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

Подождите, что такое Kubeflow?

Kubeflow — это облачная платформа MLOps с открытым исходным кодом, первоначально разработанная Google, которая призвана предоставить все инструменты, необходимые как специалистам по данным, так и инженерам по машинному обучению. Функции включают разработку моделей, обучение, обслуживание, AutoML, мониторинг, управление артефактами и отслеживание экспериментов. В последней версии 1.5 представлены материалы Google, Arrikto, IBM, Twitter и Rakuten. Хотите попробовать сами? Начните работу за считанные минуты с бесплатной пробной версией Kubeflow как услуги, кредитная карта не требуется.

О НЛП с конкурсом твитов о стихийных бедствиях

Вот описание конкурса с сайта Kaggle:

«Twitter стал важным каналом связи во время чрезвычайных ситуаций.

Повсеместное распространение смартфонов позволяет людям сообщать о чрезвычайной ситуации, которую они наблюдают, в режиме реального времени. Из-за этого все больше агентств заинтересованы в программном мониторинге Twitter (например, организации по оказанию помощи при стихийных бедствиях и информационные агентства).

Но не всегда ясно, действительно ли слова человека предвещают бедствие. Например:

Автор явно использует слово «ПЫЛАЕТ», но подразумевает его метафорически. Человеку это понятно сразу, особенно с наглядным пособием. Но для машины это менее понятно.

В этом соревновании вам предстоит создать модель машинного обучения, которая предсказывает, какие твиты посвящены реальным бедствиям, а какие нет. У вас будет доступ к набору данных из 10 000 твитов, которые были классифицированы вручную. Если вы впервые работаете над проблемой НЛП, мы создали краткий учебник, который поможет вам приступить к работе.

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

Благодарности

Этот набор данных был создан компанией «восьмерка» и первоначально опубликован на их

Сайт Данные для всех здесь. “

Вы можете загрузить весь код, блокноты и данные, использованные в этом соревновании Kaggle, на GitHub.

Предварительные условия для построения пайплайна Kubeflow

Кубефлоу

Если у вас еще не запущен и не запущен Kubeflow, мы рекомендуем подписаться на бесплатную пробную версию Kubeflow как услуга.

Разработка трубопровода

Навыки, которые будут полезны:

  • Основы Python, включая работу с файлами рассола
  • Знакомство с пандами и библиотеками NLP, такими как NLTK, regex, strings, tqdm, TensorFlow и функции Keras.
  • Предварительная обработка данных для моделей НЛП, токенизаторов и последовательностей пэдов

Создание конвейера Kubeflow

Шаги для создания конвейера Kubeflow с использованием KFP следующие:

Шаг 1: Определение функций

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

Шаг 2: Передача данных между компонентами

Лучший способ передачи больших файлов данных — использовать компоненты KFP, такие как InputPath() и OutputPath(), в которых хранится расположение входных и выходных файлов (обычно мы используем это для больших файлов, таких как файлы CSV или TEXT).

  • Для загрузки исходных данных мы передадим URL
  • Затем мы будем использовать URL в функции
  • Затем мы сохраним вывод в виде файла рассола в местоположении и сохраним имя расположения в переменной типа OutputPath().
  • Затем переменная имени этого местоположения передается как InputPath() следующему компоненту, а затем мы извлекаем содержимое файла рассола и используем его.

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

Шаг 3: Преобразование функций в компоненты

Чтобы преобразовать функции в компоненты, мы будем использовать:

kfp.components.create_component_from_func()

Эта функция принимает в основном три аргумента.

  • Имя функции, которая должна быть преобразована в компонент
  • Список пакетов для установки в виде списка под именем аргумента как packages_to_install=[]
  • output_component_file, который определяется нами как файл .yaml.

Шаг 4: Определение функции конвейера

Теперь мы готовы определить конвейер, используя @dsl.pipeline. Мы добавляем имя и описание, затем определяем функцию для этого конвейера. В функцию передаются аргументы, которые используются в качестве входных данных для ранее созданных компонентов. Затем мы передаем вывод одного компонента в качестве входного аргумента следующему компоненту.

Шаг 5: Запуск конвейера

Для запуска конвейера мы используем kfp.Client() и создаем объект класса. Затем мы используем функцию create_run_from_pipeline_func для запуска конвейера, передавая ей имя конвейера и аргументы, которые требуются в качестве входных данных.

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

  • Перейдите на панель инструментов Kubeflow и на левой панели нажмите Блокноты.
  • Нажмите кнопку + Новая записная книжка в правом верхнем углу и создайте записную книжку, дав ей имя.
  • Измените объем рабочей области с 5 ГБ на 50 ГБ и измените требуемый объем памяти на 6 ГБ.
  • После завершения настройки блокнота нажмите кнопку Подключить рядом с только что созданным блокнотом. Вы автоматически перейдете к пользовательскому интерфейсу JupyterLab.
  • Внутри панели запуска JupyterLab запустите новый сеанс терминала, чтобы клонировать репозиторий GitHub. В терминале введите следующую команду:

$ git clone https://github.com/kubeflow/examples

  • После успешного клонирования репозитория откройте каталог examples/natural-language-processing-with-disaster-tweets-kaggle-competition
  • Откройте блокнот с именем «обработка естественного языка с катастрофическими твитами-kfp.ipynb».
  • Чтобы запустить этот блокнот, нажмите кнопку перезапустить все ядро ​​и перезапустить весь блокнот (значок «перемотка вперед») в верхнем меню блокнота.
  • Просмотр run details сразу после отправки пайплайна

Есть ли более простой способ создать конвейер Kubeflow?

Вы держите пари! Если вы хотите автоматизировать большинство шагов, показанных в предыдущем примере, мы рекомендуем использовать расширение JupyterLab с открытым исходным кодом под названием Kale. Kale встроен прямо в Kubeflow as Service и предоставляет простой пользовательский интерфейс для определения конвейеров Kubeflow непосредственно из вашей записной книжки JupyterLab без необходимости изменять ни одной строки кода или создавать и отправлять образы Docker. В следующем примере мы покажем вам, насколько это просто.

Понимание тегов капусты

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

Подготовьте среду

  • Запустите сервер ноутбука
  • Увеличьте объем рабочей области до 60 ГБ и памяти до 12 ГБ.
  • Откройте сеанс терминала
  • Клонируйте репозиторий kubeflow/examples GitHub

git clone https://github.com/kubeflow/examples

  • Перейдите в следующий каталог:

examples/natural-language-processing-with-disaster-tweets-kaggle-competition

  • Откройте блокнот natural-language-processing-with-disaster-tweets-kale.ipynb

Шаг 1. Добавьте в блокнот теги Kale.

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

Например, на скриншоте ниже мы аннотируем блок кода class_distribution и указываем, что он зависит от шага load_data.

Вот полный список аннотаций для блокнота вместе с шагами, от которых они зависят:

Шаг 2. Запустите конвейер Kubeflow

После того, как вы пометили свой блокнот:

pip install --user -r requirements.txt

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

Теперь нажмите кнопку Скомпилировать и запустить в виджете Kale. Кале выполнит для вас следующие задачи:

  • Проверка блокнота
  • Сделать снимок
  • Скомпилируйте блокнот
  • Загрузить конвейер
  • Запустить конвейер

В выходных данных Запуск конвейера нажмите гиперссылку Просмотр. Это приведет вас прямо к графику выполнения во время выполнения, где вы сможете наблюдать за выполнением и обновлением конвейера в режиме реального времени.

Вот и все! Теперь у вас есть соревнование Kaggle NLP с Disaster Tweets, работающее как воспроизводимый конвейер Kubeflow с меньшим количеством кода и шагов благодаря Kale.

Используя Kale, мы устранили следующие шаги из предыдущего примера:

  • Определение сложных функций и сохранение входных и выходных данных
  • Создание тома и оптимизация
  • Определение библиотек, необходимых внутри каждой функции
  • Передача данных между компонентами конвейера
  • Написание кода KFP DSL для определения конвейера

Вы можете найти данные, файлы и блокнот для этого примера на GitHub здесь.

Что дальше?

Первоначально опубликовано на https://www.arrikto.com 14 июня 2022 г.