分散式機器學習也稱為分散式學習,是指利用多個運算節點(也稱為工作節點,Worker)進行機器學習或深度學習的演算法和系統,旨在提高效能、保護隱私,並可擴展至更大規模的訓練資料和更大的模型。
聯邦學習可以看作分散式學習的一種特殊類型,它可以進一步解決分散式機器學習遇到的一些困難,從而建立面向隱私保護的人工智慧應用和產品。
近年來,新技術的快速發展導致資料量空前成長。機器學習演算法正越來越多地用於分析資料集和建立決策系統。而由於問題的複雜性,例如控制自動駕駛汽車、辨識語音或預測消費者行為(參考Khandani等人2010年發表的文章),演算法解決方案並不可行。
在某些情況下,單一機器上模型訓練的較長運行時間促使解決方案設計者使用分散式系統,以增加並行度和I/O頻寬總量,因為複雜應用程式所需的訓練資料可以很容易就達到TB級。
在其他情況下,當資料本身是分散式的或量太大而無法儲存在單一機器上時,集中式解決方案甚至不可取。例如,大型企業會對儲存在不同位置的資料進行交易處理,或因資料量太大而無法移動和集中。
為了使這些類型的資料集可以作為機器學習問題的訓練資料被訪問,必須選擇並實現能夠並行計算、適應多種資料分佈和擁有故障復原能力的演算法。
近年來,機器學習技術已被廣泛應用了。雖然出現了各種相互競爭的方法和演算法,但使用的數據表示在結構上非常相似。機器學習工作中的大部分計算都是關於向量、矩陣或張量的基本轉換,這些都是線性代數中常見的問題。
幾十年來,對這種操作進行最佳化的需求一直是高效能運算(High Performance Computing,HPC)領域高度活躍的研究方向。因此,一些來自HPC社群的技術和函式庫(例如,BLAS或MPI)已經被機器學習社群成功地採用並整合到系統中。
同時,HPC社群已經確定機器學習是一種新興的高價值工作負載,並開始將HPC方法應用於機器學習。
Coates等人在他們的商用高效能運算(COTSHPC)系統上用短短三天訓練了一個含有10億個參數的網路。
You等人於2017年提出在Intel的Knights Landing上優化神經網路的訓練,Knights Landing是一種為高效能運算應用設計的晶片。
Kurth等人於2017年示範了深度學習問題(如提取天氣模式)是如何在大型並行HPC系統上進行最佳化和擴展的。
Yan等人於2016年提出透過借用HPC的輕量級分析等技術建模工作負載需求,可解決在雲端運算基礎架構上調度深度神經網路應用的挑戰。
Li等人於2017年研究了深度神經網路在加速器上運行時針對硬體錯誤的恢復特性(加速器經常部署在主要的高效能運算系統中)。
同其他大規模運算挑戰一樣,我們有兩種基本上不同且互補的方式來加速工作負載:為一台機器添加更多資源(垂直擴展,例如GPU/ TPU運算核心的不斷提升),為系統增加更多節點(水平擴展,成本低)。
傳統的超級電腦、網格和雲端之間的界限越來越模糊,尤其在涉及機器學習等高要求的工作負載的最佳執行環境時。例如,GPU和加速器在主要的雲端資料中心中更常見。因此,機器學習工作負載的並行化對大規模實現可接受的效能至關重要。然而,當從集中式解決方案過渡到分散式系統時,分散式運算在效能、可伸縮性、故障彈性或安全性方面面臨嚴峻挑戰。
由於每個演算法都有獨特的通訊模式,因此設計一個能夠有效分散常規機器學習的通用系統是一項挑戰。儘管目前分散式機器學習有各種不同的概念和實現,但我們將介紹一個涵蓋整個設計空間的公共架構。一般來說,機器學習問題可以分為訓練階段和預測階段(見圖1-5)。
▲圖1-5 機器學習結構。在訓練階段,使用訓練資料和調整超參數對ML模型進行最佳化。然後,將訓練好的模型部署到系統中,為輸入的新資料提供預測
訓練階段包括訓練一個機器學習模型,透過輸入大量的訓練數據,並使用常用的ML演算法,如演化演算法(Evolutionary Algorithm,EA)、基於規則的機器學習演算法(Rule-based Machine Learning algorithm,例如決策樹和關聯規則)、主題模型(Topic Model,TM)、矩陣分解(Matrix Factorization)和基於隨機梯度下降(Stochastic Gradient Descent,SGD)的演算法等,進行模型更新。
除了為給定的問題選擇一個合適的演算法之外,我們還需要為所選的演算法進行超參數調優。訓練階段的最終結果是獲得一個訓練模型。預測階段是在實務中部署經過訓練的模型。經過訓練的模型接收新資料(作為輸入),並產生預測(作為輸出)。
雖然模型的訓練階段通常需要大量的計算,並且需要大量的資料集,但是可以用較少的計算能力來執行推理。訓練階段和預測階段並不是互相排斥的。增量學習(Incremental learning)將訓練階段和預測階段結合,利用預測階段的新資料對模型進行連續訓練。
當涉及分散式時,我們可以用兩種不同的方法將問題劃分到所有機器上,也就是資料或模型並行(見圖1-6)。這兩種方法也可以同時應用。
▲圖1-6 分散式機器學習中的平行性。資料並行性是在訓練資料集的不同子集上訓練相同模型的多個實例,而模型並行性是將單一模型的平行路徑分佈到多個節點上
在資料並行(Data Parallel )方法中,系統中有多少工作節點,資料就被分區多少次,然後所有工作節點都會對不同的資料集應用相同的演算法。相同的模型可用於所有工作節點(透過集中化或複製),因此可以自然地產生單一一致的輸出。此方法可用於在資料樣本上滿足獨立同分佈假設的每個ML演算法(即大多數ML演算法)。
在模型並行(Model Parallel)方法中,整個資料集的精確副本由工作節點處理,工作節點操作模型的不同部分。因此,模型是所有模型部件的聚合。模型並行方法不能自動應用於每一種機器學習演算法,因為模型參數通常不能被分割。
一種選擇是訓練相同或相似模型的不同實例,並使用整合之類的方法(如Bagging、Boosting等)來聚合所有訓練過的模型的輸出。最終的架構決策是分散式機器學習系統的拓樸結構。組成分散式系統的不同節點需要透過特定的體系結構模式連接,以實現豐富的功能。這是一個常見的任務。然而,模式的選擇對節點可以扮演的角色、節點之間的通訊程度以及整個部署的故障復原能力都有影響。
圖1-7顯示了4種可能的拓撲,符合Baran對分散式通訊網路的一般分類。集中式結構(圖1-7a)採用嚴格的分層方法進行聚合,它發生在單一中心位置。去中心化的結構允許中間聚合,當聚合被廣播到所有節點時(如樹拓撲),複製模型會不斷更新(圖1-7b),或使用在多個參數伺服器上分片的分區模型(圖1-7c)。完全分散式結構(圖1-7d)由獨立的節點網路組成,這些節點將解決方案整合在一起,並且每個節點沒有被分配特定的角色。
▲圖1-7 分散式機器學習拓樸結構
分散式機器學習發展到現在,也產生了隱私保護的一些需求,從而與聯邦學習產生了一些內容上的交叉。常見的加密方法,如安全多方計算、同態計算、差分隱私等也逐漸應用在分散式機器學習中。總的來說,聯邦學習是利用分散式資源協同訓練機器學習模型的有效方法。
聯邦學習是一種分散式機器學習方法,其中多個使用者協同訓練一個模型,同時保持原始資料分散,而不移動到單一伺服器或資料中心。在聯邦學習中,原始資料或基於原始資料進行安全處理所產生的資料被用作訓練資料。聯邦學習只允許在分散式運算資源之間傳輸中間數據,同時避免傳輸訓練數據。分散式運算資源是指終端使用者的行動裝置或多個組織的伺服器。
聯邦學習將程式碼引入數據,而不是將數據引入程式碼,從技術上解決了隱私、所有權和數據位置的基本問題。這樣,聯邦學習可以使多個使用者在滿足合法資料限制的同時協同訓練一個模型。
本文摘編自《聯邦學習:演算法詳解與系統實作》(ISBN:978-7-111-70349-5),經出版方授權發布。
以上是終於有人把分散式機器學習講明白了的詳細內容。更多資訊請關注PHP中文網其他相關文章!