hello乾貨:聯邦學習工程實踐中的三大難題

“實踐是檢驗真理的唯一標準”,聯邦學習談概念的文章已經很多,今天我們來從實踐中聊幾個實事求是的問題。

聯邦學習領域已有衆多論文支撐,但在實踐中,因爲涉及到多學科的交叉,真正能落地應用的平臺,少之又少。所以市面上雖有三四十家做聯邦學習的公司,但是能真正亮相產品僅有七八家。這應該是一個比較正常的現象,因爲聯邦學習工程落地所面臨的挑戰遠遠比理論複雜。

斷點訓練

斷點訓練 是指聯邦學習過程中“訓練可暫停”,如果發生多方之間的網絡異常造成超時,待網絡恢復正常後,聯邦學習模型可從上次的斷點開始繼續訓練,而避免重新開始。

這在我們的客戶實際環境中非常重要,因爲多方機構之間進行聯合建模,無法預見和避免網絡之間連接不穩定,一旦發生斷網,普通的time out機制容易讓學習過程超時或者異常退出。可能各家聯邦學習平臺的產品大多進行了網絡不穩定的報警,這種處理是比較簡單粗糙的,做一個心跳機制,不間斷地去測試多方之間的網絡情況,併發出日誌報警。但是這種簡單的處理方式只能幫助定位聯邦學習建模過程出現的異常。試想,如果客戶花了2小時眼看模型馬上訓練出來,進度條到99%的時候,突然time out了,是不是想死的心都有?這在用戶體驗上是極其不友好的。

下面我給出一種基於監控回調的處理方案:


“基於zookeeper的監控回調”斷點訓練方案
過程簡要描述如下:直接選取zookeeper作爲節點監控管理的原型,它的心跳機制非常適合監控節點網絡,它的watch()函數會自動觸發對timeout的回調,重新回調的方法,可以將各自節點聯邦學習訓練的當前參數和狀態保持一份完整的快照,這份訓練過程中的快照數據可以作爲下一次訓練的初始狀態,通過load()預加載,從而實現建模的斷點訓練。就邏輯迴歸算法而言,這個快照包含的內容有:本地節點的權重weight、當前樣本的批次batch、當前shuffle、部分梯度gradient等過程參數。
延伸一點,斷點訓練解決單次訓練過程異常問題;另外有一個是機器學習都可能碰到的問題是 增量學習,簡言之第一次訓練的模型結果如何集成到第二次增量的樣本中進行訓練,這裏先不展開。
加速訓練

加速訓練 是指對聯邦學習算法的提速,聯邦學習還未在數據應用市場大規模使用的原因之一是建模速度,相比傳統的本地建模,目前聯邦學習所消耗的時間是傳統方式的十倍甚至百倍。

分佈式的機器學習面臨最大的挑戰是網絡間的通信和節點的計算開銷,這就好比本來在一個存儲計算環境裏能完成的機器學習建模,現在要用聯邦(分佈式)的方式,將算法平鋪到網絡上。聯邦學習平臺工程化的適合,需要非常關注算法流程的最優化設計。我們且認爲當前學術水平下的算法理論已經在一個比較穩定的水平,那麼聯邦學習的計算總量不變,工程師需要重點考慮如何平衡訓練過程的開銷。在實踐過程中,我們重點考慮4個方向的訓練加速:

加密算法的加速:

比如利用GPU,將加密算法儘量打散做並行,儘量減少GPU和CPU之間的交互頻次;

學習算法的加速:

比如我們在設計聯邦學習機器學習算法的時候,儘量做到子模塊的低耦合,理清楚子模塊的依賴和並行關係,對算法流程進行深度的重新編排;

節點通信的加速:

這是非常重要的,基於流程的依賴關係,最大化地減少通信次數,這個需要不斷優化,甚至是在同步異步的使用上;

代碼的加速:

成千上萬次的循環,我們傾向用更底層的語言來構建算子,比如 C++,這更有助於我們是用一個float還是用double來定義循環體裏面的參數,因爲你一定要相信,短一點的字符串、少一次循環體,都可能在整個聯邦學習建模開銷上帶來一個數量級的提升。(代碼工程是一個細膩的活,特別是對聯邦學習而言,請你細品。)

集羣訓練

集羣訓練 是指聯邦學習“機器可擴張”,通常聯邦學習依賴比較高的配置,而且學習是不是能順利、快速完成很大程度上依賴於服務器資源是否能滿足給定的樣本數量、特徵維度數量。

舉個例子,我們用40核128G配置的機器,測試100,000樣本800特徵的規模,設置迭代5次,採用比較常用的邏輯迴歸算法,耗時在100分鐘左右。這個結果在目前國內主流的幾個聯邦學習平臺上算是表現比較出色的。但是,聯邦學習的時耗會隨着樣本規模的擴大呈現非線性增長,這是一個很大的挑戰。負責learning的機器即使用最高配置,也會面臨機器性能的天花板。

聯邦學習平臺必須支持簡易的機器橫向擴展,就像hadoop面向大數據行業的初衷就是“不夠了,加一臺”就可以支持更大數據的存儲和運算。我並不覺得這個技術工程框架上會有多複雜,因爲像Hadoop、Spark這些比較成熟的框架已經可以支持到分佈式計算,我們完全可以用這類技術結合聯邦學習算法的具體設計,將本地單節點的算法寫到並行計算裏面去,這部分核心的工程代碼就是MapReduce~~~重構聯邦學習算法,重寫MapReduce函數。

插一句,之前提過的一個概念,未來的算力也許是面向領域的智能算力,而不僅僅是提供一堆機器,提供智能算力的雲計算公司,會更AI、更貼近業務。

乘風更需破浪

聯邦學習在今年的金融科技行業,可以用火爆來形容,真正落地的屈指可數,這是互聯網技術的浮躁一面,也許我是技術出身,我更看好能在工程實踐上踏踏實實做好產品的企業。借用最近流行的一個詞彙——“乘風破浪”,來總結這篇文章,最爲合適不過(更多前沿資訊請關注微信公衆號“hellompc”)

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