前言:想要寫出一篇引人入勝的文章?我們特意為您整理了石油勘探應用軟件資源需求分析范文,希望能給你帶來靈感和參考,敬請閱讀。
摘要:采集石油勘探應用軟件模塊運行時的資源消耗信息,包括不同模塊對服務器資源占用情況的數據。根據需求采集相關數據,包括CPU、內存、網絡、臨時盤等。在勘探開發云平臺運行應用軟件資源需求已知模塊的作業,采集資源消耗數據。根據所采集數據的模塊資源需求特點,對數據進行標注,使用極限梯度提升(extremegradientboosting,XGBoost)算法,建立模型并訓練。采集資源需求未知模塊作業運行時的資源消耗數據,根據之前建立的模型確定此模塊的資源需求類型。使用資源調度算法,以將資源需求互補的虛擬機部署到相同的物理節點為目標,計算虛擬機部署位置,通過虛擬機遷移實現計算資源優化分配。
關鍵詞:機器學習;XGBoost算法;石油勘探應用軟件;資源需求
0引言
在云計算高速發展的大背景下,硬件資源高度集中,結合軟件形成了龐大的應用系統,在石油勘探行業這種趨勢更為顯著。硬件資源的分配情況將直接影響應用系統的運行效率。通過互聯網調查公司發布的數據顯示,在軟件運維過程中,CPU、內存、網絡、臨時盤空間這些因素,對應用系統運行效率會產生比較重要的影響,這些資源的不足往往會造成應用系統速度變慢,運行效率降低,影響用戶的體驗。因此,通過對應用軟件模塊資源應用分析研究,開展一定時間的數據采集和挖掘,并對已知的資源需求進行標定,通過機器學習、人工智能手段深入的發掘資源消耗的規律性因素,建立一種監控指標與應用軟件運行資源需求預測模型,采用神經網絡、機器學習技術,對資源需求進行預測,主動進行主機資源運行優化,減少資源分配問題對用戶工作效率的影響,能有效提高系統管理工作的信息化水平。隨著互聯網和大數據的發展,數據的豐富度和覆蓋面遠超出了人工可以觀察和總結的范疇。結合了統計學、數據庫科學和計算機科學的機器學習已成為人工智能和數據科學發展的主流方向之一。分類問題作為機器學習的一部分,成了研究的重點[1]。以深度學習為代表的機器學習是當前最接近人類大腦的智能學習方法和認知過程,充分借鑒了人腦的多分層結構、神經元的連接交互、分布式稀疏存儲和表征、信息的逐層分析處理機制,自適應、自學習的強大并行信息處理能力,在語音、圖像識別等方面取得了突破性進展,在諸多應用領域取得巨大商業成功[2]。鄔春明等[3]結合極限梯度提升算法和實體嵌入網絡,提出了一種基于XGBoost-EE的電力系統暫態穩定評估方法。徐偉等[4]為了降低網絡入侵檢測系統的虛警率,提出一種混合式網絡入侵檢測方法,將人工蜂群算法用于特征提取,XGBoost算法用于特征分類和評價。張穎等[5]針對惡意的第三方廠商在電路設計階段中植入硬件木馬的問題,提出一種基于XGBoost的混合模式門級硬件木馬檢測方法。孫朝云等[6]為了科學有效地評估高速公路服務區交通通行服務能力和進行基礎設施優化配置,提出一種基于改進粒子群算法和XGBoost融合的高速公路服務區交通量預測模型。趙力等[7]針對采用遙感技術監測氮、磷研究中反演模型精度不夠高、小尺度水體研究受限于數據源分辨率的問題,提出了一種結合高分一號影像和XGBoost模型的水體總氮、總磷濃度反演技術。陳莊等[8]為了進一步提升水務企業工作效率,解決抄表數據審核工作量大、保證數據準確性等問題,在傳統的XGBoost預測算法基礎上提出一種基于MIC-XGBoost的混合預測模型。
1總體架構
通過采集模塊對軟件模塊的運行數據進行采集,并對這些數據進行數據標定,基于機器學習技術,對不同的模塊來進行資源的特征畫像,系統根據不同類型軟件模塊對資源的需求情況,設置不同的調度策略,從而實現主機智能部署調度、智能控制。系統總體架構如圖1所示。
2獲取計算機運行數據
在計算機安裝運行數據采集插件。進程采集模塊基于Go語言開發,使用了go-cmp、text、fakescraper、go-seq、process-exporter、client_golang、common、procfs、sys、xer-rors、protobuf、check、yaml模塊,采集計算機CPU利用率、內存占用、磁盤讀寫、網絡帶寬等相關數據,并將采集的監控數據按照時間保存到MySQL數據庫中。采用多線程輪詢的模式向采集代理程序拉取指標數據,并將采集的數據保存到時序數據庫中。
3軟件模塊與進程關系分析
分析石油勘探專業軟件運行機制。以Omega軟件為例,Omega在提交作業后一般產生單個主進程,主進程在進行作業調用模塊時,通過調用動態鏈接庫的模式來工作,不再產生新的進程,傳統通過進程來獲取模塊信息的方式已經不能滿足需求。經研究Omega的運行方式、進行特點和軟件目錄架構發現,這些模塊的動態鏈接庫都保存在Omega的安裝目錄的lib下,通過[lsof]獲取這些模塊鏈接庫的調用棧,并與當前運行環境的進程列表進行匹配,就能夠獲取Omega作業當前所運行的模塊情況。Omega進程采集原理如圖2所示。采集過程包含了多個步驟。讀取配置文件,加載MySQL數據庫連接參數,接口參數,定時任務參數;創建數據庫連接對象,讀取module_type(模塊總表),檢驗模塊對應指標表是否已創建,如未創建,則根據module_indicators(模塊樣本參數模版表),創建對應模塊的樣本數據表;根據接收的命令參數,執行一次性的數據生成過程或定時過程;一次性數據的生成過程需要指定一個起始時間,從起始時間開始,每10min的某模塊的采集數據作為一個樣本存入對應模塊的樣本數據表;定時過程是從程序運行時開始,每10min進行一次樣本數據的匯總入庫操作;總樣本數據操作,按照查詢模版的配置查詢監控采集服務器,并將多個指標在10min區間的數據整合成一個樣本數據,入庫MySQL對應模塊的樣本數據表。通過對石油勘探生產環境下的Omega運行目錄和當前運行作業流程文件進行對比,發現Omega的模塊以動態鏈接庫.so的方式來加載和調用,當作業流程需要調用某一個模塊的時候,Omega主進程會將對應的模塊鏈接庫動態的加載到內存中。
4機器學習
4.1樣本數據預處理
采集的集群節點運行指標數據,為保證效率,首先保存在時序數據庫中,實時數據保存180天,訓練樣本數據長期保存,并通過轉儲工具,將處理后的實時數據保存到MySQL數據庫中作為樣本數據,再以API的方式來為機器學習提供訓練數據集。將時間序列數據提取最大值,均值,方差等轉換成特征數據。并對數據做歸一化、缺失值處理,對處理后的數據集進行特征選擇,選取與標簽相關性最好的若干個特征作為模型訓練的特征,再進行必要的數據分組或者分割。
4.2機器學習
機器學習軟件采用Python語言進行開發,使用了xg-boost、numpy、pandas、random、os等模塊,對采集到的數據做特征工程,對數據進行升維,為多維度特征挖掘提供數據基礎。去除空值:data.dropna()提取各列特征數據的最大值:data_mk_max=data.groupby(['sample_id'],sort=False,as_index=False).max()提取各列特征數據的平均值:data_mk_mean=data.groupby(['sample_id'],sort=False,as_index=False).mean()提取各列特征數據的方差:data_mk_var=data.groupby(['sample_id'],sort=False,as_index=False).var()將標注的訓練數據集作為XGBoost算法的輸入樣本,進行訓練,獲得模型,輸出模塊類型。然后利用驗證數據集對訓練后的模型進行驗證,若滿足精度要求,則獲得訓練好的模型,利用訓練好的模型,對作業模塊類型進行預測,給出預測的模塊類型。根據已知軟件模塊的需求,來預測其它軟件模塊的資源需求類型,按照目前給定的資源需求類型可以分為4類:CPU密集型、內存密集型、臨時盤密集型、以上均不是,因此,在指標的選擇上也主要圍繞以上幾類資源類型來進行選擇,通過對采集的監控指標進行分析,明確用于模塊資源預測所需要的指標數據包含:內存總量、模塊CPU占用率、模塊內存占用率、模塊磁盤占用率、當前節點CPU占用率、當前節點內存占用率、當前節點磁盤占用率、時間戳,共計8個指標。通過對比決策樹算法、隨機森林、支持向量機、BP神經網絡、XGBoost等算法,根據實際采集數據情況,采用XGBoost算法來進行預測。極限梯度提升樹算法是Boosting集成算法的一種,通常以決策樹為基學習器,新生成的樹不斷學習當前樹預測值與真實值之間的殘差,最終將多棵樹的學習結果累加作為預測結果。由于XGBoost算法是基于樹模型的,當決策樹的數量過多時,則會出現過擬合。除了調整決策樹個數、迭代速率和樹模型最大深度等參數控制復雜度外,XGBoost算法在求解最優樹結構過程中引入正則化策略來控制模型整體過擬合程度,XGBoost算法在最小化目標函數過程中不斷調整生成新的樹結構,最終目標函數與樹結構(包括每棵樹的深度、葉子節點數量、葉子節點位置等)緊密相關,因此,利用該算法本身不斷減小偏差、限制方差、生成最優樹結構的特性可創造大量新特征集[9]。XGBoost算法實現的關鍵參數樣例:n_estimators=200#弱決策樹數量max_depth=5#樹的最大深度learning_rate=0.1#學習速率gamma=0#最小損失函數下降值subsample=0.8#樣本隨機采樣比train_percentage=0.8#樣本分割比例,訓練樣本占比self.min_child_weight=6#最小樣本權重的和reg_lambda=1#L2正則化項參數reg_alpha=0#權重L1正則化項seed=0#復現隨機數據結果col_sample_by_tree=0.8#特征隨機采樣比將預處理完成的數據導入模型,進行模型訓練,通過對模型準確度反饋,以及對參數重要性指標的分析,不斷調節參數,找到最合適的參數。模型訓練流程如圖3所示。按照訓練模型數據預處理流程,將實時數據做處理,導入已有模型,根據模塊的實時數據進行模塊分類。模型預測流程如圖4所示。通過業務人員對分類結果進行確認,填充樣本庫,用新的樣本庫重新訓練模型,不斷優化模型。模型優化流程如圖5所示。
5云主機調度
通過模塊資源需求類型與主機總體資源情況相結合,建立云主機調度策略,將不存在資源競爭的虛擬機調度到同一臺物理機服務器上,在減少資源競爭的同時,盡可能地發揮主機的最大利用率。周平等[10]提出基于馬爾科夫預測模型的云資源調度算法,實現節點負載判斷、待遷移任務和節點選擇、遷移路由的決策,以解決云服務節點失效情況下的任務調度和負載均衡問題,實現快速的云服務故障恢復,提高云服務的可靠性。宋維佳等[11]提出作為云計算的重要支撐技術,虛擬化提供了熱遷移、負載轉移等技術豐富了云計算資源調度手段。利用這些技術,資源調度要解決如何將計算資源合理分配給服務,一方面保證在負載動態變化的情況下服務質量不受影響,另一方面減少數據中心的能源消耗。調度原理如圖6所示。基于模塊類別和占用資源的情況,根據當前服務器正在運行的模塊分類,將要運行的模塊進行分配調度,以保證發揮服務器的最大能力,即在有限的計算能力下運行更多的模塊,這是典型的最優化問題。對比爬山法、遺傳算法、動態規劃等算法,動態規劃算法(dynamicprogramming,DP)是由美國數學家R.E.Bellma求解多決策問題時提出的一種優化算法,特點在于搜索效率髙,結果穩定可靠,從而受到廣泛的關注[12]。針對要解決問題的特點,采用動態規劃算法來進行主機調度模型的建立。利用預測好的模塊類型,分析作業的資源占用情況,以目前各個節點的作業類型為基礎,計算新發布的作業所在的節點的資源占用是否超過物理機上限,若存在物理機超上限,則運用動態規劃算法,根據當前物理機、虛擬機節點的CPU計算核心數量、CPU負載、內存、緩存、IO時延等指標數據,對虛擬機進行遷移,使得遷移后的節點資源占用都在物理機的接收范圍內,對云主機資源合理分配。6軟件主要功能實現了應用軟件模塊資源占用監控,針對已知資源需求的應用模塊資源占用建模,使用機器學習算法訓練模型,通過機器學習確定勘探開發應用其它功能模塊的資源需求。通過虛擬機運行作業的資源占用,將資源互補的虛擬機遷移到同一物理機。主要功能包括:模塊資源監控、訓練集管理、模型訓練、方案管理、遷移查詢、作業查詢等。通過采集專業軟件如Omega的作業模塊數據,并保存到數據庫中,通過多維度的查詢條件,反映一段時間內模塊占用的CPU、內存、磁盤、網絡的情況,方便用戶對一段時間主機運行軟件模塊資源占用情況進行掌握。模塊資源監控:主菜單中“資源調度”→“模塊資源監控”;點選“函數”“時間”“指標”“模塊”等查詢條件,點擊查詢。查看各個維度采集數據曲線。訓練集管理:主菜單中“資源調度”→“訓練集管理”;點選“新增”,進入節點運行監控,點擊新增訓練集,填寫信息,點擊保存,在訓練集列表中可查看到新增的模塊信息。點擊訓練模型后的修改,填寫信息,點擊保存,在訓練集列表中可查看到已修改的模塊信息。在訓練集管理中配置好訓練集之后,即可進行機器學習的模型訓練,預測需要預測的模塊的信息,且可以配置訓練算法的參數值,以方便更好地進行模型訓練。包含模型訓練、模型預測、虛擬機實時數據和調度方案四個接口。模型訓練:主菜單中“資源調度”→“模型訓練”;點選“模型訓練”,選擇“繼續執行”或“查看上次結果”,查看模型訓練的執行結果。同理,點選“模型預測”“獲取虛擬機實時數據”“模型調度”,查看各個流程的執行結果或上次執行結果。方案管理:主菜單中“資源調度”→“方案管理”;點選“起始時間”,點擊“查詢”,查看虛擬機調度方案的執行結果,點擊“查看”按鈕。進入詳情頁面,查看方案具體信息。點擊“方案運行”按鈕,運行該方案的虛擬機調度。模型調度:查看虛擬機調度方案的執行結果。進入詳情頁面,查看方案具體信息。點擊“方案運行”按鈕,調用虛擬機熱部署命令,運行該方案的虛擬機調度。遷移查詢:主菜單中“資源調度”→“遷移查詢”;設置時間段,物理機或虛擬機名稱,點查詢。可以查看一段時間內物理機上曾經有過哪些虛擬機。可以查看一段時間內某個虛擬機在哪些物理機上運行過。點擊查看詳情,查詢虛擬機遷移的歷史記錄。包含時間、虛擬機、物理機的查詢,查詢結果為這段時間內虛擬機由源物理機遷移到目標物理機的開始、結束時間。作業查詢:主菜單中“資源調度”→“作業查詢”;設置時間段,點查詢。可查詢虛擬機上運行過的作業。點擊查看詳情,可查詢相關作業運行過程中虛擬機遷移歷史。
作者:董濤 段淼 車曉萍 孫友凱 單位:勝利油田物探研究院