南京航空航天大學 范仁艷
中國科學院計算技術研究所 支 天
深度學習處理器以其卓越的性能功耗比,在目標檢測,圖像識別、機器翻譯中等諸多深度學習應用領域中取得了顯著的成功。處理器驗證是處理器開發過程中一個必不可少的關鍵環節,驗證的目的是發現設計的所有方案缺陷和代碼缺陷。由于深度學習處理器高性能、低功耗的架構特點,由此帶來新的驗證挑戰——精度驗證。精度驗證用以確保處理器的精度方案以及精度實現沒有問題。在進行精度方案驗證時,需要考慮驗證激勵的豐富性和完備性,這是驗證難點之一。本文就以上難點,提出一種精度方案驗證激勵生成方法,提升了驗證激勵的完備性,提高了驗證質量。
深度學習處理器是一類專用于搭載深度學習應用的處理器,相比于通用處理器CPU以及GPU,具有運算快、功耗低的優勢。深度學習處理器研究的熱潮起源于中科院陳云霽團隊研發的DaDianNao架構,至今國內外已有多款深度學習處理器上市。
處理器驗證在處理器開發過程中起著關鍵的作用,其目的是保證處理器在進入后端流程之前的開發過程中沒有方案設計缺陷和代碼設計缺陷。最常見的有功能驗證、性能驗證、功耗驗證等等。深度學習處理器的處理應用涉及大量的浮定點運算,由此會帶來精度問題。為了盡量避免運算過程中的精度損失,深度學習處理器架構包含很多高精度設計方案,例如融合運算器、加法樹等。精度方案是否全面與完備會直接影響處理器的運算結果的精度,因此有必要進行精度方案的驗證。
圖1所示是功能驗證的基礎框架結構。激勵、參考模型、檢查機制是進行功能驗證的三要素,DUV(Design Under Verification)是驗證對象。激勵是輸入數據,灌輸給參考模型和待測處理器;參考模型是比較基準,接受輸入之后,進行同樣的運算,用于與待測處理器結果比較;檢查機制是比較規則,接受參考模型和待測處理器的輸出,按照此規則進行比較,輸出判斷結果。

圖1 功能驗證基礎框架
同功能驗證一樣,精度方案驗證同樣需要以上三要素。在進行精度方案驗證時,激勵是深度學習處理器的上層應用對象——網絡;參考模型是通用處理器;檢查機制使用網絡運算標準,例如分類網絡的Top-1、Top-5等。激勵的豐富性和完備性直接決定了驗證的完備性,是驗證的主要挑戰。本文為解決精度方案驗證激勵的完備性這一難題,提出一種激勵生成方法,該方法在常用網絡的基礎之上,對網絡結構進行“擾動”調整,適當改變網絡結構,豐富網絡類型。
激勵的選擇和構造是驗證過程中的主要工作。激勵的質量直接決定了驗證的質量。激勵的構造需要滿足兩個基礎條件,一個是合法性,一個是完備性。把需要驗證的對象的狀態空間當作一個全集,每一種狀態對應于一個激勵。這個集合的邊界定義了合法性,把集合之內的激勵視為合法激勵,否則為非法激勵。激勵的完備性指的是實際激勵覆蓋到的狀態構成的集合是否等價于驗證對象的狀態空間。激勵生成的目標是在滿足激勵合法性的前提下,盡可能的提高激勵的完備性。
目前常見的驗證激勵生成方案主要有幾下幾種:遍歷激勵、定向激勵和隨機激勵。
遍歷激勵,顧名思義,是一種遍歷驗證對象的所有接口的激勵生成方法。該方法可以百分百保證激勵的完備性,但效率會隨著驗證對象的接口的復雜度而顯著下降。例如驗證一個浮點16的加法器,狀態空間的大小約是2^32,采用窮舉遍歷的方式,驗證的仿真時間約為1周;若替換成一個浮點32的加法器,狀態空間陡增至2^64,遍歷激勵的時間成本完全無法接受,從而失去可行性。因此,遍歷激勵只適用于驗證邏輯簡單,接口簡單的設計單元。
定向激勵,是針對驗證對象某一特定功能或者業務場景構造出來的激勵。構造定向激勵之前,需要先根據驗證對象的功能文檔和設計文檔提取驗證的功能點。一個功能點對應于一個定向激勵,功能點的數量等于激勵的數量。理想情況下,提取出來的功能點可以覆蓋驗證對象的全部狀態空間。實際情況,若驗證對象的接口多,內部邏輯復雜,業務場景繁多,此時的狀態空間趨于無限,提取的功能點往往會有遺漏和缺失的情況,難以保證激勵的完備性。同時,一個功能點就要構造一個激勵,若功能點數目太多,構造激勵的時間成本會同步上升。因此,定向功能適用于業務場景清晰且數量不多的系統驗證及簡單模塊驗證,對于子系統或者復雜模塊的驗證,采用定向激勵存在完備性風險。
隨機激勵,指的是合法約束下,盡量隨機的激勵。單次仿真時,激勵的包含的各個接口的取值是隨機的,通過增加仿真的數量,提高各個接口驅動值的多樣性,從而提高完備性。由于激勵是隨機的,無法確定覆蓋了哪些狀態,所以隨機激勵需要和覆蓋率配合使用,覆蓋率體現了激勵的覆蓋狀態。使用隨機激勵驗證時,驗證的目標是收齊覆蓋率,將覆蓋率的分數提升一百。但是由于覆蓋率也是根據提取的功能點編寫,所以,若功能點缺失,覆蓋率也是不完備的,即使覆蓋率分數達到一百分,仍然存在完備性風險。
與定向激勵進行對比,兩者相同點是都以驗證功能點作為輸入。定向激勵以驗證功能點作為輸入進行激勵的構造;隨機激勵以之作為覆蓋率的編寫。但兩者最大的不同是,對于狀態空間“無限”的驗證對象,隨機激勵更能保證激勵的完備性。在實際情形下,驗證對象狀態越復雜,驗證功能點的提取也會越不完備。在功能點缺失的情況下,定向激勵一定隨之缺失;而隨機激勵在覆蓋率分數提升至一百的過程種,由于其隨機性,會有一定概率隨機出來功能點之外的狀態,這些狀態往往是一些極限場景,難以通過正向分析輸出功能點,從而提升了完備性。因此,隨機激勵適用于復雜模塊驗證。
上一章節主要介紹了常見的驗證激勵生成方案。在進行深度學習處理器的精度方案驗證時,輸入激勵為網絡。根據現有的激勵方案選擇網絡均有局限性。若選取遍歷激勵,則是遍歷所有的網絡,狀態空間無限,不可行。若選取定向激勵,則是各個應用領域的典型網絡,隨著深度學習算法近年來的高速發展,網絡結構一直在更新迭代,僅僅保證處理器在執行現有典型網絡時無精度問題,難以保證激勵的完備性以及處理器精度方案的魯棒性。若選取隨機激勵,則對應隨機網絡,但是隨機網絡的生成以及驗證效率問題均是難點所在。
因此,針對精度方案驗證的激勵生成,結合定向激勵和隨機激勵兩種方式,在現有典型網絡結構的基礎之上,對網絡結構進行“擾動”,以此豐富網絡結構,拓寬網絡激勵集合的邊界。
在進行精度方案驗證時,需要對各個應用領域的典型網絡進行擾動。各個領域的典型網絡互不相同。在圖像分類領域,有GoogleNet系列、MobileNet系列、AlexNet等;在目標檢測領域,有R-CNN、FAST R-CNN、YOLO系列;在機器翻譯領域,有RNN Encoder-Decoder、GNMT、transformer等。典型網絡一般是由網絡層組成。比如卷積神經網絡由輸入層、卷積層、池化層、激活層、全連接層組成。網絡結構的擾動也從典型結構的基礎結構出發,主要進行兩方面的擾動。一個是網絡層數的擾動,另一個是單個網絡層結構的擾動。
對網絡層數進行擾動時,可從單次擾動的方式、擾動的單位、擾動的數量進行考慮。
網絡層數的單次擾動方式主要包含兩種,一種是增加網絡層數,另一種是減少網絡的層數。若是減少網絡層數,則可減少網絡中非必要層,比如卷積神經網絡的卷積層、池化層。若是增加網絡層數,則可增加兩類網絡層,一類是網絡中原本存在的層,比如卷積神經網絡中的卷積層,另一類是網絡中原本不存在的層,比如其它不同類網絡中存在的層。
擾動的單位可以是單層,也可以是多個網絡層的組合。比如對于普通的卷積網絡,除去相鄰的網絡層,相間的網絡層沒有關系,此重情況可擾動單個層。比如對于殘差網絡,是以塊(block)為單位,單個塊內包含多個網絡層,擾動的單位則可以是塊,而非單層。擾動時也可將“單層”和“多層”進行結合。對塊內的結構進行擾動之后,再對塊本身進行擾動。
擾動的數量可以任意,上下限閾值可根據原本網絡自身的特征進行設定,一般范圍可保持在原本網絡層數的百分至十至百分至三十。
單層結構的擾動指的是某一具體的網絡層的結構進行擾動。以卷積神經網絡的各個層舉例。對于卷積層,可改變卷積核的大小、卷積核滑窗步長等;對于池化層,可改變池化類型,例如將平均池化改成最大池化、最小池化等,同樣可改變池化核的大小,滑窗步長等;對于激活層,可通過改變激活類型。
網絡能否實際應用的前提是網絡能被訓練至收斂,我們把這些無法訓練收斂的網絡劃分為無效網絡。對典型網絡進行擾動之后,可能存在部分無效網絡,需要進行篩選。篩選過程如下:
(1)輸入初始激勵集合,集合為各個應用領域典型網絡的組合;
(2)從初始激勵集合中,逐一選擇典型網絡,按照上節介紹方法對網絡進行不同的擾動處理,得到擾動網絡集合;
(3)從擾動網絡集合中逐一選擇網絡進行訓練,訓練至網絡收斂。若無法收斂,則將此網絡從擾動網絡集合中刪除,否則保留。
篩選完畢之后,保留下的擾動網絡激勵則為生成的擾動網絡集合。
總結:本文針對深度學習處理器的精度方案的驗證激勵的完備性難以保證的問題,提出一種精度方案激勵生成方法。該方法在定向激勵的基礎之上,注入隨機因素。具體為,基于各種深度學習應用的典型網絡的結構,進行網絡結構的擾動。主要從網絡層數的擾動和單層網絡的擾動兩方面進行介紹,并介紹了有效的擾動網絡的篩選方法,達到了完善精度方案激勵的目的,提升了驗證質量,保證了驗證的完備性。