国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

分布式機(jī)器學(xué)習(xí)作業(yè)性能干擾分析與預(yù)測(cè)

2022-07-05 08:19李洪亮張弄孫婷李想
計(jì)算機(jī)應(yīng)用 2022年6期
關(guān)鍵詞:預(yù)測(cè)性能算法

李洪亮,張弄,孫婷,李想*

分布式機(jī)器學(xué)習(xí)作業(yè)性能干擾分析與預(yù)測(cè)

李洪亮1,2,張弄1,孫婷1,李想1*

(1.吉林大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,長(zhǎng)春 130012; 2.符號(hào)計(jì)算與知識(shí)工程教育部重點(diǎn)實(shí)驗(yàn)室(吉林大學(xué)),長(zhǎng)春 130012)(*通信作者電子郵箱lxiang@jlu.edu.cn)

通過(guò)分析分布式機(jī)器學(xué)習(xí)中作業(yè)性能干擾的問(wèn)題,發(fā)現(xiàn)性能干擾是由于內(nèi)存過(guò)載、帶寬競(jìng)爭(zhēng)等GPU資源分配不均導(dǎo)致的,為此設(shè)計(jì)并實(shí)現(xiàn)了快速預(yù)測(cè)作業(yè)間性能干擾的機(jī)制,該預(yù)測(cè)機(jī)制能夠根據(jù)給定的GPU參數(shù)和作業(yè)類型自適應(yīng)地預(yù)測(cè)作業(yè)干擾程度。首先,通過(guò)實(shí)驗(yàn)獲取分布式機(jī)器學(xué)習(xí)作業(yè)運(yùn)行時(shí)的GPU參數(shù)和干擾率,并分析出各類參數(shù)對(duì)性能干擾的影響;其次,依托多種預(yù)測(cè)技術(shù)建立GPU參數(shù)-干擾率模型進(jìn)行作業(yè)干擾率誤差分析;最后,建立自適應(yīng)的作業(yè)干擾率預(yù)測(cè)算法,面向給定的設(shè)備環(huán)境和作業(yè)集合自動(dòng)選擇誤差最小的預(yù)測(cè)模型,快速、準(zhǔn)確地預(yù)測(cè)作業(yè)干擾率。選取5種常用的神經(jīng)網(wǎng)絡(luò)作業(yè),在兩種GPU設(shè)備上設(shè)計(jì)實(shí)驗(yàn)并進(jìn)行結(jié)果分析。結(jié)果顯示,所提出的自適應(yīng)干擾預(yù)測(cè)(AIP)機(jī)制能夠在不提供任何預(yù)先假設(shè)信息的前提下快速完成預(yù)測(cè)模型的選擇和性能干擾預(yù)測(cè),耗時(shí)在300 s以內(nèi),預(yù)測(cè)干擾率誤差在2%~13%,可應(yīng)用于作業(yè)調(diào)度和負(fù)載均衡等場(chǎng)景。

分布式機(jī)器學(xué)習(xí);性能干擾;集群調(diào)度;資源共享;干擾預(yù)測(cè)

0 引言

近年來(lái),機(jī)器學(xué)習(xí)[1]隨著大數(shù)據(jù)的發(fā)展得到了飛躍進(jìn)步,但無(wú)論是傳統(tǒng)機(jī)器學(xué)習(xí)方法還是現(xiàn)如今流行的神經(jīng)網(wǎng)絡(luò)[2]模型,數(shù)據(jù)和模型的規(guī)模都在逐漸擴(kuò)大,例如ImageNet[3]圖片數(shù)據(jù)集所需要的存儲(chǔ)空間大約為1.2×106MB,如果使用ImageNet的數(shù)據(jù)集訓(xùn)練模型一般需要幾個(gè)月才能完成。因此為了高效地進(jìn)行訓(xùn)練,考慮將大規(guī)模的數(shù)據(jù)或模型進(jìn)行劃分,然后分布到各個(gè)節(jié)點(diǎn)進(jìn)行訓(xùn)練,即數(shù)據(jù)并行模式和模型并行模式[4]:前者以單指令流多數(shù)據(jù)流(Single-Instruction stream Multiple-Data stream, SIMD)的方式將大數(shù)據(jù)集分割成小的子集進(jìn)行訓(xùn)練;后者則以多指令流多數(shù)據(jù)流(Multiple-Instruction stream Multiple-Data stream, MIMD)的方式分割模型并放置到各個(gè)節(jié)點(diǎn)進(jìn)行訓(xùn)練。但是對(duì)于劃分的數(shù)據(jù)或模型子集,各個(gè)節(jié)點(diǎn)間以及同一節(jié)點(diǎn)內(nèi)都無(wú)法保持子集間的參數(shù)同步,因此引入了分布式機(jī)器學(xué)習(xí)(Distributed Machine Learning, DML)[5]框架來(lái)支持參數(shù)同步,依托DML框架將劃分的數(shù)據(jù)或模型子集分配到一個(gè)或多個(gè)工作節(jié)點(diǎn)上,可以實(shí)現(xiàn)對(duì)子集間的參數(shù)同步。對(duì)于DML框架,根據(jù)每個(gè)工作節(jié)點(diǎn)上分配的作業(yè)數(shù)量可以分為獨(dú)占型和共享型:前者即單個(gè)作業(yè)占用節(jié)點(diǎn);而后者是多個(gè)作業(yè)占用一個(gè)節(jié)點(diǎn),共享資源。由于單個(gè)作業(yè)獨(dú)占節(jié)點(diǎn)可能會(huì)造成資源的浪費(fèi),所以共享型的DML框架應(yīng)用更加廣泛。圖1是參數(shù)服務(wù)器(Parameter Server, PS)[6]架構(gòu),是目前廣泛應(yīng)用的一種共享資源架構(gòu)。

圖1 參數(shù)服務(wù)器架構(gòu)

多個(gè)作業(yè)共享資源可以提高訓(xùn)練效率,但也帶來(lái)了作業(yè)間的性能干擾問(wèn)題。實(shí)驗(yàn)表明,作業(yè)ResNet[8]在TeslaP40設(shè)備上與其他作業(yè)共享資源并行時(shí),由于資源分配不均產(chǎn)生了不同程度的干擾,例如ResNet單獨(dú)運(yùn)行時(shí)運(yùn)行時(shí)間為548 s,與VGG[9]并行共享時(shí)運(yùn)行時(shí)間增加至1 185.67 s,由于性能干擾運(yùn)行時(shí)間增加了116.36%。針對(duì)性能干擾問(wèn)題,本文設(shè)計(jì)并構(gòu)建了自適應(yīng)干擾預(yù)測(cè)(Adaptive Interference Prediction,AIP)機(jī)制,以此預(yù)測(cè)作業(yè)間的性能干擾以更高效地共享設(shè)備資源:專門針對(duì)大數(shù)據(jù)量的神經(jīng)網(wǎng)絡(luò)作業(yè),對(duì)需要并行運(yùn)行的作業(yè)提取各種GPU特征參數(shù);再通過(guò)干擾預(yù)測(cè)機(jī)制選擇特征值構(gòu)建預(yù)測(cè)模型,進(jìn)行干擾預(yù)測(cè);通過(guò)預(yù)測(cè)的干擾率進(jìn)行資源分配和作業(yè)放置以達(dá)到減少作業(yè)性能干擾和高效共享資源的目的。主要工作如下:

1)分析了作業(yè)性能干擾問(wèn)題以及其成因,發(fā)現(xiàn)GPU參數(shù)與作業(yè)間的性能干擾有直接聯(lián)系,提出利用GPU參數(shù)預(yù)測(cè)未知作業(yè)集合間的性能干擾率;

2)設(shè)計(jì)并構(gòu)建了AIP機(jī)制的通用框架,對(duì)于給定的GPU設(shè)備和作業(yè)集合,在自動(dòng)獲取GPU參數(shù)后能通過(guò)該機(jī)制選擇不同的預(yù)測(cè)技術(shù)預(yù)測(cè)干擾,并輸出最準(zhǔn)確的性能干擾率;

3)基于TensorFlow框架設(shè)計(jì)了實(shí)驗(yàn),在不同GPU設(shè)備和不同實(shí)驗(yàn)環(huán)境下實(shí)現(xiàn)了該機(jī)制,并對(duì)其效率、準(zhǔn)確率以及應(yīng)用場(chǎng)景進(jìn)行了分析討論。

1 相關(guān)工作

1.1 分布式機(jī)器學(xué)習(xí)

近年來(lái),機(jī)器學(xué)習(xí)得到飛速發(fā)展,然而單機(jī)的計(jì)算能力卻無(wú)法跟上機(jī)器學(xué)習(xí)發(fā)展的步伐,海量的數(shù)據(jù)處理和繁雜的模型訓(xùn)練,在單機(jī)上會(huì)占用幾乎全部的內(nèi)存并且耗費(fèi)大量的時(shí)間,所以分布式機(jī)器學(xué)習(xí)就成了目前解決該問(wèn)題的最佳方法,它通過(guò)分布式框架使用多個(gè)計(jì)算設(shè)備進(jìn)行機(jī)器學(xué)習(xí)的數(shù)據(jù)處理和模型訓(xùn)練。DML主要包括參數(shù)劃分和參數(shù)同步兩個(gè)步驟,前者包含數(shù)據(jù)并行和模型并行兩種模式,而后者包含獨(dú)占資源架構(gòu)和共享資源架構(gòu)。目前廣泛應(yīng)用的DML框架是使用數(shù)據(jù)并行的共享資源架構(gòu),典型代表是TensorFlow[10],除此之外PyTorch[11]和MXNet[11]等也是較為常見的DML框架。

目前依托TensorFlow等分布式框架,多個(gè)機(jī)器學(xué)習(xí)作業(yè)能在集群中更高效地進(jìn)行訓(xùn)練,但是也引入了資源分配和作業(yè)放置等集群調(diào)度問(wèn)題。傳統(tǒng)的集群調(diào)度方法,例如Yarn[12]和Mesos[12]都關(guān)注作業(yè)的公平性,根據(jù)主導(dǎo)資源公平算法進(jìn)行調(diào)度,以此保證作業(yè)的公平性;但是對(duì)于DML作業(yè),以上調(diào)度為了作業(yè)的適用性,沒有突出的優(yōu)勢(shì),也無(wú)法根據(jù)DML作業(yè)的特征提供良好的集群調(diào)度,從而導(dǎo)致集群訓(xùn)練的效率低下。而針對(duì)DML作業(yè)的集群調(diào)度,如Optimus[13]和Harmony[14]:前者基于啟發(fā)式策略,根據(jù)DML作業(yè)訓(xùn)練過(guò)程中的某些特征值構(gòu)造啟發(fā)式策略對(duì)作業(yè)進(jìn)行調(diào)度;后者基于強(qiáng)化學(xué)習(xí)模型,是作業(yè)調(diào)度過(guò)程到強(qiáng)化學(xué)習(xí)模型決策過(guò)程的轉(zhuǎn)化,通過(guò)數(shù)據(jù)對(duì)模型不斷優(yōu)化,實(shí)現(xiàn)作業(yè)放置。這兩種針對(duì)DML作業(yè)的調(diào)度方法可以解決集群中大部分問(wèn)題,但是對(duì)于機(jī)器學(xué)習(xí)作業(yè),其數(shù)據(jù)處理和模型訓(xùn)練的方法是多變的,因此這些集群調(diào)度方法為了適用于大部分作業(yè),往往會(huì)忽略一些問(wèn)題。例如針對(duì)集群中某一設(shè)備或節(jié)點(diǎn)上的調(diào)度,其真實(shí)情況總是比使用上述方法得到的預(yù)期值低,這是因?yàn)橐劳泄蚕硇偷腄ML框架,多個(gè)作業(yè)在同一節(jié)點(diǎn)上共享資源,會(huì)因?yàn)橘Y源分配不均帶來(lái)性能的干擾,而常見的調(diào)度方法很難提前獲取同一節(jié)點(diǎn)上作業(yè)的干擾,因此它們一般會(huì)忽略作業(yè)間的性能干擾問(wèn)題。

1.2 作業(yè)性能干擾

作業(yè)的性能干擾一般發(fā)生在集群中的某一設(shè)備或節(jié)點(diǎn)上,往往是因?yàn)槎鄠€(gè)作業(yè)同時(shí)搶奪該設(shè)備資源而導(dǎo)致資源分配不均,性能干擾的結(jié)果一般表現(xiàn)為運(yùn)行時(shí)間的增加。隨著集群調(diào)度研究的不斷深入,越來(lái)越多的研究者嘗試提高調(diào)度方法的效率,因此也不能再忽略由于作業(yè)干擾導(dǎo)致的性能下降問(wèn)題。對(duì)于TensorFlow等DML框架,多個(gè)作業(yè)在某個(gè)設(shè)備或工作節(jié)點(diǎn)上共享資源時(shí),會(huì)產(chǎn)生資源的分配不均,從而帶來(lái)作業(yè)性能的干擾,導(dǎo)致性能的下降,為了提高作業(yè)執(zhí)行效率、更高效地共享設(shè)備資源以及避免一些因?yàn)橘Y源搶奪導(dǎo)致的作業(yè)無(wú)法運(yùn)行等問(wèn)題,需要考慮如何最大限度地降低作業(yè)間的性能干擾。

近年來(lái),人們開始針對(duì)作業(yè)性能干擾問(wèn)題進(jìn)行研究,而共享作業(yè)放置(Opportunistic Job Placement,OJP)模型[15]是首個(gè)針對(duì)性能干擾提出的作業(yè)調(diào)度模型,它類似于灰盒模型,以TensorFlow框架為基礎(chǔ),主要研究了作業(yè)間的GPU內(nèi)存過(guò)載問(wèn)題,并針對(duì)該問(wèn)題進(jìn)行探究,提出了共享作業(yè)的放置問(wèn)題。該模型使用最少的GPU設(shè)備數(shù)量來(lái)進(jìn)行作業(yè)安置,并保證作業(yè)的性能要求,具體方法是以作業(yè)的性能干擾程度為依據(jù),在集群中單個(gè)設(shè)備或工作節(jié)點(diǎn)上使用貪心算法和啟發(fā)式算法選擇合適的作業(yè)組合,完成作業(yè)的放置,從而最大限度地減小作業(yè)間的性能干擾。然而對(duì)于給定的GPU設(shè)備和作業(yè)集合,如何獲取其性能干擾作為放置依據(jù)是值得思考和探究的問(wèn)題。

2 問(wèn)題建模

2.1 問(wèn)題分析

圖2是一個(gè)作業(yè)性能干擾示例,在TeslaP40環(huán)境下,5種神經(jīng)網(wǎng)絡(luò)作業(yè)兩兩組合并行,可以發(fā)現(xiàn)不同作業(yè)共享資源時(shí)的性能干擾程度不同,例如作業(yè)ResNet受作業(yè)VGG的影響,干擾程度為116.36%,作業(yè)VGG受作業(yè)ResNet的影響,干擾程度卻僅為40.04%;對(duì)于不同的GPU設(shè)備,其性能干擾程度也不同。

圖2 作業(yè)性能干擾示例

對(duì)于上述性能干擾問(wèn)題,因?yàn)椴煌鳂I(yè)間的性能干擾程度不同,且相同作業(yè)間也會(huì)產(chǎn)生性能干擾,所以性能的干擾與作業(yè)的固有屬性無(wú)關(guān);再結(jié)合OJPP策略中性能干擾的分析,本文認(rèn)為性能下降的現(xiàn)象與GPU參數(shù)有關(guān),并以此作出了探究和分析,原因總結(jié)如下:

2)即使沒有內(nèi)存過(guò)載,仍然觀察到不同類型的機(jī)器學(xué)習(xí)作業(yè)之間存在各種干擾。這主要是由于GPU共享底層資源(如讀寫帶寬、CPU緩存、磁盤I/O、網(wǎng)絡(luò)I/O和總線等)時(shí)的資源競(jìng)爭(zhēng)造成的。其中較為常見的是帶寬競(jìng)爭(zhēng),當(dāng)多個(gè)作業(yè)共享同一設(shè)備資源時(shí),可能會(huì)因?yàn)橥ㄐ女a(chǎn)生帶寬的競(jìng)爭(zhēng),當(dāng)帶寬分配不均時(shí),作業(yè)的訓(xùn)練速度會(huì)受到影響,從而導(dǎo)致作業(yè)的性能下降。

圖3 GPU內(nèi)存過(guò)載

根據(jù)以上性能干擾的成因,可以發(fā)現(xiàn)作業(yè)間的性能干擾和GPU參數(shù)有直接的聯(lián)系,剛剛提到的內(nèi)存過(guò)載就明顯和GPU參數(shù)中的顯存有關(guān),而帶寬競(jìng)爭(zhēng)則和參數(shù)中的讀寫帶寬有聯(lián)系。因此,本文提出了通過(guò)GPU參數(shù)來(lái)預(yù)測(cè)未知作業(yè)間性能干擾程度的想法。

2.2 建模與解決方法

對(duì)于作業(yè)間的性能干擾,一般表現(xiàn)為作業(yè)運(yùn)行時(shí)間的增加;而上文提出通過(guò)GPU參數(shù)來(lái)預(yù)測(cè)性能干擾程度,對(duì)于預(yù)測(cè),需要一個(gè)確切的數(shù)值,因此本文使用作業(yè)增加的運(yùn)行時(shí)間比來(lái)表示作業(yè)干擾程度。

定義1 作業(yè)單獨(dú)運(yùn)行時(shí)間。一個(gè)作業(yè)獨(dú)占設(shè)備資源運(yùn)行,從開始響應(yīng)到完成所花費(fèi)的時(shí)間即為單獨(dú)運(yùn)行時(shí)間。

定義2 作業(yè)并行運(yùn)行時(shí)間。多個(gè)作業(yè)共享同一設(shè)備資源并行運(yùn)行時(shí),其中一個(gè)作業(yè)從開始響應(yīng)到完成所花費(fèi)的時(shí)間即為該作業(yè)的并行運(yùn)行時(shí)間。

基于此問(wèn)題建模對(duì)2.1節(jié)提出的想法給出了詳細(xì)的解決方法。對(duì)于給定的GPU設(shè)備和DML作業(yè)集合:

1)分別獲取所求作業(yè)組合單獨(dú)運(yùn)行到并行運(yùn)行時(shí)的GPU參數(shù)變化;

2)通過(guò)干擾預(yù)測(cè)機(jī)制選擇合適的GPU參數(shù)作為特征值,不同的GPU設(shè)備,其參數(shù)對(duì)作業(yè)性能干擾的影響不同;

3)通過(guò)干擾預(yù)測(cè)機(jī)制選擇適合該GPU設(shè)備的預(yù)測(cè)技術(shù),主要從速度和準(zhǔn)確率方面選擇;

4)通過(guò)特征值和預(yù)測(cè)技術(shù)定位到合適的GPU參數(shù)-干擾率模型來(lái)預(yù)測(cè)作業(yè)干擾程度。

3 本文自適應(yīng)干擾預(yù)測(cè)機(jī)制

3.1 模型的構(gòu)建與評(píng)估

基于2.2節(jié)中描述的解決方法,干擾預(yù)測(cè)機(jī)制主要包括預(yù)測(cè)技術(shù)的選擇、模型的構(gòu)建以及結(jié)果的評(píng)估。

對(duì)于預(yù)測(cè)技術(shù)的選擇,針對(duì)預(yù)測(cè)干擾率需要速度快且適用小數(shù)據(jù)集的特性,選擇了回歸機(jī)器學(xué)習(xí)方法作為預(yù)測(cè)技術(shù),一是因?yàn)榛貧w方法和聚類不同可以獲取確切的數(shù)值;二是因?yàn)榛貧w方法都屬于傳統(tǒng)機(jī)器學(xué)習(xí),預(yù)測(cè)速度較快,且可以通過(guò)調(diào)用函數(shù)等方法較為容易地實(shí)現(xiàn)。表1中列舉了用到的預(yù)測(cè)技術(shù),以及需要調(diào)用的函數(shù)和參數(shù)等。

表1 預(yù)測(cè)技術(shù)及需要調(diào)用的函數(shù)和參數(shù)說(shuō)明

預(yù)測(cè)模型的構(gòu)建和評(píng)估方法對(duì)于不同的技術(shù)都是一致的,其大致步驟如下:

1)將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集,并使用Python中的StandardScaler函數(shù)類對(duì)其進(jìn)行標(biāo)準(zhǔn)化和歸一化處理。

2)通過(guò)訓(xùn)練集選擇不同的預(yù)測(cè)技術(shù)進(jìn)行模型的構(gòu)建和訓(xùn)練,例如選擇表1中的支持向量回歸(Support Vector Regression, SVR)技術(shù),構(gòu)建線性核函數(shù)配置的支持向量回歸模型時(shí),需要調(diào)用Python中的SVR函數(shù),并選擇參數(shù)為linear。

3)對(duì)于不同的模型,使用測(cè)試集進(jìn)行干擾率的預(yù)測(cè),并進(jìn)行評(píng)估。由于干擾率存在0的可能性,因此本文沒有使用百分比誤差作為評(píng)估值,而是將真實(shí)值與預(yù)測(cè)值之間的平均絕對(duì)值誤差(Mean Absolute Error, MAE)作為評(píng)估模型的標(biāo)準(zhǔn)。誤差越小,該模型的準(zhǔn)確率也就越高。

基于上述步驟,本文設(shè)計(jì)并構(gòu)建了預(yù)測(cè)模型的構(gòu)建與評(píng)估(Predictive model Construction and Evaluation, PCE)算法,如算法1所示,是上述步驟的通用算法。對(duì)于需要構(gòu)建和評(píng)估的預(yù)測(cè)模型,輸入其需要的特征值數(shù)據(jù)集和預(yù)測(cè)技術(shù)集合,可以輸出該模型的干擾率誤差值(即MAE),其中步驟1)、2)、3)和5)的代碼是不變的,而根據(jù)需要選取的預(yù)測(cè)技術(shù)不同,步驟4)會(huì)調(diào)用算法2,輸入不同的預(yù)測(cè)技術(shù)作為參數(shù),并返回模型的預(yù)測(cè)結(jié)果。

算法1 PCE。

輸入 特征值數(shù)據(jù)集;待構(gòu)建預(yù)測(cè)模型;預(yù)測(cè)技術(shù)集合(SVR、K-最近鄰(K-Nesrest Neighbor, KNN)、集成學(xué)習(xí)等);

輸出 預(yù)測(cè)模型評(píng)估誤差MAE。

//步驟1:數(shù)據(jù)集劃分(訓(xùn)練集和測(cè)試集)。

1)= data[:, 0:-1]

2)= data[:, -1]

3)= data_test[:, 0:-1]

4)= data_test[:, -1]

//步驟2:數(shù)據(jù)標(biāo)準(zhǔn)化,歸一化處理。

5)= StandardScaler()

6)= sscaler_X.fit_transform()

7)= sscaler_X.transform()

8)= StandardScaler()

9)= sscaler_Y.fit_transform(.reshape(-1, 1))

10)= sscaler_Y.transform(.reshape(-1, 1))

/*步驟3:根據(jù)待構(gòu)建的預(yù)測(cè)模型,從預(yù)測(cè)技術(shù)集合中選擇合適的技術(shù)*/

11)預(yù)測(cè)技術(shù) ← 預(yù)測(cè)技術(shù)集合;

/*步驟4:調(diào)用模型訓(xùn)練和預(yù)測(cè)算法,完成模型訓(xùn)練和預(yù)測(cè),并返回模型的預(yù)測(cè)結(jié)果*/

12)模型預(yù)測(cè)結(jié)果 ← MTP(預(yù)測(cè)技術(shù));

//步驟5:預(yù)測(cè)模型評(píng)估。

13)MAE= mean_absolute_error(.

inverse_transform(),

.inverse_transform(模型預(yù)測(cè)結(jié)果));

14) return 預(yù)測(cè)模型評(píng)估誤差MAE;

算法2是模型訓(xùn)練和預(yù)測(cè)(Model Training and Prediction, MTP)算法,其輸入?yún)?shù)是某個(gè)預(yù)測(cè)技術(shù),返回的是模型的預(yù)測(cè)值。MTP算法中的代碼示例是線性核函數(shù)配置的SVR模型的實(shí)現(xiàn)代碼。PCE算法會(huì)根據(jù)預(yù)測(cè)技術(shù)的不同來(lái)選擇參數(shù),再輸入?yún)?shù)調(diào)用MTP算法。

算法2 MTP。

輸入 某個(gè)預(yù)測(cè)技術(shù);

輸出 模型預(yù)測(cè)結(jié)果。

1)根據(jù)預(yù)測(cè)技術(shù)調(diào)用函數(shù)和參數(shù)構(gòu)建模型;

//例如:= SVR(kernel="linear")

2)使用訓(xùn)練集進(jìn)行模型的訓(xùn)練;

//例如:.fit()

3)對(duì)訓(xùn)練模型使用測(cè)試集預(yù)測(cè);

4) return 模型預(yù)測(cè)結(jié)果;

//例如:=.predict()

3.2 自適應(yīng)干擾預(yù)測(cè)(AIP)算法

上述的模型構(gòu)建和評(píng)估算法是為了模型的選擇做鋪墊,第2章中解決方法提到需要通過(guò)干擾預(yù)測(cè)選擇機(jī)制選擇合適的GPU參數(shù)和預(yù)測(cè)技術(shù),并以此定位到合適的GPU參數(shù)-干擾率模型,該方法的重點(diǎn)是模型的選擇機(jī)制。通過(guò)這個(gè)選擇機(jī)制,能在給定的GPU設(shè)備和作業(yè)集合下按實(shí)際的需求選擇預(yù)測(cè)模型并快速、準(zhǔn)確地預(yù)測(cè)干擾率,為此本文設(shè)計(jì)了AIP算法,以此支持該機(jī)制的選擇功能。

如算法3示例:對(duì)于給定的作業(yè)集合和GPU設(shè)備,自動(dòng)獲取其各個(gè)GPU參數(shù)從并行運(yùn)行到單獨(dú)運(yùn)行的變化率,包括顯存、讀寫帶寬變化等,并與作業(yè)集合和預(yù)測(cè)技術(shù)集合一同作為算法的輸入;接著通過(guò)作業(yè)的性能干擾分析可以得出影響作業(yè)的GPU參數(shù),選擇對(duì)干擾影響最顯著的參數(shù)作為預(yù)測(cè)模型的特征值;然后遍歷預(yù)測(cè)技術(shù)集合中的預(yù)測(cè)技術(shù),調(diào)用算法PCE,使用已經(jīng)選擇好的特征值分別構(gòu)建GPU參數(shù)-干擾率預(yù)測(cè)模型,并返回各個(gè)模型的干擾率誤差,存儲(chǔ)到一個(gè)一維數(shù)組中;最后遍歷該數(shù)組,選擇其中最小的干擾率誤差,即選擇準(zhǔn)確率最高的預(yù)測(cè)模型,并將其誤差值作為作業(yè)性能的干擾率返回。

算法3 AIP。

輸出 干擾率。

1) if 作業(yè)性能干擾受顯存影響大 then

2)預(yù)測(cè)模型特征參數(shù) ←;

3) else if 作業(yè)性能干擾受帶寬影響大 then

4)預(yù)測(cè)模型特征參數(shù) ←;

5) else

6)預(yù)測(cè)模型特征參數(shù) ← 其他GPU參數(shù)變化;

7) end if

8)初始化數(shù)組

9) for 預(yù)測(cè)技術(shù)集合=1 todo

10)數(shù)組← PCE(特征參數(shù),);

11);

12) end for

13)← min{數(shù)組};

14) return 干擾率;

算法3構(gòu)成了完整的AIP機(jī)制的通用框架,主體是算法AIP,而算法AIP通過(guò)調(diào)用算法PCE獲取不同預(yù)測(cè)技術(shù)構(gòu)建的模型的評(píng)估效果,算法PCE則通過(guò)調(diào)用算法MTP對(duì)不同預(yù)測(cè)模型進(jìn)行訓(xùn)練和預(yù)測(cè),并獲取其模型預(yù)測(cè)結(jié)果。對(duì)于該干擾預(yù)測(cè)機(jī)制,不同的GPU設(shè)備,其影響作業(yè)性能的GPU參數(shù)是不同的,而且適用于該設(shè)備環(huán)境的預(yù)測(cè)技術(shù)也是不同的,因此本文選擇了不同的GPU設(shè)備設(shè)計(jì)實(shí)驗(yàn),并進(jìn)行討論和分析,以此驗(yàn)證該機(jī)制的效率和準(zhǔn)確率。

4 實(shí)驗(yàn)與分析

4.1 實(shí)驗(yàn)設(shè)置與數(shù)據(jù)

為了探究給定GPU設(shè)備和作業(yè)集合下哪些參數(shù)對(duì)作業(yè)性能干擾的影響顯著,以及哪些預(yù)測(cè)技術(shù)的效果準(zhǔn)確且穩(wěn)定,本文部署了兩個(gè)不同的GPU設(shè)備,分別利用DML框架模擬了分布式環(huán)境進(jìn)行實(shí)驗(yàn)和對(duì)比。主要配置如下:顯卡包括TeslaP40和RTX3090,并都配置了TensorFlow環(huán)境(由于RTX3090顯卡不支持TensorFlow1.x的版本,所以選擇了2.5版本);作業(yè)則選擇了5種目前廣泛應(yīng)用且穩(wěn)定的神經(jīng)網(wǎng)絡(luò)作業(yè),包括AlexNet(作業(yè)1)[9]、RNN(作業(yè)2)[21]、LSTM(作業(yè)3)[22]、VGG(作業(yè)4)和ResNet(作業(yè)5);考慮到訓(xùn)練時(shí)間和統(tǒng)一性的問(wèn)題,測(cè)試作業(yè)的數(shù)據(jù)集選擇了較小的MNIST數(shù)據(jù)集和CIFAR10數(shù)據(jù)集。

基于以上的配置,在不同的GPU設(shè)備上對(duì)不同的作業(yè)組合進(jìn)行了單獨(dú)運(yùn)行和并行運(yùn)行(包括兩種作業(yè)并行和三種作業(yè)并行的情況),并且獲取了運(yùn)行期間各個(gè)作業(yè)的GPU參數(shù)和運(yùn)行時(shí)間。由于選擇的神經(jīng)網(wǎng)絡(luò)作業(yè)較穩(wěn)定,其中GPU參數(shù)的變化不大,所以對(duì)于各種情況都截取了100條參數(shù)數(shù)據(jù)且取平均值作為測(cè)試數(shù)據(jù);運(yùn)行時(shí)間則取10次實(shí)驗(yàn)結(jié)果的平均值。

表2記錄了實(shí)驗(yàn)需要獲取的所有GPU參數(shù),為了更好地進(jìn)行分析和表述,按照屬性將參數(shù)分為了3個(gè)類別,并用符號(hào)字母指代:類別1包括GPU運(yùn)行時(shí)的能耗和溫度;類別2是顯存相關(guān)的參數(shù),包括顯存中流處理器的使用率和顯存的利用率;而類別3是GPU的通信帶寬,包括讀帶寬和寫帶寬。

表2 實(shí)驗(yàn)中所需的GPU參數(shù)

通過(guò)計(jì)算得出這些GPU參數(shù)的變化百分比以及干擾率數(shù)值,構(gòu)建了模型的數(shù)據(jù)集,如表3所示,羅列了部分具有代表性的數(shù)據(jù)集,數(shù)字1~5指代上述作業(yè)AlexNet、RNN等,14表示作業(yè)1和作業(yè)4并行時(shí),作業(yè)1的參數(shù)變化以及干擾率,245表示作業(yè)2、4、5并行時(shí)作業(yè)2的變化;最后使用數(shù)據(jù)集完成預(yù)測(cè)模型的訓(xùn)練和干擾率的預(yù)測(cè)并以此進(jìn)行評(píng)估分析。

表3 數(shù)據(jù)集示例

4.2 結(jié)果與分析

通過(guò)獲取的完整數(shù)據(jù)集進(jìn)行了預(yù)測(cè)模型的構(gòu)建、訓(xùn)練和評(píng)估,主要利用第三章介紹的算法PCE和MTP,最后得到統(tǒng)計(jì)表4。由表4可以看出,在TeslaP40環(huán)境下,選擇類別2顯存作為特征參數(shù),SVR作為預(yù)測(cè)技術(shù)構(gòu)建模型時(shí),干擾率誤差最小為0.13;而回歸樹技術(shù)干擾率誤差過(guò)大,多元線性回歸、KNN以及集成學(xué)習(xí)相較于SVR,浮動(dòng)過(guò)大,不夠穩(wěn)定,因此選擇SVR最佳。

而在RTX3090環(huán)境下,選擇類別3讀寫帶寬作為特征參數(shù)時(shí),SVR、回歸樹、KNN以及集成學(xué)習(xí)這四種預(yù)測(cè)技術(shù)的誤差都較低,但是回歸樹技術(shù)和集成學(xué)習(xí)技術(shù)相較于另外兩種技術(shù)都有不穩(wěn)定的缺點(diǎn),因此選擇SVR或者KNN最佳。

除此之外,根據(jù)干擾率的誤差值還得到了不同類別的GPU參數(shù)對(duì)作業(yè)干擾性能的影響比重,如表5所示,在TeslaP40環(huán)境下,類別2顯存的影響最顯著,讀寫帶寬次之,而溫度能耗的影響最?。欢赗TX3090環(huán)境下類別3讀寫帶寬的影響更顯著,顯存和溫度能耗的影響較低。

結(jié)合表6,根據(jù)兩個(gè)GPU設(shè)備的參數(shù)配置可以發(fā)現(xiàn)GPU參數(shù)對(duì)作業(yè)性能干擾的影響與GPU設(shè)備本身的屬性也有聯(lián)系,最明顯的就是RTX3090設(shè)備的通信帶寬達(dá)到了936 Gb/s,而TeslaP40設(shè)備的帶寬只有346 Gb/s,RTX3090受GPU參數(shù)帶寬的影響更加顯著。

表4 TeslaP40和RTX3090環(huán)境下的干擾率誤差

表5 TeslaP40和RTX3090環(huán)境下不同類別GPU參數(shù)對(duì)作業(yè)干擾性能的影響比重 單位: %

表6 GPU設(shè)備的參數(shù)配置

基于以上預(yù)測(cè)技術(shù)的對(duì)比和GPU參數(shù)影響的分析,對(duì)于TeslaP40和RTX3090這兩個(gè)設(shè)備,可以利用3.2節(jié)算法AIP構(gòu)建干擾預(yù)測(cè)機(jī)制,并預(yù)測(cè)干擾率:前者由于顯存影響最為顯著,而SVR技術(shù)穩(wěn)定且誤差小,所以可以定位到顯存-干擾率的SVR模型;而后者的讀寫帶寬影響最大,KNN和SVR的誤差小,且相較于其他方法更穩(wěn)定,所以可以定位到帶寬-干擾率的SVR或者KNN模型,最后使用這些模型預(yù)測(cè)作業(yè)的性能干擾。

4.3 干擾預(yù)測(cè)代價(jià)

針對(duì)自適應(yīng)的干擾預(yù)測(cè)機(jī)制,主要分為三個(gè)內(nèi)容:自動(dòng)獲取GPU參數(shù)、模型選擇以及干擾預(yù)測(cè)。其中模型的選擇和干擾預(yù)測(cè)可以在10 s內(nèi)完成。而對(duì)于自動(dòng)獲取GPU參數(shù)與作業(yè)加載等方面有關(guān),如果面對(duì)的是已知作業(yè)集合,可以根據(jù)歷史記錄獲取作業(yè)單獨(dú)運(yùn)行的GPU參數(shù),然后獲取待測(cè)作業(yè)并行情況的參數(shù),最后以此計(jì)算出參數(shù)變化率;而如果作業(yè)集合未知,則還需獲取其單獨(dú)運(yùn)行的GPU參數(shù)。上述實(shí)驗(yàn)是在作業(yè)運(yùn)行時(shí)獲取100條參數(shù)數(shù)據(jù),然后終止作業(yè),大約耗費(fèi)120 s。一般來(lái)說(shuō),穩(wěn)定的神經(jīng)網(wǎng)絡(luò)作業(yè)的GPU參數(shù)變化是先增加,然后趨于穩(wěn)定,最后在一個(gè)值上下浮動(dòng),增加過(guò)程就是作業(yè)開始加載的過(guò)程,如果作業(yè)加載速度足夠快,甚至可以選擇50條數(shù)據(jù)或者更少,那么時(shí)間將會(huì)更短。

表7記錄了實(shí)驗(yàn)時(shí)兩張顯卡上干擾預(yù)測(cè)所花費(fèi)的時(shí)間,其中預(yù)測(cè)模型的訓(xùn)練是構(gòu)建干擾預(yù)測(cè)機(jī)制需要完成的步驟,而對(duì)于一個(gè)已經(jīng)完善的干擾預(yù)測(cè)機(jī)制,花費(fèi)的代價(jià)只包括自動(dòng)獲取參數(shù)、模型選擇以及干擾預(yù)測(cè),從表7中可以看到這三步總共耗費(fèi)的時(shí)間在300 s內(nèi),主要耗時(shí)是在自動(dòng)獲取GPU參數(shù)的步驟,它包含了作業(yè)加載的時(shí)間,但是模型加載的速度和作業(yè)模型本身以及數(shù)據(jù)集有關(guān),所以無(wú)法輕易改變;而對(duì)于模型選擇和干擾預(yù)測(cè),由于參考的預(yù)測(cè)技術(shù)都是回歸技術(shù),模型較簡(jiǎn)單且具有速度快的特性,所以模型選擇以及干擾預(yù)測(cè)耗費(fèi)的時(shí)間很短,可以在10 s以內(nèi)。

總體來(lái)看,雖然獲取GPU參數(shù)要耗費(fèi)一定的時(shí)間,但是對(duì)于一個(gè)龐大的,可能需要訓(xùn)練幾十個(gè)小時(shí)、甚至幾天的神經(jīng)網(wǎng)絡(luò)作業(yè)而言,花費(fèi)的代價(jià)是很小的。

表7 TeslaP40和RTX3090上干擾預(yù)測(cè)所花費(fèi)的時(shí)間

4.4 應(yīng)用場(chǎng)景

本文設(shè)計(jì)并構(gòu)建的AIP機(jī)制具有通用性,能適用于多種GPU設(shè)備,并能夠在不提供任何預(yù)先假設(shè)信息的前提下,快速、準(zhǔn)確地預(yù)測(cè)給定作業(yè)間的性能干擾率,因此在多種場(chǎng)景都可以應(yīng)用。

該機(jī)制可集成在作業(yè)調(diào)度器中,為作業(yè)放置提供性能干擾的參考數(shù)據(jù)。例如,Optimus策略以作業(yè)優(yōu)先級(jí)作為放置的依據(jù),加入干擾預(yù)測(cè)機(jī)制后,只需要提前簡(jiǎn)單地運(yùn)行150 s左右來(lái)預(yù)測(cè)性能干擾,就可以依據(jù)干擾率選擇更高效的調(diào)度方案。除此之外,該機(jī)制還可作為負(fù)載均衡的依據(jù),由上文分析可知,內(nèi)存過(guò)載、帶寬競(jìng)爭(zhēng)等GPU資源分配不均是性能干擾的主要原因,因此可以根據(jù)預(yù)測(cè)的干擾來(lái)避免資源分配不均,從而達(dá)到負(fù)載均衡。

5 結(jié)語(yǔ)

根據(jù)上述分析與實(shí)驗(yàn)可以對(duì)分布式機(jī)器學(xué)習(xí)作業(yè)提供一個(gè)自適應(yīng)干擾預(yù)測(cè)機(jī)制,通過(guò)該機(jī)制可以對(duì)給定的GPU設(shè)備和作業(yè)集合按實(shí)際需求選擇一個(gè)或多個(gè)合適的GPU參數(shù)-干擾率模型進(jìn)行快速且準(zhǔn)確的預(yù)測(cè),該機(jī)制在效率和準(zhǔn)確率方面都有很好的表現(xiàn),因此可以應(yīng)用在作業(yè)調(diào)度和負(fù)載均衡等場(chǎng)景。但在實(shí)驗(yàn)中我們發(fā)現(xiàn)當(dāng)三種作業(yè)并行時(shí),會(huì)出現(xiàn)GPU參數(shù)影響下降的情況,這與GPU自身的參數(shù)配置有關(guān),三種作業(yè)并行時(shí)可能達(dá)到了該參數(shù)的閾值,從而干擾了預(yù)測(cè),因此未來(lái)的工作一方面是優(yōu)化預(yù)測(cè)技術(shù),另一方面是增強(qiáng)其通用性。

[1] JORDAN M I, MITCHELL T M. Machine learning: trends, perspectives, and prospects[J]. Science, 2015, 349(6245): 255-260.

[2] YU J H, HUANG T. Universally slimmable networks and improved training techniques[C]// Proceedings of the 2019 IEEE/CVF International Conference on Computer Vision. Piscataway: IEEE, 2019: 1803-1811.

[3] DENG J, DONG W, SOCHER R, et al. ImageNet: a large-scale hierarchical image database[C]// Proceedings of the 2009 IEEE Conference on Computer Vision and Pattern Recognition. Piscataway: IEEE, 2009: 248-255.

[4] 李青坪. 面向分布式深度學(xué)習(xí)的集群資源調(diào)度優(yōu)化技術(shù)研究[D]. 南京:南京大學(xué), 2020:1-3.(LI Q P. Research on cluster resource scheduling optimization for distributed deep learning[D]. Nanjing: Nanjing University, 2020: 1-3.)

[5] PETEIRO-BARRAL D, GUIJARRO-BERDI?AS B. A survey of methods for distributed machine learning[J]. Progress in Artificial Intelligence, 2013,2(1): 1-11.

[6] LI M, ANDERSEN D G, PARK J W, et al. Scaling distributed machine learning with the parameter server[C]// Proceedings of the 11th USENIX Symposium on Operating Systems Design and Implementation. Berkeley: USENIX Association, 2014: 583-598.

[7] 王丹. 分布式機(jī)器學(xué)習(xí)集群的資源調(diào)度機(jī)制研究[D]. 成都:電子科技大學(xué), 2020:6-15.(WANG D. Research on resource scheduling mechanism of distributed machine learning cluster[D]. Chengdu: University of Electronic Science and Technology of China, 2020: 6-15.)

[8] WEN L, LI X Y, GAO L. A transfer convolutional neural network for fault diagnosis based on ResNet-50[J]. Neural Computing and Applications, 2020, 32(10): 6111-6124.

[9] ALIPPI C, DISABATO S, ROVERI M. Moving convolutional neural networks to embedded systems: the AlexNet and VGG-16 case[C]// Proceedings of the 17th ACM/IEEE International Conference on Information Processing in Sensor Networks. Piscataway: IEEE, 2018: 212-223.

[10] ABADI M, BARHAM P, CHEN J M, et al. TensorFlow: a system for large-scale machine learning[C]// Proceedings of the 12th USENIX Symposium on Operating Systems Design and Implementation. Berkeley: USENIX Association, 2016: 265-283.

[11] PASZKE A, GROSS S, MASSA F, et al. PyTorch: an imperative style, high-performance deep learning library[C/OL]// Proceedings of the 33rd Conference on Neural Information Processing Systems. [2021-05-11].https://proceedings.neurips.cc/paper/2019/file/bdbca288fee7f92f2bfa9f7012727740-Paper.pdf.

[12] GU J C, CHOWDHURY M, SHIN K G, et al. Tiresias: a GPU cluster manager for distributed deep learning[C]// Proceedings of the 16th USENIX Symposium on Networked Systems Design and Implementation. Berkeley: USENIX Association, 2019: 485-500.

[13] PENG Y H, BAO Y X, CHEN Y R, et al. Optimus: an efficient dynamic resource scheduler for deep learning clusters[C]// Proceedings of the 13th European Conference on Computer Systems. New York: ACM, 2018: No.3.

[14] MAHAJAN K, BALASUBRAMANIAN A, SINGHVI A, et al. THEMIS: fair and efficient GPU cluster scheduling[C]// Proceedings of the 17th USENIX Symposium on Networked Systems Design and Implementation. Berkeley: USENIX Association, 2020: 289-304.

[15] LI H L, SUN T, LI X, et al. Job placement strategy with opportunistic resource sharing for distributed deep learning clusters[C]// Proceedings of the IEEE 22nd International Conference on High Performance Computing and Communications/ IEEE 18th International Conference on Smart City/ IEEE 6th International Conference on Data Science and Systems. Piscataway: IEEE, 2020: 620-627.

[16] TRANMER M,ELLIOT M. Multiple linear regression[R/OL]. [2021-05-11].https://hummedia.manchester.ac.uk/institutes/cmist/archive-publications/working-papers/2008/2008-19-multiple-linear-regression.pdf.

[17] WAUTERS M, VANHOUCKE M. Support vector machine regression for project control forecasting[J]. Automation in Construction, 2014, 47: 92-106.

[18] LOH W Y. Classification and regression tree methods[M]// RUGGERI F, KENETT R S, FALTIN F W. Encyclopedia of Statistics in Quality and Reliability. Hoboken, NJ: John Wiley & Sons, Inc., 2008: 315-323.

[19] HAMERLY G, ELKAN C. Learning thein-means[C]// Proceedings of the 16th International Conference on Neural Information Processing Systems. Cambridge: MIT Press, 2003: 281-288.

[20] JACKSON D. Employability skill development in work-integrated learning: barriers and best practice[J]. Studies in Higher Education, 2015, 40(2): 350-367.

[21] LeCUN Y, BENGIO Y, HINTON G. Deep learning[J]. Nature, 2015, 521(7553): 436-444.

[22] GREFF K, SRIVASTAVA R K, KOUTNíK J, et al. LSTM: a search space odyssey[J]. IEEE Transactions on Neural Networks and Learning Systems, 2017, 28(10): 2222-2232.

Performance interference analysis and prediction for distributed machine learning jobs

LI Hongliang1,2, ZHANG Nong1, SUN Ting1, LI Xiang1*

(1,,130012,;2(),130012,)

By analyzing the problem of job performance interference in distributed machine learning, it is found that performance interference is caused by the uneven allocation of GPU resources such as memory overload and bandwidth competition, and to this end, a mechanism for quickly predicting performance interference between jobs was designed and implemented, which can adaptively predict the degree of job interference according to the given GPU parameters and job types. First, the GPU parameters and interference rates during the operation of distributed machine learning jobs were obtained through experiments, and the influences of various parameters on performance interference were analyzed. Second, some GPU parameter-interference rate models were established by using multiple prediction technologies to analyze the job interference rate errors. Finally, an adaptive job interference rate prediction algorithm was proposed to automatically select the prediction model with the smallest error for a given equipment environment and job set to predict the job interference rates quickly and accurately. By selecting five commonly used neural network tasks, experiments were designed on two GPU devices and the results were analyzed. The results show that the proposed Adaptive Interference Prediction (AIP) mechanism can quickly complete the selection of prediction model and the performance interference prediction without providing any pre-assumed information, it has comsumption time less than 300 s and achieves prediction error rate in the range of 2% to 13%, which can be applied to scenarios such as job scheduling and load balancing.

distributed machine learning; performance interference; cluster scheduling; resource sharing; interference prediction

This work is partially supported by National Key Research and Development Program of China (2017YFC1502306), National Natural Science Foundation of China (61602205).

LI Hongliang, born in 1983, Ph. D., associate professor. His research interests include distributed computing, high performance computing.

ZHANG Nong, born in 1999, M. S.candidate. His research interests include distributed computing, high performance computing.

SUN Ting, born in 1996, M. S. Her research interests include cloud computing, high performance computing.

LI Xiang, born in 1983, M. S., engineer. Her research interests include computer network.

TP338.8

A

1001-9081(2022)06-1649-07

10.11772/j.issn.1001-9081.2021061404

2021?08?05;

2021?10?14;

2021?10?20。

國(guó)家重點(diǎn)研發(fā)計(jì)劃項(xiàng)目(2017YFC1502306);國(guó)家自然科學(xué)基金資助項(xiàng)目(61602205)。

李洪亮(1983—),男,吉林長(zhǎng)春人,副教授,博士,CCF會(huì)員,主要研究方向:分布式計(jì)算、高性能計(jì)算;張弄(1999—),男,四川南充人,碩士研究生,主要研究方向:分布式計(jì)算、高性能計(jì)算;孫婷(1996—),女,吉林洮南人,碩士,主要研究方向:云計(jì)算、高性能計(jì)算;李想(1983—),女,吉林長(zhǎng)春人,工程師,碩士,主要研究方向:計(jì)算機(jī)網(wǎng)絡(luò)。

猜你喜歡
預(yù)測(cè)性能算法
UIO-66熱解ZrO2負(fù)載CoMoS對(duì)4-甲基酚的加氫脫氧性能
夏季五招提高種鵝繁殖性能
選修2—2期中考試預(yù)測(cè)卷(B卷)
選修2—2期中考試預(yù)測(cè)卷(A卷)
桌面端,GTX 1650并不是千元價(jià)位的顯卡好選擇
Travellng thg World Full—time for Rree
學(xué)習(xí)算法的“三種境界”
算法框圖的補(bǔ)全
算法初步知識(shí)盤點(diǎn)
《福彩3D中獎(jiǎng)公式》:提前一月預(yù)測(cè)號(hào)碼的驚人技巧!
沂水县| 安康市| 桓台县| 偃师市| 合川市| 鄢陵县| 逊克县| 阿巴嘎旗| 湖南省| 宁海县| 张家川| 梁河县| 龙州县| 石台县| 资源县| 会泽县| 乌拉特中旗| 同仁县| 夏河县| 卢龙县| 塘沽区| 南涧| 平顺县| 大宁县| 峡江县| 南昌县| 依安县| 兰州市| 清远市| 顺义区| 瑞丽市| 洛宁县| 汽车| 静安区| 秦皇岛市| 山丹县| 滨州市| 宝鸡市| 昌黎县| 江山市| 桃源县|