對于任何注定要在批量生產(chǎn)中部署的嵌入式軟件,一旦完成并驗證了其核心功能的實現(xiàn),就會在代碼中投入大量精力。這個優(yōu)化階段是關(guān)于最小化所需的內(nèi)存、CPU
和其他資源,以便盡可能多地保留軟件功能,同時將執(zhí)行它所需的資源減少到絕對最低限度。這種從基于實驗室的算法創(chuàng)建嵌入式軟件的過程使嵌入式開發(fā)人員能夠?qū)④浖δ艹杀竟こ袒癁榇笠?guī)模生產(chǎn)就緒形式,與用于開發(fā)它的大規(guī)模計算數(shù)據(jù)中心相比,需要更便宜、功能更弱的芯片和硬件。
然而,它通常需要從一開始就凍結(jié)功能,修改代碼只是為了改進算法本身的執(zhí)行方式。對于大多數(shù)軟件來說,這很好:實際上,它可以使用嚴(yán)格的驗證方法來確保嵌入過程保留所有所需的功能。
然而,當(dāng)嵌入基于 NN 的 AI
算法時,這可能是一個主要問題。為什么?因為通過從一開始就凍結(jié)功能,您正在刪除可以優(yōu)化執(zhí)行的主要方式之一。
問題是什么?
有兩種根本不同的方法可以解決將復(fù)雜的神經(jīng)網(wǎng)絡(luò)從實驗室中不受約束,資源豐富的神經(jīng)網(wǎng)絡(luò)訓(xùn)練環(huán)境移植到受嚴(yán)格約束的嵌入式硬件平臺的任務(wù):
優(yōu)化執(zhí)行神經(jīng)網(wǎng)絡(luò)的代碼
優(yōu)化神經(jīng)網(wǎng)絡(luò)本身
當(dāng)嵌入式開發(fā)人員發(fā)現(xiàn)內(nèi)存帶寬瓶頸或底層嵌入式硬件平臺利用率低等性能問題時,傳統(tǒng)的嵌入式軟件技術(shù)會鼓勵您深入挖掘底層代碼并找到問題所在。
這反映在當(dāng)今可用于嵌入式 MCU 和 DSP
的許多先進和復(fù)雜的工具中。它們使您能夠深入了解軟件中正在發(fā)生的事情,并識別和改進軟件本身的執(zhí)行——希望不會改變其功能。
對于神經(jīng)網(wǎng)絡(luò),優(yōu)化與傳統(tǒng)的嵌入式軟件完全不同——至少如果你想用可用的硬件資源獲得最好的結(jié)果。使用 NN,通過改變拓?fù)?NN
本身(NN
的各個層如何連接,以及每層的作用)和使用更新的約束和輸入重新訓(xùn)練它的某種組合來實現(xiàn)改進。這是因為功能不是由神經(jīng)網(wǎng)絡(luò)“軟件”定義的,而是由訓(xùn)練期間應(yīng)用的目標(biāo)和約束來創(chuàng)建定義神經(jīng)網(wǎng)絡(luò)最終行為的權(quán)重。
因此,在進行 NN 的嵌入過程時,您需要凍結(jié) NN 的目標(biāo)性能,而不是它是如何實現(xiàn)的。如果您從嵌入式開發(fā)過程的開始就約束
NN 拓?fù)?,那么您正在移除生產(chǎn)工程師提高性能所需的工具。
這意味著您需要新的和不同的工具來完成將 NN 從實驗室移植到嵌入式平臺的任務(wù)。而低級軟件工程師無法完成這項工作——您需要
AI 工程師根據(jù)工具為您提供的性能信息來調(diào)整 NN
及其訓(xùn)練。這是新的:當(dāng)研發(fā)工程師將訓(xùn)練有素的神經(jīng)網(wǎng)絡(luò)交給生產(chǎn)工程師時,他們再也不能說“工作完成了”!
另一種方法:
通過采用將人工智能研發(fā)工程師置于嵌入式軟件移植任務(wù)中心的開發(fā)工作流程,任何芯片都可以取得卓越的成果。使用以層為中心的分析,并在幾分鐘內(nèi)快速完成從編譯修改后的卷積神經(jīng)網(wǎng)絡(luò)
(CNN) 到查看目標(biāo)神經(jīng)處理器單元 (NPU) 的準(zhǔn)確性能結(jié)果,嵌入式開發(fā)人員可以使用相同的底層硬件實現(xiàn) 100% 或更多的收益.這是因為修改 CNN
本身,而不是只修改用于執(zhí)行相同 CNN 的代碼,可以讓 AI 工程師更靈活地識別和實施性能改進。
在開發(fā)我們的 aiWare NPU 時,AImotive 使用了我們自己的 AI 工程師將過程移植到具有廣泛 NPU
功能的多個不同芯片的經(jīng)驗。 我們想找到更好的方法來幫助我們自己的 AI 工程師完成這項任務(wù),因此在開發(fā)我們對 aiWare NPU 本身和支持它的 aiWare
Studio 工具的要求時,我們發(fā)現(xiàn)了一些在我們過去使用過的硬件平臺上沒有看到的理想特性:
高度確定性的 NPU 架構(gòu),讓時序非??深A(yù)測
準(zhǔn)確的基于層(不是基于時序或低級代碼)的性能估計,以便任何 AI
研發(fā)工程師都可以快速地看到更改其訓(xùn)練標(biāo)準(zhǔn)(例如添加或更改使用的場景,或修改目標(biāo) KPI)和 / 或 NN 拓?fù)涞挠绊憽?/span>
準(zhǔn)確的離線性能估算,使所有的 NN 優(yōu)化都可以在第一個硬件可用之前進行(因為第一個原型總是稀缺的!)
最后檢查
當(dāng)然,當(dāng)芯片和硬件原型可用時,測量最終硬件是至關(guān)重要的。這種嵌入式開發(fā)環(huán)境中實時硬件分析功能的可用性使工程師可以訪問由此類工具支持的 NPU
內(nèi)的一系列深度嵌入式硬件寄存器和計數(shù)器。 雖然芯片開銷很小(因為許多 NPU
由內(nèi)存而非邏輯主導(dǎo)),但這些功能可以在執(zhí)行期間實現(xiàn)前所未有的、非侵入性的實時性能測量。
然后,這可用于直接與離線性能估計器結(jié)果進行比較,以確認(rèn)準(zhǔn)確性。