Рабочий процесс машинного обучения с открытым исходным кодом Ploomber

Workflow
Рабочий процесс машинного обучения с открытым исходным кодом Ploomber

Это 12-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

Кратко

Ploomber — это самый простой способ создать надежные рабочие процессы данных для науки о данных и машинного обучения. Когда вы предоставляете исходный код в стандартной форме, Ploomber автоматически создает для вас рабочий процесс. Задачи могут быть любыми: от функций Python, Jupyter Notebooks, сценариев Python/R/shell и сценариев SQL. Когда будете готовы, разверните в Airflow без изменений кода илиKubernetes(используя Арго).

ploomber工作流.png

Главная особенность

Встроенный ноутбук Jupyter. Когда вы откроете блокнот, Ploomber автоматически вставит новую ячейку с расположением входного файла, полученным из вышестоящих переменных. Если вы открываете сценарий Python или R, он мгновенно преобразуется в блокнот.

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

Поддержка распараллеливания. Поддерживает параллельное выполнение задач для ускорения вычислений.

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

Поддержка отладки рабочего процесса. использоватьplumber interactЗапустите интерактивный сеанс для отладки вашего рабочего процесса. перечислитьdag['task_name'].debug() чтобы начать сеанс отладки.

Поддерживает развертывание в Kubernetes, AWS Batch или Airflow.. Вы можете разрабатывать и выполнять локально. Когда вы будете готовы к развертыванию, экспортируйте в Kubernetes, AWS Batch или Airflow. (Примечание: Ploomber предоставляетSoopervisorБиблиотеки для запуска рабочих процессов Ploomber для пакетной обработки (обучение в масштабе или пакетное обслуживание) или онлайн-вывода. )

Пример

определить задачи

Сначала определите задачу, здесь задача — это скрипт Python.

Этот рабочий процесс состоит из 3 задач, первая задача raw.py получает некоторые данные, вторая задача clean.py очищает данные, а третья задача plot.py создает визуализацию.

ls *.py
clean.py	plot.py		raw.py

Эти три сценария выше составляют наш рабочий процесс (или DAG), который представляет собой набор задач с предопределенным порядком выполнения.

raw.py

"""
Get data
"""
import seaborn as sns

# + tags=["parameters"]
upstream = None
product = None
# -

# +
df = sns.load_dataset('iris')
df.columns = [
    'sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'
]
df.head()
# -

# +
df.to_csv(str(product['data']), index=False)
# -

clean.py

"""
Clean
"""
import pandas as pd

# + tags=["parameters"]
upstream = ['raw']
product = None
# -

df = pd.read_csv(upstream['raw']['data'])
# data cleaning code...

df.to_csv(str(product['data']), index=False)

plot.py

"""
Visualize
"""
# this is an annotated script
import pandas as pd
import seaborn as sns

# + tags=["parameters"]
upstream = ["clean"]
product = None
# -

df = pd.read_csv(upstream['clean']['data'])

sns.distplot(df.sepal_length)

sns.distplot(df.sepal_width)

df.head()

Ploomber интегрируется с Jupyter Notebook, и если вы откроете скрипты в приложении Jupyter Notebook, они будут отображаться как блокноты.

Определить рабочий процесс

Затем определите рабочий процесс, рабочий процесс определяется в файле pipe.yaml.

Файл pipe.yaml объявляет, какие файлы мы используем в качестве задач (pipe.yaml не является обязательным, но это дает вам больше гибкости).

pipeline.yaml

tasks:
  - source: raw.py
    product:
      nb: output/raw.ipynb
      data: output/data.csv

  - source: clean.py
    product:
      nb: output/clean.ipynb
      data: output/clean.csv

  - source: plot.py
    product: output/plot.ipynb

Нарисуйте схему рабочего процесса

Затем нарисуйте рабочий процесс в командной строке.

ploomber plot

ploomber-dag.png

Обзор рабочих процессов

ploomber status

Выходной результат:

name    Last run      Outdated?    Product       Doc (short)    Location
------  ------------  -----------  ------------  -------------  ------------
raw     Has not been  Source code  MetaProduct(                 /home/docs/c
        run                        {'data': Fil                 heckouts/rea
                                   e('output/da                 dthedocs.org
                                   ta.csv'),                    /user_builds
                                   'nb': File('                 /ploomber/ch
                                   output/raw.i                 eckouts/proj
                                   pynb')})                     ects-
                                                                master/spec-
                                                                api-python/r
                                                                aw.py
clean   Has not been  Source code  MetaProduct(                 /home/docs/c
        run           & Upstream   {'data': Fil                 heckouts/rea
                                   e('output/cl                 dthedocs.org
                                   ean.csv'),                   /user_builds
                                   'nb': File('                 /ploomber/ch
                                   output/clean                 eckouts/proj
                                   .ipynb')})                   ects-
                                                                master/spec-
                                                                api-python/c
                                                                lean.py
plot    Has not been  Source code  File('output                 /home/docs/c
        run           & Upstream   /plot.ipynb'                 heckouts/rea
                                   )                            dthedocs.org
                                                                /user_builds
                                                                /ploomber/ch
                                                                eckouts/proj
                                                                ects-
                                                                master/spec-
                                                                api-python/p
                                                                lot.py

Создайте рабочий процесс

Затем запустите рабочий процесс.

# output文件件保存输出结果,包括数据和脚本的Notebook
mkdir output
ploomber build

результат операции:

Building task 'raw':   0%|          | 0/3 [00:00<?, ?it/s]
Executing:   0%|          | 0/5 [00:00<?, ?cell/s]
Executing:  20%|██        | 1/5 [00:03<00:14,  3.71s/cell]
Executing: 100%|██████████| 5/5 [00:04<00:00,  1.15cell/s]
Building task 'clean':  33%|███▎      | 1/3 [00:04<00:08,  4.38s/it]
Executing:   0%|          | 0/5 [00:00<?, ?cell/s]
Executing: 100%|██████████| 5/5 [00:01<00:00,  3.91cell/s]
Building task 'plot':  67%|██████▋   | 2/3 [00:05<00:02,  2.56s/it]
Executing:   0%|          | 0/7 [00:00<?, ?cell/s]
Executing:  14%|█▍        | 1/7 [00:01<00:08,  1.35s/cell]
Executing:  71%|███████▏  | 5/7 [00:01<00:00,  4.18cell/s]
Executing: 100%|██████████| 7/7 [00:01<00:00,  3.65cell/s]
Building task 'plot': 100%|██████████| 3/3 [00:07<00:00,  2.53s/it]


name    Ran?      Elapsed (s)    Percentage
------  ------  -------------  ------------
raw     True          4.37319       57.5864
clean   True          1.28883       16.9714
plot    True          1.93212       25.4422

Обновить рабочий процесс

Если мы изменим задачи в рабочем процессе. Нам нужно обновить рабочий процесс, чтобы повторно выполнить измененные задачи.

ploomber build

результат операции:

0it [00:00, ?it/s]

name    Ran?      Elapsed (s)    Percentage
------  ------  -------------  ------------
raw     False               0             0
clean   False               0             0
plot    False               0             0

Как видно из вышеизложенного, ни одна из наших трех задач не выполняется повторно, потому что я не модифицировал эти три задачи.

Суммировать

Ploomber использует соглашение вместо конфигурации. С самого начала вам просто нужно включить две специальные переменные в ваши скрипты/блокноты, и Ploomber организует рабочий процесс. Для большей гибкости вы можете указать конвейер с помощью YAML.

Между тем, Ploomber может использовать Jupyter для интерактивной разработки сценариев и блокнотов, а затем выполнять их программно.