terasoft

針對企業部署進行演算法的集中管理、保護、與擴充 – 以電動馬達預測性維護應用為例

By Peter Webb, MathWorks

如果你想把MATLAB®函式分享給另一位同事,只要簡單地透過Email就可以達成,不過這種方式可能不太適合較大的團隊。舉例來說,你沒有辦法確保每一個人都使用最新版本的函式,你也沒有辦法限制他人存取這些具有所有權的程式碼。而且如果為了滿足高峰期間的使用量而在足夠數量的機台上安裝了函式,離峰期間則會有機台處在閒置狀態。為了處理這樣的問題,企業級規模的應用架構工程部署專案通常會採用主-從式軟體開發模型(client-server software development model)來解決。

MATLAB Client for MATLAB Production Server™這組支援套件,可為桌上型MATLAB提供了主-從式運算(client-server computing)帶來好處。它的作法是,將演算法集中在一個位置存放,這可確保所有用戶端使用的版本都相同;由遠端執行並加密,則可以保護智慧財產(intellectual property,IP):終端使用者可以呼叫演算法,但不能存取原始程式碼。為了提升生產力,你可以增加使用者端的workers,或者將MATLAB Production Server的範例部署在雲端計算如Microsoft® Azure™和Amazon Web Services等環境中。

本篇文章將以一個估測電動馬達健康的預測性維護應用來說明這些功能。

免費下載範例程式碼與MATLAB Client for MATLAB Production Server。

應用:以預測性維護方法來估計馬達的健康狀態

透過預測性維護系統來監測設備的健康狀態可預防意外的故障。舉例來說,來估計馬達的剩餘使用壽命(remaining useful life,RUL)以判斷何時該替換馬達,以及偵測異常行為來決定是否需要進行馬達檢驗。

我們的應用範例是把馬達感測器收集來的時間序列資料發送到預測性維護演算法,而該演算法則使用機器學習來估計RUL和檢查異常行為(圖1)。

圖1. 馬達健康應用範例的架構。
圖1. 馬達健康應用範例的架構。

這個應用包含了兩部分:一是MATLAB馬達健康狀態app (MATLAB Motor Health app),它展示特定馬達的狀態,另一部分是MATLAB Production Server預測性維護的解析應用,內含兩組預測性維護演算法。這個主從式架構把功能性的責任歸屬分為:使用者(client)端的app,用來管理資料存取與顯示,而伺服器(server)端的演算法則負責分析這些資料。使用者需仰賴伺服器端提供的應用程式介面(application programming interface,API)連結,不需要、也不能存取執行結果。

伺服器端:演算法與介面

對馬達感測器產生的時間序列資料,每一組演算法採用不同的機器學習技術來進行判定。RUL演算法是使用一個線性回歸模型來估計故障發生的時間,此模型是由Predictive Maintenance Toolbox™(預測性維護工具箱)的predict函式所提供。異常行為偵測演算法則使用一個客製的單類(one-class)支援向量機(support vector machine,SVM) 和一個線性求解器,將感測器事件分類為正常或異常,這些函式是來自於Statistics and Machine Learning Toolbox™(統計與機器學習工具箱)。兩組演算法都使用漸進式的學習來持續更新它們的模型,同時也考慮到因為馬達磨損退化而導致的感測器資料偏移,因此,兩個模型都不需要在部署之前先經過訓練。

由於終端使用者都會把同樣的資料流跑在這兩組演算法上,伺服器就提供一個入口點,所以透過processMotorData函式,針對時間序列資料上每一個元素,processMotorData就會送回一個RUL估計結果以及一個是否出現異常的標幟。

在處理資料流時使用者端通常會呼叫processMotorData好幾次,然後把資料流分割為依時間排序的視窗,並且在每個視窗完成時送出。MATLAB Production Server有一個無狀態(stateless)的架構:它會在每一次呼叫之後重置執行狀態,以避免資料在使用者之間洩漏。由於演算法使用漸進式學習,它們會透過處理每一個視窗之後的模型更新來改善。不過,執行狀態的重置功能會從MATLAB Production Server的記憶體清除掉這些變更。為了讓變更保留到下一次的呼叫,我們將它們儲存在透過mps.cache.connect函式所建立的外部資料快取記憶體中,完成部署的演算法就會將資料流依馬達編號ID來分組,並且為每一個馬達保留一個資料快取記憶體和機器學習的模型。

使用者端:執行演算法和資料視覺化

我們將processMotorData 部署到一個MATLAB Production Server範例、命名為 MotorAnalytics檔案的中,讓使用者端的開發人員可以使用它。如果要從MATLAB呼叫processMotorData ,你可以使用MATLAB Client for MATLAB Production Server裡,從MotorAnalytics安裝MATLAB add-on套件。

安裝這個add-on套件時,把processMotorData函式放置到MATLAB的路徑中。呼叫processMotorData時,會有一條需求被傳送給MATLAB Production Server主機上去執行預測性維護演算法內的processMotorData函式,每一個安裝了add-on的使用者端就能去執行這個相同的預測性維護演算法,如圖2所示。

4種經過實證的AI演算法應用
圖2. MATLAB桌上型使用者透過MATLAB Production Server存取processMotorDat。

使用者開發

當add-on套件被安裝之後,這些終端使用者就可以從他們桌面端的MATLAB來跟 processMotorData函式進行互動。舉例來說,MATLAB的help指令顯示了來自原始函式的協助文字訊息,後記則標明processMotorData是在MATLAB Production Server上執行。

這些是add-on套件上人類都可以讀懂的全部內容,任何執行 processMotorData演算法的IP智財會在MATLAB Production Server主機上以AES加密來確保安全性。

接著我們透過MATLAB App Designer來建立帶有兩個內嵌儀表板的MATLAB app應用程式,讓使用者可以選擇一個馬達資料集,並檢視該資料執行預測性維護演算法後所產生的結果。這個馬達資料集是由48小時、一分鐘取樣一次的感測器讀數所構成。該馬達在這48小時期間內的RUL,會以距離到故障發生的估計分鐘數的線性圖表來呈現;當偵測到異常時,會以紅色圓點標示在線性圖表上。

圖3呈現了第8號馬達的狀態。圖表上標出了幾個異常與一個估計RUL在跌入零之前的一段暫時性下降,這個在大約12小時內機器餘命從72小時快速的下降到零,顯示出有替換馬達的急迫性。

自動瑕疵偵測
圖3. 視覺化呈現第8號馬達的健康狀態。

水平方向的擴充

接下來,我們把演算法部署至MATLAB Production Server來進行規模擴充:MATLAB Production Server可自動地加入容載量(在條件內)來回應增加的需求。每單一個MATLAB Production Server容納案例可以最多有24個workers,每一個worker可獨立地處理需求---如果主機有足夠的CPU資源的話還可以同時間進行。我們會建議每個worker分配一個核心。

為了說明需求導向的擴充,我們從三個分開的桌上型MATLAB單元開啟predictive analytics app,我們先執行其中一個app副本並等待它完成,接著讓三個app全部同時執行。

圖4為執行結果。在左邊的圖表可以看到每一個app副本的解析結果。右邊的MATLAB Production Server儀表板展示了現行worker處理程序數量以及需求的處理量。在即時的截圖上,儀表板顯示有三個現行worker處理程序,以及每秒大約18筆訊息的處理量。

自動瑕疵偵測
圖4. 需求導向的水平擴充結果。

儀表板上的直條圖繪製了處理量的歷史。每一組直條代表一段時間的活動。較短的直條捕捉到的是只有一個app傳送需求至MATLAB Production Server的那段時間,當時的處理量大約為每秒6筆需求。較長的直條代表三組桌上型app都在傳送需求的時候。在第二段時間,MATLAB Production Server自動地啟動兩個額外的workers,藉由需求來帶動擴充,並且讓處理量增加到每秒18筆訊息。

集中化管理、保護與擴充

藉由我們的開發之後,processMotorData這個演算法範例已經具備了安裝於網路的一個位置、以AES加密機制保護、並且可動態擴展性的特點,已經是一項企業層級的服務。因此,你可以利用MATLAB Compiler SDK™和MATLAB Production Server來建立如同本文所示範的MotorAnalytics可部署檔案一樣。不過,如果是要安裝或使用 processMotorData等函式,你只會需要MATLAB和可以免費下載的MATLAB Client for MATLAB Production Server支援套件就足夠了。