使用Python开源库Couler编写和提交Argo Workflow工作流

article/2025/8/14 21:26:55

Python 是用户在 Kubernetes 上编写机器学习工作流的流行编程语言。

开箱即用时,Argo 并没有为 Python 提供一流的支持。相反,我们提供Java、Golang 和 Python API 客户端[1]

但这对大多数用户来说还不够。许多用户需要一个抽象层来添加组件和特定于用例的特性。

今天你有两个选择。

KFP 编译器+ Python 客户端

Argo 工作流被用作执行 Kubeflow 流水线的引擎。你可以定义一个 Kubeflow 流水线,并在 Python 中将其直接编译到 Argo 工作流中。

然后你可以使用Argo Python 客户端[2]向 Argo 服务器 API 提交工作流。

这种方法允许你利用现有的 Kubeflow 组件。

安装:

pip3 install kfp
pip3 install argo-workflows

例子:

import kfp as kfp
def flip_coin():return kfp.dsl.ContainerOp(name='Flip a coin',image='python:alpine3.6',command=['python', '-c', """
import random
res = "heads" if random.randint(0, 1) == 0 else "tails"
with open('/output', 'w') as f:f.write(res)"""],file_outputs={'output': '/output'})
def heads():return kfp.dsl.ContainerOp(name='Heads', image="alpine:3.6", command=["sh", "-c", 'echo "it was heads"'])
def tails():return kfp.dsl.ContainerOp(name='Tails', image="alpine:3.6", command=["sh", "-c", 'echo "it was tails"'])
@kfp.dsl.pipeline(name='Coin-flip', description='Flip a coin')
def coin_flip_pipeline():flip = flip_coin()with kfp.dsl.Condition(flip.output == 'heads'):heads()with kfp.dsl.Condition(flip.output == 'tails'):tails()
def main():kfp.compiler.Compiler().compile(coin_flip_pipeline, __file__ + ".yaml")
if __name__ == '__main__':main()

运行这个来创建你的工作流:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:generateName: coin-flip-annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.3.0, pipelines.kubeflow.org/pipeline_compilation_time: '2021-01-21T17:17:54.299235',pipelines.kubeflow.org/pipeline_spec: '{"description": "Flip a coin", "name":"Coin-flip"}'}labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.3.0}
spec:entrypoint: coin-fliptemplates:- name: coin-flipdag:tasks:- name: condition-1template: condition-1when: '"{{tasks.flip-a-coin.outputs.parameters.flip-a-coin-output}}" == "heads"'dependencies: [flip-a-coin]- name: condition-2template: condition-2when: '"{{tasks.flip-a-coin.outputs.parameters.flip-a-coin-output}}" == "tails"'dependencies: [flip-a-coin]- {name: flip-a-coin, template: flip-a-coin}- name: condition-1dag:tasks:- {name: heads, template: heads}- name: condition-2dag:tasks:- {name: tails, template: tails}- name: flip-a-coincontainer:command:- python- -c- "\nimport random\nres = \"heads\" if random.randint(0, 1) == 0 else \"tails\"\\nwith open('/output', 'w') as f:\n    f.write(res)        \n        "image: python:alpine3.6outputs:parameters:- name: flip-a-coin-outputvalueFrom: {path: /output}artifacts:- {name: flip-a-coin-output, path: /output}- name: headscontainer:command: [sh, -c, echo "it was heads"]image: alpine:3.6- name: tailscontainer:command: [sh, -c, echo "it was tails"]image: alpine:3.6arguments:parameters: []serviceAccountName: pipeline-runner

注意,Kubeflow 不支持这种方法。

你可以使用客户端提交上述工作流程如下:

import yaml
from argo.workflows.client import (ApiClient,WorkflowServiceApi,Configuration,V1alpha1WorkflowCreateRequest)
def main():config = Configuration(host="http://localhost:2746")client = ApiClient(configuration=config)service = WorkflowServiceApi(api_client=client)
with open("coin-flip.py.yaml") as f:manifest: dict = yaml.safe_load(f)
del manifest['spec']['serviceAccountName']
service.create_workflow('argo', V1alpha1WorkflowCreateRequest(workflow=manifest))
if __name__ == '__main__':main()

Couler

Couler[3]是一个流行的项目,它允许你以一种平台无感的方式指定工作流,但它主要支持 Argo 工作流(计划在未来支持 Kubeflow 和 AirFlow):

安装:

pip3 install git+https://github.com/couler-proj/couler

例子:

import couler.argo as couler
from couler.argo_submitter import ArgoSubmitter
def random_code():import random
res = "heads" if random.randint(0, 1) == 0 else "tails"print(res)
def flip_coin():return couler.run_script(image="python:alpine3.6", source=random_code)
def heads():return couler.run_container(image="alpine:3.6", command=["sh", "-c", 'echo "it was heads"'])
def tails():return couler.run_container(image="alpine:3.6", command=["sh", "-c", 'echo "it was tails"'])
result = flip_coin()
couler.when(couler.equal(result, "heads"), lambda: heads())
couler.when(couler.equal(result, "tails"), lambda: tails())
submitter = ArgoSubmitter()
couler.run(submitter=submitter)

这会创建以下工作流程:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:generateName: couler-example-
spec:templates:- name: couler-examplesteps:- - name: flip-coin-29template: flip-coin- - name: heads-31template: headswhen: '{{steps.flip-coin-29.outputs.result}} == heads'- name: tails-32template: tailswhen: '{{steps.flip-coin-29.outputs.result}} == tails'- name: flip-coinscript:name: ''image: 'python:alpine3.6'command:- pythonsource: |
import random
res = "heads" if random.randint(0, 1) == 0 else "tails"print(res)- name: headscontainer:image: 'alpine:3.6'command:- sh- '-c'- echo "it was heads"- name: tailscontainer:image: 'alpine:3.6'command:- sh- '-c'- echo "it was tails"entrypoint: couler-examplettlStrategy:secondsAfterCompletion: 600activeDeadlineSeconds: 300


参考资料

使用Python编写和提交Argo工作流 - SegmentFault 思否10人将获赠CNCF商店$100美元礼券!你填了吗?问卷链接([链接])作者:Alex CollinsPython 是用户在 Kubernetes 上编写机器学习工作流的流行编程语言。开箱即...https://segmentfault.com/a/1190000039101534[1]

Java、Golang和Python API客户端: https://github.com/argoproj-labs/argo-client-gen

[2]

Argo Python客户端: https://github.com/argoproj-labs/argo-client-python

[3]

Couler: https://github.com/couler-proj/couler


http://chatgpt.dhexx.cn/article/QoKZk7wQ.shtml

相关文章

SharePoint 2013 Nintex Workflow 工作流帮助(八)

博客地址 http://blog.csdn.net/foxdave 工作流动作 15. Complete Workflow Task(User interaction分组) 此工作流动作将完成任何进行中的任务,它将处理足够的单独任务来达到选择的结果,接下来工作流引擎会依据工作流的设置处理…

工作流(Workflow) -- 实现简单工作流程

工作流(activiti) 工作流简介 业务过程的部分或整体在计算机应用环境下的自动化 工作流就是多个参与者,按照某种预定义的规则,传递业务信息,进行审核的功能一个框架(activiti) 核心 23张表 ACT_RE_*:RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (…

wf工作流java_WF Workflow 状态机工作流 开发

概述 工作流是对业务流程的建模,当我们设计工作流的时候,我们首先要分析业务处理过程中要经历的步骤。然后,我们就可以利用WF创建工作流模型来模拟业务的处理过程。 我们知道,WF包含两种类型的工作流:顺序工作流和状态…

Mendix 9.6 - Workflow(工作流)基础设计

一 概述 Workflow(工作流)是Mendix 9版本中新增的一种可视化语言功能模块,我们可以用它来构建可扩展的流程。此外它还与其他可视化语言完全集成,例如微流编辑器和页面编辑器。 在公司我们往往需要填写许多表单,包括行政、人事、IT等方面的&a…

workflow工作流(三):画流程图工具对比

一、总结 我所用过能画工作流的工具有2个:1.eclipse插件,2.flowable官方网页版,结论是eclipse插件好用,后者要上传下载,还容易丢数据 注意事项:eclipse插件画出来的bpmn文件的schama是activiti&#xff0…

Bladex Workflow工作流引擎开发进阶-版本v1.2.2

Bladex Workflow工作流引擎开发进阶 1 Bladex Workflow简介2 Flowable简介3 workflow部署和配置-参考文档《BladeX插件 - Blade-flow使用帮助文档 》4 配置任务监听4.1 问题:监听类注入不了service 5 配置事件监听6 复杂表单-配置外部表单(不建议配置超大…

workflow工作流(二):34张表

1.常用的表 2.总共34张表 Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACT_RE_*: RE表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则&…

SAP Workflow 工作流开发步骤总结

一、配置 SWU3 设置管理员 二、新建业务对象 查看我们需要增强的业务对象,比如我们项目上用的是BUS2000114,一般我们工作流的触发 是用单据状态的改变来触发,这就需要我们增强业务对象 使用SWO1 新建一个业务对象 继承上面的标准对象 注意…

小小研究一下工作流WorkFlow

修房子 在小牧老家农村,小时候总是看到村里有人在修房子。每次看到有人修房子的时候,他就会爬到房子面前的沙粒堆上去,翻找随着沙子一起被挖出来的贝壳。虽然也不知道拿来干嘛,不过总觉得收集贝壳很好玩。 小牧也喜欢看他们修房子。修房子的时候,专业的修房师傅会指导工…

微软 workflow 工作流总结

1.状态机工作流 (1)状态机工作流从state1 流转到 state2 到stateN (2) state中有执行状态和退出状态 (3) 在进入下一个步骤(state1 到 state2)前,首先会判断进入下一个状态的条件,下面我把它叫做判断模块 (4)在判断模块中,有三个生命周期:Trigger,Condition,Action (5)判断模…

WorkFlow工作流

工作流 一、什么是工作流 历史发展: 工作流的理论起源于70年代中期办公的自动化领域。90年代。工作流技术的研究与开发进一步发展。1993年8月,成立第一个工作流技术标准话的工业组织WFMC(工作流管理联盟)。现在,工作…

工作流(Workflow)基本介绍

工作流简介 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标&a…

Eclipse下配置主题颜色

对于长期做开发的哥们来说,过于明亮的背景色会导致视觉疲劳,从而致使效率各种下降、困意各种来袭。为了有效阻止这种可怕的事情发生,我们需要改变背景色! OK,这篇博客主要讲解如何设置eclipse软件的背景色:…

修改eclipse的主题颜色

很多小伙伴的eclipse都是以白色为主,看到别人的暗色的eclipse感觉很炫酷,这里就教大家一下如何改主题颜色 1.点击顶部导航栏help,找到Eclipse Marketplace 2.在弹出的Eclipse Marketplace窗口中,在search中搜索color theme&…

eclipse设置 “暗黑色” 主题

经典模式的 eclipse 都是白底黑字,比较刺眼,长时间写代码,让人感觉眼睛疲劳,所以尝试换一个暗黑色主题背景,可以有效减缓眼睛疲劳,而且暗黑色主题给人感觉就很酷炫,有木有! 1、打开…

Eclipse背景主题设置

这方面的内容是很简单,而且网上也相当多的教程。但我觉得,自己写一下,既可以加持自己写博客的心态,也给需要的人分享一下。 确认一下自己的Eclispse版本, 如果是最新版本的Eclipse Luna,可以略过第一步,如果是旧的版本需要下载一个插件,并将其放在eclipse目录下的plugi…

Eclipse在线安装color-theme主题

添加入口: Eclipse --> Help --> Install New Software --> addName: color-theme Location: http://eclipse-color-theme.github.com/update全选 NEXT 接受协议 选择 Install anyway Restart Now 重启 Window --> Preference --> General --> Appe…

为Eclipse安装主题插件(Color Theme)

由于正常eclipse界面配色是白底黑字,长时间工作容易眼睛疲劳,才想着去装这个Eclipse Color Theme 插件,安装过程中遇到了一些问题。 正常安装的话直接 Help -> marketplace -> search 框下输入 color theme 就可以搜索到目标插件&am…

如何把Eclipse修改为黑色主题

转载自:http://bbs.itheima.com/forum.php?modviewthread&tid119345&extrapage%3d1%26filter%3dtypeid%26typeid%3d390?lt3448 原帖名:如何把Eclipse修改为黑色主题?求配色方案! 因为主力问题已解决,经过修…

eclipse黑色主题黑色背景

现在本人用eclipse的版本信息:Eclipse for PHP Developers ----Version: Mars.1 Release (4.5.1),可以在菜单栏--help---about eclipse里查看 因为写代码到很晚,所以想换个黑色主题以以及黑色背景。 所以写一写这个设置。 自己先参照了别人…