終于有人把分布式機器學習講明白了
?分布式機器學習也稱分布式學習,是指利用多個計算節點(也稱工作節點,Worker)進行機器學習或者深度學習的算法和系統,旨在提高性能、保護隱私,并可擴展至更大規模的訓練數據和更大的模型。
聯邦學習可以看作分布式學習的一種特殊類型,它可以進一步解決分布式機器學習遇到的一些困難,從而構建面向隱私保護的人工智能應用和產品。
1.分布式機器學習的發展歷史
近年來,新技術的快速發展導致數據量空前增長。機器學習算法正越來越多地用于分析數據集和建立決策系統。而由于問題的復雜性,例如控制自動駕駛汽車、識別語音或預測消費者行為(參考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和加速器在主要的云數據中心中更加常見。因此,機器學習工作負載的并行化對大規模實現可接受的性能至關重要。然而,當從集中式解決方案過渡到分布式系統時,分布式計算在性能、可伸縮性、故障彈性或安全性方面面臨嚴峻挑戰。
2.分布式機器學習概述
由于每種算法都有獨特的通信模式,因此設計一個能夠有效分布常規機器學習的通用系統是一項挑戰。盡管目前分布式機器學習有各種不同的概念和實現,但我們將介紹一個覆蓋整個設計空間的公共架構。一般來說,機器學習問題可以分為訓練階段和預測階段(見圖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 分布式機器學習拓撲結構
3.分布式機器學習與聯邦學習的共同發展
分布式機器學習發展到現在,也產生了隱私保護的一些需求,從而與聯邦學習產生了一些內容上的交叉。常見的加密方法,如安全多方計算、同態計算、差分隱私等也逐漸應用在分布式機器學習中。總的來說,聯邦學習是利用分布式資源協同訓練機器學習模型的一種有效方法。
聯邦學習是一種分布式機器學習方法,其中多個用戶協同訓練一個模型,同時保持原始數據分散,而不移動到單個服務器或數據中心。在聯邦學習中,原始數據或基于原始數據進行安全處理生成的數據被用作訓練數據。聯邦學習只允許在分布式計算資源之間傳輸中間數據,同時避免傳輸訓練數據。分布式計算資源是指終端用戶的移動設備或多個組織的服務器。
聯邦學習將代碼引入數據,而不是將數據引入代碼,從技術上解決了隱私、所有權和數據位置的基本問題。這樣,聯邦學習可以使多個用戶在滿足合法數據限制的同時協同訓練一個模型。
本文摘編自《聯邦學習:算法詳解與系統實現》(ISBN:978-7-111-70349-5),經出版方授權發布。?