Разработка программного обеспечения для науки о данных

От Jupyter до Kubernetes: рефакторинг и развертывание ноутбуков с использованием инструментов с открытым исходным кодом

Пошаговое руководство по переходу от захламленного блокнота к конвейеру, работающему в Kubernetes.

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

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

Первый шаг — очистить нашу записную книжку с помощью автоматизированных инструментов; затем мы автоматически преобразуем нашу монолитную записную книжку в модульный конвейер с помощью soorgeon; после этого мы проверим, работает ли наш пайплайн; и, наконец, мы развернем наш конвейер в Kubernetes. Основное преимущество этого рабочего процесса заключается в том, что все шаги полностью автоматизированы, поэтому мы можем вернуться в Jupyter, выполнить итерацию (или исправить ошибки) и снова развернуть без особых усилий.

Очистка ноутбука

Интерактивность блокнотов позволяет легко опробовать новые идеи, но также приводит к беспорядку в коде. Изучая данные, мы часто спешим писать код, не задумываясь о читабельности. К счастью для нас, есть такие инструменты, как isort и black, которые позволяют нам легко переформатировать наш код, чтобы улучшить его читабельность. К сожалению, эти инструменты работают только с .py файлами; однако soorgeon позволяет нам запускать их в файлах записной книжки (.ipynb):

Примечание. Если вам нужен пример блокнота, чтобы попробовать эти команды, вот он:

Взгляните на изображение в начале этого раздела: я добавил лишние пробелы в левый блокнот. Однако после применения soorgeon clean (рисунок справа) мы видим, что лишние пробелы ушли. Итак, теперь мы можем сосредоточиться на написании кода и применить soorgeon clean для простого использования автоформатирования!

Рефакторинг блокнота

Создавать анализ в одном блокноте удобно: мы можем легко перемещаться по разделам и редактировать их; однако у этого есть много недостатков: сложно сотрудничать и тестировать. Организация нашего анализа в нескольких файлах позволит нам определить четкие границы, чтобы несколько конвейеров могли работать в проекте, не мешая друг другу.

Процесс перехода от одного ноутбука к модульному конвейеру занимает много времени и подвержен ошибкам; к счастью, soorgeon может сделать за нас тяжелую работу:

После рефакторинга мы увидим кучу новых файлов:

Ploomber автоматически превращает наш ноутбук в модульный проект! Он генерирует README.md с основными инструкциями и requirements.txt (извлечение имен пакетов из import операторов). Кроме того, он создает каталог tasks/ с несколькими файлами .ipynb; эти файлы взяты из исходных разделов записной книжки, разделенных заголовками уценки. soorgeon refactor выясняет, какие разделы от каких зависят.

Если вы предпочитаете экспортировать .py файлов; вы можете передать опцию --file-format:

soorgeon refactor nb.ipynb --file-format py

На этот раз в каталоге tasks/ будет .py файлов:

  ├── README.md 
  ├── nb.ipynb
  ├── pipeline.yaml
  ├── requirements.txt
  └── tasks
      ├── clean.py
      ├── linear-regression.py
      ├── load.py
      ├── random-forest-regressor.py
      └── train-test-split.py

soorgeon использует заголовки Markdown, чтобы определить, сколько выходных задач нужно сгенерировать. В нашем случае их пять. Затем soorgeon анализирует код для устранения зависимостей между разделами и добавляет необходимый код для передачи выходных данных каждой задаче.

Например, в нашем разделе «Train test split» создаются переменные X, y, X_train, X_test, y_train и y_test; а последние четыре переменные используются в разделе «Линейная регрессия»:

Определив входные и выходные переменные, soorgeon определяет, что раздел «Линейная регрессия» зависит от раздела «Разделение тестов на обучение». Кроме того, раздел «Регрессор случайного леса» также зависит от «Разделения теста обучения», поскольку он также использует переменные, сгенерированные разделом «Разделение теста обучения». С помощью этой информации soorgeon строит граф зависимостей.

Тестирование нашего пайплайна

Теперь пришло время убедиться, что наш модульный конвейер работает правильно. Для этого мы будем использовать второй пакет в нашем наборе инструментов: ploomber. Ploomber позволяет нам разрабатывать и выполнять наши пайплайны локально.

Это результат:

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

Мы можем видеть график зависимости; есть три последовательных задачи: load, clean и train-test-split. После них мы видим две независимые задачи: linear-regression и random-forest-regressor. Преимущество модульности нашей работы в том, что члены нашей команды могут работать независимо, мы можем тестировать задачи изолированно и запускать независимые задачи параллельно. С ploomber мы можем продолжать разработку конвейера с Jupyter, пока не будем готовы к развертыванию!

Развертывание

Для простоты вы можете развернуть конвейер Ploomber с помощью cron и запускать ploomber build по расписанию. Однако в некоторых случаях может потребоваться использовать существующую инфраструктуру. Мы вас прикрыли! С помощью soopervisor вы можете экспортировать свой конвейер в Airflow, AWS Batch, Kubernetes, SLURM или Kubeflow.

soopervisor add добавляет в наш проект некоторые файлы, такие как предварительно настроенный Dockerfile (который мы можем изменить, если захотим). С другой стороны, soopervisor export берет наш существующий конвейер и экспортирует его в рабочие процессы Argo, чтобы мы могли запустить его в Kubernetes.

Изменив аргумент --backend в команде soopervisor add, вы можете переключиться на другие поддерживаемые платформы. Кроме того, вы можете подписаться на бесплатный облачный сервис, который позволяет вам запускать свои ноутбуки в облаке с помощью одной команды.

Заключительные замечания

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

Привет! Меня зовут Эдуардо, и я люблю писать обо всем, что связано с наукой о данных. Если вы хотите быть в курсе моих материалов. Следуйте за мной на Medium или Twitter. Спасибо за прочтение!

Первоначально опубликовано на ploomber.io.