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

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

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

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

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

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










評論