


摘? 要:文章旨在通過(guò)分布式框架Ray來(lái)計(jì)算數(shù)據(jù)量比較大的任務(wù),使得任務(wù)能夠更加高效地完成。指明了Ray通過(guò)兩種核心概念實(shí)現(xiàn)分布式計(jì)算:Actor和Task。通過(guò)調(diào)用Ray庫(kù)中的Remote方法并結(jié)合init方法指明CPU數(shù)量實(shí)現(xiàn)分布式計(jì)算。實(shí)驗(yàn)分為在相同數(shù)據(jù)量下不同CPU數(shù)量處理數(shù)據(jù)的快慢以及在不同數(shù)據(jù)量下不同CPU數(shù)量處理數(shù)據(jù)的能力。實(shí)驗(yàn)結(jié)果表明,數(shù)據(jù)量越大、CPU數(shù)量越多的分布式計(jì)算能力越強(qiáng)。因此,分布式計(jì)算適用于大數(shù)據(jù)下的并行計(jì)算。
關(guān)鍵詞:分布式計(jì)算;Ray框架;Actor;Task;大數(shù)據(jù);CPU
中圖分類(lèi)號(hào):TP3-0? 文獻(xiàn)標(biāo)識(shí)碼:A? 文章編號(hào):2096-4706(2023)23-0065-04
Research on Distributed Computing Based on Ray Framework
HOU Wei
(School of Information and Control Engineering, Liaoning Petrochemical University, Fushun? 113001, China)
Abstract: This paper aims to use the distributed framework Ray to calculate tasks with large amounts of data, enabling tasks to be completed more efficiently. It indicates that Ray implements distributed computing through two core concepts: Actor and Task. By calling the Remote method in the Ray library and combining it with the init method to indicate the number of CPUs, distributed computing is achieved. The experiment is divided into the speed of processing data with different CPU number under the same data volume, and the ability of processing data with different CPU number under different data volumes. The experimental results indicate that the larger the data volume and the more CPUs, the stronger the distributed computing power. Therefore, distributed computing is suitable for parallel computing under big data.
Keywords: Distributed Computing; Ray framework; Actor; Task; Big Data; CPU
0? 引? 言
隨著數(shù)據(jù)規(guī)模的擴(kuò)大和計(jì)算復(fù)雜度的增加,單機(jī)計(jì)算能力已經(jīng)無(wú)法滿足大規(guī)模數(shù)據(jù)處理和計(jì)算的需求,分布式計(jì)算逐漸成為一種重要的數(shù)據(jù)處理和計(jì)算方式。分布式計(jì)算是將任務(wù)分解成多個(gè)子任務(wù),分配到多個(gè)計(jì)算節(jié)點(diǎn)上并行執(zhí)行[1],從而提高任務(wù)的執(zhí)行速度。
分布式計(jì)算有很多優(yōu)點(diǎn):
1)高效性。可以利用多個(gè)計(jì)算節(jié)點(diǎn)的計(jì)算能力,提高任務(wù)的執(zhí)行速度。
2)可擴(kuò)展性。可以根據(jù)需要?jiǎng)討B(tài)地增加或減少計(jì)算節(jié)點(diǎn),以滿足不同規(guī)模的數(shù)據(jù)處理和計(jì)算需求。
3)高可用性。任務(wù)被分配到多個(gè)計(jì)算節(jié)點(diǎn)上執(zhí)行,因此即使某個(gè)節(jié)點(diǎn)出現(xiàn)故障或宕機(jī),任務(wù)仍可以在其他節(jié)點(diǎn)上繼續(xù)執(zhí)行[2]。
分布式框架是一種用于實(shí)現(xiàn)分布式計(jì)算的軟件系統(tǒng),提供一系列分布式計(jì)算的基礎(chǔ)設(shè)施和工具。分布式框架可以使開(kāi)發(fā)者更加輕松地開(kāi)發(fā)和部署分布式應(yīng)用程序,同時(shí)還可以提高分布式計(jì)算的效率和可靠性[3]。
一些著名的分布式框架(如Hadoop、Spark、Flink、Ray等)不僅廣泛應(yīng)用于大數(shù)據(jù)處理、機(jī)器學(xué)習(xí)、強(qiáng)化學(xué)習(xí)、自然語(yǔ)言處理等領(lǐng)域,還在各個(gè)領(lǐng)域?qū)崿F(xiàn)了巨大的經(jīng)濟(jì)和社會(huì)價(jià)值。因此,分布式計(jì)算和分布式框架在當(dāng)今信息技術(shù)領(lǐng)域具有重要的作用和意義[4]。
1? 相關(guān)概念
1.1? Actor
Actor是一種并發(fā)執(zhí)行的狀態(tài)機(jī),用于實(shí)現(xiàn)分布式計(jì)算中的狀態(tài)管理和協(xié)調(diào)。Actor還是一種輕量級(jí)計(jì)算單元,可以在不同節(jié)點(diǎn)之間傳遞消息,并且可以動(dòng)態(tài)地創(chuàng)建、銷(xiāo)毀和調(diào)度。
Actor是Ray框架的基本組件之一,用于解決分布式計(jì)算中的狀態(tài)共享和協(xié)作問(wèn)題[5]。Actor的主要特點(diǎn)包括:
1)狀態(tài)封裝。每個(gè)Actor實(shí)例都有自己的狀態(tài),其他Actor無(wú)法直接訪問(wèn)該狀態(tài),從而避免了多個(gè)Actor之間狀態(tài)共享的問(wèn)題[6]。
2)異步執(zhí)行。Actor方法的執(zhí)行是異步的,即調(diào)用方不需要等待Actor方法的返回結(jié)果,從而避免了阻塞和等待。
3)消息傳遞。Actor之間通過(guò)消息傳遞進(jìn)行通信,從而實(shí)現(xiàn)了分布式計(jì)算中的狀態(tài)共享和協(xié)作。
Actor的生命周期圖如圖1所示。
1.2? Task
Task是一個(gè)獨(dú)立的計(jì)算單元,可以在任何可用的計(jì)算資源上運(yùn)行。Task的執(zhí)行是無(wú)狀態(tài)的,不依賴(lài)于其他任務(wù)的狀態(tài),因此可以在不同節(jié)點(diǎn)之間分配和執(zhí)行,從而實(shí)現(xiàn)了分布式計(jì)算。
Ray框架中的Task由調(diào)度器分配到可用的計(jì)算資源上執(zhí)行,執(zhí)行結(jié)果通過(guò)Ray對(duì)象傳遞給其他Task或Actor。Ray框架提供豐富的Task調(diào)度和管理功能(如任務(wù)依賴(lài)管理、任務(wù)優(yōu)先級(jí)管理、資源管理等),用以提高分布式計(jì)算的效率和可靠性。
Actor和Task是Ray框架中的兩個(gè)核心概念,它們共同實(shí)現(xiàn)了分布式計(jì)算中的狀態(tài)共享、協(xié)作和任務(wù)執(zhí)行。通過(guò)使用Actor和Task,開(kāi)發(fā)者可以更加輕松地實(shí)現(xiàn)分布式應(yīng)用程序[7],同時(shí)也可以提高分布式計(jì)算的效率和可靠性。
Task的生命周期圖如圖2所示。
2? Ray框架的應(yīng)用場(chǎng)景和優(yōu)勢(shì)
Ray框架可以應(yīng)用于大數(shù)據(jù)處理、機(jī)器學(xué)習(xí)、強(qiáng)化學(xué)習(xí)、自然語(yǔ)言處理等領(lǐng)域的分布式計(jì)算任務(wù):
1)大數(shù)據(jù)處理。Ray框架可以與其他大數(shù)據(jù)處理框架(如Hadoop、Spark)集成,提高數(shù)據(jù)處理的效率和可靠性。Ray框架可以通過(guò)分布式對(duì)象存儲(chǔ)(如Amazon S3、Google Cloud Storage)實(shí)現(xiàn)數(shù)據(jù)的高效存儲(chǔ)和訪問(wèn)。
2)機(jī)器學(xué)習(xí)。Ray框架可以提供高效的分布式計(jì)算與深度學(xué)習(xí)框架(如TensorFlow、PyTorch)的集成,從而加速模型訓(xùn)練和推理。Ray框架可以提供模型并行化、數(shù)據(jù)并行化和超參數(shù)搜索等功能。
3)強(qiáng)化學(xué)習(xí)。Ray框架可以提供高效的強(qiáng)化學(xué)習(xí)框架(如RLlib),從而加快強(qiáng)化學(xué)習(xí)模型的訓(xùn)練和評(píng)估。Ray框架可以提供高效的并行化、分布式經(jīng)驗(yàn)回放和分布式優(yōu)化器等功能。
4)自然語(yǔ)言處理。Ray框架可以提供高效的自然語(yǔ)言處理框架(如Hugging Face Transformers),從而加快模型的訓(xùn)練和推理。
總之,Ray框架具有廣泛的應(yīng)用場(chǎng)景,可以用于各種類(lèi)型的分布式計(jì)算任務(wù),從而加速任務(wù)的執(zhí)行速度,提高計(jì)算效率和可靠性,降低計(jì)算成本[8]。
Ray框架在各種應(yīng)用場(chǎng)景中具有以下優(yōu)勢(shì):
1)高效的分布式計(jì)算。Ray框架支持高效的分布式計(jì)算,可以輕松地?cái)U(kuò)展計(jì)算資源,提高任務(wù)的執(zhí)行速度和計(jì)算效率。
2)靈活的任務(wù)調(diào)度。Ray框架提供靈活的任務(wù)調(diào)度機(jī)制,可以根據(jù)任務(wù)類(lèi)型和計(jì)算資源的狀態(tài)動(dòng)態(tài)調(diào)整任務(wù)的執(zhí)行順序和分配策略,從而實(shí)現(xiàn)計(jì)算資源利用率的最大化。
3)高可靠性和容錯(cuò)性。Ray框架提供高可靠性和容錯(cuò)性機(jī)制,可以自動(dòng)處理資源計(jì)算故障和任務(wù)異常,保證任務(wù)的正確執(zhí)行和計(jì)算結(jié)果的可靠性[9]。
4)易用的編程接口。Ray框架提供簡(jiǎn)單易用的編程接口,支持多種編程語(yǔ)言(如Python、Java、C++等),可以使開(kāi)發(fā)人員輕松編寫(xiě)分布式計(jì)算任務(wù)。
5)高度可擴(kuò)展性。Ray框架具有高度可擴(kuò)展性,可以與其他分布式計(jì)算框架(如Hadoop、Spark、Kubernetes等)集成,提供更加完整和強(qiáng)大的分布式計(jì)算能力[10]。
總之,Ray框架在各種應(yīng)用場(chǎng)景中都具有高效、可靠、靈活和易用的優(yōu)勢(shì),可以幫助用戶(hù)更加輕松地完成分布式計(jì)算任務(wù),獲得更好的計(jì)算性能和效率[11]。
3? Ray實(shí)現(xiàn)分布式方法
在Ray框架中,Remote方法的執(zhí)行過(guò)程大致如下[12]:
1)當(dāng)用戶(hù)調(diào)用Remote方法時(shí),Ray會(huì)將要執(zhí)行的函數(shù)及其參數(shù)打包成一個(gè)任務(wù)對(duì)象。
2)Ray將任務(wù)對(duì)象發(fā)送給一個(gè)調(diào)度程序,該調(diào)度程序會(huì)分配一個(gè)可用的Ray worker進(jìn)程,并將任務(wù)對(duì)象發(fā)送給該進(jìn)程。
3)Ray worker進(jìn)程在接收到任務(wù)對(duì)象后會(huì)反序列化任務(wù)對(duì)象,并執(zhí)行其中包含的函數(shù)及參數(shù)。
4)如果函數(shù)需要其他Ray actor的參與,Ray worker進(jìn)程會(huì)向Ray driver發(fā)送一個(gè)請(qǐng)求,請(qǐng)求該actor的引用。
5)Ray driver接收到請(qǐng)求后,會(huì)將actor的引用發(fā)送給請(qǐng)求方的Ray worker進(jìn)程。
6)Ray worker進(jìn)程繼續(xù)執(zhí)行任務(wù),并在任務(wù)完成后將結(jié)果發(fā)送回調(diào)度程序。
7)調(diào)度程序接收到結(jié)果后,將其序列化并發(fā)送回Ray driver。
8)Ray driver將結(jié)果返回給用戶(hù),并刪除該任務(wù)對(duì)象。
需要注意的是,在執(zhí)行過(guò)程中Ray會(huì)自動(dòng)處理任務(wù)的依賴(lài)關(guān)系和數(shù)據(jù)流程,以及任務(wù)執(zhí)行的并行性[13]。此外,Ray還提供一些調(diào)試工具,幫助用戶(hù)更好地理解任務(wù)的執(zhí)行過(guò)程和調(diào)試問(wèn)題。Ray框架中遠(yuǎn)程方法執(zhí)行的簡(jiǎn)單流程圖如圖3所示。
首先,客戶(hù)端進(jìn)程調(diào)用遠(yuǎn)程方法并將參數(shù)序列化。然后,客戶(hù)端進(jìn)程將序列化的參數(shù)發(fā)送到Raylet進(jìn)程。Raylet進(jìn)程接收序列化的參數(shù),反序列化參數(shù),執(zhí)行方法并將結(jié)果序列化。Raylet進(jìn)程將序列化的結(jié)果發(fā)送回客戶(hù)端進(jìn)程。最后,客戶(hù)端進(jìn)程接收序列化的結(jié)果,反序列化結(jié)果,并將結(jié)果返回給調(diào)用方[14]。
4? 實(shí)驗(yàn)測(cè)試
采用Python工具開(kāi)展實(shí)驗(yàn),采用隨機(jī)森林算法對(duì)音樂(lè)數(shù)據(jù)進(jìn)行處理。引入Ray庫(kù),然后調(diào)用Remote方法進(jìn)行實(shí)驗(yàn)[15]。
為了驗(yàn)證分布式計(jì)算在大數(shù)據(jù)計(jì)算中的優(yōu)勢(shì),本文實(shí)驗(yàn)由兩部分組成。第一部分實(shí)驗(yàn)控制數(shù)據(jù)量不變,看不同CPU數(shù)量下并行計(jì)算的速度,CPU數(shù)量為自變量,整個(gè)實(shí)驗(yàn)的響應(yīng)時(shí)間為因變量。該實(shí)驗(yàn)是在隨機(jī)森林音樂(lè)推薦算法的基礎(chǔ)上完成的,該算法的數(shù)據(jù)量為20 000條音樂(lè)音頻文件,通過(guò)隨機(jī)森林進(jìn)行分類(lèi)。數(shù)據(jù)來(lái)源于百度的飛槳平臺(tái)。由于20 000條數(shù)據(jù)量不是很大,我們讓該實(shí)驗(yàn)輪詢(xún)四次,相當(dāng)于計(jì)算80 000條數(shù)據(jù),然后得到整個(gè)實(shí)驗(yàn)的計(jì)算時(shí)間。如圖4所示為輪詢(xún)四次(range=4)得到的duration對(duì)比圖。
如圖5所示,橫坐標(biāo)表示并行計(jì)算下CPU內(nèi)核數(shù),縱坐標(biāo)表示響應(yīng)整個(gè)任務(wù)所花費(fèi)的時(shí)間,以秒為單位。可以看出隨著內(nèi)核數(shù)的增加,整個(gè)并行計(jì)算所花費(fèi)的時(shí)間隨之減少。
第二部分實(shí)驗(yàn)是為了顯現(xiàn)不同數(shù)據(jù)量下整個(gè)并行計(jì)算的優(yōu)點(diǎn),本文又做了輪詢(xún)兩次實(shí)驗(yàn)數(shù)據(jù)的實(shí)驗(yàn),如圖6所示,輪詢(xún)?nèi)螌?shí)驗(yàn)數(shù)據(jù)的實(shí)驗(yàn)如圖7所示,輪詢(xún)五次實(shí)驗(yàn)數(shù)據(jù)的實(shí)驗(yàn)如圖8所示,通過(guò)實(shí)驗(yàn)組的對(duì)比來(lái)觀察并行計(jì)算與數(shù)據(jù)量之間的關(guān)系。
通過(guò)如圖9所示的各實(shí)驗(yàn)組的對(duì)照實(shí)驗(yàn)可以看出:在大任務(wù)量的情況下,增加CPU內(nèi)核進(jìn)行并行運(yùn)算的效果更好,整個(gè)時(shí)間縮短的幅度更大[16];在小任務(wù)量的情況下,整個(gè)并行計(jì)算的影響效果不明顯。因此,在海量數(shù)據(jù)的互聯(lián)網(wǎng)背景下,我們應(yīng)該充分考慮分布式計(jì)算的必要性[17]。
5? 結(jié)? 論
Ray框架在分布式計(jì)算領(lǐng)域具有很高的影響力,未來(lái)的發(fā)展方向主要集中在以下幾個(gè)方面:
1)模型優(yōu)化和自動(dòng)調(diào)參。Ray框架在機(jī)器學(xué)習(xí)、強(qiáng)化學(xué)習(xí)等領(lǐng)域應(yīng)用廣泛,未來(lái)將進(jìn)一步深化這些領(lǐng)域的研究,通過(guò)模型優(yōu)化和自動(dòng)調(diào)參等技術(shù)提高模型的性能和可靠性。
2)低延遲計(jì)算和實(shí)時(shí)處理。Ray框架在大數(shù)據(jù)處理、自然語(yǔ)言處理等領(lǐng)域也有廣泛的應(yīng)用,未來(lái)將進(jìn)一步加強(qiáng)對(duì)低延遲計(jì)算和實(shí)時(shí)處理的研究,提高計(jì)算效率和實(shí)時(shí)性能。
3)更好的資源管理和調(diào)度。Ray框架的資源管理和調(diào)度機(jī)制已經(jīng)非常靈活和高效,未來(lái)將進(jìn)一步深化和完善這些機(jī)制,提高資源利用率和任務(wù)執(zhí)行效率。
4)更加易用的編程接口和工具支持。Ray框架在易用性方面已經(jīng)取得了很大的進(jìn)步,未來(lái)將加強(qiáng)對(duì)編程接口和工具的支持,提供更加友好和易用的分布式計(jì)算環(huán)境。
總之,Ray框架未來(lái)的發(fā)展方向主要集中在提高計(jì)算性能和效率、深化領(lǐng)域支持和加強(qiáng)易用性等方面,進(jìn)一步推動(dòng)分布式計(jì)算技術(shù)的發(fā)展和應(yīng)用。
參考文獻(xiàn):
[1] 李梓楊.大數(shù)據(jù)流式計(jì)算環(huán)境下的彈性資源調(diào)度策略研究 [D]. 烏魯木齊:新疆大學(xué),2022.
[2] 吳澤倫.基于HADOOP的數(shù)據(jù)挖掘算法并行化研究與實(shí)現(xiàn) [D].北京:北京郵電大學(xué),2015.
[3] 高殿榮,王益群,劉繼剛.自適應(yīng)有限元方法及其在液壓技術(shù)中的應(yīng)用前景 [J].液壓氣動(dòng)與密封,2001(5):2-4.
[4] 趙康,馬陳燕,王道軍.基于Ray并行分布式框架的深度強(qiáng)化學(xué)習(xí)計(jì)算平臺(tái) [J].軟件,2022,43(11):179-183.
[5] 張生順.針對(duì)Ray框架的分布式計(jì)算調(diào)度仿真平臺(tái) [D].成都:電子科技大學(xué),2023.
[6] 劉瑞奇,李博揚(yáng),高玉金,等.新型分布式計(jì)算系統(tǒng)中的異構(gòu)任務(wù)調(diào)度框架 [J].軟件學(xué)報(bào),2022,33(3):1005-1017.
[7] 朱光輝.分布式與自動(dòng)化大數(shù)據(jù)智能分析算法與編程計(jì)算平臺(tái) [D].南京:南京大學(xué),2021.
[8] KRAWCKE N. Talking boiler trends with Ray Wohlfarth [J].Plumbing & Mechanical,2023,41(2):38.
[9] MORITZ P,NISHIHARA R,WANG S,et al. Ray: A distributed framework for emerging AI applications [R/OL].arXiv:1712.05889 [cs.DC].[2023-02-10].http://export.arxiv.org/abs/1712.05889.
[10] BENIWAL A,BAFNA R K. A Case of Anterior Lenticonus Managed With Ray Tracing Aberrometry [EB/OL].[2023-02-06].https://kns.cnki.net/kcms2/article/abstract?v=j6HAoO1nZAzQFufqG4fTHAkT4g8xBUVqCIxq2FGkqi0rxSSLC53pBCHJKFMZv4ZtwvTUWBssjwLI0ntYj_hyQsDD9SL0Co4BHWSy7eWwsSObUKXOJ_wvekt9j3KutnqU-kodlUII66Uu_fQhR9RvMN5BVNzKIpltLUAXIveV_ro=&uniplatform=NZKPT&language=CHS.
[11] 黃增強(qiáng).面向機(jī)器人模擬與強(qiáng)化學(xué)習(xí)的分布式訓(xùn)練平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)研究 [D].杭州:杭州電子科技大學(xué),2021.
[12] 胡求.分布式深度集成學(xué)習(xí)及其結(jié)構(gòu)搜索算法與系統(tǒng) [D].南京:南京大學(xué),2022.
[13] 劉暢.手機(jī)閱讀實(shí)時(shí)推薦系統(tǒng)中協(xié)同過(guò)濾引擎的設(shè)計(jì)與實(shí)現(xiàn) [D].北京:北京郵電大學(xué),2018.
[14] 李妍.基于FlexRay總線飛行控制計(jì)算機(jī)核心單元設(shè)計(jì) [D].南京:南京航空航天大學(xué),2017.
[15] 李靜,王健.基于FlexRay總線的分布式測(cè)控系統(tǒng) [J].微型電腦應(yīng)用,2014,30(11):38-40.
[16] 鄭越.大規(guī)模場(chǎng)景渲染下的分布式光線跟蹤算法研究 [D]. 長(zhǎng)沙:湖南大學(xué),2019.
[17] 陳愨,張鳳登,張曉霞,等.分布式FlexRay線控轉(zhuǎn)向系統(tǒng)可靠性及容錯(cuò)技術(shù)研究 [J].工業(yè)控制計(jì)算機(jī),2014,27(1):63-66+69.
作者簡(jiǎn)介:侯偉(1997.06—),男,漢族,安徽六安人,碩士研究生在讀;研究方向:分布式計(jì)算、計(jì)算機(jī)視覺(jué)。