在嵌入式計算機上運行人工智能的挑戰
這是 SunyaOS 創始人 NikhilBhaskaran 在物聯網 2019 年的一次演講。物聯網 2019 年是一種操作系統,它優化了嵌入式系統的人工智能庫,使開發者能夠以非常低的成本非常迅速地快速構建人工智能邊緣解決方案。在未來五年,人工智能將滲透到所有領域;邊緣分析將成為人工智能領域的下一件大事。
目前,人工智能領域的工作更多的是從應用的角度解決工業問題。人們希望盡快將解決方案推向市場。為此,大多數人工智能庫都建在云中。在這種情況下,有一個龐大的堆棧,第一個挑戰是從數據開始。
你需要訓練一個模型,最大的挑戰不是建立一個模型,而是找到數據,并以一種有效的方式安排數據來訓練模型。因此,獲得正確的數據是一個巨大的市場。
第二部分是模型的建立。有很多應用程序不需要創建模型,比如人臉識別和目標檢測。因為這些常見的應用程序已經有現成的模型,所以你只需要為應用程序選擇正確的模型。在此之后,你需要對模型進行進一步的培訓,因為大多數模型通常都是針對不同的數據集而訓練的,這些數據集不能提供良好的輸出。
因為每個庫都擅長某一方面,所以需要為應用程序仔細選擇正確的庫。
有了工作模式,就必須有目的地籌集足夠的資金。一些賺錢的人應該關心的問題是:它應該用于什么?市場在尋找什么?
此外,還有一項重大的競爭,因為每個人工智能領域的人都會直接在云上進行模型培訓和數據工作。然而,人工智能也可以在嵌入式計算機上運行良好。這通常是人們不知道的事情。
所有人工智能都發生在邊緣。
在云中運行模型時,通常使用 googleEnginapi 或 Amazon 的對象識別模型,并為此支付一定的費用。一旦建立了解決方案,您就必須支付大量的費用。
相反,同樣的模型可以在硬件上進行編碼。在嵌入式系統上,你可以不用花很長時間就能獲得云的性能。所有的分析都是在嵌入式設備上進行的,它只向云發送有限的數據。
邊緣分析將是人工智能的下一個重大事件。人工智能庫發送的所有數據將由處理器計算,并給出結果。例如,過去玩游戲時,所有的數學計算都是用 GPU 進行的。現在,芯片上有矢量處理單元,可以快速處理云中的矢量(數據)。
GPU 也擅長浮點運算。
目前尚不清楚,許多人工智能應用程序都可以建立在公司可以優化的芯片上。
如今,用于人工智能的圖書館大約有 800 個,這聽起來可能令人難以置信,但當電腦問世時,人們從未想過它會這么大。漸漸地,它成為了我們生活中的必需品。人工智能將遠遠超過這一點。未來五年,人工智能將滲透到所有領域。許多產品都已內置 -- 人工智能。
目前,有 20 多家公司從事人工智能技術。其中最受歡迎的有騰訊、卡菲、查納、ONNX 和 PyTorch。
嵌入式系統面臨的挑戰
從事人工智能領域工作的人往往面臨著諸如模型大小、選擇合適的模型和框架等挑戰。系統性挑戰是大多數人沒有意識到的。這些挑戰包括:
平臺
在云中,代碼是預先安裝的。但是對于嵌入式系統,您需要獲取源代碼并將其編譯到機器中。
吸引力
找到正確的源代碼也是一個挑戰。人們需要做大量的研究才能找到正確的源代碼、正確的補丁并配置它們。
架構支持
通常使用 ARM。它可以是 ARM 7 或 ARM 8。借助 ARM 8 中的霓虹燈,硬件 FPU( 浮點單元)提供了 5 倍的性能。這是非常有益的,但也具有挑戰性。
交叉編譯不能提供所需的性能。因此,要獲得性能并使庫在硬件上發揮最佳作用,您需要執行本機編譯。這需要很長的時間來編寫代碼,并消耗大量時間。
安裝
編譯后可能會遇到一些錯誤信息。需要注意庫的正確安裝,特別是新機器的安裝。
不僅如此,所有庫通常都有一些依賴關系。每個工具 / 框架 / 庫平均有 4 - 5 個依賴項。
這些軟件包還需要編譯,以便從安裝在嵌入式系統上的 Ai 庫中獲得最佳性能。稱為 Docker 的軟件是運行包的最快方法,但在運行時沒有進行優化,必須謹慎使用。
業內有一種觀點認為,要在邊緣運行人工智能,你需要大量的計算,或者需要更好的計算能力,才能獲得足夠的性能。然而,事實并非如此。當這種解決方案被出售時,你的成本會更高。因此,重點應該放在更好的項目上,這樣才能降低價格。這應該在不影響最新技術進步的情況下實現。
OpenGL 和 OpenCL 庫
在嵌入式系統中,當 CPU 明顯存在時,GPU 和 NPU 是可選的。如果您有一個 GPU,它將有一個 OpenGL 或 OpenCL 庫。OpenGL 是一個圖形庫,它將接收到的圖形計算傳遞給 GPU。OpenCL 是一個計算庫,用于檢查硬件上的計算能力;它收到的任何計算請求都分布在整個系統中。通過添加 OpenCL,您的性能將非常高。它是一個比操作系統更好地處理請求的附加層。
在應用程序方面還有很多工作要做。在云中編寫代碼之后,分析過程在運行時就開始了。在這個過程中,代碼會產生數量未知的威脅,如果系統無法處理這些威脅,可能會導致硬件故障。但在嵌入式系統中,它是定制的。
在這里,邊緣計算在直接在硬件上執行計算操作方面起著重要作用,而不是將數據發送到云端進行計算。
隨著嵌入式人工智能的發展,一些框架只是為此目的而建立的。目前,TVM 在這方面做得最好。