1c8b59c046895fa5b6d79f73e0b5817330fcfbfc1A. Unique TensorFlower/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. 200986d48bb646daab659503ad3a713919865f32dDerek Murray 300986d48bb646daab659503ad3a713919865f32dDerek MurrayLicensed under the Apache License, Version 2.0 (the "License"); 400986d48bb646daab659503ad3a713919865f32dDerek Murrayyou may not use this file except in compliance with the License. 500986d48bb646daab659503ad3a713919865f32dDerek MurrayYou may obtain a copy of the License at 600986d48bb646daab659503ad3a713919865f32dDerek Murray 700986d48bb646daab659503ad3a713919865f32dDerek Murray http://www.apache.org/licenses/LICENSE-2.0 800986d48bb646daab659503ad3a713919865f32dDerek Murray 900986d48bb646daab659503ad3a713919865f32dDerek MurrayUnless required by applicable law or agreed to in writing, software 1000986d48bb646daab659503ad3a713919865f32dDerek Murraydistributed under the License is distributed on an "AS IS" BASIS, 1100986d48bb646daab659503ad3a713919865f32dDerek MurrayWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1200986d48bb646daab659503ad3a713919865f32dDerek MurraySee the License for the specific language governing permissions and 1300986d48bb646daab659503ad3a713919865f32dDerek Murraylimitations under the License. 1400986d48bb646daab659503ad3a713919865f32dDerek Murray==============================================================================*/ 1500986d48bb646daab659503ad3a713919865f32dDerek Murray 1600986d48bb646daab659503ad3a713919865f32dDerek Murray#ifndef TENSORFLOW_CORE_DISTRIBUTED_RUNTIME_MASTER_INTERFACE_H_ 1700986d48bb646daab659503ad3a713919865f32dDerek Murray#define TENSORFLOW_CORE_DISTRIBUTED_RUNTIME_MASTER_INTERFACE_H_ 1800986d48bb646daab659503ad3a713919865f32dDerek Murray 19fa07bfda6896748b747334e750763f6feea91129Sherry Moore#include "tensorflow/core/distributed_runtime/call_options.h" 20bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray#include "tensorflow/core/distributed_runtime/message_wrappers.h" 2182a6bbc5d0af60f04958a4e10674cdddf028d7d7Suharsh Sivakumar#include "tensorflow/core/lib/core/errors.h" 2200986d48bb646daab659503ad3a713919865f32dDerek Murray#include "tensorflow/core/lib/core/status.h" 2300986d48bb646daab659503ad3a713919865f32dDerek Murray#include "tensorflow/core/protobuf/master.pb.h" 2400986d48bb646daab659503ad3a713919865f32dDerek Murray 2500986d48bb646daab659503ad3a713919865f32dDerek Murraynamespace tensorflow { 2600986d48bb646daab659503ad3a713919865f32dDerek Murray 273699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray// Abstract interface for communicating with the TensorFlow Master service. 2800986d48bb646daab659503ad3a713919865f32dDerek Murray// 293699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray// This interface supports both RPC-based master implementations, and 303699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray// in-process master implementations that do not require an RPC 313699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray// roundtrip. 3200986d48bb646daab659503ad3a713919865f32dDerek Murrayclass MasterInterface { 3300986d48bb646daab659503ad3a713919865f32dDerek Murray public: 3400986d48bb646daab659503ad3a713919865f32dDerek Murray virtual ~MasterInterface() {} 35fa07bfda6896748b747334e750763f6feea91129Sherry Moore virtual Status CreateSession(CallOptions* call_options, 36fa07bfda6896748b747334e750763f6feea91129Sherry Moore const CreateSessionRequest* request, 3700986d48bb646daab659503ad3a713919865f32dDerek Murray CreateSessionResponse* response) = 0; 3800986d48bb646daab659503ad3a713919865f32dDerek Murray 39fa07bfda6896748b747334e750763f6feea91129Sherry Moore virtual Status ExtendSession(CallOptions* call_options, 40fa07bfda6896748b747334e750763f6feea91129Sherry Moore const ExtendSessionRequest* request, 4100986d48bb646daab659503ad3a713919865f32dDerek Murray ExtendSessionResponse* response) = 0; 4200986d48bb646daab659503ad3a713919865f32dDerek Murray 4382a6bbc5d0af60f04958a4e10674cdddf028d7d7Suharsh Sivakumar virtual Status PartialRunSetup(CallOptions* call_options, 4482a6bbc5d0af60f04958a4e10674cdddf028d7d7Suharsh Sivakumar const PartialRunSetupRequest* request, 4582a6bbc5d0af60f04958a4e10674cdddf028d7d7Suharsh Sivakumar PartialRunSetupResponse* response) { 4682a6bbc5d0af60f04958a4e10674cdddf028d7d7Suharsh Sivakumar return errors::Unimplemented("Partial run not implemented for this master"); 4782a6bbc5d0af60f04958a4e10674cdddf028d7d7Suharsh Sivakumar } 4882a6bbc5d0af60f04958a4e10674cdddf028d7d7Suharsh Sivakumar 49fa07bfda6896748b747334e750763f6feea91129Sherry Moore virtual Status RunStep(CallOptions* call_options, 50bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray RunStepRequestWrapper* request, 513699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray MutableRunStepResponseWrapper* response) = 0; 5200986d48bb646daab659503ad3a713919865f32dDerek Murray 53bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray virtual Status RunStep(CallOptions* call_options, 54bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray const RunStepRequest* request, 55bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray RunStepResponse* response) { 56bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray std::unique_ptr<RunStepRequestWrapper> wrapped_request( 57bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray new ProtoRunStepRequest(request)); 583699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray std::unique_ptr<MutableRunStepResponseWrapper> wrapped_response( 593699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray new NonOwnedProtoRunStepResponse(response)); 603699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray return RunStep(call_options, wrapped_request.get(), wrapped_response.get()); 61bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray } 62bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray 633699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // Returns a request object for use in calls to 643699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // `RunStep()`. Ownership is transferred to the caller. 653699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // 663699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // The message returned from this method must only be used in a 673699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // `RunStep()` call on the same `MasterInterface` instance. 68bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray virtual MutableRunStepRequestWrapper* CreateRunStepRequest() { 69bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray return new MutableProtoRunStepRequest; 70bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray } 71bf00bcc5fc75d9bd1d61c67cc6c2fc55708a26eaDerek Murray 723699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // Returns a response object for use in calls to 733699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // `RunStep()`. Ownership is transferred to the caller. 743699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // 753699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // The message returned from this method must only be used in a 763699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // `RunStep()` call on the same `MasterInterface` instance. 773699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray virtual MutableRunStepResponseWrapper* CreateRunStepResponse() { 783699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray return new OwnedProtoRunStepResponse; 793699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray } 803699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray 81fa07bfda6896748b747334e750763f6feea91129Sherry Moore virtual Status CloseSession(CallOptions* call_options, 82fa07bfda6896748b747334e750763f6feea91129Sherry Moore const CloseSessionRequest* request, 8300986d48bb646daab659503ad3a713919865f32dDerek Murray CloseSessionResponse* response) = 0; 8400986d48bb646daab659503ad3a713919865f32dDerek Murray 85fa07bfda6896748b747334e750763f6feea91129Sherry Moore virtual Status ListDevices(CallOptions* call_options, 86fa07bfda6896748b747334e750763f6feea91129Sherry Moore const ListDevicesRequest* request, 8700986d48bb646daab659503ad3a713919865f32dDerek Murray ListDevicesResponse* response) = 0; 8800986d48bb646daab659503ad3a713919865f32dDerek Murray 89fa07bfda6896748b747334e750763f6feea91129Sherry Moore virtual Status Reset(CallOptions* call_options, const ResetRequest* request, 9000986d48bb646daab659503ad3a713919865f32dDerek Murray ResetResponse* response) = 0; 913699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray 923699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray protected: 933699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // NOTE: This should only be called by implementations of this 943699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // interface whose CreateRunStepResponse() method returns a 953699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray // proto-based wrappers for the RunStepResponse message. 963699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray RunStepResponse* get_proto_from_wrapper( 973699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray MutableRunStepResponseWrapper* wrapper) { 983699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray return wrapper->get_proto(); 993699dfecc5942cab5f3c488442c07bccfd64261dDerek Murray } 10000986d48bb646daab659503ad3a713919865f32dDerek Murray}; 10100986d48bb646daab659503ad3a713919865f32dDerek Murray 10200986d48bb646daab659503ad3a713919865f32dDerek Murray} // namespace tensorflow 10300986d48bb646daab659503ad3a713919865f32dDerek Murray 10400986d48bb646daab659503ad3a713919865f32dDerek Murray#endif // TENSORFLOW_CORE_DISTRIBUTED_RUNTIME_MASTER_INTERFACE_H_ 105