开源机器学习工作流Ploomber

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

简述


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.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 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使用约定优于配置的方式。从一开始,您只需在脚本/notebooks中包含两个特殊变量,Ploomber就可以将工作流进行编排执行。为了获得更大的灵活性,您可以使用 YAML 指定您的pipeline。

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


相关文章
|
人工智能 Linux API
Omnitool:开发者桌面革命!开源神器一键整合ChatGPT+Stable Diffusion等主流AI平台,本地运行不联网
Omnitool 是一款开源的 AI 桌面环境,支持本地运行,提供统一交互界面,快速接入 OpenAI、Stable Diffusion、Hugging Face 等主流 AI 平台,具备高度扩展性。
1869 94
Omnitool:开发者桌面革命!开源神器一键整合ChatGPT+Stable Diffusion等主流AI平台,本地运行不联网
|
机器学习/深度学习 人工智能 自然语言处理
阿里云人工智能平台 PAI 开源 EasyDistill 框架助力大语言模型轻松瘦身
本文介绍了阿里云人工智能平台 PAI 推出的开源工具包 EasyDistill。随着大语言模型的复杂性和规模增长,它们面临计算需求和训练成本的障碍。知识蒸馏旨在不显著降低性能的前提下,将大模型转化为更小、更高效的版本以降低训练和推理成本。EasyDistill 框架简化了知识蒸馏过程,其具备多种功能模块,包括数据合成、基础和进阶蒸馏训练。通过数据合成,丰富训练集的多样性;基础和进阶蒸馏训练则涵盖黑盒和白盒知识转移策略、强化学习及偏好优化,从而提升小模型的性能。
|
机器学习/深度学习 人工智能 并行计算
Unsloth:学生党福音!开源神器让大模型训练提速10倍:单GPU跑Llama3,5小时变30分钟
Unsloth 是一款开源的大语言模型微调工具,支持 Llama-3、Mistral、Phi-4 等主流 LLM,通过优化计算步骤和手写 GPU 内核,显著提升训练速度并减少内存使用。
2340 3
Unsloth:学生党福音!开源神器让大模型训练提速10倍:单GPU跑Llama3,5小时变30分钟
|
人工智能 自然语言处理 物联网
阿里万相重磅开源,人工智能平台PAI一键部署教程来啦
阿里云视频生成大模型万相2.1(Wan)重磅开源!Wan2.1 在处理复杂运动、还原真实物理规律、提升影视质感以及优化指令遵循方面具有显著的优势,轻松实现高质量的视频生成。同时,万相还支持业内领先的中英文文字特效生成,满足广告、短视频等领域的创意需求。阿里云人工智能平台 PAI-Model Gallery 现已经支持一键部署阿里万相重磅开源的4个模型,可获得您的专属阿里万相服务。
|
机器学习/深度学习 数据采集 人工智能
容器化机器学习流水线:构建可复用的AI工作流
本文介绍了如何构建容器化的机器学习流水线,以提高AI模型开发和部署的效率与可重复性。首先,我们探讨了机器学习流水线的概念及其优势,包括自动化任务、确保一致性、简化协作和实现CI/CD。接着,详细说明了使用Kubeflow Pipelines在Kubernetes上构建流水线的步骤,涵盖安装、定义流水线、构建组件镜像及上传运行。容器化流水线不仅提升了环境一致性和可移植性,还通过资源隔离和扩展性支持更大规模的数据处理。
|
机器学习/深度学习 人工智能 监控
AutoTrain:Hugging Face 开源的无代码模型训练平台
AutoTrain 是 Hugging Face 推出的开源无代码模型训练平台,旨在简化最先进模型的训练过程。用户无需编写代码,只需上传数据即可创建、微调和部署自己的 AI 模型。AutoTrain 支持多种机器学习任务,并提供自动化最佳实践,包括超参数调整、模型验证和分布式训练。
1806 4
AutoTrain:Hugging Face 开源的无代码模型训练平台
|
机器学习/深度学习 数据采集 数据处理
Scikit-learn Pipeline完全指南:高效构建机器学习工作流
Scikit-learn管道是构建高效、鲁棒、可复用的机器学习工作流程的利器。通过掌握管道的使用,我们可以轻松地完成从数据预处理到模型训练、评估和部署的全流程,极大地提高工作效率。
586 2
Scikit-learn Pipeline完全指南:高效构建机器学习工作流
|
人工智能 监控 开发者
阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!
阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!
413 0
|
机器学习/深度学习 资源调度 分布式计算
阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源
PAI-ChatLearn现已全面开源,助力用户快速、高效的Alignment训练体验。借助ChatLearn,用户可全身心投入于模型设计与效果优化,无需分心于底层技术细节。ChatLearn将承担起资源调度、数据传输、参数同步、分布式运行管理以及确保系统高效稳定运作的重任,为用户提供一站式解决方案。
|
机器学习/深度学习 人工智能 算法
ML.NET:一个.NET开源、免费、跨平台的机器学习框架
ML.NET:一个.NET开源、免费、跨平台的机器学习框架
961 2

热门文章

最新文章