
工作流(Jobmanager)是用于设计和管理调度任务的图形化工具, 支持可视化建模和代码建模两种任务类型。 用户设定好任务执行的调度周期后,工作流会按设置好的周期运行。
用户可以从Portal门户页进入工作流。
如果用户安装了可视化建模Sophon VLab,那么单击产品栏的“可视化建模”图标, 然后鼠标悬停在“模型调度”模块上,页面就会浮现出“工作流”按钮,单击即可进入工作流页面。

如果用户安装了编程式建模Sophon Discover,那么单击产品栏的“编程式建模”图标, 然后鼠标悬停在“模型调度”模块上,页面就会浮现出“工作流”按钮,单击即可进入工作流页面。

除了以上两种方法,用户也可以单击顶部菜单栏左侧的按钮,页面左侧出现侧边栏,然后单击“工作流”,即可进入工作流页面。

工作流主要包括 【工作流分析】
和 【我的工作流】
两大模块。
工作流分析
工作流总览
工作流总览展示所有工作流的调度记录。 单击展开工作流,即可查看该工作流的所有的调度时间及运行状态。 状态主要有成功、失败、等待和运行四种情况。
整个工作流的运行状态由单个任务的运行状态决定—— 当有一个任务失败时,整个工作流的状态为失败;当所有任务都运行成功时,整个工作流才显示为成功。

任务预览
在工作流总览中,点击任一工作流的 【任务总览】
按钮,进入到任务执行的详情页面。
点击工作流画布上的单个任务,页面下侧弹出任务运行的详情页,展示当前任务每次调度时间以及运行状态。

用户还可以查看任务运行日志详情。在任务预览页面,只能查看工作流,不能编辑或删除工作流。

我的工作流
我的工作流页面展示了用户创建的所有工作流。 用户可以在这个页面查看每个工作流的创建时间和描述, 也可对工作流进行 【发布】
、 【复制】
、 【编辑】
、 【删除】
等操作。
点击工作流卡片,可以进入工作流设计页面。

-
复制
鼠标悬停在任一工作流卡片上,然后点击卡片右下角的“复制”图标,即可复制一个工作流。

注意:工作流不能重名,复制的工作流的名称不能和原来的相同。
-
编辑
鼠标悬停在任一工作流卡片上,然后点击卡片右下角的“编辑”图标,即可编辑工作流名称和描述。

-
删除
鼠标悬停在任一工作流卡片上,然后点击卡片右下角的“删除”图标,即可删除该工作流。

也可以勾选多个工作流,然后点击左上角的删除按钮,从而批量删除多个工作流。

新建工作流
点击左上角 【新建】
按钮,在弹窗中填写名称(必填项)和描述, 然后点击 【确定】
,页面上出现该工作流的卡片。 单击该卡片,进入工作流设计页面。
注意:工作流名称不能重名。

导入工作流
点击左上角 【导入】
按钮,在弹窗中选择文件并填写工作流名称, 然后点击 【确定】
,页面上出现该工作流的卡片。
注意:仅支持JSON格式的文件,并且工作流不能重名。 完成后,单击该卡片,进入工作流设计页面。

设计工作流
在工作流设计页面,拖拽左侧的任务类型至中间画布,设置每个任务的配置信息后,各任务定义成功后,确定任务彼此间的逻辑依赖关系,通过箭头连接起来。最后再配置整个工作流的调度周期,实现自动运行工作流上的离线批处理。 需要注意的是,如果要编辑已经发布的工作流,需要先下线,才能编辑。

任务类型
在工作流设计页面,支持以下两种任务类型。
-
可视化建模
当拖拽“可视化建模”任务类型到中间画布时,弹出可视化建模任务设置。 用户需要选择某个项目下的可视化建模(选择的项目不同,可视化建模的选项就不同)。 然后需要为可视化建模选择资源池。
1. 只有管理员可以配置资源池的大小和权限,配置入口在管理中心。 2. 如果要在代码中读取文件的话,需要使用绝对路径。否则,在notebook中可以运行的程序,在工作流中就无法直接运行了。 如果使用“PySpark3”镜像,则绝对路径是“/sophon/project/home/”+用户名+项目路径+文件路径,比如“/sophon/project/home/user/filefolder/1.csv”; 如果使用“Python3”镜像,则绝对路径是“/home/”+用户名+项目路径+文件路径,比如“/home/user/filefolder/1.csv” |

-
代码建模
当拖拽“代码建模”任务类型到中间画布时,弹出代码建模任务设置。 代码建模的任务设置中,用户需要选择一个实例,以及实例下的代码文件,并且配置资源。 如果该实例使用的镜像是Sophon Spark镜像,那么需要选择一个资源池。
1. 只有管理员可以配置资源池的大小和权限,配置入口在管理中心。 |

如果TCOS版本≥3.0,则可以更灵活地配置GPU资源:支持选择集群节点、GPU作为调度资源的范围,并且支持配置GPU独占和分享。

如果TCOS版本≥3.3.1,则可以不设置限额共享GPU资源。

依赖关系
各任务定义成功后,需要根据彼此间的逻辑依赖关系,通过箭头将它们连接起来。 当前工作流支持单一的依赖,下游的任务一定依赖于上一个任务。 工作流自上而下地执行,只有当上游任务执行完成后,才能执行下游任务。

工作流配置
工作流配置分为三个部分:基本信息、调度周期和参数配置。
基本信息
显示工作流的名称、创建者、创建时间和描述信息。
调度周期
调度周期部分可以配置调度周期、超时警告、超时取消、并发模式和并发度。
-
调度周期
当前支持设置整个工作流的调度周期,打开“调度周期”的开关后, 可以填写Cron字符表达式,从而规定调度规则。
填写有效的表达式后,输入框下方会展示最近5次运行时间,便于检查表达式正误。
例如输入:0 0 11 * * ? ,代表的是每天11:00 开始调度。

用户可以单击表达式输入框右侧的“!”,查看Cron表达式的示例。如下图所示:

-
超时警告
设置工作流的警戒运行时长,单位为分钟。如果工作流运行超过设定时间,并且用户在通知设置中设置了执行超时通知, 页面上会显示“超时警告”的提示。 -
超时取消
设置工作流的最大运行时长,单位为分钟。如果工作流运行超过设定时间,工作流自行取消 -
并发模式与并发度
并发模式默认为“顺序”,也可选“聚合”。 并发度规定允许多少不同调度时间点的同一工作流在同一时间运行,默认为0,代表没有并发度的限制,场景如下:
用户将某工作流的调度时间设置为每小时1次。 假设该工作流于1点钟被调度,它的运行时间很长,超过1小时,直到2点还未完成。 根据设置的调度时间,系统本来应当在2点钟再次调度起该工作流,此时会根据设置的并发度选择调度策略:-
如果并发度为1,即同一时间只允许运行一个不同调度时间的同一工作流, 那么该工作流将不会于2点被调度,而是向后延迟一段时间。 假设1点调度的工作流运行时间超过两个小时,则此时被延迟的有2点及3点两次调度。
-
若采用的是“顺序”的并发模式,则当1点调度的工作流完成之后,会按照调度时间顺序依次执行被延迟的调度,先执行2点的调度,再执行3点的调度;
-
若采用的是“聚合”的并发模式,则当一次工作流调度完成之后,只会运行被延迟的调度中最新的一次,即1点调度的工作流完成之后,2点及3点的调度 会被合并为一次执行。
-
-
如果并发度为2,即同一时间允许运行两个不同调度时间的同一工作流,那么该工作流就会在2点钟被调度, 与在1点被调度的工作流同时运行。
-
示例图如下:
每小时执行一次,且执行时长小于1小时,那么会在1:00、2:00和3:00分别执行一次调度。

原本设定每小时执行一次,但是执行时长大于2小时,并发度=1, 并且设置为“顺序”的并发模式,那么会在1:00的任务执行完后,执行本该在2:00执行的任务。

原本设定每小时执行一次,但是执行时长大于2小时,并发度=1, 并且设置为“聚合”的并发模式,那么会在1:00的任务执行完后,执行本该在3:00执行的任务。

原本设定每小时执行一次,但是执行时长大于1小时,并发度=2, 并且设置为“顺序”的并发模式,那么会在1:00、2:00和3:00分别执行一次调度。

-
参数配置
工作流支持设置多个全局参数,要使用全局参数,需要输入参数名、选择参数类型并填写表达式。 对于不同的参数类型,需要填写的表达式不一样。

(1)常量
常量不需要设置表达式,支持输入数值和字符串。

(2)变量
变量主要是关于时间的变量,表达式可参考如下:
-
schedule.date():返回调度的日期,精确到天,返回结果的格式为yyyy-MM-dd。
-
schedule.datetime():返回调度时间,精确到秒,返回结果的格式为yyyy-MM-dd HH:mm:ss。
-
schedule.conciseDate():返回调度日期,返回结果的格式为yyyyMMdd。
-
schedule.conciseDatetime():返回调度时间,返回结果的格式为yyyyMMddHHmmss
-
schedule.toString("<pattern>"):自定义一种日期格式,将调度日期按照成自定义格式返回,比如schedule.toString("yyyyMMdd")将返回yyyyMMdd格式的日期。
plus相关的变量,plus相关变量代表将调度时间推迟或者提前一段指定时间(正数推迟,负数提前),有year,month,week,day,hour,minute,second7种不同粒度。下面是一些用法示例:
-
schedule.plusYears(1).date():返回调度日期向后延迟一年之后的日期。假如调度日期是2017-08-17,那么返回2018-08-17。
-
schedule.plusYears(-1).datetime():返回调度时间提前一年的时间。假如调度日期是2017-08-17 11:04:25,那么返回2016-08-17 11:04:25。
-
schedule.plusMonths(1).datetime():将调度时间向后延迟一个月。
-
schedule.plusWeeks(4).datetime():将调度时间向后延迟4周。
-
schedule.plusDays(30).datetime():将调度时间向后延迟30天。
-
schedule.plusHours(24).datetime():将调度时间向后延迟24小时。
-
schedule.plusMinutes(60).datetime():将调度时间向后延迟60分钟。
-
schedule.plusSeconds(240).datetime():将调度时间向后延迟240秒。
这里要注意显示粒度的问题,比如某函数设置为:schedule.plusSeconds(240).datetime(),其中datetime的取值精确到秒。 如果现在的调度时间是2017-08-17 10:44:20,那么该函数则返回2017-08-17 10:48:20。
但是如果变量设置为:schedule.plusSeconds(240).date(),其中date的取值精确到天。 如果现在的调度时间是2017-08-17 10:44:20,所以即使向后推迟240秒,返回的日期依然是2017-08-17。但是如果现在的时间是2017-08-17 23:57:20,调用上面的方法就会返回2017-08-18。

(3)cURL
通过写cURL命令,动态的获取阈值,可以用来为闭环机器学习服务。例如,在机器学习流程中设置模型训练的结果阈值为0.8, 那么在工作流中每次调度可视化建模时,通过cURL命令,动态获取模型训练的结果,并作出判断,如果超过阈值,则保存模型,低于阈值,则放弃本次训练的模型。输入cURL参数表达式后,可以“测试”参数结果,并设置默认值。

执行工作流
调试执行
用于设计工作流之后,测试工作流能否调度成功,如果成功,说明工作流没有问题,可直接发布,如果调试失败,则需要重新修改工作流。已发布的工作流无法调试,只有下线后才能进行调试(debug)。

调度执行
发布工作流,系统将按照工作流中设置的调度周期执行工作流。
发布/下线工作流
在设计模式中,点击 【发布】
可将离线的工作流发布出去。

点击 【下线】
系统停止对在线工作流的调度,工作流下线。

工作流操作
在工作流详情页面,可进行 【保存工作流】
、 【新建工作流】
、 【导出工作流】
、 【打开多个工作流】
等多个操作。
-
保存工作流
仅保存编辑的工作流,发布的工作流不能编辑保存,只能下线后才能编辑。 -
导出工作流
导出当前查看的工作流,单击【导出】
按钮,可以导出所选工作流的JSON文件,当前仅支持单个工作流的导出。

-
新建工作流
用户可在任务详情页面,创建新的工作流,创建成功后,直接在当前页面上打开

-
打开多个工作流
当前支持用户打开多个工作流,多个工作流以多窗口的tab显示在 页面上,切换不同的工作流时,页面显示当前工作流的详情。

单个任务操作
可对单个任务进行预览、编辑、删除和复制等操作。
-
删除
鼠标右键单击任务,然后单击删除,设计区不显示此任务,不是真正意义上的删除此任务。按住键盘delate键,可删除任务。 -
复制
鼠标右键单击任务,然后单击复制,设计区出现相同的任务,注意,任务名称不能相同。 -
预览
鼠标悬停在任务上,单击预览,页面跳转到具体任务的页面。例如预览预测模型,页面会跳到预测模型的实验流程。 -
编辑
鼠标左键双击任务,出现任务设置的对话框,用户可以替换已有的的任务