Methods, systems, and apparatus, including computer programs encoded on computer storage media, for modifying a computational graph to include send and receive nodes. Communication between unique devices performing operations of different subgraphs of the computational graph can be handled efficiently by inserting send and receive nodes into each subgraph. When executed, the operations that these send and receive nodes represent may enable pairs of unique devices to conduct communication with each other in a self-sufficient manner. This shifts the burden of coordinating communication away from the backend, which affords the system that processes this computational graph representation the opportunity to perform one or more other processes while devices are executing subgraphs.
Please help me write a proper abstract based on the patent claims. CLAIM: 1. A method comprising: obtaining data representing a computational graph, the computational graph comprising a plurality of nodes and directed edges, wherein each node represents a respective operation, and wherein each directed edge connects a respective first node to a respective second node that represents an operation that receives, as input, an output of an operation represented by the respective first node; obtaining data identifying an allocation of the computational graph across a plurality of devices, wherein the allocation assigns each node in the computational graph to a respective device of the plurality of devices; identifying one or more cross-device directed edges in the computational graph, wherein each cross-device directed edge is a directed edge that connects a respective first node to a respective second node that is assigned to a different device than the respective first node in the allocation; for each cross-device directed edge: inserting a send node between the respective first node and the respective second node in the computational graph, inserting a receive node between the send node and the respective second node in the operation graph, and modifying the allocation to assign the send node to the same device as the respective first node and the receive node to the same device as the respective second node; and assigning the operations represented by the nodes in the computational graph to the plurality of devices according to the modified allocation. 2. The method of claim 1, wherein: the send node represents an operation that (i) receives, as input, an output of the operation represented by the respective first node, and (ii) provides the output of the operation represented by the respective first node, as output, to the receive node; and the receive node represents an operation that (i) receives, as input, the output of the operation represented by the send node, and (ii) provides the output of the operation represented by the send node, as output, to the respective second node. 3. The method of claim 2, wherein the output of the operation represented by the respective first node is a tensor. 4. The method of claim 2, wherein: the operation represented by the receive node further (iii) provides requests for output of the operation represented by the send node, as output, to the send node; and the operation represented by the send node further (ii) provides the output of the operation represented by the respective first node, as output, to the receive node in response to one or more requests received from the receive node. 5. The method of claim 1, wherein obtaining data identifying the allocation of the computational graph across the plurality of devices comprises: obtaining data identifying an allocation of the computational graph across hardware resources included in one or more machines. 6. The method of claim 5, wherein each node in a pair of send and receive nodes represents an operation that receives, as input, an output of the operation represented by the other node in the pair communicated according to a protocol that corresponds to each hardware resource and machine to which the pair of send and receive nodes are assigned. 7. The method of claim 1, wherein: inserting the send node between the respective first node and the respective second node in the computational graph further comprises, for each cross-device directed edge: inserting a directed edge between the send node and the respective first node; and inserting the receive node between the send node and the respective second node in the operation graph further comprises, for each cross-device directed edge: inserting a directed edge between the receive node and the respective second node. 8. The method of claim 1, wherein data is independently exchanged between operations represented by each node in a pair of send and receive nodes. 9. The method of claim 1, wherein, during execution of the operations represented by the computational graph by the plurality of devices, the operations represented by each pair of send and receive nodes allow the plurality of devices to independently communicate inputs and outputs of operations represented by other nodes in computational graph across devices in the plurality of devices. 10. A system comprising: one or more data processing apparatus; and a computer-readable storage device having stored thereon instructions that, when executed by the one or more data processing apparatus, cause the one or more data processing apparatus to perform operations comprising: obtaining data representing a computational graph, the computational graph comprising a plurality of nodes and directed edges, wherein each node represents a respective operation, and wherein each directed edge connects a respective first node to a respective second node that represents an operation that receives, as input, an output of an operation represented by the respective first node; obtaining data identifying an allocation of the computational graph across a plurality of devices, wherein the allocation assigns each node in the computational graph to a respective device of the plurality of devices; identifying one or more cross-device directed edges in the computational graph, wherein each cross-device directed edge is a directed edge that connects a respective first node to a respective second node that is assigned to a different device than the respective first node in the allocation; for each cross-device directed edge: inserting a send node between the respective first node and the respective second node in the computational graph, inserting a receive node between the send node and the respective second node in the operation graph, and modifying the allocation to assign the send node to the same device as the respective first node and the receive node to the same device as the respective second node; and assigning the operations represented by the nodes in the computational graph to the plurality of devices according to the modified allocation. 11. The system of claim 10, wherein: the send node represents an operation that (i) receives, as input, an output of the operation represented by the respective first node, and (ii) provides the output of the operation represented by the respective first node, as output, to the receive node; and the receive node represents an operation that (i) receives, as input, the output of the operation represented by the send node, and (ii) provides the output of the operation represented by the send node, as output, to the respective second node. 12. The system of claim 11, wherein the output of the operation represented by the respective first node is a tensor. 13. The system of claim 11, wherein: the operation represented by the receive node further (iii) provides requests for output of the operation represented by the send node, as output, to the send node; and the operation represented by the send node further (ii) provides the output of the operation represented by the respective first node, as output, to the receive node in response to one or more requests received from the receive node. 14. The system of claim 10, wherein data is independently exchanged between operations represented by each node in a pair of send and receive nodes. 15. The system of claim 10, wherein, during execution of the operations represented by the computational graph by the plurality of devices, the operations represented by each pair of send and receive nodes allow the plurality of devices to independently communicate inputs and outputs of operations represented by other nodes in computational graph across devices in the plurality of devices. 16. A non-transitory computer-readable storage device having instructions stored thereon that, when executed by a computing device, cause the computing device to perform operations comprising: obtaining data representing a computational graph, the computational graph comprising a plurality of nodes and directed edges, wherein each node represents a respective operation, and wherein each directed edge connects a respective first node to a respective second node that represents an operation that receives, as input, an output of an operation represented by the respective first node; obtaining data identifying an allocation of the computational graph across a plurality of devices, wherein the allocation assigns each node in the computational graph to a respective device of the plurality of devices; identifying one or more cross-device directed edges in the computational graph, wherein each cross-device directed edge is a directed edge that connects a respective first node to a respective second node that is assigned to a different device than the respective first node in the allocation; for each cross-device directed edge: inserting a send node between the respective first node and the respective second node in the computational graph, inserting a receive node between the send node and the respective second node in the operation graph, and modifying the allocation to assign the send node to the same device as the respective first node and the receive node to the same device as the respective second node; and assigning the operations represented by the nodes in the computational graph to the plurality of devices according to the modified allocation. 17. The storage device of claim 16, wherein: the send node represents an operation that (i) receives, as input, an output of the operation represented by the respective first node, and (ii) provides the output of the operation represented by the respective first node, as output, to the receive node; and the receive node represents an operation that (i) receives, as input, the output of the operation represented by the send node, and (ii) provides the output of the operation represented by the send node, as output, to the respective second node. 18. The storage device of claim 17, wherein the output of the operation represented by the respective first node is a tensor. 19. The storage device of claim 17, wherein: the operation represented by the receive node further (iii) provides requests for output of the operation represented by the send node, as output, to the send node; and the operation represented by the send node further (ii) provides the output of the operation represented by the respective first node, as output, to the receive node in response to one or more requests received from the receive node. 20. The storage device of claim 16, wherein, during execution of the operations represented by the computational graph by the plurality of devices, the operations represented by each pair of send and receive nodes allow the plurality of devices to independently communicate inputs and outputs of operations represented by other nodes in computational graph across devices in the plurality of devices. 21. A method for processing a computational graph using a plurality of devices, the computational graph comprising a plurality of nodes and directed edges, wherein each node represents a respective operation, wherein each directed edge connects a respective first node to a respective second node that represents an operation that receives, as input, an output of an operation represented by the respective first node, wherein the method comprises, for a first device of the plurality of devices: receiving data representing a subgraph of the computational graph assigned to the first device, the subgraph comprising a plurality of nodes and directed edges from the computational graph; and performing the operations represented by the nodes in the subgraph, comprising: performing an operation represented by a respective first node in the subgraph to generate a first output: determining that the first node is connected by a directed edge to a send node in the subgraph; performing the operation represented by the send node to transmit the first output of the operation represented by the respective first node to another device of the plurality of devices; performing an operation represented by a receive node in the subgraph to obtain a second output from an operation represented by a second node assigned to another device in the plurality of device; determining that the receive node is connected by a directed edge to a third node in the subgraph; and performing an operation represented by the third node using as input the obtained second output. 22. A system for processing a computational graph, the computational graph comprising a plurality of nodes and directed edges, wherein each node represents a respective operation, wherein each directed edge connects a respective first node to a respective second node that represents an operation that receives, as input, an output of an operation represented by the respective first node, wherein the system comprises a plurality of devices, and wherein a first device of the plurality of devices is configured to perform operations comprising: receiving data representing a subgraph of the computational graph assigned to the first device, the subgraph comprising a plurality of nodes and directed edges from the computational graph; and performing the operations represented by the nodes in the subgraph, comprising: performing an operation represented by a respective first node in the subgraph to generate a first output: determining that the first node is connected by a directed edge to a send node in the subgraph; performing an operation represented by the send node to transmit the first output of the operation represented by the respective first node to another device of the plurality of devices; performing an operation represented by a receive node in the subgraph to obtain a second output from an operation represented by a second node assigned to another device in the plurality of devices; determining that the receive node is connected by a directed edge to a third node in the subgraph; and performing an operation represented by the third node using as input the obtained second output.