Resource
ParameterServer入門和理解【較為詳細,涉及到另一個框架:ps-lite】
一文讀懂「Parameter Server」的分布式機器學習訓練原理
並行計算與機器學習【很有必要過一遍大佬的視頻】
並行計算與機器學習課程所有視頻:
1. 並行計算基礎以及MapReduce: https://youtu.be/gVcnOe6_c6Q
2. 參數服務器、去中心化: https://youtu.be/Aga2Lxp3G7M
3. Ring All-Reduce: https://youtu.be/rj-hjS5L8Bw
4. 聯邦學習: https://youtu.be/STxtRucv_zo
Why?
epoch 掃一遍大數據,太耗時了,需要並行計算。
To reduce wall clock time.
Linear Predictor
f(x) = xTw, 所謂訓練就是通過收斂,求w的過程。
-
計算梯度
加速計算梯度,並行。How?
基本概念
一、大綱要點
-
通信 Communication
<Share memory> or <Message passing>
-
系統架構 Architecture
Client-Server Architecture or Peer-to-Peer Architecture
-
同步或異步 Synchronization
-- 同步 --
- Apache MapReduce, 另外采用同步的 bulk synchronous parallel
- Apache Spark, 容錯,快,但機器學習不高效。
MapReduce模式 計算梯度。
broadcast --> reduce --> 更新參數。
但通信耗時的(communicaiton complexty, latency),且加速比的趨勢會逐漸平滑。
straggler:導致“大家”都等最慢的那一個stragger。
-- 異步 --
Synchronous Parallel Gradient Descent.
Using Parameter Server
異步梯度下降 的 Parameter Server,
也是 client-server architecture, message-passing communication
但用的是 asynchronous。
典型的實現:Ray
-
- 同步與異步模型的比較
-
數據並行
其實就是分割數據為小份。
二、Parallel Programming Models
- MapReduce
- Parameter Server
- Decentralized Network
- 每個節點都有自己的一份完整數據。
- 圖的連接越緊密,收斂越快。自然地,全連接最好。
與 Distributed Computing 的區別?
基本都在混用,沒有明顯的界限。
Parallel Computing in TensorFlow
TensorFlow Strategies
-
- MirroredStrategy【一機多個GPU,同步隨機梯度下降】
- TPUStrategy
- MultiWorkerMirroredStrategy
- CentralStorageStrategy
- ParameterServerStrategy【適合分布式多台機器】
- OneDeviceStrategy
一、Parallel Training CNN on MNIST by MirroredStrategy
一機4個GPU,同步隨機梯度下降。
from tensorflow.pyton.client import device_lib device_lib.list_local_device() # 一塊cpu,四塊gpu
from tensorflow import distribute strategy = distribute.MirroredStrategy() m = strategy.num_replicas_in_sync print('Number of devices: {}'.format(m)) import tensorflow as tf def scale(image, label): image = tf.cast(image, tf.float32) image /= 255 return image, label import tensorflow_datasets as tfds datasets, info = tfds.load(name='mnist', with_info=True, as_supervised=True) mnist_train = datasets['train'].map(scale).cache() mnist_test = datasets['test'].map(scale)
sgd用比較小的batch 就好了。
這里在此遇到 strategy.scope(),提供了number of gpu的信息。
然后通過summary可看網絡結構。
編譯模型:
with strategy.scope(): model.compile(loss='sparse_categorical_crossentropy', optimizer=keras.optimizers.RMSprop(learning_rate=1E-3),
metrics=['accuracy'])
二、Ring All-Reduce 原理
Horovod 是基於Ring-AllReduce方法的深度分布式學習插件,以支持多種流行架構包括TensorFlow、Keras、PyTorch等。這樣平台開發者只需要為Horovod進行配置,而不是對每個架構有不同的配置方法。
類似 MapReduce,但子節點不知道相加后的結果(15),但 ring all-reduce會讓大家都知道。
E.g, all-reduce via reduce+broadcast(tf的內置)--> 通過轉兩圈,每個gpu都得到"梯度sum"。
E.g, all-reduce via all-to-all communication. (不是很流行)
優化后,跟gpu的塊數無關。
Federated Learning 聯邦學習
一、基本概念
屬於 distributed learning。核心:如何減少通信次數,可以接受加大client端的計算量。
二、Federated Average Learning
FedAvg的有效性 已被證明。
On the Convergence of FedAvg on Non-IID Data
-
分布式隨機梯度的“安全性”
Federated Average Learning 的"安全性”。
梯度 的本質就是原始數據做了一個變換而已,幾乎攜帶了所有原始信息。
即使是 FedAvg也會被攻擊有效。
三、總結
三個研究方向。
關於毒葯樣本
Data Evasion (test time) v.s. Data Poisoning(training time)
Parameter Server 專題
2014年分布式可擴展的Parameter Server被 沐神 @李沐提出,幾乎完美的解決了機器模型的分布式訓練問題,時至今日,parameter server不僅被直接應用在各大公司的機器學習平台上,而且也被集成在TensorFlow,MXNet等主流的深度框架中,作為機器學習分布式訓練最重要的解決方案。
一、沐神出世
-
一致性與並行效率之間的取舍
在上篇文章介紹spark的並行梯度下降原理時,曾經提到spark並行梯度下降效率較低的原因就是每個節點都需要等待其他所有節點的梯度都計算完后,master節點匯總梯度,計算好新的模型參數后,才能開始下一輪的梯度計算,我們稱這種方式為“同步阻斷式”的並行梯度下降過程。
“同步阻斷式“的並行梯度下降雖然是嚴格意義上的一致性最強的梯度下降方法,因為其計算結果和串行計算的過程一致,但效率過低,各節點的waiting時間過長,有沒有辦法提高梯度下降的並行度呢?
Paprameter Server采取的方法是用“異步非阻斷式”的梯度下降替代原來的同步式方法。
異步梯度更新的方式雖然大幅加快了訓練速度,但帶來的是模型一致性的喪失,也就是說並行訓練的結果與原來的單點串行訓練的結果是不一致的,這樣的不一致會對模型收斂的速度造成一定影響。所以最終選取同步更新還是異步更新取決於不同模型對於一致性的敏感程度。這類似於一個模型超參數選取的問題,需要針對具體問題進行具體的驗證。
異步更新帶來的梯度不一致性的影響沒有想象中那么大
-
多server節點的協同和效率問題
采用了server group內多server的架構,每個server主要負責一部分的模型參數。模型參數使用key value的形式,每個server負責一個key的range就可以了。
-
權重管理平台
大家要清楚的是,Parameter Server僅僅是一個管理並行訓練梯度的權重的平台,並不涉及到具體的模型實現,因此PS往往是作為MXNet,TensorFlow的一個組件,要想具體實現一個機器學習模型,還需要依賴於通用的,綜合性的機器學習平台。
二、概念辨析
若干概念和工具的細節、使用搞清楚。
Ray可以實現 PS:https://docs.ray.io/en/master/auto_examples/plot_parameter_server.html
AWS-SAMPLE:Sagemaker Distributed Training with Parameter Server and Horovod
未來Uber的技術重點:Distributed Deep Learning with Horovod on Ray - Travis Addair, Uber
三、Challenges using DL at Scale (Horovod)
How Ray Can Help
horovod.ray
allows users to leverage Horovod on a Ray cluster.
Currently, the Ray + Horovod integration provides a RayExecutor API.
-
基礎例子
Executor Setup
Hello World
-
高級例子
Stateless API
Stateful API
更多例子,請見視頻。
需要專題理解:horovod + ray。
End.