You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							352 lines
						
					
					
						
							8.5 KiB
						
					
					
				
			
		
		
	
	
							352 lines
						
					
					
						
							8.5 KiB
						
					
					
				| /* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
 | |
| 
 | |
| Licensed under the Apache License, Version 2.0 (the "License");
 | |
| you may not use this file except in compliance with the License.
 | |
| You may obtain a copy of the License at
 | |
| 
 | |
|     http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
| Unless required by applicable law or agreed to in writing, software
 | |
| distributed under the License is distributed on an "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| See the License for the specific language governing permissions and
 | |
| limitations under the License. */
 | |
| syntax = "proto2";
 | |
| 
 | |
| import "ParameterConfig.proto";
 | |
| import "TrainerConfig.proto";
 | |
| 
 | |
| package paddle;
 | |
| 
 | |
| /**
 | |
|  * Various structs for communicating with parameter server
 | |
|  */
 | |
| enum ParameterUpdateMode {
 | |
|   // Set parameter
 | |
|   PSERVER_UPDATE_MODE_SET_PARAM = 0;      // use local param
 | |
|   PSERVER_UPDATE_MODE_SET_PARAM_ZERO = 1; // set zero param
 | |
| 
 | |
|   // Update parameter once a gradient is received
 | |
|   PSERVER_UPDATE_MODE_ASYNC_SGD = 2;
 | |
| 
 | |
|   // Accumulate gradient
 | |
|   PSERVER_UPDATE_MODE_ADD_GRADIENT = 3;
 | |
| 
 | |
|   // Average parameters
 | |
|   PSERVER_UPDATE_MODE_AVERAGE_PARAMETER = 4;
 | |
| 
 | |
|   // No update. Only get parameters back.
 | |
|   PSERVER_UPDATE_MODE_GET_PARAM = 5;
 | |
|   PSERVER_UPDATE_MODE_GET_PARAM_SPARSE = 6; // only get sparse rows
 | |
| };
 | |
| 
 | |
| message ParameterBlock {
 | |
|   // it accurately means parameter id.
 | |
|   required uint64 para_id = 1;
 | |
|   // global sparse row or dense block for each block in parameter
 | |
|   required uint64 block_id = 2;
 | |
|   // offset in (local) storage
 | |
|   required uint64 begin_pos = 3;
 | |
|   // actual size of block, size for last block is [endDim -beginDim],
 | |
|   // others is parameter_block_size in ParameterConfig
 | |
|   required uint64 block_size = 4;
 | |
| }
 | |
| 
 | |
| enum PServerStatus {
 | |
|   PSERVER_STATUS_NOT_SET = 0;
 | |
|   PSERVER_STATUS_PARAMETER_READY = 1;
 | |
| };
 | |
| 
 | |
| enum BatchStatus {
 | |
|   BATCH_START = 0;
 | |
|   BATCH_ON = 1;
 | |
|   BATCH_FINISH = 2;
 | |
|   BATCH_START_AND_FINISH = 3;
 | |
| };
 | |
| 
 | |
| message SendParameterRequest {
 | |
|   required ParameterUpdateMode update_mode = 1;
 | |
|   repeated ParameterBlock blocks = 2;
 | |
|   required bool send_back_parameter = 3;
 | |
| 
 | |
|   // number of samples used for calculating this update
 | |
|   optional int64 num_samples = 4;
 | |
| 
 | |
|   // cost will be used to calculate global objective value
 | |
|   optional double cost = 5;
 | |
| 
 | |
|   required BatchStatus batch_status = 6;
 | |
| 
 | |
|   optional int32 trainer_id = 7;
 | |
| 
 | |
|   // send back parameter type on pserver, PARAMETER_VALUE by default
 | |
|   optional int32 send_back_parameter_type = 8 [ default = 0 ];
 | |
| 
 | |
|   // forwardbackward time in usec
 | |
|   optional uint64 forwardbackward_time = 9;
 | |
| }
 | |
| 
 | |
| message WaitPassStartRequest {}
 | |
| 
 | |
| message WaitPassStartResponse {}
 | |
| 
 | |
| message WaitPassFinishRequest {}
 | |
| 
 | |
| message WaitPassFinishResponse {}
 | |
| 
 | |
| enum SyncObject {
 | |
|   SYNC_DEFAULT = 0; // wait for the synchronizeBarrier_
 | |
|   SYNC_DATA = 1;    // wait for the synchronizeDataBarrier_
 | |
| }
 | |
| 
 | |
| message SynchronizeRequest {
 | |
|   required SyncObject sync_object_id = 1 [ default = SYNC_DEFAULT ];
 | |
| 
 | |
|   optional int32 trainer_id = 2;
 | |
| }
 | |
| 
 | |
| message SynchronizeResponse {}
 | |
| 
 | |
| message SendParameterResponse { repeated ParameterBlock blocks = 1; }
 | |
| 
 | |
| message SetConfigRequest {
 | |
|   repeated ParameterConfig param_configs = 1;
 | |
|   required OptimizationConfig opt_config = 2;
 | |
|   required string save_dir = 4;
 | |
|   required int32 server_id = 5;
 | |
|   required bool is_sparse_server = 6;
 | |
| }
 | |
| 
 | |
| message SetConfigResponse {}
 | |
| 
 | |
| message GetStatusRequest {}
 | |
| 
 | |
| message GetStatusResponse { required PServerStatus status = 1; }
 | |
| 
 | |
| message SetStatusRequest { required PServerStatus status = 1; }
 | |
| 
 | |
| message SetStatusResponse {}
 | |
| 
 | |
| // create a column vector. The size is the dimension of parameter
 | |
| message CreateVectorRequest {}
 | |
| 
 | |
| message CreateVectorResponse {
 | |
|   // error message. Empty if success
 | |
|   optional string return_message = 1;
 | |
| 
 | |
|   required int64 handle = 2;
 | |
| }
 | |
| 
 | |
| message ReleaseVectorRequest { required int64 handle = 1; }
 | |
| 
 | |
| message ReleaseVectorResponse {
 | |
|   // error message. Empty if success
 | |
|   optional string return_message = 1;
 | |
| }
 | |
| 
 | |
| // Create a column major matrix. The number of rows is the dimension
 | |
| // of parameter. The number of columns is specifed by num_cols
 | |
| message CreateMatrixRequest { required int32 num_cols = 1; }
 | |
| 
 | |
| message CreateMatrixResponse {
 | |
|   // error message. Empty if success
 | |
|   optional string return_message = 1;
 | |
| 
 | |
|   required int64 handle = 2;
 | |
| }
 | |
| 
 | |
| message ReleaseMatrixRequest { required int64 handle = 1; }
 | |
| 
 | |
| message ReleaseMatrixResponse {
 | |
|   // error message. Empty if success
 | |
|   optional string return_message = 1;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * The operations are defined using the variables commented at Operation
 | |
|  * and OperationResult
 | |
|  */
 | |
| enum MatrixVectorOperation {
 | |
|   // r = u^T u
 | |
|   PSERVER_OP_utu = 0;
 | |
| 
 | |
|   // r = u^T v
 | |
|   PSERVER_OP_utv = 1;
 | |
| 
 | |
|   // u = a u
 | |
|   PSERVER_OP_au = 2;
 | |
| 
 | |
|   // v = a u + b v
 | |
|   PSERVER_OP_au_bv = 3;
 | |
| 
 | |
|   // u = a A x + b u
 | |
|   PSERVER_OP_aAx_bu = 4;
 | |
| 
 | |
|   // Stochastic gradient update
 | |
|   PSERVER_OP_SGD = 5;
 | |
| 
 | |
|   // u = a
 | |
|   PSERVER_OP_RESET = 6;
 | |
| 
 | |
|   // v = u
 | |
|   PSERVER_OP_COPY = 7;
 | |
| 
 | |
|   // w = a u + b v + c w
 | |
|   PSERVER_OP_au_bv_cw = 8;
 | |
| 
 | |
|   // owlqn: MakeSteepestDescDir
 | |
|   PSERVER_OP_MAKE_STEEPEST_DESC_DIR = 9;
 | |
| 
 | |
|   // owlqn: FixDirSigns
 | |
|   PSERVER_OP_FIX_DIR_SIGNS = 10;
 | |
| 
 | |
|   // owlqn: DirDeriv
 | |
|   PSERVER_OP_DIR_DERIV = 11;
 | |
| 
 | |
|   // owlqn: FixOmegaSigns
 | |
|   PSERVER_OP_FIX_OMEGA_SIGNS = 12;
 | |
| 
 | |
|   // Get overall cost
 | |
|   PSERVER_OP_COST = 13;
 | |
| 
 | |
|   // Pass control
 | |
|   PSERVER_OP_START_PASS = 14;
 | |
|   PSERVER_OP_FINISH_PASS = 15;
 | |
| 
 | |
|   // randomize value
 | |
|   PSERVER_OP_RANDOMIZE = 16;
 | |
| 
 | |
|   // call optimizer apply
 | |
|   PSERVER_OP_APPLY = 17;
 | |
| }
 | |
| 
 | |
| message ProtoVector {
 | |
|   required int64 dim = 1;
 | |
|   repeated double values = 2 [ packed = true ];
 | |
| }
 | |
| 
 | |
| message ProtoMatrix {
 | |
|   required int64 num_rows = 1;
 | |
|   required int64 num_cols = 2;
 | |
|   repeated double values = 3 [ packed = true ];
 | |
| }
 | |
| 
 | |
| message Operation {
 | |
|   required MatrixVectorOperation operation = 1;
 | |
| 
 | |
|   // vector handles created on the pserver
 | |
|   repeated int64 pvectors = 2; // u, v, w
 | |
| 
 | |
|   // matrix handles created on the pserver
 | |
|   repeated int64 pmatrices = 3; // A, B, C
 | |
| 
 | |
|   repeated double scalars = 4;       // a, b, c
 | |
|   repeated ProtoVector vectors = 5;  // x, y, z
 | |
|   repeated ProtoMatrix matrices = 6; // X, Y, Z
 | |
| }
 | |
| 
 | |
| message OperationResult {
 | |
|   // error message. Empty if success
 | |
|   optional string return_message = 1;
 | |
|   //
 | |
|   repeated double scalars = 2;       // d, e, f
 | |
|   repeated ProtoVector vectors = 3;  // p, q, r
 | |
|   repeated ProtoMatrix matrices = 4; // P, Q, R
 | |
| }
 | |
| 
 | |
| message DoOperationRequest {
 | |
|   repeated Operation operations = 1;
 | |
| 
 | |
|   // If true, wait for gradient to be ready before starting the operations
 | |
|   required bool wait_for_gradient = 2;
 | |
| 
 | |
|   // If true, send back the parameter to clients after the operations are
 | |
|   // finished
 | |
|   required bool send_back_parameter = 3;
 | |
| 
 | |
|   // If true, and if all clients call waitPassFinish,
 | |
|   // signal all clients finish the pass
 | |
|   required bool release_pass = 4;
 | |
| }
 | |
| 
 | |
| message DoOperationResponse {
 | |
|   // error message. Empty if success
 | |
|   optional string return_message = 1;
 | |
| 
 | |
|   repeated OperationResult results = 2;
 | |
| 
 | |
|   required bool pass_finish = 3;
 | |
| }
 | |
| 
 | |
| message LoadValueRequest { required string dir_name = 1; }
 | |
| 
 | |
| message LoadValueResponse {
 | |
|   // error message. Empty if success
 | |
|   optional string return_message = 1;
 | |
| }
 | |
| 
 | |
| message SaveValueRequest { required string dir_name = 1; }
 | |
| 
 | |
| message SaveValueResponse {
 | |
|   // error message. Empty if success
 | |
|   optional string return_message = 1;
 | |
| }
 | |
| 
 | |
| enum DataUpdateMode {
 | |
|   // Client send it's own data to pserver
 | |
|   DATA_UPDATE_MODE_SET_OWN = 0;
 | |
|   // Client get all user data from all pservers
 | |
|   DATA_UPDATE_MODE_GET_ALL = 1;
 | |
|   // Client send it's own ref feature to pserver
 | |
|   DATA_UPDATE_MODE_SET_REF = 2;
 | |
|   // Client get all ref featuers from all pservers
 | |
|   DATA_UPDATE_MODE_GET_REF = 3;
 | |
|   // Client send it's own ref label to pserver
 | |
|   DATA_UPDATE_MODE_SET_REF_LABEL = 4;
 | |
|   // Client get all ref labels from all pservers
 | |
|   DATA_UPDATE_MODE_GET_REF_LABEL = 5;
 | |
|   // Client send it's own ref grad to pserver
 | |
|   DATA_UPDATE_MODE_SET_REF_GRAD = 6;
 | |
|   // Client get all ref grad from all pservers
 | |
|   DATA_UPDATE_MODE_GET_REF_GRAD = 7;
 | |
| }
 | |
| 
 | |
| enum SendDataType {
 | |
|   DATA_REF = 0;
 | |
|   DATA_REFLABEL = 1;
 | |
|   DATA_REFGRAD = 2;
 | |
|   DATA_REDUCE_SUM = 3;
 | |
| }
 | |
| 
 | |
| enum TransDataType {
 | |
|   TRANS_INT32 = 0;
 | |
|   TRANS_UINT32_T = 1;
 | |
|   TRANS_INT64_T = 2;
 | |
|   TRANS_UINT64_T = 3;
 | |
|   TRANS_FLOAT = 5;
 | |
|   TRANS_DOUBLE = 6;
 | |
| }
 | |
| 
 | |
| message DataBlock {
 | |
|   // total byte size of this data blcok
 | |
|   required uint64 total_size = 1;
 | |
|   // byte size of one data type
 | |
|   required int32 data_size = 2;
 | |
|   // data_type
 | |
|   optional TransDataType data_type = 3 [ default = TRANS_DOUBLE ];
 | |
| }
 | |
| 
 | |
| message SendDataRequest {
 | |
|   required SendDataType type = 1;
 | |
|   required DataUpdateMode update_mode = 2;
 | |
|   repeated DataBlock blocks = 3;
 | |
|   required uint64 client_id = 4;
 | |
|   required uint64 server_id = 5;
 | |
| }
 | |
| 
 | |
| message SendDataResponse {
 | |
|   required SendDataType type = 1;
 | |
|   repeated DataBlock blocks = 2;
 | |
|   required uint64 server_id = 3;
 | |
| }
 |