本發(fā)明屬于圖像處理,特別涉及一種卷積算子融合的方法。
背景技術:
1、現(xiàn)有技術中深度神經(jīng)網(wǎng)絡已經(jīng)成為移動設備上許多主要應用的核心推動力。為了達到高精確度,dnn模型變得越來越深,有數(shù)百甚至數(shù)千的算子層,導致推理需要高內存和高計算要求。算子融合(或內核/層融合)是許多先進dnn執(zhí)行框架的關鍵優(yōu)化,如tensorflow、tvm和mnn,旨在提高dnn推理的效率。算子融合屬于圖像優(yōu)化,算子融合可以達到減少整個graph中node的數(shù)量,以減少從一個node到另一個node之間的數(shù)據(jù)搬運的目的,從而減少在底層推理過程中需要耗費的時間。
2、然而,現(xiàn)有技術的主要缺陷在于:在算子融合過程中,或是將常見的算子組合進行融合,如卷積和bn;或者是某些熱點算子組合子圖進行融合,卻沒有將多個卷積算子進行融合的。
3、此外,現(xiàn)有技術中的常用術語包括:
4、算子:深度學習算法由一個個計算單元組成,我們稱這些計算單元為算子(operator,簡稱op),包括:conv,pooling,activation等。
5、節(jié)點:神經(jīng)網(wǎng)絡的基本計算單元是神經(jīng)元,同城成為節(jié)點(node)。它接收來自其他節(jié)點或外部源的輸入并計算輸出。
技術實現(xiàn)思路
1、為了解決上述問題,本申請的目的在于:在本方法中,會根據(jù)底層降低計算時間的需求,遍歷整個graph圖,判斷遍歷到的node節(jié)點是否符合融合的要求,若是符合要求,就將需要進行融合的多個卷積,融合為一個新的算子。
2、具體地,本發(fā)明提供一種卷積算子融合的方法,所述方法包括以下步驟:
3、s0,先明確需要進行融合的算子類型,即先確定要融合的卷積的類型,這樣在后續(xù)進行融合時能夠選擇正確的卷積進行融合;
4、s1,先遍歷整個graph圖,所述graph圖理解為有向無環(huán)圖,找到符合n個算子順序串聯(lián)的子圖結構,這里的n是需要融合起來的算子的個數(shù);s2,在找到該子圖后,分別取出n個算子中對應的權重h和w、步長strides、輸入輸出權重位寬、激活屬性,判斷該算子是否符合要融合的條件,這里說的取出的屬性,即是從graph圖中取出的卷積算子的以上的參數(shù)的值,取出屬性與判斷條件的關系也就是取出kernel對應的值,判斷是否符合融合條件;
5、如果不符合,則跳過該子圖,跳過該子圖后會繼續(xù)下一個符合結構的子圖,并判斷該子圖是否符合融合條件,符合的進行融合,不符合的繼續(xù)找下一個子圖或直至整個graph圖結束;
6、符合的話,則進行下一步步驟s3;
7、s3,符合卷積融合的條件,則創(chuàng)建一個新的節(jié)點node,并命名一個新的算子名稱,取出n個卷積內的所有屬性,進行重命名后放到新節(jié)點中,然后給新節(jié)點連接對應的輸入和輸出,在graph圖中的每個節(jié)點都有輸入節(jié)點的名稱信息,通過每個節(jié)點的輸入名稱理解節(jié)點之間的關聯(lián)關系,所述連接即是將子圖的輸入設置為新節(jié)點的輸入,將子圖的輸出節(jié)點的原始輸入刪除,并將新節(jié)點設置為子圖輸出節(jié)點的輸入,這樣就將新節(jié)點插入到graph圖中,使其在圖中有對應的連接關系,并將圖中的需要融合的節(jié)點刪除。
8、所述步驟s0中所述先確定要融合的卷積的類型,是因為當前是對多個卷積進行融合,卷積有標準卷積、深度卷積即對輸入的每個通道獨立進行卷積運算、pointconvolution即權重寬高為1x1的普通卷積、膨脹卷積即在卷積核里面的元素直接插入空格來膨脹內核形成膨脹卷積,那么就需要先確定要融合的卷積的類型。
9、所述步驟s0中進行卷積的融合,根據(jù)卷積的不同分類,有普通卷積和深度卷積,包括需要對point?convolution-深度卷積-point?convolution這三個進行融合。
10、所述步驟s1中,所述有向無環(huán)圖即無回路的有向圖,即在圖論中,如果一個有向圖無法從某個頂點出發(fā)經(jīng)過若干條邊回到該點,則這個圖是一個有向無環(huán)圖。
11、所述步驟s1中所述n在point_convolution、depthwise_convolution和point_convolution三個卷積融合中n為3,point_convolution、depthwise_convolution和point_convolution三個算子融合,這里的point_convolution是指權重的h,w為1的普通卷積,depthwise_convolution就是深度卷積;若是進行其他子圖的融合則對應設置n,假設對depthwise_convolution和point_convolution進行融合的話,n就是2。
12、所述n無論將多少個算子進行融合,進行融合的大步驟不變,只會是其中小步驟中子圖結構或者判斷是否進行融合的條件的變化。
13、所述步驟s2中,在卷積的計算過程中需要知道輸入大小,權重kernel的大小,步長stride,并且會將卷積根據(jù)不同的芯片進行量化,所以還需要獲取芯片類型信息,量化位寬bitwidth,激活類型action_type信息,所以判斷這些卷積是否能否融合就需要獲取以上參數(shù)。
14、所述步驟s2中,所述判斷條件是:深度卷積的權重寬高是3,3;三個卷積的步長寬高均為1;三個卷積的輸入位寬,輸出位寬,權重位寬均為8;三個卷積的激活均為none或relu或relu6。
15、所述步驟s2中,所述步驟s2中,理解成graph圖中包含多個卷積,而一個卷積中包含多個參數(shù)鍵值對,包括kernel:1,1;stride:1,1,所述取出屬性與判斷條件的關系也就是取出kernel對應的值1,1。
16、所述步驟s3中,所述融合的節(jié)點刪除即減少節(jié)點的方式就是將三個卷積融合為一個卷積,從而達到減少兩個節(jié)點的目的,將point?conv-depthwise?conv-point?conv三個節(jié)點融合成了一個new?conv節(jié)點,對整個graph圖來說,就減少了兩個節(jié)點。
17、由此,本申請的優(yōu)勢在于:將多個卷積算子進行融合為一個新的算子,從而減少graph中的節(jié)點數(shù),減少節(jié)點之間的數(shù)據(jù)搬運,和底層推理時的耗時。
1.一種卷積算子融合的方法,其特征在于,所述方法包括以下步驟:
2.根據(jù)權利要求1所述的一種卷積算子融合的方法,其特征在于,所述步驟s0中所述先確定要融合的卷積的類型,是因為當前是對多個卷積進行融合,卷積有標準卷積、深度卷積即對輸入的每個通道獨立進行卷積運算、point?convolution即權重寬高為1x1的普通卷積、膨脹卷積即在卷積核里面的元素直接插入空格來膨脹內核形成膨脹卷積,那么就需要先確定要融合的卷積的類型。
3.根據(jù)權利要求2所述的一種卷積算子融合的方法,其特征在于,所述步驟s0中進行卷積的融合,根據(jù)卷積的不同分類,有普通卷積和深度卷積,包括需要對point?convolution-深度卷積-point?convolution這三個進行融合。
4.根據(jù)權利要求1所述的一種卷積算子融合的方法,其特征在于,所述步驟s1中,所述有向無環(huán)圖即無回路的有向圖,即在圖論中,如果一個有向圖無法從某個頂點出發(fā)經(jīng)過若干條邊回到該點,則這個圖是一個有向無環(huán)圖。
5.根據(jù)權利要求1所述的一種卷積算子融合的方法,其特征在于,所述步驟s1中所述n在point_convolution、depthwise_convolution和point_convolution三個卷積融合中n為3,point_convolution、depthwise_convolution和point_convolution三個算子融合,這里的point_convolution是指權重的h,w為1的普通卷積,depthwise_convolution就是深度卷積;若是進行其他子圖的融合則對應設置n,假設對depthwise_convolution和point_convolution進行融合的話,n就是2。
6.根據(jù)權利要求4所述的一種卷積算子融合的方法,其特征在于,所述n無論將多少個算子進行融合,進行融合的大步驟不變,只會是其中小步驟中子圖結構或者判斷是否進行融合的條件的變化。
7.根據(jù)權利要求6所述的一種卷積算子融合的方法,其特征在于,所述步驟s2中,在卷積的計算過程中需要知道輸入大小,權重kernel的大小,步長stride,并且會將卷積根據(jù)不同的芯片進行量化,所以還需要獲取芯片類型信息,量化位寬bitwidth,激活類型action_type信息,所以判斷這些卷積是否能否融合就需要獲取以上參數(shù)。
8.根據(jù)權利要求7所述的一種卷積算子融合的方法,其特征在于,所述步驟s2中,所述判斷條件是:深度卷積的權重寬高是3,3;三個卷積的步長寬高均為1;三個卷積的輸入位寬,輸出位寬,權重位寬均為8;三個卷積的激活均為none或relu或relu6。
9.根據(jù)權利要求8所述的一種卷積算子融合的方法,其特征在于,所述步驟s2中,所述步驟s2中,理解成graph圖中包含多個卷積,而一個卷積中包含多個參數(shù)鍵值對,包括kernel:1,1;stride:1,1,所述取出屬性與判斷條件的關系也就是取出kernel對應的值1,1。
10.根據(jù)權利要求9所述的一種卷積算子融合的方法,其特征在于,所述步驟s3中,所述融合的節(jié)點刪除即減少節(jié)點的方式就是將三個卷積融合為一個卷積,從而達到減少兩個節(jié)點的目的,將point?conv-depthwiseconv-point?conv三個節(jié)點融合成了一個new?conv節(jié)點,對整個graph圖來說,就減少了兩個節(jié)點。