Get desktop application:
View/edit binary Protocol Buffers messages
////////////////////////////////////////////////////////////////////////////// Eager Service defines a TensorFlow service that executes operations eagerly on a set of local devices, on behalf of a remote Eager executor. The service impl will keep track of the various clients and devices it has access to and allows the client to enqueue ops on any devices that it is able to access and schedule data transfers from/to any of the peers. A client can generate multiple contexts to be able to independently execute operations, but cannot share data between the two contexts. NOTE: Even though contexts generated by clients should be independent, the lower level tensorflow execution engine is not, so they might share some data (e.g. a Device's ResourceMgr). //////////////////////////////////////////////////////////////////////////////
This initializes the worker, informing it about the other workers in the cluster and exchanging authentication tokens which will be used in all other RPCs to detect whether the worker has restarted.
Identifies the full cluster, and this particular worker's position within.
Whether the ops on the worker should be executed synchronously or asynchronously. By default, ops are executed synchronously.
Number of seconds to keep the context alive. If more than keep_alive_secs has passed since a particular context has been communicated with, it will be garbage collected.
This is the version for all the ops that will be enqueued by the client.
Device attributes in the cluster
The ID of the created context. This is usually a randomly generated number, that will be used to identify the context in future requests to the service. Contexts are not persisted through server restarts. This ID will be used for all future communications as well. It is essential that both ends use this ID for selecting a rendezvous to get everything to match.
List of devices that are locally accessible to the worker.
This takes a list of Execute and DeleteTensorHandle operations and enqueues (in async mode) or executes (in sync mode) them on the remote server. All outputs of ops which were not explicitly deleted with DeleteTensorHandle entries will be assumed to be alive and are usable by future calls to Enqueue.
A streaming version of Enqueue. Current server implementation sends one response per received request. The benefit for using a streaming version is that subsequent requests can be sent without waiting for a response to the previous request. This synchronization is required in the regular Enqueue call because gRPC does not guarantee to preserve request order.
Takes a set of op IDs and waits until those ops are done. Returns any error in the stream so far.
Ids to wait on. If empty, wait on everything currently pending.
TODO(nareshmodi): Consider adding NodeExecStats here to be able to propagate some stats.
(message has no fields)
Contexts are always created with a deadline and no RPCs within a deadline will trigger a context garbage collection. KeepAlive calls can be used to delay this.
(message has no fields)
Closes the context. No calls to other methods using the existing context ID are valid after this.
(message has no fields)
Takes a FunctionDef and makes it enqueable on the remote worker.
(message has no fields)
TODO(fishx): Remove this method. An RPC to push tensors to the server. At times, certain environments don't allow the server to connect back to the client.
All remote tensors are identified by <Op ID, Output num>. To mimic this situation when directly sending tensors, we include an "artificial" op ID (which would have corresponded to the _Recv op when not using SendTensor).
The index within the repeated field is the output number that will help uniquely identify (along with the above op_id) the particular tensor.
The device on which the tensors should be resident.
(message has no fields)
Used as request type in: EagerService.Enqueue, EagerService.StreamingEnqueue
Used as response type in: EagerService.Enqueue, EagerService.StreamingEnqueue
A single operation response for every item in the request.
A proto representation of an eager operation.
Used in:
A unique identifier for the operation. Set by the client so that the client can uniquely identify the outputs of the scheduled operation. In the initial implementation, sending duplicate IDs has undefined behaviour, but additional constraints may be placed upon this in the future.
Control Operation IDs that will be respected when ops are re-ordered by async execution. If async execution (+ op re-ordering) is not enabled, this should have no effect.
Used in:
The remote executor should be able to handle either executing ops directly, or releasing any unused tensor handles, since the tensor lifetime is maintained by the client.
Used in:
Used in:
,The ID of the operation that produced this tensor.
The index into the outputs of the operation that produced this tensor.
Device of the operation that produced this tensor. Cannot be empty. For multi-device functions, it's the default device passed to placer.
Device where the tensor is located. Can be empty if the operation producing this tensor is a multi-device function.
Tensor type.
Used in:
All remote tensors are identified by <Op ID, Output num>. To mimic this situation when directly sending tensors, we include an "artificial" op ID (which would have corresponded to the _Recv op when not using SendTensor).
The index within the repeated field is the output number that will help uniquely identify (along with the above op_id) the particular tensor.
The device on which the tensors should be resident.