Анкит Рай
Добро пожаловать в последний выпуск продолжающейся серии сообщений в блоге 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 здесь.
Что дальше?
- Начните работу с Kubeflow всего за несколько минут бесплатно. Кредитная карта не требуется!
- Получите код, данные и блокноты, используемые в этом примере, на GitHub
- Попробуйте свои силы в преобразовании соревнования Kaggle в конвейер Kubeflow
Первоначально опубликовано на https://www.arrikto.com 14 июня 2022 г.