徐亞軍
( 蘇州百智通信息技術有限公司,江蘇 蘇州215000)
智能化機器學習技術成為現代公司追求的發展方向,普遍應用于豐富的業務開發以及業務場景中,滿足一項業務需求,需要涉及整個數據收集以及機器學習模型線一體化算法流程,不同業務場景需要耗費大量的成本做重復性開發工作,同時還需要融合原有軟件開發體系與模型開發流程,在這過程中容易造成代碼入侵問題。
本文當中所設計的一站式服務機器學習算法系統,可以完成從最初的數據采集存儲,到最后的模型線上化的計算過程。初級學習者也可以根據業務需求制作簡單的機器學習模型,同時專業的工程師也可以借助該機器學習算法系統,開發更加復雜的模型平臺,減免了修改原有業務系統代碼過程。融合機器學習算法模型以及原有的業務生態系統,提升可擴展性,同時降低維護和開發成本。
該機器學習算法系統,主要是面向實體用戶和虛擬用戶開放業務系統。系統對外接口不僅可以獲取用戶輸入信息,同時也可以將結果反饋給用戶。一般來說實體用戶主要有圖形化以及終端命令輸入兩種輸入方式,而虛擬用戶主要運用的是RPC 傳輸方式。
數據采集服務位于整個服務層的外側,所有數據的存儲和交互都需要經過數據服務層入口。資源的獲取以及讀取方式、上層數據的來源均需要依靠數據采集服務[1]。
清理臟亂數據、加工源數據以及賦予文字值數據化屬性,都需要在這兩個服務當中進行。特征工程服務位于服務最底端,其主要作用是提取精細化和標準化的數據特征,進行特征降維操作等(圖1)。
1.3.1 模型解析
模型解析的主要工作是解析,有關計算圖的描述信息。然后將模型放在內存當中,依靠算法庫中的通用算法庫、自定義復雜算法庫以及通用場景庫做訓練、評估和上線。
1.3.2 計算層

圖1 面向服務的一站式機器學習算法系統整體架構圖
計算層不僅能夠支撐算法模型層,同時也能夠實現算法的多樣化計算。計算層主要分為三類,分別為spark 大規模數據批處理和流處理框架、Tensorflow為代表的分布式深度學習框架以及MPI 并行計算技術。
系統數據層的出入口,存在于數據采集存儲模塊中。該模塊可以將不同的數據源交互方式,轉變成單一的黑盒模式,借助API,使上層模塊,能夠操作不同數據源。與此同時,該模塊借助多線程并行方式,解決了數據存儲介質交互過程中磁盤l/0 以及網絡l/O 所造成的等待時間過長問題,從而提升模塊的存儲性和讀取性能[2]。
選擇1#樣品韻達公司快遞包裹袋,剪取面積為0.5 cm×0.5 cm,利用反射法,在相同檢測條件下重復測定5次。
2.1.1 數據采集存儲模塊的詳細設計
關于數據采集存儲模塊的設計,不同的屬性對應不同的數據源信息。數據源的IP 地址source IP 端口地址對應sourceport,數據源類型對應sourceType,數據源擴展字段的json 格式對應featureStr,例如mysql 的庫名等。為提升讀取便利性,feature 所對應的map 形式,是由數據源拓展字段演變而來。
AbstractDataSource 是不同數據源交互方式的抽象父類,shardPolicy 類型是其重要成員。該種類型可以從DataSourceBean的feature 中獲得用戶分片信息,并根據行列或者文件名進行讀取。其中,DataSourcePool 類型主要負責連接數據源,充當有限大小連接池,定義其核心的為po olsize 定義。resize 方法,可以擴充連接池容量,Free 方法,可以銷毀并且回收連接池資源。
該模塊主要采取的設計思想為Pro actro 模式,從而提升數據讀取和存儲效率,所使用方法為startTask 方法以及checkDoneQueue 方法,前者主要是用來創建和分發任務;后者主要負責嗅探工作,TaskEventQueue 是任務隊列的集合類,一旦發現隊列中存在任務,便可完成自動讀取任務獲取信息。其中,DataSourceTask 是任務載體類別,taskType, taskStatus 以及taskResult 分別對應的是任務類型、狀態和結果[3]。
2.1.2 數據采集存儲模塊的實現
數據任務的執行、調度以及數據源連接資源的分配,是數據采集模塊當中較為重要的部分、為實現數據任務的調度控制,需 要 借 助 DataSourceController DataSource' Task 以 及TaskEventQueue 三大類來實現。
第二類,可以有效封裝,所有數據任務操作控制數據任務狀態變化,同時運用call,wait,wake 三種方法,執行task 的任務,可轉化系統狀態。其中call 方法主要作用是獲取數據源鏈接,如果獲取失敗,則可以運用task 以及wake 方法,喚醒沉睡的線程。
第三類,作為任務隊列數據結構,包括任務結果隊列、等待資源任務隊列以及空閑任務隊列、正在運行任務隊列。第三類是單例,一般不會用在多個線程中,如果是4 個數據結構需要運用線程.ConcurrentHashMap 類和LinkedBlockingQueue 類[4]。
2.2.1 算法服務模塊的詳細設計
Pro cess 方法是ServiceBroker 類用來接收消息,開啟算法服務模塊流程的關鍵。ServiceBuilder 類用于創建服務的任務類,其中jobld 指的是模型編號,fileur,指的是模型持久化文件儲存位置。
ModelService 類是存在大量實體的外供系統模型服務,主要運用的方法為predict 在線預測服務方法,通過byte 數組以及models 關于jobld 的PredictModel 對象,完成模型預測。其中包含存儲模型mpa,即models;檢測存儲器正確性的mpa,即monitors(圖2)。
關于算法服務模塊建立算法服務的關鍵流程節點具體如下:
首先,可靠消息隊列會收到來自算法引擎模塊的文件儲存位置、模型文件大小等模型信息;然后,通過cosumer 位置,借助Process 方法,傳送至ServiceBroker 服務器;內存放模型建立單線程ServiceBuilder 任務,將執行模型重放至predictModel 載體類中,在model service 節點機器上添置模型。

圖2 算法引擎模塊類關鍵類類型
2.2.2 算法服務模塊的實現
算法服務模塊的方法包含: ServiceBroker 的process 方法、ServiceBuilder 的run 方法以及ModelService 的addModel 方法。其中,第1 種方法,主要作用是接收消息并判斷類型,該方法處理心跳類型的消息便是直接回應消息給對方。而第2 種方法,具有較強的處理邏輯。根據所對應的HDFS 存儲位置尋找適宜的HDFS 服務器,讀取形式為byte 數組的數據流文件,將其轉化為PredictModel 對象,并與manager 節點建立關聯,獲取modelService 的節點信息,從而選擇模型服務節點與業務節點之間的距離作為最合適的節點,部署系統模型,于兩個節點之上,用來提供服務和服務備份工作[5]。
綜上所述,面向服務的一站式機器學習算法系統,可以融合機器學習模型以及傳統軟件系統,拓展了系統的可修改性,精細優化線程模型。通過設計和實現可算法模型以及數據采集模型,解決代碼入侵問題,從而借助偽代碼和原生代碼,使系統的設計得以實現。