From 8792ad03784510665d68be2c7c7668d37e32ad3f Mon Sep 17 00:00:00 2001 From: Helin Wang Date: Thu, 14 Sep 2017 16:45:19 -0700 Subject: [PATCH] Design Doc: Distributed Training Architecture --- doc/design/fully_static_graph.md | 122 ---------- .../refactor/distributed_architecture.md | 221 ++++++++++++++++++ .../parameter_server.md} | 0 doc/design/refactor/src/compiler.graffle | Bin 0 -> 2661 bytes doc/design/refactor/src/compiler.png | Bin 0 -> 15841 bytes .../{ops => refactor}/src/dist-graph.graffle | Bin .../{ops => refactor}/src/dist-graph.png | Bin .../src/distributed_architecture.graffle | Bin 0 -> 3414 bytes .../refactor/src/distributed_architecture.png | Bin 0 -> 47586 bytes .../{ops => refactor}/src/local-graph.graffle | Bin .../{ops => refactor}/src/local-graph.png | Bin .../refactor/src/local_architecture.graffle | Bin 0 -> 2708 bytes .../refactor/src/local_architecture.png | Bin 0 -> 29018 bytes .../refactor/src/paddle-compile.graffle | Bin 0 -> 2208 bytes doc/design/refactor/src/paddle-compile.png | Bin 0 -> 20150 bytes 15 files changed, 221 insertions(+), 122 deletions(-) delete mode 100644 doc/design/fully_static_graph.md create mode 100644 doc/design/refactor/distributed_architecture.md rename doc/design/{ops/dist_train.md => refactor/parameter_server.md} (100%) create mode 100644 doc/design/refactor/src/compiler.graffle create mode 100644 doc/design/refactor/src/compiler.png rename doc/design/{ops => refactor}/src/dist-graph.graffle (100%) rename doc/design/{ops => refactor}/src/dist-graph.png (100%) create mode 100644 doc/design/refactor/src/distributed_architecture.graffle create mode 100644 doc/design/refactor/src/distributed_architecture.png rename doc/design/{ops => refactor}/src/local-graph.graffle (100%) rename doc/design/{ops => refactor}/src/local-graph.png (100%) create mode 100644 doc/design/refactor/src/local_architecture.graffle create mode 100644 doc/design/refactor/src/local_architecture.png create mode 100644 doc/design/refactor/src/paddle-compile.graffle create mode 100644 doc/design/refactor/src/paddle-compile.png diff --git a/doc/design/fully_static_graph.md b/doc/design/fully_static_graph.md deleted file mode 100644 index f9cde104b1..0000000000 --- a/doc/design/fully_static_graph.md +++ /dev/null @@ -1,122 +0,0 @@ -# Design Doc: Fully Static Graph - -## Abstract - -We propose the *fully static graph* rule: training and inference must -be fully specified by the static graph. This means training and -inference should be able to run solely on the cpp core (no Python -involved), everything should be implemented as an OP. - -The user can still use Python to achieve the same result for -convenience when experimenting locally, but the distributed training -will not support Python. - -## Background - -There are two paradigms for expressing the computation graph: dynamic -and static. The dynamic paradigm constructs the graph on the fly: -every time `eval` is called, a new graph is created. The static -paradigm constructs the graph first, and then calls `eval`. There is -no new graph created each time `eval` is called. - -The dynamic graph has the advantage of being flexible but is highly -dependent on the host language (most commonly Python). The static -graph is not as flexible, but more optimization can be done since the -graph is known before computing happens. PaddlePaddle is using the -static graph approach since we are focused on production deployment -and cluster training, efficiency is the key. - -This design doc is trying to address an important question for the -static graph approach: should the training logic be fully specified by -the static graph? - -For example, it's common to control the graph evaluation from Python: - -```Python -for i in range(10000): - paddle.eval(train_op) -``` - -In the above example: the training logic is not fully specified by the -graph: Python still take the control of the training logic. - - -## Fully Static Graph - -The training logic should be fully specified by the graph (but we -still support controlling the graph evaluation from Python). Because -Python adds complication for distributed training: - -- The distributed training engine needs to place the computation graph - onto different nodes, and add communication OPs for data across node - boundaries. They are very hard to do if the training logic is not - fully specified by the graph. - -- For fault recovery, every runtime state needs to be saved. But the - state in Python code (such as training loop index and data reader - position) could not be saved. - -- Allowing executing arbitrary Python code on Paddle Cloud make - training data safety very hard if not impossible to control. - - -### Benefits - -- A clear separation between graph declaration (current using Python) - and graph execution. It's easier for us to add a new language - binding (or invent our own deep learning graph specification - language). - -- Local or distributed graph execution is easier to optimize. - -- Much easier to ensure training data safety on Paddle Cloud. - - -### Example - -To give a concrete example, for loop is essential for the training: -with every loop, a new mini-batch is fed into the training -system. Under the fully static graph rule, we **must** implement the for -loop as an OP: - -```Python -# pseudo code, we need to discuss the for loop interface -i = pd.Variable(0) -optimizer = paddle.op.Adam() -# specify the input file as the argument, or -# leave blank and specify using config when running on Paddle Cloud -input = paddle.op.recordIO("/home/data/input.recordio") -q_x, q_y = input[0], input[1] -loss = pd.op.square(pd.op.sub(pd.op.add(pd.op.mul(x, w), b), y)) - -def cond(i): - return i < 10000 - -with pd.for_loop(cond, [i]) as loop - # Dequeue a new example each iteration. - x = q_x.dequeue() - y = q_y.dequeue() - optimizer.minimize(loss) - pd.add(i, 1) - -# or paddle.save_target(loop, "job.bin") and -# submit the saved file to Paddle Cloud. -paddle.eval(loop) -``` - -The above code can run on both locally and on Paddle Cloud. - -For user's convenience, he can use the Python for loop: -```Python -optimizer = paddle.op.Adam() -input = paddle.op.recordIO("/home/data/input.recordio") -q_x, q_y = input[0], input[1] -x = q_x.dequeue() -y = q_y.dequeue() -loss = pd.op.square(pd.op.sub(pd.op.add(pd.op.mul(x, w), b), y)) -train_op = optimizer.minimize(loss) -for i in range(10000): - paddle.eval(train_op) -``` - -The above code can only run locally. diff --git a/doc/design/refactor/distributed_architecture.md b/doc/design/refactor/distributed_architecture.md new file mode 100644 index 0000000000..e8002fa678 --- /dev/null +++ b/doc/design/refactor/distributed_architecture.md @@ -0,0 +1,221 @@ +# Design Doc: Distributed Training Architecture + +## Abstract + +PaddlePaddle v0.10.0 uses the "trainer-parameter server" +architecture. We run multiple replicated instances of trainers (runs +the same code written by the user) and parameter servers for +distributed training. This architecture served us well, but has some +limitations: + +1. Need to write special code to handle tasks which should only be run + by a single trainer. E.g., initializing model and saving model. + +2. Model parallelism is hard: need to write if-else branches conditioned + on the trainer ID to partition model onto each trainer, and manually + write the inter-model-shard communication code. + +3. The user can not directly specify the parameter update rule: need + to modify the parameter server C++ code and compile a new + binary. This adds complication for researchers: A lot of extra + effort is required. Besides, the training job submission program + may not allow running arbitrary binaries. + +This design doc discusses PaddlePaddle's new distributed training +architecture that addresses the above limitations. + +## Analysis + +We will assume the user writes the trainer program by Python, the same +analysis holds if the trainer program is written in C++. + +### Limitation 1 + +If we look at the Python code that the user writes, there are two +kinds of functionalities: + +- The training logic such as load / save model and print log. +- The neural network definition such as the definition of the data + layer, the fully connected layer, the cost function and the + optimizer. + +When we training with PaddlePaddle v0.10.0 distributedly, multiple +replicated Python instances are running on different nodes: both the +training logic and the neural network computation is replicated. + +The tasks that should only run once all belong to the training logic, +if we only replicate the neural network computation, but do **not** +replicate the training logic, the limitation could be solved. + +### Limitation 2 + +Model parallelism means running a single model on multiple nodes by +partitioning the model onto different nodes and managing the +inter-model-shard communications. + +PaddlePaddle should be able to modify the nerual network computation +definition to support model parallelism automatically. However, the +computation is only specified in Python code, and PaddlePaddle can not +modify Python code. + +Just like compiler uses a intermediate representation (IR) so that +programmer does not need to manually optimize their code in most of +the cases - the compiler will optimize the IR: + + + +We can have our own IR too: PaddlePaddle can support model parallel by +converting the IR so the user no longer need to manually do it in +Python: + + + +The IR for PaddlePaddle after refactor is called `Block`, it specifies +the computation dependency graph and the variables used in the +computation. + +### Limitation 3 + +The user can not directly specify the parameter update rule for the +parameter server because the parameter server does not use the same +computation definition as the trainer. Instead, the update rule is +baked in the parameter server. The user can not specify the update +rule in the same way of specifying the trainer computation. + +This could be fixed by making the parameter server run the same +computation definition as the trainer. For a detailed explanation, +please +see +[Design Doc: Operation Graph Based Parameter Server](./dist_train.md) + +## Distributed Training Architecture + +The new distributed training architecture can address the above +limitations. Below is the illustration: + + + +The architecture includes major components: *PaddlePaddle Python*, +*PaddlePaddle converter* and *PaddlePaddle runtime*: + +### PaddlePaddle Python + +PaddlePaddle Python is the Python library that user's Python trainer +invoke to build the neural network topology, start training, etc. + +```Python +paddle.init() +input = paddle.op.recordIO("/home/data/mnist.recordio") # file stored on the cluster +img, label = input[0], input[1] +hidden = paddle.layer.fc(input=img, size=200, act=paddle.activation.Tanh()) +prediction = paddle.layer.fc(input=img, size=10, act=paddle.activation.Softmax()) +cost = paddle.layer.classification_cost(input=prediction, label=label) +optimizer = paddle.optimizer.SGD(cost, learning_rate=0.01) +session = paddle.session.NewRemote(num_trainer=3, num_ps=2, GPU_per_trainer=1) +for i in range(1000): + _, cost_val = session.eval(target=[cost, optimizer]) + print cost_val +``` + +The code above is a typical Python trainer code, the neural network +topology is built using helper functions such as +`paddle.layer.fc`. The training is done by calling `session.eval` +iteratively. + +#### session.eval + +As shown in the graph, `session.eval` sends the IR and the evaluation +inputs/targets to the PaddlePaddle cluster for evaluation. The +targets can be any variable in the computation graph. When the target +is the `optimizer` variable, the neural network will be optimized +once. When the target is the `cost` variable, `session.eval` returns +the cost value. + +For more information about `Session`, please +see [Design Doc: Session](./session.md). + +### PaddlePaddle Converter + +PaddlePaddle converter automatically converts the IR in the request +(IR and evaluation inputs/targets) from PaddlePaddle Python to new +partitioned IRs and dispatch the new IRs and evaluation inputs/targets +to different PaddlePaddle runtimes. Below are the steps: + +1. Add `feed` OP that feeds the eval inputs, and `fetch` OP that + fetches the eval targets to the IR. + +1. Extract a new computation (sub)graph with `feed` and `fetch` OP as + the boundary. The runtime does not need to run the OP that is not + dependent by the `fetch` OP. + +1. Optimizes the computation graph. + +1. Place the OPs in the graph onto different devices on different + PaddlePaddle runtime according to a placement algorithm and device + constraint specified by the user. + +1. Partition the graph according to runtime boundaries and add `send` / + `recv` OP pair on the runtime boundaries. + +1. Dispatch the partitioned graph to different PaddlePaddle runtimes. + +1. PaddlePaddle runtimes with the `fetch` OP reports evaluation + results back to the converter, the convert reports the evaluation + results back to the PaddlePaddle Python. + +The output IRs will be cached to optimize the conversion latency. + + +#### Placement Algorithm + +Our first implementation will only support "trainer-parameter server" +placement: the parameters, initializers, and optimizers are placed on +the PaddlePaddle runtimes with the parameter server role. And +everything else will be placed on the PaddlePaddle runtimes with the +trainer role. This has the same functionality of our +"trainer-parameter server" architecture of PaddlePaddle v0.10.0, but +is more general and flexible. + +In the future, we will implement the general placement algorithm, +which makes placements according to the input IR, and a model of +device computation time and device communication time. Model +parallelism requires the general placement algorithm. + + +### PaddlePaddle Runtime + +The PaddlePaddle runtime owns multiple devices (e.g., CPUs, GPUs) and +runs the IR. The runtime does not need to do OP placement since it's +already done by the converter. + + +### Local Training Architecture + +The local training architecture will be the same as the distributed +training architecture, the differences are everything runs locally, +and there is just one PaddlePaddle runtime: + + + + +### Training Data + +In PaddlePaddle v0.10.0, training data is typically read +with [data reader](../reader/README.md) from Python. This approach is +no longer efficient when training distributedly since the Python +process no longer runs on the same node with the trainer processes, +the Python reader will need to read from the distributed filesystem +(assuming it has the access) and send to the trainers, doubling the +network traffic. + +When doing distributed training, the user can still use Python data +reader: the training data are sent with `session.eval`. However should +be used for debugging purpose only. The users are encouraged to use +the read data OPs. + + +## References: + +[1] [TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45166.pdf) + +[2] [TensorFlow: A System for Large-Scale Machine Learning](https://www.usenix.org/system/files/conference/osdi16/osdi16-abadi.pdf) diff --git a/doc/design/ops/dist_train.md b/doc/design/refactor/parameter_server.md similarity index 100% rename from doc/design/ops/dist_train.md rename to doc/design/refactor/parameter_server.md diff --git a/doc/design/refactor/src/compiler.graffle b/doc/design/refactor/src/compiler.graffle new file mode 100644 index 0000000000000000000000000000000000000000..8cc678fea3c820103e7ce81f7a5d625d6c1d92de GIT binary patch literal 2661 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 literal 0 HcmV?d00001 diff --git a/doc/design/refactor/src/distributed_architecture.png b/doc/design/refactor/src/distributed_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..410c4510c6aab301dec95e6427fe80ac24e105fe GIT binary patch literal 47586 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 OmHz=6LV)yJQUCxDuSJjm literal 0 HcmV?d00001 diff --git a/doc/design/refactor/src/local_architecture.png b/doc/design/refactor/src/local_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..4b999538b7825c805292ee28b5e3256d5543bd09 GIT binary patch literal 29018 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 literal 0 HcmV?d00001 diff --git a/doc/design/refactor/src/paddle-compile.png b/doc/design/refactor/src/paddle-compile.png new file mode 100644 index 0000000000000000000000000000000000000000..e0f13d551ac41afaec627a57dea79356464bf0bf GIT binary patch literal 20150 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 M*SVoxu4x