分佈式技術與人工智能

1.什麼是人工智能

1.1人工智能概述

目前人工智能已經廣泛滲入到了我們的生活中,比如手機拍照美化、人臉識別、平安城市、自然語言處理、語音識別等。對人工智能的定義一般可劃分爲四類即:

  1. 機器“像人一樣思考”
  2. “像人一樣行動”
  3. “理性地思考”
  4. “理性地行動”。

注意:這裏的行動,指的是採取行動或制定行動的決策。

那麼如何讓機器像人一樣具有智能呢?人並不是天生就會解決問題的,我們經常會聽到一句經典的話“見多識廣”,人遇到新的問題,是通過學習新知識,然後結合自己的經驗去解決問題的。比如,人並不是生來就認識蘋果,而是通過後天的學習(包括學習蘋果的形狀、顏色、口味等)來獲取識別蘋果的經驗,當下次再看到蘋果時,就知道這是蘋果了。
通過人工智能讓機器模擬人的智能也是類似的過程,首先需要通過大量的數據進行學習和分析獲得規律(即建立一個模型),然後利用該規律或模型對未知數據進行預測,以判斷是否與建模數據具有相同特徵。

1.2人工智能核心

數據、模型(也叫作算法)、算力是人工智能的三大核心。其中在一定程度上數據決定了機器學習的上限,而模型爲逼近這個上限提供方法,因此數據處理和模型訓練是人工智能的關鍵技術算力決定了數據處理和模型訓練的實用性能而分佈式技術爲解決算力問題提供核心技術保障
在後面章節就對數據處理模型訓練進行具體分析,來介紹人工智能中需要用到哪些分佈式技術來解決算力問題。

2.數據處理

數據處理又稱數據預處理,是指通過數據統計、數據集成、數據清理、數據規約、數據變換等方法,對數據缺失、數據噪聲、數據冗餘、多數據源等問題進行處理以得到高質量數據,爲模型訓練提供高質量輸入,是人工智能不可缺少的環節。
其實,數據處理類似於我們的知識整理過程。一個精心打造的、體系化梳理過的專欄文章,可以幫助我們在學習一門課程時,少走彎路、避免踩雷、達到事半功倍的效果。
同樣地,一個精心處理過的數據集,對於人工智能的模型訓練也能起到事半功倍的效果,一方面可以縮短機器學習的週期,另一方面也可以提高機器學習的質量。
數據預處理的方法:

  • 數據統計(Data Statistics):數據統計是數據預處理的第一步,其範圍、規模、方式等會直接影響數據分析的結果。常見的統計特徵有最大值、最小值、均值、中位數、方差、標準差等。
  • 數據集成(Data Integration):數據的收集有多種途徑,比如文件數據、數據庫數據、問卷數據等,而不同的數據源,其數據的存儲方式、命名規則、單位等不盡相同,所以我們需要數據集成來將多個數據源的數據整合到一起,以保證數據結構、屬性的一致性,並去除冗餘數據,方便後續分析。
  • 數據清理(Data Cleaning):由於用戶忘記或設備損壞,經常會造成部分數據缺失;由於儀器故障或用戶填寫錯誤,經常會出現數據錯誤(噪聲數據)等。如果不對這些數據做任何處理,後面的模型訓練過程將產生嚴重偏差。數據清理過程就是用來解決這個問題的,它可以通過平均值或衆數等來填充丟失值或修改這些噪聲值。
  • 數據規約(Data Reduction):由於機器學習中的數據量很大,因此會導致很多重複的特徵,或者很多不重要的特徵(比如 ID 號等)。數據規約的目的就是去除重複特徵及不重要的特徵,從而減少數據的維度或者數據量,降低問題複雜度,同時不影響後面訓練的結果。數據規約的方法有主成分分析法 (Principal Component Analysis,PCA)、小波變換 (Wavelet Transform,WT) 等。
  • 數據變換(Data Conversion):數據經過集成、清理與規約等步驟後,要將數據進行標準化、離散化、分層化,使得數據更加一致、更加容易被模型處理。數據變換方法主要有數據標準化、數據離散化和數據泛化三類。

數據預處理可以拆分成多個步驟進行。對於小樣本數據處理時,單臺機器的處理能力就足夠了,但是對於大規模數據就需要通過分佈式技術進行數據處理了。
目前,業界已經有很多大數據處理軟件,比如:

  • 分佈式計算框架 :MapReduce、Spark;
  • 分佈式存儲框架 HDFS、HBASE 等,來進行分佈式數據處理;

2. 分佈式模型訓練

2.1 模型訓練

模型訓練就是不斷通過已有數據進行驗證增強,最終給出最適合的模型參數,以此來預測給定的未知數據。簡單講,模型訓練就是從已知數據中找到規律
比如有一堆橘子和西瓜,可以通過模型訓練得到:大的、綠色的判定爲西瓜,小的、黃色的判定爲橘子。那麼當給出一個未知數據時,我們通過它的大小及顏色信息就可以判斷該水果是橘子還是西瓜。這就是模型訓練。其中,大小和顏色屬於預測的兩個特徵,而它們的具體數值 (比如,大於 10 釐米等,顏色 RGB 的數值範圍)就是模型參數。

2.2 分佈式模型訓練

隨着大數據時代的到來,人工智能技術逐漸向大規模訓練數據、大模型訓練等方向發展。比如,百度的 Deep Speech 2 系統使用了 11940 小時的語音數據以及超過 200 萬句表述來訓練英語的語音識別模型;2011 年穀歌訓練出擁有十億個參數的超大神經網絡模型。很明顯,單臺計算機的存儲能力、計算能力已經不能滿足了,因此分佈式模型訓練誕生了。
研究表明,在一臺具有一個現代 GPU 的單臺機器上完成一次基於 ImageNet 數據集的訓練要耗費多達一週的時間。這還僅僅只是一次訓練迭代的時間,如果是比較嚴格的生產級業務,至少需要數十次迭代,訓練累計時間將會達到數十週。試想一下,如果一個業務僅僅是模型訓練就花費數十週,那麼等到真正上線,恐怕最佳時間窗口也已經過去了。
而在多臺機器上的分佈式訓練無疑能極大減少訓練時間:

  • 使用一個包含 2048 個 GPU 的集羣將 ImageNet 的訓練時間降低到了 4 分鐘。
  • TensorFlow 是由 Google 首創且在業內非常流行的開源機器學習框架,它的分佈式版本利用了 GPU 加速服務器的虛擬化集羣,將深度學習的訓練時間從數週縮短到數小時。
  • 分佈式訓練可以大大提升訓練效率,大幅縮短訓練時間,從而縮短業務面市週期,所以各大公司都在研究分佈式訓練,比如華爲、IBM、阿里巴巴等。

分佈式模型訓練是利用分佈式集羣,將多個計算機的存儲能力、計算能力等進行統一管理和調度,從而實現模型訓練

2.3 分佈式模型訓練的方法

不同的場景,採用的分佈式模型訓練的方法也不一致,主要包括:數據分佈式訓練模型分佈式訓練混合模型訓練三類。

2.3.1 數據分佈式訓練

數據分佈式訓練主要是針對大規模訓練數據的場景。如下圖所示,數據分佈式訓練是在每個節點(每臺服務器)上都存儲或運行一個完整的模型訓練程序,將大規模數據進行劃分,然後將劃分後的數據子集分配到多個節點上,每個節點根據自己接收到的數據進行訓練。
在這裏插入圖片描述
首先,每個節點會根據自己擁有的數據子集訓練出一個子模型,同時,按照一定的規則與其他節點進行諸如交互子模型參數或參數更新等信息的通信,最終,保證可以有效整合來自各個節點的訓練結果以得到全局的機器學習模型。比如,每個節點訓練一個子模型得到自己的參數,最終的模型爲多個節點的參數取平均值。
綜上所述,數據分佈式有如下兩個重要信息:

  • 數據拆分:數據需拆分存儲到不同的節點進行訓練,因此涉及了數據的拆分方法、數據的分佈式存儲和管理,其中數據拆分方法主要有兩類:對訓練樣本進行劃分和對每個樣本的維度進行劃分,這是非常基礎的方法。
  • 節點之間需要通信交互信息分佈式通信是實現任何分佈式技術的底座,沒有分佈式通信技術,分佈式模型訓練猶如紙上談兵。

2.3.2 模型分佈式訓練

模型分佈式訓練針對的主要是大模型訓練場景,在分佈式領域中也被稱爲任務並行或任務分佈式。
如下圖所示,模型分佈式訓練是指將大模型進行拆分,然後將拆分後的子模型分配到不同的節點上進行訓練。

模型分佈式與數據分佈式訓練不同的是:

  • 首先,每個節點上只存儲和運行部分模型訓練程序,而不是完整的模型訓練程序;
  • 其次,各個子模型之間存在較強的依賴關係,比如節點 1 的輸出是節點 2 和節點 3 子模型的輸入,因此節點之間需要進行中間計算結果的通信。
    在這裏插入圖片描述
    綜上所述,模型分佈式訓練包含如下兩個關鍵信息:
    1.大模型拆分爲多個小模型,其本質是將大任務拆分爲多個子任務,而子任務之間的拆分,需要運用包括流水線、MapReduce 等在內的多種分佈式計算模式。
    2.不同節點上的子任務之間,需要通過通信交互中間計算結果,涉及分佈式通信技術。

2.3.3 混合模型訓練

混合模型訓練,主要是針對大規模訓練數據和大模型訓練共存的場景。
所謂混合模型訓練,就是將數據分佈式訓練和模型分佈式訓練結合起來。如下圖所示,假設有一個多 GPU 集羣系統,首先對模型進行拆分,將子模型分配到單節點上不同的 GPU,然後對數據進行劃分,每個節點負責訓練一部分數據,最後進行模型參數同步得到全局參數和全局模型。
在這裏插入圖片描述
從混合模型訓練的流程可以看出:

  • 單節點或多節點實現模型並行或模型分佈式訓練,涉及模型拆分、並行與分佈式計算模式等;
  • 多節點之間實現了數據分佈式訓練,涉及數據的拆分方法和數據的分佈式存儲和管理等技術;
  • 單節點之間的模型分佈式訓練,需要單節點上多進程之間通信;
  • 多節點之間的分佈式訓練需要跨節點跨進程通信。

3.總結

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章