R-Car DNN模擬器的介紹 (2)
摘要
在瑞薩提供的R-Car SoC相關(guān)的一些DNN模擬器中,本文將重點(diǎn)介紹能夠實(shí)現與實(shí)際硬件等價(jià)運算的Accurate Simulator,并說(shuō)明如何應用它來(lái)分析和提高神經(jīng)網(wǎng)絡(luò )的精度。
——太田 寛史 Principal Software Engineer
背景
R-Car SoC是我們提出的一種高性能、低功耗的SoC。為了在R-Car SoC上運行客戶(hù)用主流深度學(xué)習框架(如PyTorch、TensorFlow等)訓練的模型,需要采用剪枝(*1)和量化(*2)等非等效的近似方法進(jìn)行模型壓縮。我們提供的R-Car CNN工具,不僅可以在R-Car SoC上執行上述近似程序,運行客戶(hù)訓練好的深度學(xué)習模型,還可以根據客戶(hù)的應用場(chǎng)景提供不同精度和速度的模擬器。這樣即使您沒(méi)有R-Car SoC硬件,也可以驗證操作和進(jìn)行性能預估。(*3)
在各類(lèi)模擬器中,Accurate Simulator能獲得與實(shí)際R-Car SoC最為一致的輸出結果。本文提出使用Accurate Simulator對模型進(jìn)行調試分析和精度改進(jìn)的方法。通過(guò)逐步追蹤在實(shí)際的R-Car SoC中無(wú)法確認的模型的中間輸出,我們將介紹確定意外結果產(chǎn)生原因并提高準確性的方法。
使用場(chǎng)景
為了將客戶(hù)訓練好的深度學(xué)習模型轉換成可以在R-Car SoC上執行的格式,需要進(jìn)行非等價(jià)的近似模型壓縮,如剪枝和量化。量化是一種將為浮點(diǎn)運算的模型近似為整數運算模型的方法。在這個(gè)過(guò)程中,每層輸出張量的最大值和最小值由多個(gè)輸入圖像估計,每層權重參數的最大值和最小值,以及量化參數(scaleとzero point)將被確定(校準)。當在實(shí)際的R-Car SoC或模擬器(*4)上驗證這個(gè)量化模型時(shí),與原始訓練模型的結果相比,不同的輸入圖像數據可能會(huì )導致意想不到的結果。在這種情況下,使用Accurate Simulator來(lái)分析模型是非常有用的,它可以直接觀(guān)察模型中的中間輸出,而這些輸出在實(shí)際的R-Car SoC上無(wú)法獲取。
使用Accurate Simulator 進(jìn)行模型分析的流程
在上述案例中,校準時(shí)輸入圖像數據的質(zhì)量或數量不足,可能導致(a)校準不理想或(b)中間輸出波動(dòng)較大的層所導致的量化失敗。在這種情況下,首先確定原因是(a)還是(b),然后采?。╝)增加或更新輸入圖像數據并再次進(jìn)行校準,或(b)確定發(fā)生問(wèn)題的層并增加該層的位寬以提高量化模型的準確性等有效方法。
Accurate Simulator是一個(gè)模擬器,旨在確保輸出結果與實(shí)際的R-Car SoC機器完全匹配。與R-Car SoC不同,Accurate Simulator允許用戶(hù)提取模型中每一層的中間輸出。具體來(lái)說(shuō),用戶(hù)可以用Accurate Simulator從輸入圖像數據的層側開(kāi)始逐一提取各層的中間輸出,并與原始訓練模型的中間輸出相比較以確認誤差。
演示示例
當使用我們的R-Car SoC時(shí),客戶(hù)使用我們的R-Car CNN工具將訓練好的模型轉換為R-Car SoC的執行格式并執行。以下假設在原始訓練模型(例如TensorFlow)和R-Car SoC的輸出結果在運行時(shí)不匹配的情況下找出原因并解決的方法。我們將說(shuō)明如何使用Accurate Simulator直接比較原始TensorFlow模型和R-Car可執行格式模型的中間輸出來(lái)估計量化誤差。
1 將客戶(hù)訓練好的TensorFlow模型轉換為ONNX,并使用我們的R-Car CNN工具將其轉換為Accurate Simulator可執行的格式,同時(shí)提供量化條件和足夠數量的圖像數據用于校準。
2 運行客戶(hù)的TensorFlow模型,提取要比較的層的中間輸出。
3 使用R-Car SDK runtime,運行①中生成的Accurate Simulator的執行格式模型。需要比較的層的中間輸出可以在這個(gè)步驟被提取出來(lái)。
4 比較在②和③中得到的中間輸出的組成部分。Accurate Simulator的輸出結果是在模型量化的前提下以整數表示的,我們也準備了反量化的工具。圖中的圖表顯示了由TensorFlow和Accurate Simulator生成的中間輸出張量成分的直接比較。在這個(gè)例子中,比較結果幾乎是相同的,這一層沒(méi)有任何問(wèn)題。
5 重復步驟①到④,以確定近似被破壞的那一層。通過(guò)增加相關(guān)層的量化參數的顯示位寬(如從8位到16位)可以提高量化模型的輸出結果精度。
圖1:TensorFlow和Accurate Simulator之間的中間輸出比較流程
總結
本文介紹了一種方法,當客戶(hù)訓練的模型在我們的R-Car SoC上運行,其輸出結果不盡如人意的時(shí)候,可以使用Accurate Simulator找出原因并提高模型的精度。Accurate Simulator的設計是為了獲得與實(shí)際R-Car SoC相當的計算結果,可用于調查無(wú)法使用實(shí)際設備檢查的模型的中間輸出。我們希望客戶(hù)能利用這一點(diǎn)進(jìn)行模型的調試評估,提高模型的精度。今后,瑞薩將繼續致力于R-Car CNN工具的開(kāi)發(fā),供客戶(hù)用于模型評估和驗證。
備注
(*1)對識別結果貢獻小的權重被設置為零,這些權重的計算被跳過(guò),從而減少計算量和內存的使用。
(*2)推理過(guò)程中浮點(diǎn)計算通常被轉換為近似(如8bit)的整數運算。這里的量化被稱(chēng)為PTQ(post training quantization),它通過(guò)使用多個(gè)輸入圖像進(jìn)行校準來(lái)優(yōu)化量化參數(scale & zero point)。
(*3)點(diǎn)擊查看往期文章:R-Car DNN模擬器的介紹
(*4)除了Accurate Simulator外,瑞薩還提供指令集模擬器(ISS),其目的是實(shí)現與實(shí)際硬件相當的計算精度。不僅如此,ISS還模擬實(shí)際硬件的計算過(guò)程本身,使用戶(hù)能夠在非常接近實(shí)際硬件的環(huán)境下測試模型。
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。