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