内容


IBM Spectrum Symphony 父子任务工作模式助力数据分析

Comments

在风险分析和预测分析领域,父子任务(parent-child/recursive workload)工作模式常被用来进行并行计算以分析相关数据。本文介绍了 IBM Spectrum Symphony 是如何在大规模计算机集群中实现对父子任务工作模式的支持的,此产品利用大规模集群的计算能力,通过父子任务间资源共享方式,实现并加速了这一运算过程。文中内容对于关注父子任务工作模式和用并行计算方法来分析数据的相关工作人员具有借鉴意义。

IBM Spectrum Symphony 介绍

IBM Spectrum Symphony 作为可伸缩性极强的企业级运算服务管理软件,用于在可扩展、共享、异构的大规模计算机集群中运行分布式应用服务。它能充分利用各种计算资源,提高并行应用的运行速度并快速得到计算结果,充分的满足了数据密集型与计算密集型应用的计算要求,全面提升系统性能。在全球范围内,IBM Spectrum Symphony 正在为世界 75%的金融机构提供服务,其中,世界排名前 5 的银行中有 3 家正在使用 IBM Spectrum Symphony,世界排名前 20 的银行中有 12 家正在使用 IBM Spectrum Symphony。在中国,中信银行正在应用 IBM Spectrum Symphony 满足其基于大数据分析的商业与风险管理应用。

IBM Spectrum Symphony 采用了效率极高的低延迟架构,并对各种并行运算工作模式有广泛的支持,在足够高的性能和灵活性的前提下,能够满足最苛刻的应用程序对性能的要求。本文将说明其是如何对父子任务工作模式进行支持的。

父子任务工作模式 Parent-Child/Recursive workload

父子任务(Parent-Child workload)在某些情况下与递归任务(Recursive workload)类似,因此有时被直译为递归任务,但其与递归计算又存在一些不同,这里为了避免歧义,称其为父子任务。

父子任务工作模式多用在风险分析和预测分析领域,其中一个具体的计算通常被分为很多并行任务来尽快获得结果,而某些任务在计算过程中可能会暂停并生成一些子任务来进行计算以获得需要的数据,并在子任务部分或者全部完成后继续进行后续运算,这些产生子任务的任务被称之为父任务。父任务和子任务在一起合作的这种工作模式被称之为父子任务工作模式。

由于父子任务工作模式直接清晰,与金融从业者经常使用的风险分析和预测分析算法相匹配,此工作模式常被国际上的投资银行用来进行风险管控和投资管理。

图 1 所示为一个简单的父子任务关系,最左边的任务为父任务,它创建了三个子任务,某些子任务又可能创建它自己的子任务,父任务要等待部分或者全部子任务完成后再进行下一步的运算。

图 1:父子任务工作模式

图 2 是父子任务工作模式的一个简单示例。大家可以看到此种工作模式可以用来计算斐波那契数列(Fibonacci sequence)。

斐波那契数列的定义如下:

F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)

如果需要获得 F(5) 的值, 则 F(5) 会产生两个子任务 F(4) 和 F(3),等这两个子任务完成后,将其值相加就获得了想要的结果。子任务 F(4) 和 F(3) 又会产生它们自己的子任务,以此类推,直到不再需要产生子任务为止。最后产生的父子任务关系如图 2 所示:

图 2:斐波那契数列(Fibonacci sequence)计算示例

每一个任务都需要系统分配相应的资源(CPU,内存等)来进行计算。通过上面对于父子任务工作模式的介绍,大家可以看到在子任务运行的时候,除了处理子任务的返回值时,父任务在大部分情况下都是处于等待状态的,这时系统分配给父任务的资源是空闲的,这就造成了资源的浪费。如果能把父任务的资源暂时用来执行子任务,系统的资源利用率将得到提高。IBM Spectrum Symphony 针对此种情况进行了优化,具体细节将在后面介绍。

IBM Spectrum Symphony 的解决方案

当用户拥有大规模计算机集群,需要利用父子任务工作模式对拥有的数据进行分析时,IBM Spectrum Symphony(以下简称 Symphony)能够提供完善的解决方案,细节如下:

在 Symphony 中,Session 是任务的容器,一个 Session 包含多个任务。每个任务可以有多个子 Session,子 Session 内的任务都是此任务的子任务。通过将一个 Session 设置为一个任务的子 Session,然后在此 Session 内创建多个任务的方法,可以方便的为一个任务创建多个子任务。

创建子 Session 对应的代码如下:

SessionCreationAttributes childSessionAttr;
......
childSessionAttr.setParent(parentSessionId, parentTaskId);
图 3:Session 和任务关系示意图

利用此种方法,用户不需要自己实现代码逻辑就可以很方便的在任务之间建立父子关系。

父任务在创建完子任务后,可以选择继续进行其他计算,或者等待子任务返回的结果,还可以边等待子任务的结果,边进行其他计算。有多种组合可供用户选择。

Symphony 会监测子任务的运行状态,在每个子任务完成后,此任务的结果会通过 callback 函数返回给其父任务,父任务这时可以选择处理此返回结果,或者继续等待其他子任务的结果。

父任务对子任务结果的等待和其自身的其他运算可以同时在不同的线程内运行,互不冲突,Symphony 提供 API 来支持这样的操作。

Symphony 会从其管理的计算机集群中申请对应的资源(CPU, 内存等)来运行所有任务(包括父任务和子任务),这些任务可以指定自己的资源需求(如多个 CPU,或者某个有 GPU 的计算机等),Symphony 会根据资源需求给这些任务分配对应的资源。用户可以配置各个任务的优先级,当存在计算资源竞争时,计算资源会优先分配给优先级较高的任务。暂时得不到资源的任务会等待,直到有资源空闲再进行运算。

图 4:Symphony 任务分配示意图

对于任务运行中出现的错误(如任务所在进程退出,任务运行超时,代码抛出异常,计算机无响应等),Symphony 都提供了可配置的错误处理手段。根据用户的配置,对于不同的错误,其处理结果可以是立刻结束任务,也可以是将任务发送到其他计算机上重新运行等。这些可配置的错误处理机制保证了计算系统的稳定性与可靠性。

通过如上的这些功能,用户可以很方便的建立起父子任务工作模式,在计算机集群中进行并发运算并很快得到结果。

IBM Spectrum Symphony 对于父子任务工作模式的优化

如前文提到的,在等待子任务运行结果的时候,父任务在大多数情况下都是处于等待状态的。在此种状态下,系统分配给父任务的计算资源会暂时处于空闲状态,这将导致系统资源不能得到充分利用。针对此种情况,Symphony 提供 API 来允许父任务暂时借出自己的资源给其子任务使用,这样子任务可以利用其父任务借出的资源进行计算,避免了资源的浪费。

父任务借出的资源只能被子任务借入,子任务除了向父任务借资源外,还可以直接通过 Symphony 获得资源来进行运算。这就保证了在资源匮乏的情况下,子任务可以获得利用父任务的资源进行运算;在资源充足的情况下,子任务可以充分利用系统中的空闲资源进行运算。

在有多层父子关系的情况下,子任务可以把从父任务借到的资源转借给其子任务使用,来达到充分利用资源的目的。

父子任务间的资源共享如图 5 所示:

图 5:父子任务共享资源

父任务在借出自己的资源后,可以通过 Symphony 提供的回调函数监测子任务运行的情况,当其需要计算资源处理一些子任务的运行结果时,它可以通过 Symphony 提供的 API 将借出的资源收回,然后进行对应的计算。父任务的资源可以被多次借出和收回。

父任务借出资源的对应代码如下:

task->yield()

父任务收回资源对应的代码如下:

task->yieldComplete()

通过简单的 API,父任务就可以借出和收回自己的资源。

通过父子任务之间的资源借用,系统资源的利用率得到了提高,任务得以在更短的时间内完成。

在某 Symphony 用户的实际生产环境中(大于 5000 个 CPU 的计算机集群),使用此优化方法后,任务的完成速度提高 30%。

IBM Spectrum Symphony 对于父子任务工作模式的界面显示

对于父子任务工作模式,Symphony 提供命令行与网页界面来向用户显示父子任务关系和资源的借用情况。

例如,当属于 Session 101 的任务 1 创建了子 Session 102,然后借出其资源后,通过 Symphony 的命令"soamview task"查看其状态,可以看到其状态为"yielded",说明其资源已借出。还可以看到其子 Session 是 Session 102,并且 Session 102 的任务运行在其借出的资源上。命令行的输出如下所示:

soamview task RecursiveTaskCPP:101:1 -l
Task status: yielded
......
Child sessions: 102
Current run task on the slot: 102:1
Owner of the slot: 101:1

网页界面的输出结果与此类似,请看下图:

图 6:Symphony 界面示意图

Symphony 解决方案的优点及其意义

IBM Spectrum Symphony 作为一向关注于性能与可靠性的企业级运算服务管理软件,其天生的基因就适合于在大规模计算机集群中支持各种各样的并行运算算法,满足用户对于大批量数据运算的性能与可靠性的严苛要求。

对于应用于数据分析领域的父子任务工作模式,在 Symphony 所提供的解决方案下,不仅运算的正确性与稳定性得到了保证,其性能也获得了极大的提升。除此之外,用户还可以通过 Symphony 自带的丰富的管理命令和网页界面来实时了解任务运行的状态,资源使用和借用情况等,极大的方便了用户的使用。

参考资源

Symphony 官方博客

父子任务工作模式的 Symphony 官方文档

父子任务工作模式的用户实例(Parallel FP-Growth Algorithm),三倍性能提升


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Big data and analytics
ArticleID=1050444
ArticleTitle=IBM Spectrum Symphony 父子任务工作模式助力数据分析
publish-date=09272017