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