在物聯網設備和嵌入式系統逐漸普及的今天,TinyML 作為一種新興的機器學習技術,越來越受到研究者和開發者的關注。TinyML 旨在將智能模型部署到資源受限的嵌入式設備中,從而在本地進行推理和計算,減少對云計算資源的依賴。這種本地化的計算方式不僅減少了延遲,還增強了數據隱私保護,使其在智能家居、醫療設備和工業自動化等領域擁有巨大的應用潛力。然而,由于嵌入式設備的計算能力和內存資源極為有限,傳統的機器學習推理引擎往往無法滿足需求,因此開發適用于資源受限環境的高效推理引擎成為了關鍵課題。
日前,由 Matteo Carnelos 等人提出的新型 TinyML 推理引擎——MicroFlow。這款基于 Rust 編程語言的推理引擎在實現內存安全的同時,采用了編譯器優化技術,極大地提升了推理效率。我們將從 MicroFlow 的設計目標、架構特點、與現有解決方案的對比,以及它在實際應用中的表現等方面進行詳細探討。 (https://github.com/matteocarnelos/microflow-rs)
MicroFlow 的設計目標與架構
MicroFlow 的主要設計目標是為資源受限的嵌入式設備提供一種輕量、高效且安全的 TinyML 推理解決方案。為了實現這些目標,MicroFlow 采用了 Rust 作為編程語言,這為推理引擎帶來了內存安全的特性。Rust 通過所有權和借用機制在編譯期確保內存的正確管理,有效避免了如空指針解引用、緩沖區溢出等常見的內存問題,使得 MicroFlow 特別適用于對穩定性和安全性要求較高的關鍵環境。
在架構設計上,MicroFlow 采用了編譯器驅動的推理引擎,而非傳統的解釋器驅動方法。具體來說,MicroFlow 的編譯器在編譯期間解析和優化神經網絡模型,將推理所需的代碼嵌入到固件中。這種方法有別于解釋器需要在運行時動態解析模型,顯著減少了推理過程中的內存開銷和計算負擔。此外,MicroFlow 的推理引擎在運行時僅執行核心推理任務,避免了不必要的動態內存分配,從而提高了整體效率。
Rust 編程語言的優勢
傳統的嵌入式推理引擎通常使用 C 或 C++ 編寫,這些語言雖然能夠提供對硬件資源的低級控制,但缺乏內存安全機制,極易導致內存泄漏、緩沖區溢出等問題。而這些問題在資源受限的嵌入式設備上尤為致命,因為這些設備通常沒有操作系統提供的保護機制。因此,MicroFlow 選擇使用 Rust 編寫,該語言通過嚴格的內存管理機制提供了內存安全性,并且無需像垃圾回收(GC)那樣的額外開銷。
Rust 的所有權機制是其實現內存安全的重要特性。在 Rust 中,每個值都有一個明確的所有者,且在所有者超出作用域時,內存會被自動釋放,這樣就避免了手動管理內存的復雜性。此外,Rust 還通過不可變和可變借用的限制,確保在同一時間要么有多個不可變借用,要么只有一個可變借用,防止了數據競爭和內存損壞的風險。這些特性使得 Rust 成為開發高可靠性嵌入式軟件的理想選擇。
編譯器驅動的推理架構
MicroFlow 的編譯器在主機上運行,并對神經網絡模型進行解析和靜態優化。模型的解析過程涉及使用 FlatBuffers 反序列化工具對 TensorFlow Lite 格式的模型進行解析,并生成相應的內存結構和代碼。這種靜態編譯的方式確保了所有的內存分配在編譯期就已確定,避免了運行時的動態分配,從而提升了推理過程的穩定性和效率。
在推理過程中,MicroFlow 的運行時模塊會加載編譯生成的代碼并執行神經網絡的推理任務。由于模型的所有信息(如操作符、權重等)都已經在編譯期解析并嵌入代碼,MicroFlow 的運行時幾乎沒有額外的內存開銷,這使得它能夠在只有 2kB RAM 的 8 位微控制器上成功運行。此外,MicroFlow 引入了一種基于分頁的方法來管理內存,允許神經網絡的部分內容按需加載到 RAM 中,從而在內存極為有限的設備上實現大型模型的推理。
MicroFlow 與現有方案的對比
當前市場上已經有一些成熟的 TinyML 推理引擎,例如 Google 的 TensorFlow Lite for Microcontrollers(TFLM)、Microsoft 的 Embedded Learning Library(ELL)等。然而,這些引擎大多基于解釋器,并且通常為 32 位架構設計,無法在更為受限的硬件平臺上有效運行。此外,大多數現有方案使用 C 或 C++ 語言開發,缺乏內存安全機制。
與這些方案相比,MicroFlow 具備顯著的優勢。首先,MicroFlow 使用 Rust 編寫,提供內存安全保障,特別適用于對安全性要求高的關鍵環境。其次,MicroFlow 采用編譯器驅動的架構,使得推理代碼在運行時不需要額外的解析步驟,從而減少了內存占用和推理延遲。實驗結果表明,MicroFlow 在中小型神經網絡上的推理速度明顯快于 TFLM,并且在 RAM 和 Flash 的占用上也更加高效。例如,在 ESP32 微控制器上,MicroFlow 的內存占用比 TFLM 減少了 65% 以上。
此外,MicroFlow 采用模塊化的設計,代碼完全開源并可在 GitHub 上獲得。這種開放性不僅促進了嵌入式和物聯網社區的廣泛使用和改進,也為未來的優化和新功能的集成提供了可能。
實驗與應用表現
為了驗證 MicroFlow 的性能,作者進行了多項實驗,使用了三種不同復雜度的模型,包括簡單的正弦預測器、語音命令識別器和人臉檢測器。實驗結果顯示,MicroFlow 的推理速度在小型模型上大約是 TFLM 的十倍,而對于更復雜的模型,如基于 MobileNet 的人臉檢測器,MicroFlow 的推理時間也保持在一個可接受的范圍內,僅比 TFLM 慢 6% 左右。這表明,MicroFlow 在處理大量卷積操作時,性能差距會逐漸縮小。
在內存使用方面,MicroFlow 相比 TFLM 顯著減少了 RAM 和 Flash 的占用。在實驗中,MicroFlow 能夠成功運行在只有 2kB RAM 的 ATmega328 微控制器上,而 TFLM 則由于內存需求過高而無法運行。此外,由于 MicroFlow 的編譯器在編譯期對模型進行預處理,許多常量計算被提前完成,從而減少了運行時的計算負擔。
在能源消耗方面,MicroFlow 的表現也優于 TFLM。由于推理時間的減少,MicroFlow 的平均能耗顯著降低,非常適合需要長時間低功耗運行的嵌入式設備應用,例如環境監測傳感器和可穿戴設備。
結語
MicroFlow 作為一款基于 Rust 的輕量級 TinyML 推理引擎,憑借其內存安全性、高效的編譯器優化和極低的內存占用,為資源受限的嵌入式設備提供了可靠的推理解決方案。它在與現有解決方案的對比中展現出了顯著的性能優勢,特別是在小型模型的推理速度和內存管理方面。未來,MicroFlow 可以進一步擴展其支持的神經網絡操作符類型,并優化卷積操作,以提升在大型模型中的推理性能。此外,隨著 Rust 生態系統的不斷成熟,更多針對嵌入式開發的工具和庫也將進一步促進 MicroFlow 的改進。
歡迎將我們設為“星標”,這樣才能第一時間收到推送消息。
免費領取Autosar入門與實踐資料包!
掃碼添加小助手回復“進群”
和電子工程師們面對面交流經驗
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.