通过OpenAPI创建Pipeline时,需要构造一个Manifest对象作为参数。本文介绍Manifest格式和相关示例。
公共格式
API版本和元信息
apiVersion: 工作流格式的版本
metadata:
name: 工作流名
identifier: 工作流标识
version: 工作流版本
provider: 工作流提供方
guid: 唯一ID,用于标识临时节点。
displayName: 工作流显示名
annotations: 工作流注解,目前只支持官方注解
字段名称 | 类型 | 默认值 | 是否必填 | 含义 |
apiVersion | String | core/v1 | 是 | 工作流格式的版本,目前只支持 |
metadata | Object | 无 | 是 | 工作流元信息,通过 |
name | String | 无 | 否 | 工作流名称,不要求唯一。 如果为空,会自动生成一个随机值。 |
identifier | String | 无 | 是 | 工作流标识,用来区分工作流,Designer平台每个算法的工作流标识都不同。 |
version | String | 无 | 是 | 工作流版本,用来支持工作流的升级。同一个工作流的输入、输出、实现变化后,版本应该与原先不同。 版本号推荐用v1.0.0的格式。 |
provider | String | 无 | 是 | 工作流提供方,目前有以下两种:
|
guid | String | 无 | 否 | 唯一ID,同一个工作流内不允许重复。只用在临时节点中,用于标识临时节点。 |
displayName | String | 无 | 否 | 显示名,不要求唯一。 |
annotations | List<Object> | 无 | 否 | 标识工作流一些特性,类型是数组,目前支持如下特性: 标识Alink组节点
|
输入输出定义
spec:
inputs: 输入定义
artifacts:
parameters:
outputs: 输出定义
artifacts:
parameters:
Artifact
Artifact是数据流,代表机器学习在某一阶段的成果,用来串联上下流的工作流。
artifacts: - name: 名字 metadata: 类型 value: 值 desc: 描述 repeated: 是否可扩展为多个Artifact required: 值是否必填,默认为false
字段名称
类型
默认值
含义
name
String
无
名称,在同一个节点内唯一。
metadata
Object
无
元信息,包含Artifact类型、存储类型等。
value
String
无
值。
desc
String
无
描述,可为空。
repeated
Bool
false
是否可扩展为多个Artifact,这些Artifact metadata相同。
true
:可扩展false
:不可扩展
required
Bool
false
值是否必填。
true
:必填false
(默认值):可选
Parameter
Parameter是工作流运行参数。
parameters: - name: 参数名 type: 参数类型 value: 参数默认值 desc: 参数描述 feasible: 参数规范
字段名称
类型
默认值
含义
name
String
无
名称,在同一个节点内唯一。
type
String
无
支持的参数类型:
String
Double
Int
Bool
Map
List
value
String
无
参数的默认值,如果没有设置就使用该值。
desc
String
无
描述
feasible
Feasible
无
参数的规范,目前支持:
min
:最小值max
:最大值len
:长度regex
:正则表达式
单节点工作流构造示例
整体定义
工作流只包含一个节点定义,适用于算法定义场景。定义出的单节点工作流可以在DAG工作流中直接引用。
apiVersion: 工作流格式的版本
metadata:
name: 工作流名
identifier: 工作流标识
version: 工作流版本
provider: 工作流提供方
displayName: 工作流显示名
annotations: 工作流注解,目前只支持官方注解
spec:
inputs: 输入定义
artifacts:
parameters:
outputs: 输出定义
artifacts:
parameters:
initContainers: 初始化容器列表
- name: 容器名
image: 镜像
command: 运行命令
args: 运行参数
container: 主容器描述
image: 镜像
command: 运行命令
args: 运行参数
sideCarContainers: 容器列表
- name: 容器名
image: 镜像
command: 运行命令
args: 运行参数
详细定义
API版本、元信息以及输入输出定义等详情,请参见公共格式。
spec:
initContainers: 初始化容器列表
- name: 容器名
image: 镜像
command: 运行命令
args: 运行参数
container: 主容器
image: 镜像
command: 运行命令
args: 运行参数
sideCarContainers: 容器列表
- name: 容器名
image: 镜像
command: 运行命令
args: 运行参数
字段名称 | 类型 | 默认值 | 含义 | |
initContainers | List<InitContainer> | 无 | 初始化容器列表,这些容器完成后才会开始运行主容器和容器列表。 | |
InitContainer | image | String | 无 | 容器启动镜像,可以是PAI官方镜像或用户自定义镜像。 |
args | List | 无 | 启动参数,可以为空。 | |
command | String | 无 | 启动命令。 | |
name | String | 无 | 容器名称,节点内唯一。 | |
container | MainContainer | 无 | 主容器,单节点工作流的成功与否取决于主容器的状态。 | |
MainContainer | image | String | 无 | 容器启动镜像,可以是PAI官方镜像或用户自定义镜像。 |
args | List | 无 | 启动参数,可以为空。 | |
command | String | 无 | 启动命令。 | |
sideCarContainers | List<SideCarContainer> | 无 | 容器列表。 | |
SideCarContainer | image | String | 无 | 容器启动镜像,可以是PAI官方镜像或用户自定义镜像。 |
args | List | 无 | 启动参数,可以为空。 | |
command | String | 无 | 启动命令。 | |
name | String | 无 | 容器名称,节点内唯一。 |
示例
以下是输出MaxCompute表信息的单节点工作流定义。
有一个输出Artifact,类型是MaxCompute表。
有一个输入参数,代表输出MaxCompute表名。
apiVersion: core/v1
metadata:
provider: '13266******76250'
version: v1
identifier: echo
spec:
inputs:
parameters:
- name: outputTableName
type: String
value: pai_temp_outputTable
outputs:
artifacts:
- name: outputTable
metadata:
type:
DataSet:
locationType: MaxComputeTable
desc: SQL Script Output Port
container:
image: 'registry.cn-shanghai.aliyuncs.com/paiflow-core/max-compute-executor:v1.1.4'
command:
- sh
- -c
args:
- |
mkdir -p /pai/outputs/artifacts/outputTable/
echo '{\"metadata\":{\"type\":{\"DataSet\":{\"locationType\":\"MaxComputeTable\"}}}' > /pai/outputs/artifacts/outputTable/metadata
echo '{\"location\": {\"endpoint\": \"http://service.cn-shanghai.maxcompute.aliyun.com/api\",\n \"project\": \"wyl_t******t2\", \"table\": \"{{inputs.parameters.outputTableName}}\"}}' > /pai/outputs/artifacts/outputTable/value
DAG工作流构造示例
整体定义
工作流定义了一个DAG,描述了多个节点的先后运行顺序。
apiVersion: 工作流格式的版本
metadata:
name: 工作流名
identifier: 工作流标识
version: 工作流版本
provider: 工作流提供方
displayName: 工作流显示名
annotations: 工作流注解,目前只支持官方注解
spec:
inputs: 输入定义
artifacts:
parameters:
outputs: 输出定义
artifacts:
parameters:
pipelines: 子工作流集合
- metadata:
name: 子工作流名
displayName: 子工作流显示名
guid: 只用在临时节点中,代表临时节点的Id
provider: 子工作流提供方
identifier: 子工作流所属定义的唯一标识
version: 子工作流所属定义的版本
spec:
arguments: 子工作流赋值
artifacts:
parameters:
dependencies: 子工作流依赖列表
when: 条件判断
withSequence: 基于序号的循环表达式
start: 开始序号
end: 结束序号
format: 格式,具体见https://pkg.go.dev/fmt
withItems: 基于列表的循环表达式
withParam: 基于参数的循环表达式
parallelism: 节点并行度
详细定义
API版本、元信息以及输入输出定义等详情,请参见公共格式。
节点集合详情如下。
spec:
pipelines: 节点集合
- metadata:
name: 节点名
displayName: 节点显示名
guid: 只用在临时节点中,代表临时节点的Id
provider: 节点提供方
identifier: 节点标识
version: 节点版本
spec:
arguments: 节点赋值
artifacts: 节点Artifact赋值
parameters: 节点参数赋值
dependencies: 节点依赖
when: 条件判断
withSequence: 基于序号的循环表达式
start: 开始序号
end: 结束序号
format: 格式,具体见https://pkg.go.dev/fmt
withItems: 基于列表的循环表达式
withParam: 基于参数的循环表达式
parallelism: 节点并行度
Pipelines是节点集合,集合中每个节点必须先注册到PAIFlow。每个节点可以包含更多的节点集合,没有层数限制。每个节点定义如下:
字段名称 | 类型 | 默认值 | 含义 | |
metadata | Object | 无 | 节点元信息。 | |
name | String | 无 | 节点名字,节点集合中唯一。 | |
displayName | String | 无 | 节点显示名,可以重复。 | |
provider | String | 无 | 节点提供方。 | |
guid | String | 无 | 只用在临时节点中,代表临时节点的ID。 | |
identifier | String | 无 | 节点标识。 | |
version | String | 无 | 节点版本。 | |
spec | Object | 无 | 节点规范定义。 | |
arguments | Object | 无 | 节点参数和Artifact赋值,会覆盖节点定义的默认值 | |
dependencies | List<String> | 无 | 节点依赖关系 类型是数组,代表依赖的多个节点,当这些依赖节点都运行成功后才开始运行当前节点。 | |
when | String | 无 | 条件表达式,当dependencies和when都满足时,当前节点开始运行。 | |
withSequence | Object | 无 | 基于序号的循环表达式。 | |
withItems | List | 无 | 基于列表的循环表达式。 | |
withParam | String | 无 | 基于参数的循环表达式。 | |
parallelism | Int | 无 | 节点并行度,只在工作流层面生效,限制工作流同时可以运行的节点个数上限。 |
示例
DAG工作流
工作流由三个节点构成:读数据源、类型转换、SQL转换
读数据源进行数据源生成,产出一个输出Artifact,代表生成的MaxCompute表。
类型转换对读数据源产出的MaxCompute表数据进行类型转换,产出转换后的MaxCompute表。
SQL转换对类型转换产出的MaxCompute表数据进行SQL转换,产出转换后的MaxCompute表。
条件表达式
工作流由三个节点构成:读数据源、类型转换pm10、类型转换pm2
读数据源进行数据源生成,产出一个输出Artifact,代表生成的MaxCompute表。
如果读数据源成功,运行类型转换pm2对输入的MaxCompute表数据pm2这列进行类型转换,产出转换后的MaxCompute表。
如果读数据源失败,运行类型转换pm10对输入的MaxCompute表数据pm10这列进行类型转换,产出转换后的MaxCompute表。
循环表达式
工作流由2个节点构成:echo、date_consumer,运行时会变为4个节点。
echo有一个输出参数,值为一个数组
["a","b","c"]
根据echo节点的输出参数值
["a","b","c"]
,date_consumer循环三次,生成三个节点。节点1名字为
date_consumer(0,"a")
,data为"a"
。节点2名字为
date_consumer(1,"b")
,data为"b"
。节点3名字为
date_consumer(2,"c")
,data为"c"
。
OSS输入+自定义镜像+DLC任务
工作流由4个节点构成:读OSS数据-1、数据转tfrecord-1、Python脚本-1、图像自监督训练-1,运行时会变为6个节点。
读OSS数据-1读取OSS数据。
数据转tfrecord-1把OSS数据转为tfrecord。
图像自监督训练-1创建一个DLC任务,进行图像训练。
Python脚本-1会根据输入参数withSequence循环三次,生成三个节点;Python脚本-1使用了自定义镜像运行DLC任务。
节点1名字为
Python脚本-1(0,1)
节点2名字为
Python脚本-1(1,2)
节点3名字为
Python脚本-1(2,3)