南京航空航天大學(xué) 范仁艷
中國科學(xué)院計算技術(shù)研究所 支 天
深度學(xué)習(xí)處理器以其卓越的性能功耗比,在目標(biāo)檢測,圖像識別、機器翻譯中等諸多深度學(xué)習(xí)應(yīng)用領(lǐng)域中取得了顯著的成功。處理器驗證是處理器開發(fā)過程中一個必不可少的關(guān)鍵環(huán)節(jié),驗證的目的是發(fā)現(xiàn)設(shè)計的所有方案缺陷和代碼缺陷。由于深度學(xué)習(xí)處理器高性能、低功耗的架構(gòu)特點,由此帶來新的驗證挑戰(zhàn)——精度驗證。精度驗證用以確保處理器的精度方案以及精度實現(xiàn)沒有問題。在進(jìn)行精度方案驗證時,需要考慮驗證激勵的豐富性和完備性,這是驗證難點之一。本文就以上難點,提出一種精度方案驗證激勵生成方法,提升了驗證激勵的完備性,提高了驗證質(zhì)量。
深度學(xué)習(xí)處理器是一類專用于搭載深度學(xué)習(xí)應(yīng)用的處理器,相比于通用處理器CPU以及GPU,具有運算快、功耗低的優(yōu)勢。深度學(xué)習(xí)處理器研究的熱潮起源于中科院陳云霽團(tuán)隊研發(fā)的DaDianNao架構(gòu),至今國內(nèi)外已有多款深度學(xué)習(xí)處理器上市。
處理器驗證在處理器開發(fā)過程中起著關(guān)鍵的作用,其目的是保證處理器在進(jìn)入后端流程之前的開發(fā)過程中沒有方案設(shè)計缺陷和代碼設(shè)計缺陷。最常見的有功能驗證、性能驗證、功耗驗證等等。深度學(xué)習(xí)處理器的處理應(yīng)用涉及大量的浮定點運算,由此會帶來精度問題。為了盡量避免運算過程中的精度損失,深度學(xué)習(xí)處理器架構(gòu)包含很多高精度設(shè)計方案,例如融合運算器、加法樹等。精度方案是否全面與完備會直接影響處理器的運算結(jié)果的精度,因此有必要進(jìn)行精度方案的驗證。
圖1所示是功能驗證的基礎(chǔ)框架結(jié)構(gòu)。激勵、參考模型、檢查機制是進(jìn)行功能驗證的三要素,DUV(Design Under Verification)是驗證對象。激勵是輸入數(shù)據(jù),灌輸給參考模型和待測處理器;參考模型是比較基準(zhǔn),接受輸入之后,進(jìn)行同樣的運算,用于與待測處理器結(jié)果比較;檢查機制是比較規(guī)則,接受參考模型和待測處理器的輸出,按照此規(guī)則進(jìn)行比較,輸出判斷結(jié)果。
圖1 功能驗證基礎(chǔ)框架
同功能驗證一樣,精度方案驗證同樣需要以上三要素。在進(jìn)行精度方案驗證時,激勵是深度學(xué)習(xí)處理器的上層應(yīng)用對象——網(wǎng)絡(luò);參考模型是通用處理器;檢查機制使用網(wǎng)絡(luò)運算標(biāo)準(zhǔn),例如分類網(wǎng)絡(luò)的Top-1、Top-5等。激勵的豐富性和完備性直接決定了驗證的完備性,是驗證的主要挑戰(zhàn)。本文為解決精度方案驗證激勵的完備性這一難題,提出一種激勵生成方法,該方法在常用網(wǎng)絡(luò)的基礎(chǔ)之上,對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行“擾動”調(diào)整,適當(dāng)改變網(wǎng)絡(luò)結(jié)構(gòu),豐富網(wǎng)絡(luò)類型。
激勵的選擇和構(gòu)造是驗證過程中的主要工作。激勵的質(zhì)量直接決定了驗證的質(zhì)量。激勵的構(gòu)造需要滿足兩個基礎(chǔ)條件,一個是合法性,一個是完備性。把需要驗證的對象的狀態(tài)空間當(dāng)作一個全集,每一種狀態(tài)對應(yīng)于一個激勵。這個集合的邊界定義了合法性,把集合之內(nèi)的激勵視為合法激勵,否則為非法激勵。激勵的完備性指的是實際激勵覆蓋到的狀態(tài)構(gòu)成的集合是否等價于驗證對象的狀態(tài)空間。激勵生成的目標(biāo)是在滿足激勵合法性的前提下,盡可能的提高激勵的完備性。
目前常見的驗證激勵生成方案主要有幾下幾種:遍歷激勵、定向激勵和隨機激勵。
遍歷激勵,顧名思義,是一種遍歷驗證對象的所有接口的激勵生成方法。該方法可以百分百保證激勵的完備性,但效率會隨著驗證對象的接口的復(fù)雜度而顯著下降。例如驗證一個浮點16的加法器,狀態(tài)空間的大小約是2^32,采用窮舉遍歷的方式,驗證的仿真時間約為1周;若替換成一個浮點32的加法器,狀態(tài)空間陡增至2^64,遍歷激勵的時間成本完全無法接受,從而失去可行性。因此,遍歷激勵只適用于驗證邏輯簡單,接口簡單的設(shè)計單元。
定向激勵,是針對驗證對象某一特定功能或者業(yè)務(wù)場景構(gòu)造出來的激勵。構(gòu)造定向激勵之前,需要先根據(jù)驗證對象的功能文檔和設(shè)計文檔提取驗證的功能點。一個功能點對應(yīng)于一個定向激勵,功能點的數(shù)量等于激勵的數(shù)量。理想情況下,提取出來的功能點可以覆蓋驗證對象的全部狀態(tài)空間。實際情況,若驗證對象的接口多,內(nèi)部邏輯復(fù)雜,業(yè)務(wù)場景繁多,此時的狀態(tài)空間趨于無限,提取的功能點往往會有遺漏和缺失的情況,難以保證激勵的完備性。同時,一個功能點就要構(gòu)造一個激勵,若功能點數(shù)目太多,構(gòu)造激勵的時間成本會同步上升。因此,定向功能適用于業(yè)務(wù)場景清晰且數(shù)量不多的系統(tǒng)驗證及簡單模塊驗證,對于子系統(tǒng)或者復(fù)雜模塊的驗證,采用定向激勵存在完備性風(fēng)險。
隨機激勵,指的是合法約束下,盡量隨機的激勵。單次仿真時,激勵的包含的各個接口的取值是隨機的,通過增加仿真的數(shù)量,提高各個接口驅(qū)動值的多樣性,從而提高完備性。由于激勵是隨機的,無法確定覆蓋了哪些狀態(tài),所以隨機激勵需要和覆蓋率配合使用,覆蓋率體現(xiàn)了激勵的覆蓋狀態(tài)。使用隨機激勵驗證時,驗證的目標(biāo)是收齊覆蓋率,將覆蓋率的分?jǐn)?shù)提升一百。但是由于覆蓋率也是根據(jù)提取的功能點編寫,所以,若功能點缺失,覆蓋率也是不完備的,即使覆蓋率分?jǐn)?shù)達(dá)到一百分,仍然存在完備性風(fēng)險。
與定向激勵進(jìn)行對比,兩者相同點是都以驗證功能點作為輸入。定向激勵以驗證功能點作為輸入進(jìn)行激勵的構(gòu)造;隨機激勵以之作為覆蓋率的編寫。但兩者最大的不同是,對于狀態(tài)空間“無限”的驗證對象,隨機激勵更能保證激勵的完備性。在實際情形下,驗證對象狀態(tài)越復(fù)雜,驗證功能點的提取也會越不完備。在功能點缺失的情況下,定向激勵一定隨之缺失;而隨機激勵在覆蓋率分?jǐn)?shù)提升至一百的過程種,由于其隨機性,會有一定概率隨機出來功能點之外的狀態(tài),這些狀態(tài)往往是一些極限場景,難以通過正向分析輸出功能點,從而提升了完備性。因此,隨機激勵適用于復(fù)雜模塊驗證。
上一章節(jié)主要介紹了常見的驗證激勵生成方案。在進(jìn)行深度學(xué)習(xí)處理器的精度方案驗證時,輸入激勵為網(wǎng)絡(luò)。根據(jù)現(xiàn)有的激勵方案選擇網(wǎng)絡(luò)均有局限性。若選取遍歷激勵,則是遍歷所有的網(wǎng)絡(luò),狀態(tài)空間無限,不可行。若選取定向激勵,則是各個應(yīng)用領(lǐng)域的典型網(wǎng)絡(luò),隨著深度學(xué)習(xí)算法近年來的高速發(fā)展,網(wǎng)絡(luò)結(jié)構(gòu)一直在更新迭代,僅僅保證處理器在執(zhí)行現(xiàn)有典型網(wǎng)絡(luò)時無精度問題,難以保證激勵的完備性以及處理器精度方案的魯棒性。若選取隨機激勵,則對應(yīng)隨機網(wǎng)絡(luò),但是隨機網(wǎng)絡(luò)的生成以及驗證效率問題均是難點所在。
因此,針對精度方案驗證的激勵生成,結(jié)合定向激勵和隨機激勵兩種方式,在現(xiàn)有典型網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)之上,對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行“擾動”,以此豐富網(wǎng)絡(luò)結(jié)構(gòu),拓寬網(wǎng)絡(luò)激勵集合的邊界。
在進(jìn)行精度方案驗證時,需要對各個應(yīng)用領(lǐng)域的典型網(wǎng)絡(luò)進(jìn)行擾動。各個領(lǐng)域的典型網(wǎng)絡(luò)互不相同。在圖像分類領(lǐng)域,有GoogleNet系列、MobileNet系列、AlexNet等;在目標(biāo)檢測領(lǐng)域,有R-CNN、FAST R-CNN、YOLO系列;在機器翻譯領(lǐng)域,有RNN Encoder-Decoder、GNMT、transformer等。典型網(wǎng)絡(luò)一般是由網(wǎng)絡(luò)層組成。比如卷積神經(jīng)網(wǎng)絡(luò)由輸入層、卷積層、池化層、激活層、全連接層組成。網(wǎng)絡(luò)結(jié)構(gòu)的擾動也從典型結(jié)構(gòu)的基礎(chǔ)結(jié)構(gòu)出發(fā),主要進(jìn)行兩方面的擾動。一個是網(wǎng)絡(luò)層數(shù)的擾動,另一個是單個網(wǎng)絡(luò)層結(jié)構(gòu)的擾動。
對網(wǎng)絡(luò)層數(shù)進(jìn)行擾動時,可從單次擾動的方式、擾動的單位、擾動的數(shù)量進(jìn)行考慮。
網(wǎng)絡(luò)層數(shù)的單次擾動方式主要包含兩種,一種是增加網(wǎng)絡(luò)層數(shù),另一種是減少網(wǎng)絡(luò)的層數(shù)。若是減少網(wǎng)絡(luò)層數(shù),則可減少網(wǎng)絡(luò)中非必要層,比如卷積神經(jīng)網(wǎng)絡(luò)的卷積層、池化層。若是增加網(wǎng)絡(luò)層數(shù),則可增加兩類網(wǎng)絡(luò)層,一類是網(wǎng)絡(luò)中原本存在的層,比如卷積神經(jīng)網(wǎng)絡(luò)中的卷積層,另一類是網(wǎng)絡(luò)中原本不存在的層,比如其它不同類網(wǎng)絡(luò)中存在的層。
擾動的單位可以是單層,也可以是多個網(wǎng)絡(luò)層的組合。比如對于普通的卷積網(wǎng)絡(luò),除去相鄰的網(wǎng)絡(luò)層,相間的網(wǎng)絡(luò)層沒有關(guān)系,此重情況可擾動單個層。比如對于殘差網(wǎng)絡(luò),是以塊(block)為單位,單個塊內(nèi)包含多個網(wǎng)絡(luò)層,擾動的單位則可以是塊,而非單層。擾動時也可將“單層”和“多層”進(jìn)行結(jié)合。對塊內(nèi)的結(jié)構(gòu)進(jìn)行擾動之后,再對塊本身進(jìn)行擾動。
擾動的數(shù)量可以任意,上下限閾值可根據(jù)原本網(wǎng)絡(luò)自身的特征進(jìn)行設(shè)定,一般范圍可保持在原本網(wǎng)絡(luò)層數(shù)的百分至十至百分至三十。
單層結(jié)構(gòu)的擾動指的是某一具體的網(wǎng)絡(luò)層的結(jié)構(gòu)進(jìn)行擾動。以卷積神經(jīng)網(wǎng)絡(luò)的各個層舉例。對于卷積層,可改變卷積核的大小、卷積核滑窗步長等;對于池化層,可改變池化類型,例如將平均池化改成最大池化、最小池化等,同樣可改變池化核的大小,滑窗步長等;對于激活層,可通過改變激活類型。
網(wǎng)絡(luò)能否實際應(yīng)用的前提是網(wǎng)絡(luò)能被訓(xùn)練至收斂,我們把這些無法訓(xùn)練收斂的網(wǎng)絡(luò)劃分為無效網(wǎng)絡(luò)。對典型網(wǎng)絡(luò)進(jìn)行擾動之后,可能存在部分無效網(wǎng)絡(luò),需要進(jìn)行篩選。篩選過程如下:
(1)輸入初始激勵集合,集合為各個應(yīng)用領(lǐng)域典型網(wǎng)絡(luò)的組合;
(2)從初始激勵集合中,逐一選擇典型網(wǎng)絡(luò),按照上節(jié)介紹方法對網(wǎng)絡(luò)進(jìn)行不同的擾動處理,得到擾動網(wǎng)絡(luò)集合;
(3)從擾動網(wǎng)絡(luò)集合中逐一選擇網(wǎng)絡(luò)進(jìn)行訓(xùn)練,訓(xùn)練至網(wǎng)絡(luò)收斂。若無法收斂,則將此網(wǎng)絡(luò)從擾動網(wǎng)絡(luò)集合中刪除,否則保留。
篩選完畢之后,保留下的擾動網(wǎng)絡(luò)激勵則為生成的擾動網(wǎng)絡(luò)集合。
總結(jié):本文針對深度學(xué)習(xí)處理器的精度方案的驗證激勵的完備性難以保證的問題,提出一種精度方案激勵生成方法。該方法在定向激勵的基礎(chǔ)之上,注入隨機因素。具體為,基于各種深度學(xué)習(xí)應(yīng)用的典型網(wǎng)絡(luò)的結(jié)構(gòu),進(jìn)行網(wǎng)絡(luò)結(jié)構(gòu)的擾動。主要從網(wǎng)絡(luò)層數(shù)的擾動和單層網(wǎng)絡(luò)的擾動兩方面進(jìn)行介紹,并介紹了有效的擾動網(wǎng)絡(luò)的篩選方法,達(dá)到了完善精度方案激勵的目的,提升了驗證質(zhì)量,保證了驗證的完備性。