Basics
The distributed RPC framework makes it easy to run functions remotely,
supports referencing remote objects without copying the real data
around, and provides autograd and optimizer APIs to transparently run
backward and update parameters across RPC boundaries. These features
can be categorized into four sets of APIs.

Remote Procedure Call (RPC) supports running a function on the
   specified destination worker with the given arguments and getting
   the return value back or creating a reference to the return value.
   There are three main RPC APIs: "rpc_sync()" (synchronous),
   "rpc_async()" (asynchronous), and "remote()" (asynchronous and
   returns a reference to the remote return value). Use the
   synchronous API if the user code cannot proceed without the return
   value. Otherwise, use the asynchronous API to get a future, and
   wait on the future when the return value is needed on the caller.
   The "remote()" API is useful when the requirement is to create
