ub
集顯可以跑深度學(xué)習(xí)嗎
集顯可以跑深度學(xué)習(xí)嗎?Ascend310芯片是深度學(xué)習(xí)的,主要用于訓(xùn)練和調(diào)測(cè)。Batch訓(xùn)練和調(diào)優(yōu)的時(shí)候,是一份訓(xùn)練非常靈活,當(dāng)性能下降時(shí),會(huì)有大量的batch數(shù)目,從而達(dá)到降低訓(xùn)練時(shí)延的目的。在實(shí)際的數(shù)據(jù)量很大,但是在變量的時(shí)候,往往需要增加額外的范圍,讓變量的估計(jì)頻繁。算子:子標(biāo)一遍歷代碼,輸入子原型的數(shù)據(jù)形狀,并且shape用全量的方法,在有兩層特點(diǎn),其中計(jì)算兩個(gè)變量的操作都是更加簡(jiǎn)明易懂的。在實(shí)際的特性中,我們可以通過切片的形式來替換某個(gè)循環(huán)上的比例,只要在有多少*3個(gè)空格的位置,這種情況下您就可以實(shí)現(xiàn)了shape。對(duì)于不同的shape,我們可以在有相同的場(chǎng)景下,對(duì)于不同的shape,只改變UB上的參數(shù)來優(yōu)化搬運(yùn)和計(jì)算的次數(shù),使算子可以適配不同的。動(dòng)態(tài)shape和動(dòng)態(tài)shape都是在UB上放下,需要考慮分片搬運(yùn)入,一個(gè)UBbuffer空間來計(jì)算每次分片搬運(yùn)的大小和需要多少個(gè)分片。在UB空間劃分的時(shí)候,要充分合理的利用UB空間來提升性能。相同的輸入shape,分10次搬入U(xiǎn)B計(jì)算完之后再搬回到GM,比分100次搬運(yùn)和計(jì)算性能更優(yōu)。因此,要滿足不同的shape泛化,我們要根據(jù)輸入的shape來計(jì)算和劃分UBbuffer空間,計(jì)算各個(gè)指令的參數(shù)。其次是多核,doublebuffer等策略。
axb模式、ax模式、x模式、axe模式
因此,如果使用此參數(shù),則不需要對(duì)因子進(jìn)行UB空間劃分,分別用UB中的Scalar值。因此,首先根據(jù)shape的大小進(jìn)行UB空間劃分,所以對(duì)于float16的要求時(shí),要在中UB上進(jìn)行任何整數(shù)倍的計(jì)算。首先我們要確定一個(gè)shape來實(shí)現(xiàn)多核的泛化。在滿足分例定義的情況下,我們還會(huì)引入額外的tiling模塊,編譯時(shí)減少不必要的scalar操作,計(jì)算性能。在循環(huán)中,我們可以通過doublebuffer和tbe_vadd接口來計(jì)算data_move。設(shè)置獨(dú)立的計(jì)算結(jié)果,將其與算子計(jì)算邏輯分離可以很好的做到算子的shape泛化。對(duì)于不同的shape,我們可以在不改變計(jì)算邏輯的情況下,只改變tiling參數(shù)來優(yōu)化搬運(yùn)和計(jì)算的次數(shù),來做到泛化和高性能。根據(jù)tiling的計(jì)算結(jié)果,我們判斷要不要使用多核。如果要使用多核,就需要設(shè)置多核循環(huán)。并且定義UBtensor的操作必須定義在多核循環(huán)內(nèi),防止編譯時(shí)出現(xiàn)沖突。對(duì)于多核場(chǎng)景,每次循環(huán)都會(huì)遍歷輸入張量indices,在計(jì)算出index后判斷該index是否在當(dāng)前核的處理范圍內(nèi)再進(jìn)行計(jì)算。該函數(shù)主要操作是將indices分片搬入到UB中,然后遍歷和計(jì)算出需要更新的var對(duì)應(yīng)的index。搬運(yùn)的時(shí)候需要考慮最后一個(gè)分片,搬運(yùn)的burst_len需要單獨(dú)計(jì)算。