A Fundamental Tradeoff between Computation and Communication in Distributed Computing
Songze Li, Mohammad Ali Maddah-Ali, Qian Yu, A. Salman Avestimehr
I Introduction
We consider a general distributed computing framework, motivated by prevalent structures like MapReduce and Spark , in which the overall computation is decomposed into two stages: “Map” and “Reduce”. Firstly in the Map stage, distributed computing nodes process parts of the input data locally, generating some intermediate values according to their designed Map functions. Next, they exchange the calculated intermediate values among each other (a.k.a. data shuffling), in order to calculate the final output results distributedly using their designed Reduce functions.
Within this framework, data shuffling often appears to limit the performance of distributed computing applications, including self-join , tera-sort , and machine learning algorithms . For example, in a Facebook’s Hadoop cluster, it is observed that 33% of the overall job execution time is spent on data shuffling . Also as is observed in , 70% of the overall job execution time is spent on data shuffling when running a self-join application on an Amazon EC2 cluster . As such motivated, we ask this fundamental question that if coding can help distributed computing in reducing the load of communication and speeding up the overall computation? Coding is known to be helpful in coping with the channel uncertainty in telecommunication and also in reducing the storage cost in distributed storage systems and cache networks. In this work, we extend the application of coding to distributed computing and propose a framework to substantially reduce the load of data shuffling via coding and some extra computing in the Map phase.
More specifically, we formulate and characterize a fundamental tradeoff relationship between “computation load” in the Map phase and “communication load” in the data shuffling phase, and demonstrate that the two are inversely proportional to each other. We propose an optimal coded scheme, named “Coded Distributed Computing” (CDC), which demonstrates that increasing the computation load of the Map phase by a factor of (i.e., evaluating each Map function at carefully chosen nodes) can create novel coding opportunities in the data shuffling phase that reduce the communication load by the same factor.
To illustrate our main result, consider a distributed computing framework to compute arbitrary output functions from input files, using distributed computing nodes. As mentioned earlier, the overall computation is performed by computing a set of Map and Reduce functions distributedly across the nodes. In the Map phase, each input file is processed locally, in one of the nodes, to generate intermediate values, each corresponding to one of the output functions. Thus, at the end of this phase, intermediate values are calculated, which can be split into subsets of intermediate values and each subset is needed to calculate one of the output functions. In the Shuffle phase, for every output function to be calculated, all intermediate values corresponding to that function are transferred to one of the nodes for reduction. Of course, depending on the node that has been chosen to reduce an output function, a part of the intermediate values are already available locally, and do not need to be transferred in the Shuffle phase. This is because that the Map phase has been carried out on the same set of nodes, and the results of mapping done at a node can remain in that node to be used for the Reduce phase. This offers some saving in the load of communication. To reduce the communication load even more, we may map each input file in more than one nodes. Apparently, this increases the fraction of intermediate values that are locally available. However, as we will show, there is a better way to exploit this redundancy in computation to reduce the communication load. The main message of this paper is to show that following a particular patten in repeating Map computations along with some coding techniques, we can significantly reduce the load of communication. Perhaps surprisingly, we show that the gain of coding in reducing communication load scales with the size of the network.
To be more precise, we define the computation load , , as the total number of computed Map functions at the nodes, normalized by . For example, means that none of the Map functions has been re-computed, and means that on average each Map function can be computed on two nodes. We also define communication load , , as the total amount of information exchanged across nodes in the shuffling phase, normalized by the size of intermediate values, in order to compute the output functions disjointly and uniformly across the nodes. Based on this formulation, we now ask the following fundamental question:
Given a computation load in the Map phase, what is the minimum communication load , using any data shuffling scheme, needed to compute the final output functions?
We propose Coded Distributed Computing (CDC) that achieves a communication load of for , and the lower convex envelop of these points. CDC employs a specific strategy to assign the computations of the Map and Reduce functions across the computing nodes, in order to enable novel coding opportunities for data shuffling. In particular, for a computation load , CDC utilizes a carefully designed repetitive mapping of data blocks at distinct nodes to create coded multicast messages that deliver data simultaneously to a subset of nodes. Hence, compared with an uncoded data shuffling scheme, which as we show later achieves a communication load , CDC is able to reduce the communication load by exactly a factor of the computation load . Furthermore, the proposed CDC scheme applies to a more general distributed computing framework where every output function is computed by more than one, or particularly nodes, which provides better fault-tolerance in distributed computing.
We numerically compare the computation-communication tradeoffs of CDC and uncoded data shuffling schemes (i.e., and ) in Fig. 1. As it is illustrated, in the uncoded scheme that achieves a communication load , increasing the computation load offers only a modest reduction in communication load. In fact for any , this gain vanishes for large number of nodes . Consequently, it is not justified to trade computation for communication using uncoded schemes. However, for the coded scheme that achieves a communication load of , increasing the computation load will significantly reduce the communication load, and this gain does not vanish for large . For example as illustrated in Fig. 1, when mapping each file at one extra node (), CDC reduces the communication load by 55.6%, while the uncoded scheme only reduces it by 11.1%.
We also prove an information-theoretic lower bound on the minimum communication load . To prove the lower bound, we derive a lower bound on the total number of bits communicated by any subset of nodes, using induction on the size of the subset. To derive the lower bound for a particular subset of nodes, we first establish a lower bound on the number of bits needed by one of the nodes to recover the intermediate values it needs to calculate its assigned output functions, and then utilize the bound on the number of bits communicated by the rest of the nodes in that subset, which is given by the inductive argument. The derived lower bound on matches the communication load achieved by the CDC scheme for any computation load . As a result, we exactly characterize the optimal tradeoff between computation load and communication load in the following:
For general , is the lower convex envelop of the above points . Note that for large , , hence . This result reveals a fundamental inversely proportional relationship between computation load and communication load in distributed computing. This also illustrates that the gain of achieved by CDC is optimal and it cannot be improved by any other scheme (since is an information-theoretic lower bound on that applies to any data shuffling scheme).
Having theoretically characterized the optimal computation-communication tradeoff achieved by the proposed CDC scheme, we also empirically demonstrate the practical impact of this tradeoff. In particular, we apply the coding techniques of CDC to a widely used Hadoop sorting benchmark TeraSort , developing a novel coded distributed sorting algorithm CodedTeraSort . We perform extensive experiments on Amazon EC2 clusters, and observe that for typical settings of interest, CodedTeraSort speeds up the overall execution of the conventional TeraSort by a factor of - .
Finally, we discuss some future directions to extend the results of this work. In particular, we consider topics including heterogeneous networks with asymmetric tasks, straggling/failing computing nodes, multi-stage computation tasks, multi-layer networks and structured topology, joint storage and computation optimization, and coded edge/fog computing.
Related Works. The problem of characterizing the minimum communication for distributed computing has been previously considered in several settings in both computer science and information theory communities. In , a basic computing model is proposed, where two parities have and and aim to compute a boolean function by exchanging the minimum number of bits between them. Also, the problem of minimizing the required communication for computing the modulo-two sum of distributed binary sources with symmetric joint distribution was introduced in . Following these two seminal works, a wide range of communication problems in the scope of distributed computing have been studied (see, e.g., ). The key differences distinguishing the setting in this paper from most of the prior ones are 1) We focus on the flow of communication in a general distributed computing framework, motivated by MapReduce, rather than the structures of the functions or the input distributions. 2) We do not impose any constraint on the numbers of output results, input data files and computing nodes (they can be arbitrarily large), 3) We do not assume any special property (e.g. linearity) of the computed functions.
The idea of efficiently creating and exploiting coded multicasting was initially proposed in the context of cache networks in , and extended in , where caches pre-fetch part of the content in a way to enable coding during the content delivery, minimizing the network traffic. In this paper, we propose a framework to study the tradeoff between computation and communication in distributed computing. We demonstrate that the coded multicasting opportunities exploited in the above caching problems also exist in the data shuffling of distributed computing frameworks, which can be created by a strategy of repeating the computations of the Map functions specified by the Coded Distributed Computing (CDC) scheme.
Finally, in a recent work , the authors have proposed methods for utilizing codes to speed up some specific distributed machine learning algorithms. The considered problem in this paper differs from in the following aspects. We propose a general methodology for utilizing coding in data shuffling that can be applied to any distributed computing framework with a MapReduce structure, regardless of the underlying application. In other words, any distributed computing algorithm that fits in the MapReduce framework can benefit from the proposed CDC solution. We also characterize the information-theoretic computation-communication tradeoff in such frameworks. Furthermore, the coding used in is at the application layer (i.e., applying computation on coded data), while in this paper we focus on applying codes directly on the shuffled data.
II Problem Formulation
In this section, we formulate a general distributed computing framework motivated by MapReduce, and define the function characterizing the tradeoff between computation and communication.
Motivated by MapReduce, we assume that as illustrated in Fig. 2 the computation of the output function , can be decomposed as follows:
Note that for every set of output functions such a Map-Reduce decomposition exists (e.g., setting to identity functions such that for all , and to in (1)). However, such a decomposition is not unique, and in the distributed computing literature, there has been quite some work on developing appropriate decompositions of computations like join, sorting and matrix multiplication (see, e.g., ), for them to be performed efficiently in a distributed manner. Here we do not impose any constraint on how the Map and Reduce functions are chosen (for example, they can be arbitrary linear or non-linear functions).
The above computation is carried out by distributed computing nodes, labelled as Node Node . They are interconnected through a multicast network. Following the above decomposition, the computation proceeds in three phases: Map, Shuffle and Reduce.
Map Phase: Node , computes the Map functions of a set of files , which are stored on Node , for some design parameter . For each file in , Node computes . We assume that each file is mapped by at least one node, i.e., .
We define the computation load, denoted by , , as the total number of Map functions computed across the nodes, normalized by the number of files , i.e., . The computation load can be interpreted as the average number of nodes that map each file.
Beyond the symmetric task assignment considered in this paper, characterizing the optimal computation-communication tradeoff allowing general asymmetric task assignments is a challenging open problem. As the first step to study this problem, in our follow-up work in which the number of output functions is fixed and the computing resources are abundant (e.g., number of computing nodes ), we have shown that asymmetric task assignments can do better than the symmetric ones, and achieve the optimum run-time performance.
Having generated the message , Node multicasts it to all other nodes.
By the end of the Shuffle phase, each of the nodes receives free of error.
Finally, Node , , computes the Reduce function for all .
We define the computation-communication function of the distributed computing framework
characterizes the optimal tradeoff between computation and communication in this framework.
Example (Uncoded Scheme). In the Shuffle phase of a simple “uncoded” scheme, each node receives the needed intermediate values sent uncodedly by some other nodes. Since a total of intermediate values are needed across the nodes and of them are already available after the Map phase, the communication load achieved by the uncoded scheme
After the Map phase, each node knows the intermediate values of all output functions in the files it has mapped. Therefore, for a fixed file assignment and any symmetric assignment of the Reduce functions, specified by , we can satisfy the data requirements using the same data shuffling scheme up to relabelling the Reduce functions. In other words, the communication load is independent of the assignment of the Reduce functions.
III Main Results
The computation-communication function of the distributed computing framework, is given by
for sufficiently large . For general , is the lower convex envelop of the above points .
We prove the achievability of Theorem 1 by proposing a coded scheme, named Coded Distributed Computing, in Section V. We demonstrate that no other scheme can achieve a communication load smaller than the lower convex envelop of the points by proving the converse in Section VI.
Theorem 1 exactly characterizes the optimal tradeoff between the computation load and the communication load in the considered distributed computing framework.
For , the communication load achieved in Theorem 1 is less than that of the uncoded scheme in (5) by a multiplicative factor of , which equals the computation load and can grow unboundedly as the number of nodes increases if e.g. . As illustrated in Fig. 1 in Section I, while the communication load of the uncoded scheme decreases linearly as the computation load increases, achieved in Theorem 1 is inversely proportional to the computation load.
While increasing the computation load causes a longer Map phase, the coded achievable scheme of Theorem 1 maximizes the reduction of the communication load using the extra computations. Therefore, Theorem 1 provides an analytical framework to optimally trading the computation power in the Map phase for more bandwidth in the Shuffle phase, which helps to minimize the overall execution time of applications whose performances are limited by data shuffling.
The computation-communication function of the cascaded distributed computing framework, , for , is characterized by
for some and sufficiently large . For general , is the lower convex envelop of the above points .
We present the Coded Distributed Computing scheme that achieves the computation-communication function in Theorem 2 in Section V, and the converse of Theorem 2 in Section VII.
A preliminary part of this result, in particular the achievability for the special case of , or the achievable scheme of Theorem 1 was presented in . We note that when , Theorem 2 provides the same result as in Theorem 1, i.e., , for .
For any fixed (number of nodes that compute each Reduce function), as illustrated in Fig. 3, the communication load achieved in Theorem 2 outperforms the linear relationship between computation and communication, i.e., it is superlinear with respect to the computation load .
Before we proceed to describe the general achievability scheme for the cascaded distributed computing framework (also the distributed computing framework as a special case of ), we first illustrate the key ideas of the proposed Coded Distributed Computing scheme by presenting two examples in the next section, for the cases of and respectively.
IV Illustrative Examples: Coded Distributed Computing
In this section, we present two illustrative examples of the proposed achievable scheme for Theorem 1 and Theorem 2, which we call Coded Distributed Computing (CDC), for the cases of (Theorem 1) and (Theorem 2) respectively.
We consider a MapReduce-type problem in Fig. 4 for distributed computing of output functions, represented by red/circle, green/square, and blue/triangle respectively, from input files, using computing nodes. Nodes , , and are respectively responsible for final reduction of red/circle, green/square, and blue/triangle output functions. Let us first consider the case where no redundancy is imposed on the computations, i.e., each file is mapped once and computation load . As shown in Fig. 4(a), Node maps File and File for . In this case, each node maps input files locally, computing all three intermediate values needed for the three output functions from each mapped file. In Fig. 4, we represent, for example, the intermediate value of the red/circle function in File using a red circle labelled by , for all . Similar representations follow for the green/square and the blue/triangle functions. After the Map phase, each node obtains out of required intermediate values to reduce the output function it is responsible for (e.g., Node 1 knows the red circles in File 1 and File 2). Hence, each node needs intermediate values from the other nodes, yielding a communication load of .
Now, we demonstrate how the proposed CDC scheme trades the computation load to slash the communication load via in-network coding. As shown in Fig. 4(b), we double the computation load such that each file is now mapped on two nodes (). It is apparent that since more local computations are performed, each node now only requires other intermediate values, and an uncoded shuffling scheme would achieve a communication load of . However, we can do much better with coding. As shown in Fig. 4(b), instead of unicasting individual intermediate values, every node multicasts a bit-wise XOR, denoted by , of locally computed intermediate values to the other two nodes, simultaneously satisfying their data demands. For example, knowing the blue/triangle in File , Node can cancel it from the coded packet sent by Node , recovering the needed green/square in File . Therefore, this coding incurs a communication load of , achieving a gain from the uncoded shuffling.
From the above example, we see that for the case of , i.e., each of the output functions is computed on one node and the computations of the Reduce functions are symmetrically distributed across nodes, the proposed CDC scheme only requires performing bit-wise XOR as the encoding and decoding operations. However, for the case of , as we will show in the following example, the proposed CDC scheme requires computing linear combinations of the intermediate values during the encoding process.
In this example, we consider a job of computing output functions from input files, using nodes. We focus on the case where the computation load , and each Reduce function is computed by nodes. In the Map phase, each file is mapped by nodes. As shown in Fig. 5, the sets of the files mapped by the nodes are , , , and . After the Map phase, Node , , knows the intermediate values of all output functions in the files in , i.e., . In the Reduce phase, we assign the computations of the Reduce functions in a symmetric manner such that every subset of nodes compute a common Reduce function. More specifically as shown in Fig. 5, the sets of indices of the Reduce functions computed by the nodes are , , , and . Therefore, for example, Node 1 still needs the intermediate values through data shuffling to compute its assigned Reduce functions , , .
The data shuffling process consists of two rounds of communication over the multicast network. In the first round, intermediate values are communicated within each subset of nodes. In the second round, intermediate values are communicated within the set of all nodes. In what follows, we describe these two rounds of communication respectively.
Round 1: Subsets of nodes. We first consider the subset . During the data shuffling, each node whose index is in multicasts a bit-wise XOR of two locally computed intermediate values to the other two nodes:
Node 1 multicasts to Node and Node ,
Node 2 multicasts to Node and Node ,
Node 3 mulicasts to Node and Node ,
Since Node 2 knows and Node 3 knows locally, they can respectively decode and from the coded message .
We employ the similar coded shuffling scheme on the other 3 subsets of 3 nodes. After the first round of shuffling,
Node 1 recovers , and ,
Node 2 recovers , and ,
Node 3 recovers , and ,
Node 4 recovers , and .
Similarly, as shown in Fig. 5, each of Node , Node , and Node multicasts two linear combinations of three locally computed segments to the other three nodes, using the same coefficients , , and .
Having received the above two linear combinations, each of Node , Node , and Node first subtracts out one segment available locally from the combinations, or more specifically, for Node , for Node , and for Node . After the subtraction, each of these three nodes recovers the required segments from the two linear combinations. More specifically, Node 2 recovers and , Node 3 recovers and , and Node 4 recovers and . It is not difficult to see that the above decoding process is guaranteed to be successful if , , and are all distinct from each other, which requires the field size (e.g., ). Following the similar procedure, each node recovers the required segments from the linear combinations multicast by the other three nodes. More specifically, after the second round of data shuffling,
Node 1 recovers , and ,
Node 2 recovers , and ,
Node 3 recovers , and ,
Node 4 recovers , and .
We finally note that in the second round of data shuffling, each linear combination multicast by a node is simultaneously useful for the rest of the three nodes.
V General Achievable Scheme: Coded Distributed Computing
In this section, we formally prove the upper bounds in Theorem 1 and 2 by presenting and analyzing the Coded Distributed Computing (CDC) scheme. We focus on the more general case considered in Theorem 2 with , and the scheme for Theorem 1 simply follows by setting .
We first consider the integer-valued computation load , and then generalize the CDC scheme for any . When , every node can map all the input files and compute all the output functions locally, thus no communication is needed and for all . In what follows, we focus on the case where .
In the Map phase the input files are evenly partitioned into disjoint batches of size , each corresponding to a subset of size , i.e.,
where denotes the batch of files corresponding to the subset .
Given this partition, Node , , computes the Map functions of the files in if . Or equivalently, if . Since each node is in subsets of size , each node computes Map functions, i.e., for all . After the Map phase, Node , , knows the intermediate values of all output functions in the files in , i.e., .
V-B Coded Data Shuffling
where denotes the indices of the batch of Reduce functions corresponding to the subset .
Given this partition, Node , , computes the Reduce functions whose indices are in if . Or equivalently, if . As a result, each node computes Reduce functions, i.e., for all .
For a subset of and with , we denote the set of intermediate values needed by all nodes in , no node outside , and known exclusively by nodes in as . More formally:
We observe that the set defined above contains intermediate values of output functions. This is because that the output functions whose intermediate values are included in should be computed exclusively by the nodes in and a subset of nodes in . Therefore, contains the intermediate values of a total of output functions. Since every subset of nodes map a unique batch of files, contains intermediate values.
For each , there are a total of subsets of with size that contain the element . We index these subsets as . Within a subset , the segment associated with Node is , for all . We note that each segment , , is known by all nodes whose indices are in , and needed by all nodes whose indices are in .
We note that the above encoding process is the same at all nodes whose indices are in , i.e., each of them multiplies the same matrix in (16) with the segments associated with it.
Having generated the above message symbols, Node multicasts them to the other nodes whose indices are in .
When , i.e., every output function is computed by one node, the above shuffling scheme only takes one round for all subsets of size . Instead of multicasting linear combinations, every node in can simply multicast the bit-wise XOR of its associated segments to the other nodes in .
V-B2 Decoding
For and , there are a total of subsets of that have size and simultaneously contain and . Hence, among all segments associated with Node , of them are already known at Node , and the rest of segments are needed by Node . We denote the indices of the subsets that contain the element but not the element as , such that , and for all .
After receiving the symbols from Node , Node first removes the locally known segments from the linear combinations to generate symbols , such that
V-C Correctness of CDC
We demonstrate the correctness of the above shuffling scheme by showing that after the Shuffle phase, each node can decode all of the required intermediate values to compute its assigned Reduce functions. We use Node 1 as an example, and similar arguments apply to all other nodes. WLOG we assume that the Reduce function is to be computed by Node 1. Node 1 will need a total of distinct intermediate values of from other nodes (it already knows intermediate values of by mapping the files in ). By the assignment of the Reduce functions, there exits a subset of size containing Node 1 such that all nodes in need to compute . Then, during the data shuffling process within each subset containing (note that by the definition of in (13), the intermediate values of will not be communicated to Node 1 if , and this is because that some node outside also wants to compute ), there are subsets of with size such that and , and thus Node 1 decodes distinct intermediate values of . Therefore, the total number of distinct intermediate values of Node 1 decodes over the entire Shuffle phase is
which matches the required number of intermediate values for . This is also true for all the other Reduce functions assigned to Node 1.
V-D Communication Load
In the above shuffling scheme, for each subset of size , each Node communicates message symbols. Each of these symbols contains bits. Hence, all nodes whose indices are in communicate a total of bits. The overall communication load achieved by the proposed CDC scheme is
V-E Non-Integer Valued Computation Load
For non-integer valued computation load , we generalize the CDC scheme as follows. We first expand the computation load as a convex combination of and , for some . Then we partition the set of input files into two disjoint subsets and of sizes and . We next apply the CDC scheme described above respectively to the files in with a computation load and the files in with a computation load , to compute each of the output functions at the same set of nodes. This results in a communication load of
where is the communication load achieved by CDC in (20) for integer-valued .
Using this generalized CDC scheme, for any two integer-valued computation loads and , the points on the line segment connecting and are achievable. Therefore, for general , the lower convex envelop of the achievable points is achievable. This proves the upper bound on the computation-communication function in Theorem 2 (also the achievability part of Theorem 1 by setting ).
The ideas of efficiently creating and exploiting coded multicasting opportunities have been introduced in caching problems . In this section, we illustrated how coding opportunities can be utilized in distributed computing to slash the load of communicating intermediate values, by designing a particular assignment of extra computations across distributed computing nodes. We note that the calculated intermediate values in the Map phase mimics the locally stored cache contents in caching problems, providing the “side information” to enable coding in the following Shuffle phase (or content delivery).
For the case of where no two nodes are interested in computing a common Reduce function, the coded data shuffling of CDC is similar to a coded transmission strategy in wireless D2D networks proposed in , where the side information enabling coded multicasting are pre-fetched in a specific repetitive manner in the caches of wireless nodes (in CDC such information is obtained by computing the Map functions locally). When is larger than , i.e., every Reduce function needs to be computed at multiple nodes, our CDC scheme creates novel coding opportunities that exploit both the redundancy of the Map computations and the commonality of the data requests for Reduce functions across nodes, further reducing the communication load.
Generally speaking, we can view the Shuffle phase of the considered distributed computing framework as an instance of the index coding problem , in which a central server aims to design a broadcast message (code) with minimum length to simultaneously satisfy the requests of all the clients, given the clients’ side information stored in their local caches. Note that while a randomized linear network coding approach (see e.g., ) is sufficient to implement any multicast communication where messages are intended by all receivers, it is generally sub-optimal for index coding problems where every client requests different messages. Although the index coding problem is still open in general, for the considered distributed computing scenario where we are given the flexibility of designing Map computation (thus the flexibility of designing side information), we prove in the next two sections tight lower bounds on the minimum communication loads for the cases and respectively, demonstrating the optimality of the proposed CDC scheme.
VI Converse of Theorem 1
In this section, we prove the lower bound on in Theorem 1.
For , we denote the set of indices of the files mapped by Node as , and the set of indices of the Reduce functions computed by Node as . As the first step, we consider the communication load for a given file assignment in the Map phase. We denote the minimum communication load under the file assignment by .
We denote the number of files that are mapped at nodes under a file assignment , as , for all :
For example, for the particular file assignment in Fig. 6, i.e., , since File 1 and File 2 are mapped on a single node (i.e., Node 1 and Node 3 respectively). Similarly, we have (Files 3, 4, and 5), and (File 6).
For a particular file assignment , we present a lower bound on in the following lemma.
.
Next, we first demonstrate the converse of Theorem 1 using Lemma 1, and then give the proof of Lemma 1.
Converse Proof of Theorem 1. It is clear that the minimum communication load is lower bounded by the minimum value of over all possible file assignments which admit a computation load of :
For every file assignment such that , satisfy
Then since the function in (24) is convex in , and by (26) , (24) becomes
where (a) is due to the requirement imposed by the computation load in (27).
Then by the convexity of the function in , we have for integer-valued ,
where (b) is due to the constraints on in (26) and (27).
Therefore, is lower bounded by the lower convex envelop of the points . This completes the proof of the converse part of Theorem 1.
Although the model proposed in this paper only allows each node sending messages independently, we can show that even if the data shuffling process can be carried out in multiple rounds and dependency between messages are allowed, the lower bound on remains the same.
We devote the rest of this section to the proof of Lemma 1. To prove Lemma 1, we develop a lower bound on the number of bits communicated by any subset of nodes, by induction on the size of the subset. In particular, for a subset of computing nodes, we first characterize a lower bound on the minimum number of bits required by a particular node in the subset, which is given by a cut-set bound separating this node and all the other nodes in the subset. Then, we combine this bound with the lower bound on the number of bits communicated by the rest of the nodes in the subset, which is given by the inductive argument.
Since each message is generated as a function of the intermediate values that are computed at Node , the following equation holds for all .
where we use “:” to denote the set of all possible indices.
The validity of the shuffling scheme requires that for all , the following equation holds :
For a subset , we define
which contains all the intermediate values required by the nodes in and all the intermediate values known locally by the nodes in after the Map phase.
For any subset and a file assignment , we denote the number of files that are exclusively mapped by nodes in as :
and the message symbols communicated by the nodes whose indices are in as
For any subset , we have
where denotes the complement of .
a. If for any , obviously
b. Suppose the statement is true for all subsets of size .
For any of size and any , we have
For each , we have the following subset version of (36) and (37).
The first term on the RHS of (52) can be lower bounded as follows.
where (a) is due to the independence of intermediate values and the fact that (different nodes calculate different output functions), (b) and (c) are due to the independence of intermediate values, and (d) is due to the independence of the intermediate values and the fact that .
The second term on the RHS of (52) can be lower bounded by the induction assumption:
Thus by (48), (52), (57) and (59), we have
By the definition of , we have the following equations.
c. Thus for all subsets , the following equation holds:
Then by Claim 1, let be the set of all nodes,
This completes the proof of Lemma 1.
VII Converse of Theorem 2
In this section, we prove the lower bound on in Theorem 2, which generalizes the converse result of Theorem 1 for the case . Since the lower bound on in Theorem 2 exactly matches the lower bound on in Theorem 1, we focus on the case (i.e., each Reduce function is calculated by 2 or more nodes) throughout this section.
We denote the minimum communication load under a particular file assignment as , and we present a lower bound on in the following lemma.
Converse Proof of Theorem 2. The minimum communication load is lower bounded by the minimum value of over all possible file assignments having a computation load of :
For every file assignment such that , satisfy the same conditions as the case of in (25), (26) and (27).
Then by the convexity of the function in , we have for integer-valued ,
Next, we first apply Lemma 2 to (73), then by (76), we have
where (a) is due to the constraints on in (26) and (27).
Therefore, is lower bounded by the lower convex envelop of the points . This completes the proof of the converse part of Theorem 2.
The proof of lemma 2 follows the same steps of the proof of Lemma 1, where a lower bound on the number of bits communicated by any subset of nodes, for the case of , is established by induction.
Proof of Lemma 2. We first prove the following claim.
For any subset , we have
where is defined in (39).
a. If for any , obviously
b. Suppose the statement is true for all subsets of size .
For any of size , and all , we have as derived in (61):
where .
The first term on the RHS of (82) is lower bounded by the induction assumption:
The second term on the RHS of (82) can be calculated based on the independence of intermediate values:
where (a) and (b) are due to the independence of the intermediate values, and (c) is due to the uniform distribution of the output functions such that each node in calculates output functions computed exclusively by nodes in .
For each in (93), we have
Since (99) holds for all subsets of size , we have proven Claim 2.
Then by Claim 2, let be the set of all nodes,
This completes the proof of Lemma 2.
VIII Implementation and Empirical Evaluation of Coded Distributed Computing
In this section, we demonstrate the impact of the proposed Coded Distributed Computing (CDC) scheme on balancing the time spent on task execution and the time spent on data movement, in order to speed up practical distributed computing applications. In particular, let us consider a MapReduce-type application for which the total execution time is roughly composed of the time spent executing the Map tasks, denoted by , the time spent shuffling intermediate values, denoted by , and the time spent executing the Reduce tasks, denoted by , i.e.,
Using CDC, we can leverage more computations in the Map phase, in order to reduce the communication load by the same multiplicative factor. Hence, ignoring the coding overheads, CDC promises an approximate total execution time of
To minimize the above execution time, one would choose , resulting in the minimum execution time of
For example, in an application that is - larger than , by comparing from (101) and (103), we note that CDC can reduce the execution time by approximately - .
In the rest of this section, we empirically demonstrate the performance gain of applying CDC to TeraSort , which is a commonly used Hadoop benchmark for distributed sorting terabytes of data . In particular, we first incorporate the coding ideas in CDC into TeraSort to develop a novel coded distributed sorting algorithm, named CodedTeraSort, which imposes structured redundancy in the input data, in order to enable in-network coding opportunities that overcome the data shuffling bottleneck of TeraSort. Then, we evaluate the performance of CodedTeraSort on Amazon EC2 clusters, and observe a - speedup, compared with TeraSort, for typical settings of interest.
TeraSort is a conventional algorithm for distributed sorting of a large amount of data. The input data that is to be sorted is in the format of key-value (KV) pairs, meaning that each input KV pair consists of a key and a value. For example, the domain of the keys can be 10-byte integers, and the domain of the values can be arbitrary strings. TeraSort sorts the input data according to their keys, e.g., sorting integers.
Let us consider implementing TeraSort over distributed computing nodes, which consists of 5 stages: File Placement, Key Domain Partitioning, Map Phase, Shuffle Phase, and Reduce Phase. In File Placement, all input KV pairs are split into disjoint files, and each file is placed on one of the nodes. In Key Domain Partitioning, the domain of the keys is split into partitions, and each node will be responsible for sorting the KV pairs whose keys fall into one of the partitions. In Map Phase, each node hashes each KV pair in its locally stored file into one of the partitions, according to its key. In Shuffle Phase, the KV pairs in the same partition are transferred to the node that is responsible for sorting that partition. In Reduce Stage, each node locally sorts KV pairs belonging to its assigned partition. We illustrate the TeraSort algorithm using a simple example shown in Fig. 7.
VIII-A2 Performance Evaluation
To understand the performance of TeraSort, we performed an experiment on Amazon EC2 to sort 12GB of data by running TeraSort on 16 instances.We note that EC2 uses virtual machines, and each instance may not be hosted by a dedicated physical machine. The breakdown of the total execution time is shown in Table I.
We observe from Table I that for a conventional TeraSort execution, 98.4% of the total execution time was spent in data shuffling, which is of the time spent in the Map phase. Given the fact that data shuffling dominates the job execution time, the principle of optimally trading computation for communication of the proposed CDC scheme can be applied to significantly improve the performance of TeraSort. For example, when executing the same sorting job using a coded version of TeraSort with a computation load of , according to (102), we could theoretically save the total execution time by approximately . This motivates us to develop a novel coded distributed sorting algorithm, named CodedTeraSort, which is briefly described in the next sub-section.
VIII-B Coded TeraSort
We develop the CodedTeraSort algorithm by applying the proposed CDC scheme for the case of (see Example 1 in Section IV for an illustration) to the above described TeraSort algorithm. CodedTeraSort exploits redundant computations on the input files in the Map phase, creating in-network coding opportunities to significantly slash the load of data shuffling. In particular, the execution of CodedTeraSort consists of following stages of operations. Here we give high-lever descriptions of these operations, and we refer the interested readers to for more detailed descriptions.
Structured Redundant File Placement. The entire input KV pairs are split into many small files, each of which is repeatedly placed on nodes (i.e., a computation load of ), according to the particular pattern specified by the CDC scheme.
Map. Each node applies the hashing operation as in TeraSort on each of its assigned files.
Encoding to Create Coded Packets. Each node generates coded multicast packets from local results computed in Map phase, according to the encoding process of the CDC scheme.
Multicast Shuffling. Each node multicasts each of its generated coded packet to a specific set of other nodes.
Decoding. Each node locally decodes the required KV pairs from the received coded packets.
Reduce. Each node locally sorts the KV pairs within its assigned partition as in the Reduce phase of TeraSort.
VIII-C Empirical Evaluations
We imperially demonstrate the performance gain of CodedTeraSort through experiments on Amazon EC2 clusters. In this sub-section, we first present some choices we have made for the implementation. Then, we discuss the experiment results.
We first describe the following common implementation choices that we have made for both TeraSort and CodedTeraSort algorithms.
Data Format: All input KV pairs are generated from TeraGen in the standard Hadoop package. Each input KV pair consists of a -byte key and a -byte value. A key is a -byte unsigned integer, and the value is an arbitrary string of bytes. The KV pairs are sorted based on their keys, using the standard integer ordering.
Library: We implement both TeraSort and CodedTeraSort algorithms in C++, and use Open MPI library for communications between EC2 instances.
In the TeraSort implementation, each node sequentially steps through Map, Pack, Shuffle, Unpack, and Reduce stages. The Pack stage serializes each intermediate value to a continuous memory array to ensure that a single TCP flow is created for each intermediate value (which may contain multiple KV pairs) when MPI_Send is calledCreating a TCP flow per KV pair leads to inefficiency from overhead and convergence issue.. The Unpack stage deserializes the received data to a list of KV pairs. In the Shuffle stage, intermediate values are unicast serially, meaning that there is only one sender node and one receiver node at any time instance. Specifically, as illustrated in Fig. 8(a), Node starts to unicast to Nodes 2, 3, and 4 back-to-back. After Node finishes, Node unicasts back-to-back to Nodes 1, 3, and 4. This continues until Node 4 finishes.
In the CodedTeraSort implementation, each node sequentially steps through CodeGen, Map, Encode, Multicast Shuffling, Decode, and Reduce stages. In the CodeGen (or code generation) stage, firstly, each node generates all file indices, as subsets of nodes. Then each node uses MPI_Comm_split to initialize multicast groups each containing nodes on Open MPI, such that multicast communications will be performed within each of these groups. The serialization and deserialization are implemented respectively in the Encode and the Decode stages. In Multicast Shuffling, MPI_Bcast is called to multicast a coded packet in a serial manner, so only one node multicasts one of its encoded packets at any time instance. Specifically, as illustrated in Fig. 8(b), Node 1 multicasts to the other 2 nodes in each multicast group Node 1 is in. For example, Node 1 first multicasts to Node 2 and 3 in the multicast group . After Node finishes, Node starts multicasting in the same manner. This process continues until Node finishes.
VIII-C2 Experiment Results
We evaluate the run-time performance of TeraSort and CodedTeraSort, for different combinations of the number of workers and the computation load . All experiments are repeated times, and the average values are recorded.
In Table II and Table III, we list the breakdowns of the average execution times to sort 12 GB of input data using workers and workers respectively. Here we limit the incoming and outgoing traffic rates of each instance to Mbps. This is to alleviate the effects of the bursty behaviors of the transmission rates in the beginning of some TCP sessions, given the particular size of the data to be sorted. We observe an overall - speedup of CodedTeraSort as compared with TeraSort. From the experiment results we make the following observations:
For CodedTeraSort, the time spent in the CodeGen stage is proportional to , which is the number of multicast groups.
The Map time of CodedTeraSort is approximately times higher than that of TeraSort. This is because that each node hashes times more KV pairs than that in TeraSort. Specifically, the ratios of the CodedTeraSort’s Map time to the TeraSort’s Map time from Table II are and , and from Table III are and .
While CodedTeraSort theoretically promises a factor of more than reduction in shuffling time, the actual gains observed in the experiments are slightly less than . For example, for the experiment with nodes and , as shown in Table II, the speedup of the Shuffle stage is . This phenomenon is caused by the following two factors. 1) Open MPI’s multicast API (MPI_Bcast) has an inherent overhead per a multicast group, for instance, a multicast tree is constructed before multicasting to a set of nodes. 2) Using the MPI_Bcast API, the time of multicasting a packet to nodes is higher than that of unicasting the same packet to a single node. In fact, as measured in , the multicasting time increases logarithmically with .
Further, we observe the following trends from both tables:
The impact of computation load : As increases, the shuffling time reduces by approximately times. However, the Map execution time increases linearly with , and more importantly the CodeGen time increases exponentially with as . Hence, for small values of () we observe overall reduction in execution time, and the speedup increases. However, as we further increase , the CodeGen time will dominate the execution time, and the speedup decreases. Hence, in our evaluations, we have limited to be at most .The redundancy parameter is also limited by the total storage available at the nodes. Since for a choice of redundancy parameter , each piece of input KV pairs should be stored at nodes, we can not increase beyond
The impact of worker number : As increases, the speedup decreases. This is due to the following two reasons. 1) The number of multicast groups, i.e., , grows exponentially with , resulting in a longer execution time of the CodeGen process. 2) When more nodes participate in the computation, for a fixed , less amount of KV pairs are hashed at each node locally in the Map phase, resulting in less locally available intermediate values and a higher communication load. Hence, given more worker nodes, one would preferably use larger computation load to achieve a better run-time performance.
IX Concluding Remarks and Future Directions
We introduced a scalable distributed computing framework motivated by MapReduce, which is suited for arbitrary types of output functions. We formulated and exactly characterized an information-theoretic tradeoff between computation load and communication load within this framework. In particular, we proposed Coded Distributed Computing (CDC), a coded scheme that reduces the communication load by a factor that can grow with the network size, illustrating the role of coding in speeding up distributed computing jobs. We also proved a tight information-theoretic lower bound on the minimum communication load, using any data shuffling scheme, which exactly matches the communication load achieved by CDC. This result reveals a fundamental relationship between computation and communication in distributed computing–the two are inversely proportional to each other. Moreover, we applied the proposed CDC scheme to the conventional TeraSort algorithm to develop a novel distributed sorting algorithm, named CodedTeraSort, and empirically demonstrated the performance gain of CodedTeraSort through extensive experiments on Amazon EC2 clusters.
Finally, we discuss some follow-up research directions of this work.
Heterogeneous Networks with Asymmetric Tasks. It is common to have computing nodes with heterogeneous storage, processing and communication capacities within computer clusters (e.g., Amazon EC2 clusters composed of heterogeneous computing instances). In addition, processing different parts of the dataset can generate intermediate results with different sizes (e.g., performing data analytics on highly-clustered graphs). For computing over heterogeneous nodes, one solution is to break the more powerful nodes into multiple smaller virtual nodes that have homogeneous capability, and then apply the proposed CDC scheme for the homogeneous setting. When intermediate results have different sizes, the proposed coding scheme still applies, but the coding operations are not symmetric as in the case of homogeneous intermediate results (e.g., one may now need to compute the XOR of two data segments with different sizes). Alternatively, we can employ a low-complexity greedy approach, in which we assign the Map tasks to maximize the number of multicasting opportunities that simultaneously deliver useful information to the largest possible number of nodes. Some preliminary studies along this direction have been conducted to obtain the solutions for some special cases (see, e.g., ). Nevertheless, systematically characterizing the optimal resource allocation strategies and coding schemes for general heterogeneous networks with asymmetric tasks remains an interesting open problem.
Straggling/Failing Computing Nodes. Other than the communication bottleneck, the effect of straggling servers also severely degrades the run-time performance of distributed computing applications (see e.g., ). Recently in , Maximum-Distance-Separable (MDS) codes were utilized to encode linear computation tasks, providing robustness to a certain number of stragglers. Following the results in , coded computing strategies have been proposed to efficiently deal with the stragglers for various computation tasks and network settings (see, e.g., ). In , we have superimposed the proposed CDC scheme on top of the MDS codes, developing a unified coding framework for distributed computing with straggling servers. This framework achieves a flexible tradeoff between computation latency in the Map phase and communication load in the Shuffle phase, which has the CDC scheme (or minimum bandwidth code) and the MDS code (or minimum latency code) as the two end points. Nevertheless, designing resource allocation strategies and coding techniques to optimize the run-time performance over distributed computing clusters with stragglers is a challenging open problem.
Multi-Stage Computation Tasks. Unlike simple computation tasks like Grep, Join and Sort, many distributed computing applications contain multiples stages of MapReduce computations. Examples of these applications include machine learning algorithms , SQL queries for databases , and scientific analytics . One can express the computation logic of a multi-stage application as a directed acyclic graph (DAG) , in which each vertex represents a logical step of data transformation, and each edge represents the dataflow across processing vertices. In order to speed up multi-stage computation tasks using codes, while one straightforward approach is to apply the proposed CDC scheme for the cascaded distributed computing framework (see Theorem 2) to compute each stage locally, we expect to achieve a higher reduction in bandwidth consumption and response time by globally designing codes for the entire task graph and accounting for interactions between consecutive stages. A preliminary exploration along this direction was recently presented in .
Multi-Layer Networks and Structured Topology. So far we have only considered a single-layer topology of the distributed computing nodes, in which each node can multicast to an arbitrary number of other nodes at the same cost as unicasting to a single node. However, in practical data center networks, nodes can be connected through multiple switches at different layers with different capacities, forming a hierarchical multi-root tree topology (e.g., fat-tree topology ). In this case, we need to generalize our communication model to include more structured topologies, and develop coded shuffling strategies that account for (1) path lengths of shuffled data (2) congestion at links higher up in the topology; and (3) different link capacities and multicast-costs at different layers of network topology. We have made preliminary progress in for a star topology (motivated by wireless edge computing), where nodes are connected via only one access point (or switch layer).
Joint Storage and Computation Optimization. We have so far assumed that we can design the placement of the input files to create coding opportunities during the computation process. However, in practical file storage systems, data blocks are often stored without prior knowledge about the computations that will be performed on them, and moving the data across the nodes before the computation is often too costly. In this case, even without the capability of designing the data placement as exactly specified by the CDC scheme, one can still take advantage of the inherent data redundancy (e.g., GFS and HDFS by default place replicas of each data block on 3 distributed nodes) to create coded multicast opportunities, significantly reducing the communication load.
We plot in Fig. 9 the average communication load achieved by a coded shuffling scheme similar to the one presented in Section V-B (with the modification that each node zero-pads its associated data segments to the length of the longest one before coding), when each input file is placed and mapped at out of nodes chosen uniformly at random, and compare it with the communication load achieved by CDC where the input files are placed based on the Map phase design in Section V-A. As demonstrated in Fig. 9, without requiring the files to be placed as exactly described by the CDC scheme, one can still exploit the data redundancy to achieve a communication load that is superlinear with respect to the computation load. Therefore, the coded data shuffling scheme of CDC can effectively reduce the communication loads of computation jobs on general data storage systems. This behavior that a random data placement achieves close-to-optimum performance has also been reported in for a decentralized wireless distributed computing platform, and in for a decentralized caching system.
Coded Edge/Fog Computing. In the emerging mobile Edge/Fog computing paradigm (see, e.g., ), abundant computation resources scattered across the network edge (e.g., smartphones, tablets and smart cars) are harvested to perform data-intensive computations collaboratively. In this scenario, coding opportunities are widely available by injecting redundant storage and computations into the edge network. We envision codes to play a transformational role in Edge/Fog computing for leveraging such redundancy to substantially reduce the bandwidth consumption and the latency of computing. For an edge computing scenario where the mobile users upload the tasks to the edge nodes, and retrieve the computed results from the edge nodes, we have designed coded computing architectures in , in which coded computations that are aware of the underlying physical-layer communication are performed at the edge nodes, achieving the minimum load of computation and the maximum spectral efficiency simultaneously. In , we have formulated a wireless distributed computing framework, in which a cluster of mobile users collaborate via an access point to simultaneously meet their computational needs. For this wireless computing platform, we exploited the coding techniques of CDC to achieve a scalable design such that the platform can accommodate an unlimited number of mobile users with a constant amount of bandwidth consumption. Also in a recent magazine paper , we have demonstrated the opportunities of utilizing coding to improve the performance of Edge/Fog computing applications (e.g., navigation services and recommendation systems).