IIoT 邊緣運算 物聯網 Python AI

IIoT邊緣運算需求高漲 Python開源框架強化處理效能

2019-02-19
在工程設計、科學、資料科學、機器學習(ML)、資訊技術及人工智慧(AI)等各類應用中,Python開源程式設計語言已成為非正式標準。當在嵌入式應用中使用現代系統單晶片(SoC)時,能運行Python來執行複雜的分析演算法,其效能接近桌上型電腦工作站,但外形尺寸顯著縮小,且功耗需求也顯著降低。藉由從感測器讀取的資料進行預處理,可使產品大幅度提高效能和確定性,同時降低延遲。

理想開源框架

理想的開源框架能全面落實與整合Python語言及運行在可程式化系統單晶片(Programmable System-on-Chip, PSoC)產品上,藉由直接在PSoC架構上運用Python的生產優勢,使用者能夠充分發揮可編程邏輯和微處理器的長處,輕鬆地建構人工智慧、機器學習和資訊技術相關的設計應用。

此類開源框架能從應用處理器上,有效地卸載許多不必要占用處理器頻寬、重複卻也十分重要的操作。這種卸載功能對於滿足工業物聯網(IIoT)中邊緣應用漸增的智慧需求至關重要。而目前市面上也有可將Python語言整合在PSoC中的開源框架,例如賽靈思(Xilinx)所推出的PYNQ框架。

嵌入式運算新範例

近期的IEEE調查報告指出,2017年最流行的兩種程式設計語言分別為Python和C語言。在嵌入式運算領域,C語言一直以來都是中堅力量,而Python語言傳統上一直被用於網路或桌上型電腦運算,從未用作嵌入式運算語言,然而,這種情況正在發生改變。

Python及其相關框架能支援用於資料分析、機器學習和人工智慧應用的複雜演算法的開發。而這些應用正是嵌入式運算領域的熱門話題,因此促使著Python獲得更廣泛地採用,特別是在工業物聯網內的邊緣領域。

C、C++和Python緊密相連,因為Python本身也依賴C和C++來提供最核心的函式庫。但是,C和C++屬於編譯式語言,能夠在裸機(Bare-metal)上執行,而Python則是一種直譯式語言。這種差異替嵌入式運算帶來了挑戰:例如,Python需要作業系統(一般是Linux),另外,還需要具有揮發性和非揮發性記憶體資源。在工業物聯網中的邊緣嵌入式運算領域內執行機器學習和人工智慧時,漸漸傾向於發揮其數位分身(Digital Twins)與控制物理致動器的功用(數位分身是真實資產、流程和系統的數位副本,用於為真實行為建模,提供監控、預測和診斷功能)。因此,解決方案必須有即時、並以低確定性延遲做出回應的能力。

此外,工業物聯網解決方案也必須能夠支援以下其他的產業趨勢,例如:

1. 根據待解決的問題,在即時處理器、應用處理器和專用處理單元間進行分區。

2. 為專用處理器卸載引擎創造介面,進而為效能關鍵的核心加速。

3. 使用像Linux這類的標準作業系統。

4. 提供具備調度功能和確定性的解決方案。

5. 針對原型設計和生產提供高生產力框架。

6. 覆蓋標準和既有的網路通訊介面與協定,包括融合式的IT與OT網路。

7. 為機器學習和分析提供豐富的函式庫。

8. 功能安全性。

9. 網路安全。

IIoT機器學習

建構工業物聯網平台絕非易事。整條鏈路從物理環境的邊緣到雲端(包括人工智慧和機器學習)是複雜的,並需要多種專業能力。因此,開發工業物聯網解決方案時,就會須要使用更高水準的抽象層,而這種抽象水準又要與專案涉及的不同工作功能相關聯,才能讓開發作業在可接受的時間和成本預算內完成(圖1)。

圖1 同一平台的不同抽象水準

越來越多工業物聯網解決方案將嵌入式智慧納入邊緣裡,因此,對於眾多應用而言,這意味著將進行機器學習推論。在運行時,機器學習演算法會運用其經驗,根據一套輸入的資料得出結論。機器學習是通過名為「訓練」的學習過程來獲得經驗,而機器學習應用的訓練可使用下列兩種方法執行:人工監督或者是達到判斷功能。兩種方法都需要將包含正反案例的大數據集,應用於機器學習網路。在機器學習演算法獲得充分訓練後,就能將其部署在邊緣,對新輸入與未知的輸入進行推論。

工業物聯網解決方案的相關應用,從執行機器學習中獲益匪淺,尤其是對於那些傳統方法無法提供可接受之效能的應用,或者需要大量人工干預的應用,例如再校準、維護、診斷和故障安全操作。這些應用包括:

1. 感測器與量測系統

2. 系統識別

3. 機器學習系統控制

4. 高階訊號處理

5. 自動化系統的強化學習

6. 影像處理

因此,開發機器學習解決方案須具備足夠通用性的平台和生態系統,才能支援完整的開發模型,不僅僅是支援解決方案的獨立單元。

Python開源框架

理想的PSoC設計不僅須具備用來為現代SoC提供非官方標準特性的雙核處理器系統(PS)和可編程邏輯(PL),同時還要能提供獨特的高度差異化靈活性,來支援將關鍵任務卸載到PL。而因應此趨勢,市面上也有業者推出全可編程SoC(AP SoC),例如賽靈思Zynq-7000。

PS和PL間的緊密耦合能創造比傳統方法回應性更好、可重配置性更強、能效更高的系統。採用CPU的傳統方法須要使用外部記憶體,來共用影像這類的大型資料結構,因其需要晶片外仲裁和通訊,所以會降低確定性並增加功耗與延遲,因此須導入異質晶載系統元件,異質晶載系統元件能讓設計人員能在元件的PL內為功能加速。這樣一來,提供的解決方案不僅擁有確定的回應時間,還能降低延遲,並最佳化功耗(圖2)。

圖2 與典型SoC相比,全可編程SoC的優勢。

使用PL能提供比傳統CPU方法更豐富的介面功能,因為後者只提供固定介面。PL I/O結構的靈活性可支援業界標準、專有或傳統介面,進而達到任意連接(Any-to-any Connectivity)。在高階合成工具和Vivado HLS的幫助下,開發者能夠把C和C++編譯式代碼直接轉化為硬體。

當結合可編程邏輯內功能的加速,就能產生出一個或更多的軟體處理器核心實例,而處理器核心能用於執行即時的關鍵應用。這些功能促使SoC能滿足支援Python的嵌入式平台的多元要求。

透過開源框架的支援,Python便能與SoC一起使用,充分發揮可編程邏輯提供的加速功能。為達這一點,賽靈思在開源框架的設計上採用將PL疊加封裝成混合庫的方式。混合庫是一種全新形式的函式庫,包含疊加位元流,以及與之相關且視硬體而定(Hardware-dependent)的C代碼和Python API。混合庫是落實重複使用的關鍵機制,並且透過PIP Install(用於安裝和管理使用Python編寫的套裝軟體的封裝管理系統)就能輕鬆安裝。因此,這類的開源框架為資料科學家、嵌入式工程師、硬體工程師和系統工程師等所有開發人員提供了所需的必要抽象層次(圖3)。

開源框架率必須先結合下列要素,才能簡化並改善產品設計:

1. 高層次生產力語言(Python)

2. 在可編程邏輯內落實加速的混合庫

3. 受嵌入式處理器支援並採用Web的架構

4. Jupyter Notebook框架

相較於不能使用可編程邏輯的傳統SoC方法,擁有上述要素的開源框架會更具優勢。

在理想的Python框架裡創建的系統,再搭配上熟悉的封裝,資料科學家就能即刻投入使用。圖3展示了一些可以使用的標準封裝堆疊。Panda、Scikit-learn和NumPy位於頂層,而其他封裝則提供專門功能,例如用於機器人的ROS和用於模擬的SimPy。

圖3 Python框架實現高效嵌入式運算。

Python能夠導入一個或多個隨時可用的預配置硬體模組,為應用加速,並消除瓶頸。此外,所有封裝都能在Jupyter環境中進行嘗試和使用,並可透過採用FPGA疊加的硬體函式庫介面,來連接到可編程邏輯。

理想的框架是圍繞開源社群設計的,開發者在該社群可以創建和共用疊加。透過這種方法,開發者在確認所需的新疊加之前,不須要建構疊加。也就是說,當運行所需功能的疊加不存在時,才須建構它。每個新疊加都應遵循為工業物聯網確立的「設計模式」,這些設計模式包括(但不僅限於)下列模式:

・加速器

加速器加速運算與主處理器共用和/或交換資料。根據資料大小和效能需求,資料交換可以在PL記憶體內(RAM模組)、晶載記憶體內(COM)、L2快取記憶體內和DDR記憶體內進行。

・日誌記錄器(Logger)

日誌記錄器負責採集資料,一般是與主處理器共用的原始資料。根據資料大小和效能需求,日誌記錄可以在PL記憶體內(RAM模組)、晶載記憶體內(COM)、L2快取記憶體內和DDR記憶體內進行。採集過程可以通過明確觸發來自行決定處理器的事件,或通過獲取外部事件來啟動。

・程序器(Sequencer)

程序器生成邏輯值的自動序列,根據複雜程度,其中可包含用於執行布林函數(Boolean Function)、FSM和/或任意數位模式(Arbitrary Digital Pattern)的可編程產生器實例。

・運行器(Worker)

運行器提供可用C/C++語言進行編程,且採用性能佳的32位元核心處理器的即時控制功能,用於從主處理器卸載重複性任務,進而產生確定性。

・安全模組

可以把運行器作為安全模組,可配置的處理器能用於鎖步操作,雖然整個PSoC都針對功能安全性進行了精心設計,但當產品從最初的原型設計進入到可生產階段時,這一功能尤為重要。

感測器/量測系統

感測器是任何工業系統,尤其是工業物聯網解決方案的重要組成。從簡單的熱電耦來測量溫度,到結合多個異質感測器,用來測量特定物理量的複雜感測器融合,工業物聯網解決方案都部署多種不同的感測器模態。在工業物聯網解決方案中執行機器學習,有助於開發者在特定的感測器下,發揮出最佳效能,同時提高下列操作的效率:

1. 感測器資料獲取(例如:振動分析)

2. 感測器資料標準化

3. 感測器線性化

4. 感測器診斷

5. 高階感測器

6. 感測器融合

7. 校準與自校準

感測器診斷

因為老化原因,感測器效能在整個工作壽命期間會發生變化,且當感測器在嚴苛環境中使用時尤其如此。此時老化會影響可靠性,並帶來偏離和偏差問題。此外,若感測器是用於安全應用,則感測器診斷功能也極為有用;在此情況下,正確的診斷流程也是安全系統的組成部分。

藉由使用機器學習,設計人員能夠創建感測器模型,或更為普遍的說法,即數位分身。在持續監控實際感測器輸出的同時,也預測感測器的輸出。在標準條件(Nominal Condition)下,感測器訊號會遵循某種已知模式,並伴隨著系統與量測雜訊所導致一定程度的不確定性。但是,若感測器失效,觀察到的輸出就會與預測的輸出相左,並且當偏差超過指定時序或臨界值時,就可以確認感測器失效。由於分析冗餘技術能使用在標準條件下的運行之感測器所提供的資訊,為動態系統創建模型,因此數位分身不會老化或失效,會永久續存。

預測性維護實例:用於診斷與安全的滾珠軸承故障檢測

封裝材料產業已認知到「全面生產維護」是一個積極的方法來提高設備可靠性。逐漸發生的軸承失效是導致產業故障最主要的原因之一。因此,對確保可靠且高效的營運來說,儘早檢測出這類故障能非常重要。單個包裝機往往就擁有八部以上的馬達和眾多主軸,因此存在可能導致生產線停擺的多個故障源。

滾珠軸承能確保軸以最小摩擦自由轉動,同時讓軸保持在正確位置上。如果旋轉系統的滾珠軸承失效,後果將不堪設想。造成軸承受損的原因有很多,包括:

1. 軸承錯位

2. 微動磨損(此為對軸承接觸面的一種侵蝕性破壞)

3. 變頻驅動(產生導致點蝕、槽蝕和弧坑的軸電流)

4. 軸承潤滑不當

5. 軸承侵蝕

6. 軸承疲勞

7. 高溫和其他因素

在故障發生之前檢測此類故障,對於降低營運成本和維護成本而言至關重要。幸運的是,低成本加速計的問世,提供了高頻寬量測,能支援功能極為強大的振動資料獲取系統。若一起部署這些加速計與先進的馬達控制功能,便可採用Python開源框架來達到具備即時檢測潛在失效能力的系統。

在本應用中,PYNQ架構部署在SoC開發基板上,其支援採用PYNQ的疊加,但這只僅僅是PYNQ框架的可能的用途之一。在本例中,系統設置包含一個高效能馬達控制系統,以及一個由5個Kionix三軸加速計構成的採集系統。

有多種技術可以進行振動監測,其中包括振動量測、聲學量測、溫度量測和磨損分析。矽微加速計提供低成本的方法,來感應全部三個軸向的振動,進而能夠全面掌握系統中發生的所有可能之振動模式。具體如圖4所示。

圖4 故障檢測與馬達控制

為了確保量測準確,加速計位置應貼近馬達、齒輪箱和主滑輪內的滾珠軸承。馬達電流、定子電壓和軸角度位置等系統參數均在監測範圍內,而馬達模型則用於估算角度和內部電壓。

如圖5所示,使用下列要素能為Python開源框架環境創建新的疊加:

圖5 採集與馬達控制內部模組

・馬達控制系統

作為使用QDESYS為高效能電動機控制IP集的HDL模塊實例。

・日誌記錄器

作為Vivado HLS模組,並連接至高效能AXI匯流排0的實例。

・正向快速傅立葉轉換(FFT)

作為Vivado HLS模組,並連接至高效能AXI匯流排0的實例。

・軟核心處理器

軟核心處理器執行運行器,來解耦和管理加速度計,使其透過DDR記憶體內共用段的形式對外提供。32位元處理器從Arm處理器上卸載加速度計管理工作。I2C協定對這些單元進行個別應對,分別補償偏置、靈敏度、溫度和比率誤差。

Python C外部函數介面(CFFI)用於讓開源框架能與新疊加共同運作,因此,在使用Python時,該介面幾乎能支援與任何C代碼的交互運行。此外,理想的開源框架內應具備可編程邏輯加速功能,並且可以存取採用C/C++的軟體驅動程式,提供在開發應用時有所幫助的補充功能。而以賽靈思Python框架為例,其核心應功能包括:(a)mmio:能讓記憶體映射I/O,以及(b)xlnk:能將DDR記憶體分配至NumPy(使用Python開展科學運算的基礎封裝)作為可見的緩存空間。xlnk負責為用於映射登記向量的PL,獲取虛擬位址和物理位址。

舉個簡單的例子,可以借助觀察通過馬達的電流,來建立加速度計輸出的振動訊號與檢測到的振動訊號間的關聯,因此透過傳統的振動分析或是更先進的訊號特徵分析,就可以建立這一關聯。相關的具體指標及整體系統的描述須再另文單獨闡述,故不在此詳述。

圖6體現了超過臨界值的滾珠軸承頻率限值,其訊號是由圖7中看似正常的電流波形中提取的。上述範例證明,只要正確理解問題和框架系統的特性,就能展開確實的高階診斷,為具備機器學習功能的工業物聯網系統,打開通向更智慧方法的大門。

圖6 使用電流訊號特徵的振動分析
圖7 三相電動機的波形(滾珠軸承訊號特徵被雜訊淹沒)

結論

本文僅涵蓋Python開源框架的一些基礎知識,這樣的框架將Python與PSoC結合為一體。Python開源框架提供了新的可能性,有助於打造能充分運用工業物聯網的全部功能,以及機器學習所提供之新興功能的系統。

機器學習的邊緣發展尚處於萌芽階段,而晶片商也致力於提供一流的產品和設計框架,以加快和簡化智慧與自我調適資產的設計、部署及維護。而現在只是這令人興奮的旅程的開端。

(本文作者任職於賽靈思)

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!