工作流编译器。
项目描述
库勒
Couler 是一种用于描述工作流的编程语言。它共享 Python 的语法,但只有一小部分——函数定义和调用。Couler 也是编译器的名称,它将 Couler 程序翻译成Argo YAML 文件。
动机
Couler 的一个动机来自于 SQLFlow 的需求。SQLFlow 将带有可选 AI 语法扩展的 SQL 程序翻译成 Couler 程序,Couler 编译器将其翻译成 Argo YAML 文件。
SQLFlow 需要 Couler,因为它需要 Argo。它需要 Argo,因为它需要一个工作流执行引擎。它需要一个工作流引擎,因为在大多数设置中,SQLFlow 服务器不能仅仅将每个 SQL 语句转换为 Python 提交程序并逐个运行它们。如果这样做,SQLFlow 引擎就像工作流引擎一样工作,需要保持工作流执行的状态。然而,不幸的是,由于 SQLFlow 作为服务在 Kubernetes 上运行,这是最常见的情况,每个服务器实例都可能随时被抢占。SQLFlow 服务器确实可以将状态保存在像 etcd 这样的健壮存储中;但是,这会引入大量代码并使 SQLFlow 成为 Argo 等可靠工作流引擎的复制品。
我们在 Argo 之上构建 Couler 有一些原因:
- Argo YAML 不够全面,如果我们让 SQLFlow 直接生成 YAML 文件,很难调试。
- 当我们将 Couler 介绍为人类可读的中间表示时,除了 SQLFlow 用户之外,它还将使 Python 程序员受益。
该设计
步骤和功能
Couler 用户将工作流编写为 Python 程序,其中每一步都是一个 Python 函数定义,而工作流本身就是一系列函数调用。我们想要如下的阶跃函数。
couler.mysql.run(sql)couler.mysql.export_table(table, filename)couler.xgboost.train(model_def, training_data)couler.xgboost.predict(trained_mode, test_data)
库勒芯
用户在定义阶跃函数时,可以调用 Couler 提供的以下基本函数。
couler.run_container(docker_image, cmd, args)启动一个容器以运行带有参数的命令行。它返回从标准输出中提取的值。couler.run_script(docker_image, function_name)在容器中运行当前 Couler 程序中定义的 Python 函数。它返回从标准输出中提取的值。couler.when(condition, step)如果条件 lambda 返回 true,则运行一个步骤。couler.map(step, a_list)为给定 Python 列表中的每个值重复运行一个步骤。
步动物园
来自步进动物园的 Couler 步进函数的集合。因为每个步骤都在 Docker 容器中运行,所以步骤动物园也可能包含一些 Dockerfile。它建议配置 CI/CD 系统以自动从 Dockerfiles 构建 Docker 映像。
Argo 和 Docker 模式
为了让调试更加舒适,我们可以让 Couler在Argo 模式之外支持Docker模式。在这两种方式中,每个步骤都作为 Docker 容器运行。不同之处在于容器以 Argo 模式运行在 Kubernetes 集群上,但以 Docker 模式运行在本地主机上。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。