--------點選螢幕右側或者螢幕底部“+訂閱”,關注我,随時分享機器智能最新行業動态及技術幹貨------------
機器學習與異構計算
在機器學習領域,異構計算技術的應用是近年來備受産業界和學術界關注的話題。在資料高速增長的背景下,異構計算技術是提升機器學習應用開發流程中“人”與 “機”的效率的重要途經。本文将結合機器學習應用的開發閉環對近期湧現的相關異構加速技術進行介紹。

如上圖所示,機器學習應用的開發閉環包括資料整合、特征提取、模型的設計、訓練和驗證等多個環節。
首先需要對原始資料進行彙聚整理,然後進行資料分析并提取資料特征作為模型輸入。在模型設計環節,需要對模型類型、優化算法和配置參數進行選擇。在模型訓練完成後,需要資料科學家根據模型驗證的結果對上遊的各環節進行調整,例如補充新的資料源、擴充資料特征、調整模型的選擇和參數設計,然後重新訓練和驗證模型,直到多次疊代之後得到令人滿意的結果。
先談談上述流程中的“人”。“有多少人工就有多少智能”這個現象在生産應用中較為普遍。上述流程中存在大量的人工決策環節,需要資料科學家根據專業知識和經驗進行合理決策。由于應用場景的多樣性,通用的設計通常無法滿足各種場景下對機器學習系統的特定需求。資料科學家需要結合實際問題,通過大量的觀察分析以及多次的嘗試和調優之後才能獲得真正合适的設計。随着機器學習理論方法和應用場景的日益豐富,資料科學家正面臨着前所未有的決策數量和難度。随着工作難度的增加,人力對機器學習系統開發效率的影響也将逐漸增大,甚至成為整個流程的瓶頸。
再談談“機”。從機器效率角度上看,上述疊代過程中涉及到了大量的資料處理和計算操作。例如,在資料整合環節,涉及到多個資料源不同次元大量資料的關聯分析和清洗操作。特征提取環節中原始資料的統計特征分析以及特征資料的構造和編碼均需要進行大量的浮點運算和矩陣運算。而在模型訓練和驗證環節會涉及到機器學習模型的訓練和推理計算,包含了大量的數值計算、矩陣運算和浮點運算操作。資料的飛速增長使得機器學習應用對計算機系統資料處理的性能要求日益嚴苛,上述環節的計算效率将直接影響到人工參與效率以及機器學習系統的整體疊代效率。
異構加速技術對“人”與“機”的效率帶來了巨大的提升空間。目前的異構加速算法覆寫了資料整合、特征提取、模型訓練等環節。與傳統的基于 CPU 的算法相比,異構并行算法可獲得一到兩個數量級的加速,顯著提升了機器的運算效率。另一方面,異構加速技術幫助資料科學家更快的獲得運算結果,并可有效加速 AutoML 的解空間搜尋過程,提高設計與調優效率。
下文将聚焦資料整合、特征提取、模型設計調優、模型訓練四個環節,對其中湧現的新興異構計算技術進行介紹。
資料整合
資料整合處于機器學習開發流程的上遊,包括資料源整合,資料提取與資料清洗等工作。由于各應用場景差異較大,資料源與資料類型紛繁複雜,資料整合階段所涉及的方法與工具相當豐富。其中資料庫、資料處理引擎、資料分析程式庫扮演了重要角色,分别應對資料彙聚、對接、通用資料處理、定制化資料處理等任務。
資料庫方面,ZILLIZ 面向 PostgreSQL 生态推出了 GPU 分析引擎 MegaWise 1,阿裡巴巴在 AnalyticDB [3] 中提供了 GPU 加速能力,BlazingSQL [4] 基于 RAPIDS [5] 建構了 GPU 加速的 SQL 分析引擎。近期在資料庫領域湧現的異構加速技術集中于 AP 方面,這些新型分析引擎對于資料加載、變換、過濾、聚合、連接配接等特定負載獲得了十倍至百倍的加速效果。
資料處理引擎方面,Spark3.0 将引入對 GPU 的排程支援 [6]。此外,在預覽版中,也看到 SparkR 以及 SparkSQL 引入了列式處理模式。異構計算資源排程與列式處理這兩項内容為 Spark 核心元件的異構加速工作奠定了良好的基礎。此外,也為有定制需求的進階使用者提供了異構加速 UDF 的條件。
資料分析程式庫方面,英偉達推出 cuDF [7]。自 0.10 版本以來,開啟了一輪大規模重構,在持續提升底層庫性能的同時,對 Python 層的 API 也進行了擴充。截止目前 0.13 版本,逐漸完成了一套類 Pandas API。目前接口成熟度可支撐 Pandas 與 cuDF 的協同資料處理。
特定資料類型處理方面,OpenCL 提供了圖像處理的 GPU 加速能力 [8],英偉達在 cuStrings [9] 項目中提供了面向字元串的 GPU 加速處理函數庫,ZILLIZ 在其即将開源的 Arctern 項目中将推出面向地理資訊資料處理的 GPU 加速引擎 [10]。
特征提取
特征提取過程對原始資料中的關鍵資訊進行提取并編碼成結構化資料,其結果将作為模型的輸入資料參與模型的訓練和驗證過程。特征提取過程涉及的計算操作主要包含資料的特征分析、變換和選取,例如均值、方差、協方差、相關系數等統計特征的計算,歸一化、白化等資料變換操作,以及 PCA、SVD 等特征選取操作。上述操作普遍涉及到對大量資料進行相同或相似的處理過程,适合采用異構加速技術提升計算效率。
資料統計特征分析方面,cuDF [11] 提供了對最值、期望、方差、峰度、偏度等常用統計量的計算接口。此外,cuDF 還支援 UDF,通過 JIT 技術将 UDF 編譯成 cuda kernel 在 GPU 中執行,進而實作使用者自定義的資料特征分析。目前該功能相比 pandas UDF 能力較弱,僅支援數值型及布爾型計算。
資料變換方面,英偉達面向高維資料運算釋出了 cuPy 項目。該項目使用 ndarray 結構對高維資料進行組織,并在此基礎之上提供了大量的異構加速資料運算功能,其中包括傅裡葉變換以及線性代數矩陣變換等常用資料變換功能。
特征選取方面,英偉達推出的 cuML 項目提供了一套異構加速的機器學習基礎算法庫。該項目自 2018 年釋出以來持續地擴充對常用的機器學習算法的異構加速支援,目前包含了 SVD、PCA、UMAP、TSNE、Random Projection 等特征成分分析功能。
模型設計與調優
在提取特征之後,資料科學家們需要根據實際的機器學習問題以及訓練資料的特征對機器學習模型經行設計和調優。模型設計包括對機器學習模型的類型、模型訓練中求解優化問題的算法以及模型參數進行選擇。在模型訓練完成之後,還需要驗證模型的結果準确度,并相應的對模型設計進行疊代調優。在傳統的機器學習系統中,該環節完全由人進行決策,其效率嚴重依賴于資料科學家和算法工程師的專業知識和經驗。
為了減少機器學習過程中對人力和專業知識的依賴,近年來學術界和産業界對 AutoML 相關技術投入了大量的關注和嘗試。AutoML 緻力于自動化完成模型設計,并根據模型驗證結果對模型的設計空間進行自動搜尋,進而達到近似最優的模型選擇和配置。AutoML 減少了機器學習過程中的人工參與,進而有望提高機器學習疊代過程的效率。
目前尚未出現針對 AutoML 的異構加速項目或者算法庫。然而,不論是人工還是自動化的模型設計都需要對模型的訓練和驗證過程進行大量疊代,在這方面異構計算技術已經被普遍用于計算過程的加速。
模型訓練
機器學習的模型訓練部分存在大量的運算密集型任務,其運算負載不僅取決于算法邏輯,也取決于訓練集、資料集的量。随着資料的爆炸式增長,模型訓練的任務負載也顯著提升,傳統的基于 CPU 的方案在性能、裝置成本、能耗等幾個方面迎來較大挑戰。是以,異構加速技術成為解決上述挑戰的重要途徑,更高的模型訓練速度也将直接提高模型疊代中人工環節的參與效率。
資料集處理方面,cuML 提供了 train_test_split,與 sklearn 中的接口行為類似,用于劃分訓練集和測試集。
算法方面,cuML 提供了一套 GPU 加速的 ML 算法包。在目前 0.13 版本中,常用算法如 linear regression, SGD, random forest, SVM, k-means 等都有涵蓋,另外還提供了對時間序列預測分析的支援,包括 HoltWinters, kalman filter, ARIMA 三個模型。在早期版本中,受制于顯存容量,cuML 對于大模型或大訓練集的支援不盡人意。cuML 自 0.9 版本提供多節點 / 多卡方案(MNMG),目前已有的 MNMG 算法包括:K-means, SVD, PCA,KNN,random forest。
基于樹的算法方面,XGBoost 早在 16 年底就開始了算法的 GPU 加速工作,并于 17 年支援多卡。cuML 在近期的版本中也對基于樹的算法進行了性能優化 [12],自 0.10 版本提供與 XGBoost GPU 加速算法的對接支援 [13]。
總結與展望
異構計算在機器學習應用的開發閉環中對于提高“人”與“機”的效率展現出巨大潛力,部分庫、系統與産品已經應用于生産環境。但異構計算技術在人工智能領域仍處于快速發展期,進一步豐富工具鍊以及完善與已有生态的整合是異構計算技術加速落地的重要挑戰。可以預見,異構計算将成為人工智能應用領域的重要技術趨勢,在提高産品演進效率、降低裝置與人工成本方面發揮至關重要的作用。
原文連結:
https://www.infoq.cn/article/wDVz9rkO1jNHRoTBC9xP