深度學習框架的發展與展望(2019.3)

機器學習算法發展比較迅速,但爲了可以實現工程化的規模化應用,還須要穩定的框架和一致的流程的支持。html

目前的機器學習算法主要分爲兩類,即深度學習與傳統的機器學習。傳統的機器學習如隨機森林、主成分分析等主要是基於統計、機率的單層算法,通常都有複雜的計算公式;而深度學習是基於多層神經網絡的計算模式,響應函數每每並非很複雜,但多個層之間的傳導函數和學習(機率統計)後的參數的數據量比較大,訓練過程當中使用多個參數進行試驗的計算量也很是大,每每須要GPU或專用芯片才能更快地完成;根據應用數據和模式的不一樣,深度學習已經衍生出了大量的具體算法。python

傳統的機器學習算法已經有大量成熟的庫能夠直接調用,在Spark中也能夠經過MLlib進行機器學習模型參數的解算和應用。這裏,主要探討深度學習相關的技術和框架的發展及其將來可能的趨勢。算法

一、深度學習技術棧

主要包括:docker

  • 芯片與驅動軟件,提供傳統CPU/GPU以及新型神經網絡專用計算芯片和驅動軟件。
  • 存儲與計算設施,將大數據存儲、處理系統與深度學習相結合,並在雲計算中心提供服務。
  • 機器學習計算引擎,提供高性能神經網絡解算引擎(機率統計和線性代數的快速迭代計算)和DAG(計算圖)。
  • 基礎庫管理,包括訓練樣本庫、應用數據庫、模型參數庫、模型代碼庫的存儲、管理和處理、輸入輸出工具。
  • 運行框架與流程,提供運行環境、圖形化UI、標準流程、統一接口、語言與模型,支持集羣和雲計算環境。

二、芯片與驅動軟件

芯片與驅動軟件,提供傳統CPU/GPU以及新型神經網絡專用計算芯片和驅動軟件。目前訓練過程以CPU和GPU計算爲主,移動端應用以專用嵌入式芯片爲主。數據庫

  • Nvidia的GPU計算體系仍然是機器學習訓練的主流平臺,爲了加速訓練過程,Nvidia推出了DGX/HGX系列一體機,其中HGX-2 由 16 塊 NVIDIA® Tesla® V100 GPU 和 NVIDIA NVSwitch™ 高速計算平臺。提供了相應的軟件支持包(CUDA/Cognitive/Caffe2等,參閱 https://developer.nvidia.com/deep-learning-frameworks),以及容器的GPU支持引擎(Nvidia-docker),爲容器和Kubernetes集羣環境提供機器學習支持。
  • Intel的Xeon芯片提升了更爲強大的多核計算能力,並且在服務器上能夠組成多路,以及經過多節點集羣來進行並行化計算。對於計算負載不是特別大的任務能夠直接使用CPU完成。Intel同時也經過收購其它公司在服務器(Nervana™神經網絡處理器)和移動端(Movidius™ 神經計算模塊)的深度學習芯片上發力,試圖將CPU和FPGA的計算能力實現整合,目前應用還在開發之中。
  • 專用的神經網絡芯片發展迅速,主要有FPGA(現場可編程門陣列)、DSP(數字信號處理)、ASIC(專用集成電路)、ARM擴展模塊等技術路線,具備速度快、帶寬高、功耗低、體積小的優點,主要面向移動和嵌入式系統。muqian 主要的廠家有蘋果、高通、華爲、商湯科技、地平線、中芯、Face++、比特大陸等,並且不少廠家在芯片裏已經固化了圖像處理、目標識別等基礎模型和算法,能夠快速集成到手機或其餘設備之中,目前主要功能以人臉識別、照片分類、圖像處理、圖像風格遷移、圖像超分辨率重建、車牌識別、智能安防、自動駕駛、無人機姿態保持與位置追蹤等領域爲主。

三、存儲與計算設施

深度學習的訓練和應用每每涉及到大量的數據存儲和處理,與大數據技術的存儲和計算體系有密切的聯繫。目前新型的Linux基礎存儲管理軟件如ZFS/Btrfs能提供更好的數據IO和磁盤管理能力,開源的HDFS/GlusterFS/Ceph等提供分佈式的集羣存儲,Hadoop/Spark等提供集羣化的計算能力,都可以更好地知足企業和科研機構自行搭建深度學習平臺的須要。apache

大型雲計算廠商(如Amazon、Azure、Google、Aliyun、Huawei以及Databrick、Nvidia)等都提供了基於雲計算模式的深度學習基礎設施服務,包括虛擬主機(預裝了深度學習軟件,支持GPU加速)、核心引擎和部分算法以及實驗數據。能夠購買相應的服務器實例便可快速啓動本身的機器學習服務,並且能夠經過雲計算中心來擴展本身的節點從而縮短模型訓練的整體時間。不過對於國內來講,目前租用機器學習服務器實例的成本仍是比較高的,並且帶寬較低會影響大量數據上傳、下載的效率。編程

四、深度學習計算引擎

深度學習引擎包括基礎的機率統計、線性代數的計算模塊,以及根據具體應用開發的算法模型和模型參數庫。服務器

4.1 基礎計算引擎

目前有多種普遍採用的深度學習神經網絡計算引擎,包括:網絡

  • Tensorflow,提供基於圖(Graph)的張量計算引擎,2019.03.06發佈了2.0版本。支持服務器、工做站和嵌入式設備, 目前有大量的外圍庫和領域模型可供使用。
  • MXNet,目前是1.4.0版本,由Apache基金會支持,目前還處於孵化階段。MXNet的高層接口是Gluon,Gluon同時支持靈活的動態圖和高效的靜態圖,既保留動態圖的易用性,也具備靜態圖的高性能。Amzon的機器學習雲實例主要採用MXNet。
  • PyTorch/Caffe2,主要是FaceBook支持,也是普遍使用的深度學習庫,在圖像處理(分割、重建、識別等)方面有大量的應用模型。
  • SciKit/NumPy,是在Python科學計算中普遍使用的數學庫,加入了更多的神經網絡算法,能夠用於機器學習和深度學習。
  • ......

4.2 應用算法模型

深度學習的應用模塊包括擴展模塊、領域模型兩種主要類型。擴展模塊與核心引擎高度相關,提供數據的預處理、輸出/輸出、格式交換等功能。領域模型以文字處理、語音識別、圖像處理、目標識別等爲主,已經發展出了多種應用模型和軟件、設備,如智能攝像頭、智能停車收費、同聲翻譯機、智能音箱、圖像風格遷移、照片換臉、視頻套用、機器做曲、機器繪畫、自動駕駛等等應用,也在醫療、安防等專業領域作出了有益的嘗試。其中,一些開源的應用算法模塊和系統包括:數據結構

  • 測試框架OpenAI CharterOpenAI發起的開源項目。
  • 交換格式,ONNX試圖在多種計算引擎間共享算法模型,從而簡化應用端的工做。
  • 圖像分割,實現圖形的區域分割,是圖像精確分類、目標識別、自動駕駛等應用的基礎算法,已經有大量的針對不一樣應用的算法模型。
  • 風格遷移,將圖片從一種風格轉換爲另外一種風格,如將黑白照片上爲彩色,將普通照片變爲優化等等。著名的DayDream項目能夠將多個照片合成爲虛幻的畫做。
  • 文字處理,經過神經網絡來實現分詞、搜索、合成,以及文章創做等高級功能。
  • 語音識別,將語音轉換爲文字,是自動翻譯的前置步驟。目前成熟度比較高,DeepMind/Amazon/訊飛/小米/華爲等都研究該領域的技術,實現語音控制App、智能音箱、即時翻譯等產品。
  • 語音合成,將文字轉爲語音,與傳統TTS不一樣的是,不只能夠將文字轉爲聲音,還能匹配語音的風格,以及從現有語音提取風格並予以模擬,已經能夠達到亂真的程度,成功經過盲測。
  • 圖像合成,將不一樣圖像的部分合成爲新的圖像,如著名的換臉程序-Deepfake能夠將視頻中的頭像與其它視頻的部分合成爲一體,造出虛假的視頻,若是與語音仿真結合起來,能夠製造出很難識別的虛假圖像和視頻。
  • 圖像修復,用於圖像修復,如填充、摳圖、去除圖像污漬、消除多餘目標等。
  • 圖像超分辨率重建,從低分辨率圖像生成高精度圖像,提高顯示效果。NVidia使用實時超分辨率技術提升遊戲畫面的精細程度,效果很是驚人。
  • 人臉識別,主要用於身份驗證(支持手機解鎖、手機支付、入場檢測等等),已經比較成熟,開始逐步取代指紋驗證方式。
  • 車牌識別,用於自動化的停車收費系統、車輛出入控制、違章駕駛監測等等,已經比較成熟,開始普遍使用。
  • 目標識別,從比較圖像中檢測出目標圖像,並進行分類識別。包括對假裝目標的檢測,自動化製圖,變化檢測等等應用方向。
  • 醫療圖像,對疾病圖像進行深度學習後,根據模型來自動判讀各類醫療圖像,識別異常部位和病理目標,實現自動診斷疾病。
  • 地球科學,進行空間圖譜分析、全球變化監測,用於土地利用分類、土地用途管制的遙感影像自動檢測,水體、大氣污染與模式識別,災害天氣識別與預警等等。
  • 機器視覺,用於識別周圍環境,能夠用於自動化設備、機器人、損傷檢測等工做。大疆無人機用其實現避障、姿態控制等功能。
  • 自動駕駛,經過對全向雷達和360圖像的智能處理,對車道和周邊環境實時感知、重建、識別,計算出最佳駕駛行爲並控制車輛。

五、基礎庫管理

機器學習平臺會使用到大量的數據庫,包括訓練樣本庫、應用數據庫、模型參數庫、模型代碼庫的存儲、管理和處理、輸入輸出工具,能夠經過大數據平臺或雲存儲、網絡存儲等平臺進行管理和快速提取。

  • 訓練樣本庫。收集的標準實驗數據,已經進行標記,用於在「機器學習」過程將特徵值與標記值創建函數關係。
    • 在神經網絡中,該函數關係使用函數和參數集合來表達,使用多層網絡來構建該超參數集。
    • 每每須要對模型參數、層數進行屢次實驗,計算出偏差值,而後進行逐步逼近最佳參數。
  • 應用數據庫。須要求算最終標記值的原始數據集,如人臉識別中新採集的圖像。將輸入「學習到」的神經網絡函數和參數表達式,進行目標的判別解算。
  • 模型參數庫。除函數以外,深度學習須要大量參數來控制網絡函數的傳導。這些參數與調參代碼、基礎函數共同構成完整的模型。
  • 模型代碼庫。可使用Gitlab等版本管理系統進行管理。

六、深度學習框架與流程

除了TensorFlow之類的核心計算架構外,深度學習還須要與存儲、計算、網絡、客戶端等計算基礎設施打交道,就須要構建一個運行框架(包括服務、接口、應用),並造成一個標準化的流程,實現基礎數據的管理和動態數據的學習和應用,並進一步實現反饋,實現自我優化學習,不斷精煉模型參數。

  • 運行環境。如今的趨勢是將機器學習的訓練環境放入容器中運行,而後經過Kubernetes來實現實例調度和容錯、擴容等能力。從而能夠在多種環境包括雲計算中心間進行遷移和快速擴容,知足大規模的訓練和應用的「機器智能」計算服務需求。
  • 調度框架。Kubernetes提供了實例的調度、虛擬網絡、虛擬存儲和服務聚合機制,可是實例之間須要進行實時通信以共享深度學習的參數庫,以便進行模型的總體優化,這須要專門開發相應的機制來實現。
    • TensorFlow經過gRPC調用來實現多個節點的通信和集羣化數據同步,內置支持但與其它的服務架構(如REST/Kubernetes)融合管理有點複雜。
    • Spark的RDD能夠在多個節點間高速同步數據(共享內存數據結構),也是能夠用做超參數管理的(目前尚未用到),是理想的機制。
    • 共享數據庫能夠經過傳統的數據庫來保存和共享超參數,能夠支持事物保持一致性,但高頻次查詢的性能有必定影響。
    • 共享存儲能夠經過HDFS/Ceph/Gluster或其它網絡存儲服務等保存和共享超參數,容量大但同步機制還須要本身加鎖。
  • 工做流程。深度學習須要通過數據導入、整理、歸一化、標記等預處理過程,實驗、評估、調參等訓練過程,模型導出、環境遷移、軟件開發、集成整合、測試驗證等應用過程。流程的每一環節都須要相應的軟件工具和工做方法論支持,才能順利完成。

深度學習框架須要考慮到基礎環境、數據同步機制和工做流程,從而提供一個單一的軟件工具給開發者使用,簡化目前的散亂的機器學習研究方法和基礎設施,造成能夠標準化交付的軟件和應用模型,實現工程化應用。正在開發的框架包括:

  • Kubeflow,專爲Kubernetes而設計的深度學習系統。採用TesnorFlow做爲主要的計算內核(能夠支持其它計算引擎,開發中),使用ksonnet做爲應用部署工具(這與Helm安裝不太同樣),能夠支持Argo CD做爲DevOps工具,集成了JupuyterHub的Notebook交互服務,能夠批量執行訓練任務。Kubeflow目前版本0.4.1,還在快速迭代之中。
  • MLflow,由Spark的主要開發者DataBricks提出並開發,能夠運行於任何環境的python庫,實現模型試驗、結果比較與可視化、模型打包輸出、重複使用的完整流程,目前版本爲0.8.2。能夠運行於基本python環境以及標準的JupyterHub環境中,適應性很是好,使用比較簡單,可以整合到整個python的生態環境之中,從而能夠利用大量的python模塊和幾乎全部的機器學習模型。
  • AirFlow,是基於DAG(有向無環圖)的通用的可編程計算工做流支持軟件,正在開發Kubernetes的Operator,提供對容器集羣的支持。深度學習的算法能夠經過工做節點整合到整個流程之中,從而提供完整的機器學習一體化流程。目前版本是1.10.2,還沒有提供對深度學習計算的針對性支持(如模型管理、訓練任務、參數調優、模型輸出等),但能夠經過其它python庫和容器來完成。
  • Nauta,是英特爾針對Kubernetes環境開發的深度學習開源工具,目前主要爲Intel Xeon而優化,還處於早期開發階段。Nauta集成了JupyterHub,採用TensorFlow做爲計算引擎,Kubernetes和Docker做爲運行環境。

上面的框架雖然支持分佈式環境,能夠在多個節點間分派任務,可是多個節點還沒有實現同步訓練,有待進一步開發。除此以外,mxnet/pytorch/aws/azure/IBM/aliyun/huawei等也都在試圖發展相應的深度學習框架和流程支持軟件,部分已經進入試運行狀態。

更多機器學習框架參考

相關文章
相關標籤/搜索