邊緣AI推理速度提高5倍,內(nèi)存只需要一半
我第一次聽說亞閾值數(shù)字設(shè)計(jì)技術(shù)是在許多個(gè)月前,但只是在相對簡單的產(chǎn)品實(shí)現(xiàn)(例如手表)的背景下。當(dāng)我發(fā)現(xiàn) Ambiq 的人們正在利用這項(xiàng)技術(shù)來設(shè)計(jì)整個(gè)超低功耗處理器時(shí),我感到震驚。
簡而言之,在傳統(tǒng)的 CMOS 設(shè)計(jì)中,晶體管使用遠(yuǎn)高于 Vth(晶體管剛剛開始傳導(dǎo)電流的閾值電壓)的電源電壓在完全關(guān)斷和完全開啟狀態(tài)之間切換,對于現(xiàn)代 MCU,通常為 0.8V 至 1.0V。相比之下,Ambiq 的 SPOT 電路在亞閾值區(qū)域(通常約為 0.3-0.5 V)工作,該區(qū)域的電流呈指數(shù)級小。這將有功和漏電功耗降低一個(gè)數(shù)量級或更多,同時(shí)通過仔細(xì)的晶體管級設(shè)計(jì)和自適應(yīng)偏置保持功能數(shù)字邏輯。
在后面的專欄中,SPOT 平臺(tái)給 Ambiq 的 Apollo510 MCU 帶來了不公平的低功耗優(yōu)勢,我們介紹了 Apollo510 微控制器。這是 Apollo5 系列的第一個(gè)成員,它配備了支持 Helium(M-Profile Vector Extension,MVE)的 Arm Cortex-M55 內(nèi)核。這個(gè)小美女提供了無與倫比的能源效率,每焦耳的推理吞吐量提高了 300 倍,并且專為處理先進(jìn)的人工智能應(yīng)用而構(gòu)建,包括語音、視覺、健康和工業(yè)人工智能模型。最近,Ambiq 推出了 Apollo510B,它還擁有專用的藍(lán)牙低功耗 (BLE) 5.4 無線電,可實(shí)現(xiàn)輕松的無線連接。
我們?nèi)栽谠O(shè)置場景。Ambiq 芯片的重點(diǎn)是嵌入式空間和邊緣的人工智能,“互聯(lián)網(wǎng)橡膠”與“現(xiàn)實(shí)世界道路”相遇。遺憾的是,創(chuàng)建大多數(shù)人工智能模型的數(shù)據(jù)科學(xué)家通常來自筆記本電腦世界,如果不是服務(wù)器世界的話。他們習(xí)慣于用 Python 而不是 C 語言運(yùn)行東西。他們喜歡有一個(gè)文件系統(tǒng),這在嵌入式空間(沒有人能聽到你的尖叫聲)中是無法保證的。他們也習(xí)慣于擁有大量的計(jì)算、內(nèi)存和能力,所以當(dāng)他們發(fā)現(xiàn)自己處于“沒有樂趣的區(qū)域”時(shí),你只能想象他們的反應(yīng)。

嵌入式環(huán)境讓人工智能變得更加困難(來源:Ambiq)
讓他們的生活更輕松的一件事是 Ambiq 的開源 AI SDK/開發(fā)工具包 neuralSPOT。這旨在簡化 AI(推理)模型在 Ambiq 的超低功耗 Apollo 系列 SoC 上的開發(fā)和部署。neuroSPOT 與作系統(tǒng)無關(guān)(它可以在不依賴特定作系統(tǒng)的情況下工作),旨在用于邊緣設(shè)備上的實(shí)時(shí) AI。
讓我們從數(shù)據(jù)科學(xué)家的角度來看待這個(gè)問題(祝福他們的小棉襪)。借助 neuralSPOT,他們?nèi)匀豢梢栽诠P記本電腦上“做自己的事情”。訣竅在于,他們還可以通過 USB 將 Ambiq 的評估板之一插入筆記本電腦。現(xiàn)在,他們可以部署該模型,像在筆記本電腦上一樣對其進(jìn)行測試,對其進(jìn)行分析,并確保性能、內(nèi)存利用率和其他一切都符合要求。
說到部署,我們還有 neuralSPOT AutoDeploy。這是 neuralSPOT SDK 中的一個(gè)實(shí)用程序,可自動(dòng)執(zhí)行將 TensorFlow Lite (TFLite) 模型轉(zhuǎn)換為 Ambiq 設(shè)備的可部署、分析和優(yōu)化的二進(jìn)制文件所涉及的步驟。它旨在減少手工制作的步驟,確保一致性,并加快迭代速度。
然而,以上都不是我打算討論的內(nèi)容。我剛剛與 Ambiq 的 AI 副總裁 Carlos Morales 聊天,他很友善地向我介紹了最新、最偉大的事情,這些事件將塑造下一波邊緣 AI 浪潮。這里的熱門新聞是 Ambiq 最近推出了兩種新的邊緣 AI 運(yùn)行時(shí)流程:HeliaRT 和 HeliaAOT。

替代運(yùn)行時(shí)流(來源:Ambiq)
“但什么是邊緣 AI 運(yùn)行時(shí)?”我聽到你哭了。我很高興你問。它是在終端設(shè)備上執(zhí)行模型的代碼(在邊緣 AI 的情況下,“執(zhí)行模型”意味著“執(zhí)行推理”)。
讓我們從傳統(tǒng)流程開始。在“頂部”(嗯,在上圖的頂部),我們有一個(gè)行業(yè)標(biāo)準(zhǔn) TensorFlow Lite (TFLite) 格式的 AI 模型。在“底部”,我們有將執(zhí)行模型的處理器——在本例中是帶有 Helium 擴(kuò)展的 Ambiq 處理器。
從概念上講,在處理器的正上方,我們有一個(gè)內(nèi)核庫。這讓我們回到了“什么時(shí)候內(nèi)核不是內(nèi)核?在嵌入式世界中,術(shù)語“內(nèi)核”通常是指作系統(tǒng) (OS) 的核心部分,即管理任務(wù)和線程、處理中斷和計(jì)時(shí)以及協(xié)調(diào)內(nèi)存等資源的部分。然而,在 AI/ML/DSP 圈子中,同一個(gè)詞指的是數(shù)學(xué)例程(例如,卷積、乘法-累加)。
出于這些討論的目的,我們可以將內(nèi)核視為一個(gè)低級數(shù)學(xué)函數(shù),它執(zhí)行 AI/ML 模型內(nèi)部使用的基本數(shù)值運(yùn)算——通常是在張量(多維數(shù)字?jǐn)?shù)組)上。
在傳統(tǒng)的 Arm 空間中,基本內(nèi)核庫被稱為 cmsis-nn(其中“nn”代表“神經(jīng)網(wǎng)絡(luò)”)。在上圖中將其注釋為“vanilla”的原因是創(chuàng)建和維護(hù)此內(nèi)核庫的人員需要容納每個(gè)人,這意味著他們最終在很大程度上會(huì)進(jìn)行通用優(yōu)化。
現(xiàn)在觀察標(biāo)有“TenserFlow Lite for Microcontrollers (TLFM)”的塊。這是一個(gè)解釋器形式的邊緣 AI 運(yùn)行時(shí),大小約為 30KB。我們所說的“解釋器”是指直接逐行或逐條指令讀取和執(zhí)行代碼的程序,而不是先將其編譯成二進(jìn)制文件。正是這個(gè)運(yùn)行時(shí)決定了從 cmsis-nn 庫中使用哪些內(nèi)核。
就 HeliaRT 而言,Ambiq 的人們基本上分叉了開源 TFLM,然后對其進(jìn)行了優(yōu)化。同時(shí),他們分叉了 cmsis-nn 內(nèi)核庫以形成自己的 ns-cmsis-nn 等效庫(“ns”代表“neuralSPOT”),并對其進(jìn)行了優(yōu)化。請記住,TFLM 和 cmsis-nn 的創(chuàng)建者和維護(hù)者希望讓每個(gè)人都開心。相比之下,Ambiq 的人并不關(guān)心讓任何人開心......當(dāng)然,除了他們自己的客戶。
這對用戶來說意味著,至少對 Ambiq 的客戶來說,他們可以更換他們已經(jīng)在使用的 TFLM,插入 HeliaRT,一切都會(huì)自動(dòng)運(yùn)行得更快?!翱於嗌伲课衣牭侥惆г沟乜奁?。“快五倍甚至更多!”我興高采烈地回答。
考慮下圖。每個(gè)比較都經(jīng)過歸一化,以顯示 TFLM 為 100%。即使在每個(gè)人都針對其進(jìn)行優(yōu)化的行業(yè)標(biāo)準(zhǔn)基準(zhǔn)測試(VWW、KWS 和 IC)的情況下,HeliaRT 的速度也提高了 ~2% 到 5%,而在實(shí)際模型的情況下,這種改進(jìn)增加到 500% 或更多。

HeliaRT 提高性能(來源:Ambiq)
但是等等,還有更多,因?yàn)?Ambiq 的小伙子們還推出了 HeliaAOT,其中“AOT”代表“提前”。它接受與其他流相同的 TFLite 模型,但將其轉(zhuǎn)換為 C。用戶喜歡這一點(diǎn),因?yàn)檫@意味著他們可以將此 C 代碼與其他 C 代碼合并,并且它看起來就像任何其他 C 函數(shù)一樣,而不是需要解釋器的“黑匣子”。

按模型和內(nèi)部版本劃分的總內(nèi)存使用量(來源:Ambiq)
此 HeliaAOT 流提供與 HeliaRT 流相同或更好的性能,但內(nèi)存占用要小得多。
當(dāng)我們在這里時(shí),忽視“粒度”的概念將是我們的失職。事實(shí)上,這有兩個(gè)方面——內(nèi)存粒度和執(zhí)行粒度。讓我們從記憶開始。在嵌入式解釋運(yùn)行時(shí)的情況下,內(nèi)存最終被視為兩個(gè)“大斑點(diǎn)”(我希望我不要太技術(shù)化)。也就是說,所有權(quán)重都將存儲(chǔ)在一種類型的內(nèi)存(無論是 MRAM、TCM、SRAM 還是 PSRAM)上。同樣,所有模型 RAM 都將存儲(chǔ)在 TCM、SRAM 或 PSRAM 中。相比之下,對于 HeliaAOT,您可以靈活地將與不同層關(guān)聯(lián)的權(quán)重和模型內(nèi)存放在最合適的內(nèi)存類型中。

粒度很好(來源:Ambiq)
現(xiàn)在,讓我們考慮可執(zhí)行粒度的概念。通常,嵌入式和/或邊緣設(shè)備一次不會(huì)只運(yùn)行一個(gè)模型,它們中的大多數(shù)同時(shí)運(yùn)行多個(gè)模型。好吧,我說“同時(shí)”與“空中引號(hào)”是因?yàn)榻忉屵\(yùn)行時(shí)要求您在切換到下一個(gè)模型之前運(yùn)行每個(gè)模型。如果每個(gè)模型消耗相同的時(shí)間(例如 1 毫秒),這可能還不錯(cuò),但例如,如果一個(gè)模型消耗 50 毫秒,而其他模型都需要 1 毫秒到 5 毫秒,則效果不佳。
就 HeliaAOT 而言,每個(gè)模型只是一堆 C 調(diào)用(好吧,與這些 C 調(diào)用關(guān)聯(lián)的機(jī)器代碼),這意味著您(或您的作系統(tǒng),如果您的設(shè)備上存在作系統(tǒng))可以根據(jù)需要在模型之間來回切換。
還有很多話要說——恐怕我們只觸及了這個(gè)話題的表面——但我不想過時(shí),所以我認(rèn)為現(xiàn)在是停下來思考我們迄今為止所學(xué)到的東西的好時(shí)機(jī)。與往常一樣,我很想聽聽您對這一切的看法。










評論