IBM Spectrum Symphony 父子任務工作模式助力數據分析">IBM Spectrum Symphony 父子任務工作模式助力數據分析

分類:IT技術 時間:2017-09-28

在風險分析和預測分析領域,父子任務(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 官方文檔

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


Tags: 父子 Spectrum Symphony 任務 模式 計算

文章來源:


ads
ads

相關文章
ads

相關文章

ad