邊緣計算和人工智能如何協(xié)同發(fā)展
當(dāng)我們考慮機(jī)器學(xué)習(xí)時,首先能夠想到的是,通過服務(wù)器集群搭建的大數(shù)據(jù)中心和云平臺,對于很多機(jī)器學(xué)習(xí)的應(yīng)用來講,這是一個存在了很多年的標(biāo)準(zhǔn)搭建方式。但近些年來,隨著硬件能力的不斷提升、物聯(lián)網(wǎng)場景的出現(xiàn)以及成本的下降,大量的應(yīng)用場景從云端轉(zhuǎn)移到了邊緣。在這樣的模式轉(zhuǎn)換中,隨著智能化越來越接近事件發(fā)生地而遠(yuǎn)離云端,節(jié)點(diǎn)設(shè)備會變得更加自主化。這些變化導(dǎo)致了很多有趣的應(yīng)用產(chǎn)生,例如無人機(jī)、ADAS輔助駕駛以及可移動的智能機(jī)器人,而且這僅僅是個開始。
在本文中,我們將在系統(tǒng)設(shè)計層面,綜合闡述如何考慮在邊緣部署人工智能。通常,一個比較典型的思路,可以歸納為對于任務(wù)的理解、算法的選擇,以及對于推理模型的訓(xùn)練和部署。
目標(biāo):問題定義
架構(gòu):選擇正確的工具
應(yīng)用的需求和限制是驅(qū)動帶有人工智能算法的最終產(chǎn)品標(biāo)準(zhǔn)的因素。這些需求和限制,與魯棒性、推理時間、硬件資源以及服務(wù)質(zhì)量相關(guān),這對于考慮邊緣方案的部署以及嵌入式平臺的選型至關(guān)重要。魯棒性代表了模型輸出的精確度,以及防止運(yùn)算結(jié)果過度擬合的能力。一般來講,模型越復(fù)雜(深度和層級),數(shù)據(jù)集越豐富,魯棒性越好。
推理時間的需求完全取決于應(yīng)用場景。對于有些場景,例如自動駕駛,考慮到功能安全因素,需要機(jī)器視覺系統(tǒng)的響應(yīng)時間在毫秒級別,但對于測量值變化緩慢的傳感器融合系統(tǒng)來說,需求就沒有這樣苛刻。推理的速度取決于模型的復(fù)雜度,模型的層級越多,需要的計算就越多,從而導(dǎo)致更長的推理時間。這個問題可以通過選擇算力資源更為豐富的方案來規(guī)避,例如嵌入式GPU、DSP,以及帶有OpenCL內(nèi)核的神經(jīng)網(wǎng)絡(luò)加速器。
模型的內(nèi)存占用是隨著神經(jīng)元數(shù)量以及權(quán)重的增加而增加的,每個權(quán)重都需要作為數(shù)據(jù)存儲在內(nèi)存中。為了減小模型占用的內(nèi)存,以及解決一些硬件細(xì)節(jié)問題,可以將權(quán)重從浮點(diǎn)數(shù)或雙精度數(shù)轉(zhuǎn)換為整數(shù)進(jìn)行存儲。服務(wù)的質(zhì)量以及系統(tǒng)的可靠性取決于模型的部署。在云端為基礎(chǔ)的方案里,連接的需求使得系統(tǒng)的可靠性存在疑問,一旦服務(wù)器無法可靠連接,服務(wù)就無法獲取,決策也就無法正常處理。在這種情況下,邊緣部署就成了唯一可行的方案,例如自動駕駛汽車以及需要隔離的環(huán)境?;跈C(jī)器學(xué)習(xí)的算法,本質(zhì)上是概率系統(tǒng),其輸出具有一定的不確定性,理解這一點(diǎn)很重要,但在許多情況下,AI系統(tǒng)所做出的預(yù)測精準(zhǔn)度和可靠度,早已超過人類的判斷。至于系統(tǒng)設(shè)計是否需要90%乃至99%的概率,是由應(yīng)用需求決定的。
最后,設(shè)計者應(yīng)該根據(jù)解決方案的開發(fā)難度以及可擴(kuò)展性的需要,來考慮采用何種硬件和軟件。舉例來說,在NVIDA Jetson這個AI應(yīng)用嵌入式開發(fā)平臺上運(yùn)行模型,軟件可以無縫運(yùn)行,從而大大降低軟件開發(fā)成本。
數(shù)據(jù) & 訓(xùn)練:獲取正確的結(jié)果
訓(xùn)練模型有很多種方法,簡要來說,分為監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)以及增強(qiáng)學(xué)習(xí)。對于監(jiān)督學(xué)習(xí),首先數(shù)據(jù)集會被標(biāo)注,就圖像分類而言,圖像和標(biāo)簽是成對出現(xiàn)的。圖像通過模型的各層向前傳播,每層增加一點(diǎn)抽象,最終得到分類值;輸出的分類值與標(biāo)簽進(jìn)行比較,得到的誤差反向傳播到模型初始以更新權(quán)重。而對于無監(jiān)督學(xué)習(xí),數(shù)據(jù)集不會被標(biāo)注,模型會開啟自我尋找模式。對于增強(qiáng)學(xué)習(xí),電子游戲是個最好的應(yīng)用用例,增強(qiáng)學(xué)習(xí)的目標(biāo)是在與環(huán)境的交互過程中,通過一系列的后續(xù)行為,對環(huán)境的反饋作出響應(yīng),達(dá)成回報最大化,例如執(zhí)行一系列從一個地方移動到另一個地方的連續(xù)控制決策。
部署和推理:尚未解決的挑戰(zhàn)
大多數(shù)的深度神經(jīng)網(wǎng)絡(luò)會在大型的GPU 上完成訓(xùn)練。當(dāng)模型被用來進(jìn)行推理時,例如通過神經(jīng)網(wǎng)絡(luò)的正向傳播,以獲得對單個樣本的預(yù)測或者分類,可以使用的平臺有很多種。我們可以將用于推理的模型部署在微控制器為Cortex M、Cortex A的設(shè)備上,這些微控制器帶有GPU、神經(jīng)網(wǎng)絡(luò)加速器、FPGA 或者專有ASIC,硬件的選型取決于應(yīng)用的需要,而它們的區(qū)別在于運(yùn)算能力、功耗以及成本。選擇方案時,最棘手的一點(diǎn)在于如何有效且簡易地部署模型。一般來說,模型訓(xùn)練通常會在諸如Tensor Flow或者Caffe這樣的深度學(xué)習(xí)框架下完成,這些訓(xùn)練好的模型必須轉(zhuǎn)變成在邊緣設(shè)備的推理引擎上能夠運(yùn)行的格式。舉例來說,使用開放式神經(jīng)網(wǎng)絡(luò)交換格式(ONNX),或者是在Cortex M 上使用的ARM CMSISNN文件格式。除此之外,模型還需要根據(jù)邊緣設(shè)備的特點(diǎn)進(jìn)行進(jìn)一步的優(yōu)化,可以通過剪枝(刪除接近零的值)、量化(從float32移動到integer)或壓縮來優(yōu)化權(quán)重。
模型在邊緣設(shè)備上的部署和運(yùn)行,最終還是需要通過推理引擎來實現(xiàn),這取決于設(shè)備供應(yīng)商為OpenCV或者OpenCL等框架支撐所提供的目標(biāo)處理器以及組件。令人遺憾的是,這個市場目前碎片化很嚴(yán)重,我們可以看到很多不同版本的SDK 以及工具,并沒有一個統(tǒng)一的標(biāo)準(zhǔn)來指導(dǎo)如何在邊緣節(jié)點(diǎn)上部署和推理。因此,業(yè)界對于類似于ONNX這樣的統(tǒng)一標(biāo)準(zhǔn)更感興趣,期待標(biāo)準(zhǔn)化的進(jìn)一步演進(jìn)。