做者 | 易小萌、郭人通html
策劃 | 鈺瑩git
「異構計算」(Heterogeneous computing),是指在系統中使用不一樣體系結構的處理器的聯合計算方式。在 AI 領域,常見的處理器包括:CPU(X86,Arm,RISC-V 等),GPU,FPGA 和 ASIC。(按照通用性從高到低排序)本文是 異構計算系列 的第二篇文章,重點介紹機器學習領域涌現的異構加速技術。github
在機器學習領域,異構計算技術的應用是近年來備受產業界和學術界關注的話題。在數據高速增加的背景下,異構計算技術是提高機器學習應用開發流程中「人」與 「機」的效率的重要途經。本文將結合機器學習應用的開發閉環對近期涌現的相關異構加速技術進行介紹。算法
如上圖所示,機器學習應用的開發閉環包括數據整合、特徵提取、模型的設計、訓練和驗證等多個環節。首先須要對原始數據進行匯聚整理,而後進行數據分析並提取數據特徵做爲模型輸入。在模型設計環節,須要對模型類型、優化算法和配置參數進行選擇。在模型訓練完成後,須要數據科學家根據模型驗證的結果對上游的各環節進行調整,例如補充新的數據源、擴展數據特徵、調整模型的選擇和參數設計,而後從新訓練和驗證模型,直到屢次迭代以後獲得使人滿意的結果。sql
先談談上述流程中的「人」。「有多少人工就有多少智能」這個現象在生產應用中較爲廣泛。上述流程中存在大量的人工決策環節,須要數據科學家根據專業知識和經驗進行合理決策。因爲應用場景的多樣性,通用的設計一般沒法知足各類場景下對機器學習系統的特定需求。數據科學家須要結合實際問題,經過大量的觀察分析以及屢次的嘗試和調優以後才能得到真正合適的設計。隨着機器學習理論方法和應用場景的日益豐富,數據科學家正面臨着史無前例的決策數量和難度。隨着工做難度的增長,人力對機器學習系統開發效率的影響也將逐漸增大,甚至成爲整個流程的瓶頸。數據庫
再談談「機」。從機器效率角度上看,上述迭代過程當中涉及到了大量的數據處理和計算操做。例如,在數據整合環節,涉及到多個數據源不一樣維度大量數據的關聯分析和清洗操做。特徵提取環節中原始數據的統計特徵分析以及特徵數據的構造和編碼均須要進行大量的浮點運算和矩陣運算。而在模型訓練和驗證環節會涉及到機器學習模型的訓練和推理計算,包含了大量的數值計算、矩陣運算和浮點運算操做。數據的飛速增加使得機器學習應用對計算機系統數據處理的性能要求日益嚴苛,上述環節的計算效率將直接影響到人工參與效率以及機器學習系統的總體迭代效率。api
異構加速技術對「人」與「機」的效率帶來了巨大的提高空間。當前的異構加速算法覆蓋了數據整合、特徵提取、模型訓練等環節。與傳統的基於 CPU 的算法相比,異構並行算法可得到一到兩個數量級的加速,顯著提高了機器的運算效率。另外一方面,異構加速技術幫助數據科學家更快的得到運算結果,並可有效加速 AutoML 的解空間搜索過程,提升設計與調優效率。緩存
下文將聚焦數據整合、特徵提取、模型設計調優、模型訓練四個環節,對其中涌現的新興異構計算技術進行介紹。性能優化
數據整合處於機器學習開發流程的上游,包括數據源整合,數據提取與數據清洗等工做。因爲各應用場景差別較大,數據源與數據類型紛繁複雜,數據整合階段所涉及的方法與工具至關豐富。其中數據庫、數據處理引擎、數據分析程序庫扮演了重要角色,分別應對數據匯聚、對接、通用數據處理、定製化數據處理等任務。架構
數據庫方面,ZILLIZ 面向 PostgreSQL 生態推出了 GPU 分析引擎 MegaWise [1][2],阿里巴巴在 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]。
異構計算在機器學習應用的開發閉環中對於提升「人」與「機」的效率展示出巨大潛力,部分庫、系統與產品已經應用於生產環境。但異構計算技術在人工智能領域仍處於快速發展期,進一步豐富工具鏈以及完善與已有生態的整合是異構計算技術加速落地的重要挑戰。當前異構計算技術的主要推進力是英偉達等技術巨頭,也涌現出一批如 ZILLIZ、Kinetica、OmniSci 等新興技術團隊,主流的計算框架如 Spark 等也逐步提升對異構計算的原生支持。能夠預見,異構計算將成爲人工智能應用領域的重要技術趨勢,在提升產品演進效率、下降設備與人工成本方面發揮相當重要的做用。
相關連接:
[1] MegaWise 簡介 https://zilliz.com/cn/docs/me..._intro
[2] MegaWise 技術初探:面向異構計算的查詢優化與編譯 https://zhuanlan.zhihu.com/p/...
[3] 阿里如何實現海量數據實時分析技術-AnalyticDB https://www.cnblogs.com/barry...
[4] BlazingSQL https://blazingsql.com/
[5] RAPIDS https://rapids.ai/
[6] Apache Spark 3.0 預覽版正式發佈,多項重大功能發佈 https://www.infoq.cn/article/...
[7] cuDF https://github.com/rapidsai/cudf
[8] OpenCL https://developer.nvidia.com/...
[9] cuString https://github.com/rapidsai/c...
[10] Arctern https://github.com/zilliztech...
[11] cuPy https://cupy.chainer.org/
[12] Accelerating Random Forests up to 45x using cuML https://medium.com/rapids-ai/...
[13] A New, Official Dask API for XGBoost https://medium.com/rapids-ai/...
做者簡介:
易小萌, ZILLIZ 高級研究員,於 2017 年得到華中科技大學計算機系統結構博士學位,曾加入華爲公有云架構設計團隊。主要的研究領域爲雲資源調度和異構資源調度。研究成果在 IEEE Network Magazine、IEEE TON、IEEE ICDCS、ACM TOMPECS 等期刊和會議上發表。
郭人通,華中科技大學計算機軟件與理論博士, ZILLIZ 技術總監。主要研究領域爲異構計算、緩存系統、分佈式系統。研究成果在 USENIX ATC 、 ICS 、 DATE 、 IEEE TPDS 等會議與期刊上發表。曾加入華爲雲深度學習團隊,目前在 ZILLIZ 從事異構數據分析系統的構建工做。
本專題爲ZILLIZ 與infoQ 的合做專題 ,文章出處請見: