简述

Ploomber 是为数据科学和机器学习构建可靠数据工作流的最简单方法。 当你以标准形式提供您的源代码,Ploomber 会自动为您构建工作流。 任务可以是 Python 函数、Jupyter Notebook、Python/R/shell 脚本和 SQL 脚本中的任何内容。当你准备就绪后,无需更改代码即可部署到 Airflow 或 Kubernetes(使用 Argo)。

主要特点

集成了Jupyter Notebook。 当您打开Notebook时,Ploomber 将自动注入一个新单元格,其中包含从上游变量推断出的输入文件的位置。 如果您打开 Python 或 R 脚本,它会立即转换为Notebook。

支持增量构建。 通过跳过源代码未更改的任务来加快执行速度。

支持并行化。 支持并行运行任务以加快计算速度。

支持工作流测试。 在任务执行时,运行测试以验证输出的数据是否具有正确的属性(例如,在预期范围内的值)。

支持工作流调试。 使用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应用程序内的脚本,它们将呈现为notebooks形式。

定义工作流

然后定义工作流,工作流在pipeline.yaml中定义。

pipeline.yaml文件声明我们使用哪些文件作为任务(pipeline.yaml是可选,但它给了您更多的灵活性)。

pipeline.yaml

tasks:- source: raw.pyproduct:nb: output/raw.ipynbdata: output/data.csv- source: clean.pyproduct:nb: output/clean.ipynbdata: output/clean.csv- source: plot.pyproduct: output/plot.ipynb

绘制工作流图

接下来在命令行绘制工作流。

ploomber plot

浏览工作流

ploomber status

输出结果:

name    Last run      Outdated?    Product       Doc (short)    Location
------  ------------  -----------  ------------  -------------  ------------
raw     Has not been  Source code  MetaProduct(                 /home/docs/crun                        {'data': Fil                 heckouts/reae('output/da                 dthedocs.orgta.csv'),                    /user_builds'nb': File('                 /ploomber/choutput/raw.i                 eckouts/projpynb')})                     ects-master/spec-api-python/raw.py
clean   Has not been  Source code  MetaProduct(                 /home/docs/crun           & Upstream   {'data': Fil                 heckouts/reae('output/cl                 dthedocs.orgean.csv'),                   /user_builds'nb': File('                 /ploomber/choutput/clean                 eckouts/proj.ipynb')})                   ects-master/spec-api-python/clean.py
plot    Has not been  Source code  File('output                 /home/docs/crun           & Upstream   /plot.ipynb'                 heckouts/rea)                            dthedocs.org/user_builds/ploomber/checkouts/projects-master/spec-api-python/plot.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使用约定优于配置的方式。从一开始,您只需在脚本/notebooks中包含两个特殊变量,Ploomber就可以将工作流进行编排执行。为了获得更大的灵活性,您可以使用 YAML 指定您的pipeline。

同时,Ploomber可以使用Jupyter以交互方式开发脚本和notebooks,然后以编程方式执行。

开源机器学习工作流Ploomber相关推荐

  1. 开源机器学习流水线(Pipeline)工具调研(MLOps)

    简介 实施数据科学项目不是一件简单的任务.至少,数据分析工作流程必须定期运行,以产生最新的结果.比如,一份上周数据的报告,或者由于概念发生变化而重新训练机器学习模型.在某些情况下,这类工作流的输出需要 ...

  2. Scikit-learn 核心开发人员专访:建立机器学习工作流最容易犯这2点错误

    导语:Scikit learn的开发者分享了3种实用的ML技术 本文是一篇对 Scikit-learn 开发者的专访,原载于 towardsdatascience,AI 开发者编译整理,采访内容如下文 ...

  3. 基于Kubernetes 的机器学习工作流

    https://www.toutiao.com/a6642101619120931335/ 2019-01-03 18:00:00 介绍 Pipeline是Kubeflow社区最近开源的一个端到端工作 ...

  4. Meson:支持Netflix的机器学习工作流

    Netflix的目标是能预测顾客之所想观看的电影,也即推荐预测.为了做到这一点,每天会运行大量机器学习工作流,而为了支撑创建这么多机器学习工作流和有效利用资源,Netflix的工程师开发了Meson. ...

  5. Apache Spark 技术团队开源机器学习平台 MLflow

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   近日,来自 Databricks 的 Matei Zaharia 宣布推出开源机器学习平台 MLflow .Matei Zaharia 是 ...

  6. 解锁云原生 AI 技能 - 开发你的机器学习工作流

    按照上篇文章<解锁云原生 AI 技能 | 在 Kubernetes 上构建机器学习系统>搭建了一套 Kubeflow Pipelines 之后,我们一起小试牛刀,用一个真实的案例,学习如何 ...

  7. bilibili基于 Flink 的机器学习工作流平台在 b 站的应用

    简介:介绍 b 站的机器学习工作流平台 ultron 在 b 站多个机器学习场景上的应用. 分享嘉宾:张杨,B 站资深开发工程师 导读:整个机器学习的过程,从数据上报.到特征计算.到模型训练.再到线上 ...

  8. MLFlow︱机器学习工作流框架:介绍(一)

    文章目录 1 DataOps.MLOps 和 AIOps,你要的是哪个Ops? 2 MLFlow 2.1 MLFlow优势 2.2 MLFlow劣势 2.3 MLFlow 和 AirFlow的差异 2 ...

  9. 【深度学习】基于Torch的Python开源机器学习库PyTorch卷积神经网络

    [深度学习]基于Torch的Python开源机器学习库PyTorch卷积神经网络 文章目录 1 CNN概述 2 PyTorch实现步骤2.1 加载数据2.2 CNN模型2.3 训练2.4 可视化训练 ...

最新文章

  1. 大数据之公开数据的价值
  2. go语言中的变量与作用域
  3. boost::contract模块实现circle的测试程序
  4. Linux下GCC的安装,GCC链接外部库
  5. netty系列之:Event、Handler和Pipeline
  6. Opencv SVM demo
  7. mongodb mysql json数据_使用MongoDB与MySQL有很多JSON字段?
  8. leetcode415. 字符串相加
  9. BST树、B树、B+树、B*树
  10. 股票指标php源码,自编技术指标公式源码(一)_股票学习网
  11. java8新特性和汪文君Google Guava项目实战视频
  12. C#/VB.net/VB 获取系统时间
  13. 运筹学那些事,专科学生学习运筹学之运输问题,No.5
  14. java设置png dpi_设置PNG图片DPI 信息,保存为PDF(使用Magick),与OpenCV转换
  15. 《#华为云#听从你心,无问西东》及网友跟帖
  16. udp buffer 和reassemble buffer
  17. 关于小米笔记本Pro内部风扇异响问题解决方法
  18. 导出pdf内容包换特殊符号,或转行符号等解决方法
  19. 房产行业数字化转型迷思:技术能提供何种助力?
  20. php输出1到100的质数,怎么用PHP写出1到100的质数

热门文章

  1. 2022腾讯云年终双十一云服务器活动汇总
  2. 计算机美图PS等,电脑软件ps和美图秀秀怎么拼图 不懂操作怎么办?
  3. Myabtis源码分析五-Mybatis配置加载完全图解,建造者模式的使用,涵盖Java各种技术栈
  4. 「Jetpack - Paging3使用」
  5. OpenCV中HOG人检测以及Part Model latent SVM目标识别
  6. MAC环境下生成Apple证书教程
  7. php preg_PHP Preg简介
  8. 【程序设计】Web网页脚本执行
  9. 长途汽车信息管理数据库的设计与实现
  10. 靠营销出圈的拉面说,会是下一个黄太吉吗?