[發(fā)明專利]用于多流并行的沖突處理系統(tǒng)及其方法有效
| 申請?zhí)枺?/td> | 202210022949.6 | 申請日: | 2022-01-10 |
| 公開(公告)號: | CN114035968B | 公開(公告)日: | 2022-03-18 |
| 發(fā)明(設(shè)計)人: | 李新奇;袁進輝;張建浩 | 申請(專利權(quán))人: | 北京一流科技有限公司 |
| 主分類號: | G06F9/50 | 分類號: | G06F9/50 |
| 代理公司: | 北京金訊知識產(chǎn)權(quán)代理事務(wù)所(特殊普通合伙) 11554 | 代理人: | 黃劍飛 |
| 地址: | 100083 北京市海*** | 國省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 用于 并行 沖突 處理 系統(tǒng) 及其 方法 | ||
本公開涉及一種用于多流并行的沖突處理系統(tǒng)及其方法。所述系統(tǒng)包括:初始計算圖獲取組件,獲取將部署在CPU以及一個或多個協(xié)處理器上的初始計算圖,所述初始計算圖包括屬于一個計算任務(wù)的多個任務(wù)流,每個任務(wù)流包含多個順序執(zhí)行的運算邏輯節(jié)點和內(nèi)存釋放邏輯節(jié)點;節(jié)點關(guān)系分析組件,遍歷所述計算圖中將被針對的所有張量,判斷首次針對第一張量的第一節(jié)點和針對第一張量的第二節(jié)點所屬的任務(wù)流是否相同;以及沖突消除組件,在節(jié)點關(guān)系分析組件確定第一節(jié)點屬于第一任務(wù)流而第二節(jié)點屬于不同于第一任務(wù)流的任務(wù)流時,在第二節(jié)點之前生成標(biāo)記第一任務(wù)流的等待節(jié)點,從而獲得結(jié)果計算圖。
技術(shù)領(lǐng)域
本公開涉及一種數(shù)據(jù)處理技術(shù)。更具體地說,本公開涉及一種用于多流并行的沖突處理系統(tǒng)及其方法。
背景技術(shù)
在深度學(xué)習(xí)普及的現(xiàn)在,為了提高數(shù)據(jù)處理的速度,通常需要將一個任務(wù)分割成多個分片任務(wù),形成多個任務(wù)流,從而使得任務(wù)流執(zhí)行并行處理,從而節(jié)省數(shù)據(jù)處理的時間或加快任務(wù)處理的效率,這種數(shù)據(jù)處理方式為多流并行處理。
但是在進行多流并行的數(shù)據(jù)處理方法往往存在不同流之間的參數(shù)交換以及不同流之間的數(shù)據(jù)依賴。因此,如果在并行情況下如果不做到參數(shù)同步,將導(dǎo)致每個任務(wù)流各自的產(chǎn)生的結(jié)果在進行合并時出現(xiàn)錯誤。這種錯誤往往是不同任務(wù)流在執(zhí)行相關(guān)聯(lián)操作時,本應(yīng)該采用了同一個張量或參數(shù)或者本應(yīng)該分時使用同一塊內(nèi)存而導(dǎo)致使用同一塊內(nèi)存的時間產(chǎn)生重疊導(dǎo)致的。
在深度學(xué)習(xí)中,通常使用 GPU 進行計算時,會啟動 CUDA Kernel,CUDA Kernel在 GPU 上異步執(zhí)行。CUDA Kernel 只能屬于某一個 CUDA stream,不同的 CUDA stream之間的執(zhí)行順序大多是沒有聯(lián)系的;同一個 CUDA stream 中的 Kernel 有先進先出的執(zhí)行順序。Host 機器(即CPU)上某個函數(shù)啟動 CUDA Kernel 后,Host 主機上的執(zhí)行流程,并不會等待 GPU 上 的 CUDA Kernel 執(zhí)行結(jié)束后(再繼續(xù)),而是直接執(zhí)行 Host 上的下一條指令。而且啟動 CUDA Kernel也并不意味著 GPU 上立即執(zhí)行 CUDA Kernel 中的指令,而是將 CUDA Kernel 放置在 GPU 的某個隊列(即 CUDA Stream)中,排隊等待之前的Kernel 執(zhí)行完成后,再執(zhí)行當(dāng)前 Kernel。此外,常見的計算框架,會自己實現(xiàn)顯存池,即向GPU 申請大塊內(nèi)存,再自己對這塊內(nèi)存進行劃分和管理,分配給計算時的張量,一般來說每一個 Stream 有一個顯存池。
因為 Kernel 異步執(zhí)行的原因,對于多流并行數(shù)據(jù)處理的情況,常常會導(dǎo)致一些沖突問題。一方面,對于并行的多個任務(wù)流上的彼此邏輯上有依賴的Kernel,可能會因為出在不同的 Stream 上執(zhí)行而導(dǎo)致錯誤。比如,假設(shè)有兩個Kernel,分別為S1-n1、S2-n2,假定邏輯上S2-n2的計算依賴S1-n1的結(jié)果,即需要S1-n1先向內(nèi)存空間M寫入張量T2,S2-n2再讀取M中的張量T2。由于兩個Kernel,S1-n1和S2-n2,在兩個不同的任務(wù)流S1和S2中,S2-n2的執(zhí)行可能早于S1-n1,在這種情況下,S2-n2讀取到的數(shù)據(jù)就可能是錯誤的。另一方面,對于并行的多個任務(wù)流上的邏輯上沒有依賴的 Kernel,有可能因為不同 Kernel 之間張量生命周期的不可控,導(dǎo)致內(nèi)存數(shù)據(jù)的錯誤。比如,兩個 Kernel ,例如S2-n2和S1-n2 分別在不同的任務(wù)流S2和S1中,S2-n2需要讀取內(nèi)存M中的張量T2, S1-n2需要向可能的內(nèi)存M中寫入張量T4,張量T2與張量T4之間并沒有邏輯上的關(guān)聯(lián)。這樣,有可能在S2-n2 結(jié)束讀取內(nèi)存M中的張量T2之前,張量T2所處的內(nèi)存M就被標(biāo)記為釋放,使得S1-n2得以先于S2-n2執(zhí)行,從而使得后執(zhí)行的S2-n2獲取的是T4而不是T2。這就在內(nèi)存使用上導(dǎo)致潛在沖突。
因此,人們需要一種能夠在實現(xiàn)多流并行時消除造成運算和內(nèi)存管理上的潛在沖突的處理系統(tǒng)及其方法,從而消除數(shù)據(jù)處理中出現(xiàn)的錯誤。
發(fā)明內(nèi)容
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于北京一流科技有限公司,未經(jīng)北京一流科技有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202210022949.6/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





