You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@singa.apache.org by wa...@apache.org on 2015/05/27 16:39:09 UTC

[08/22] incubator-singa git commit: detect worker status through ClusterRuntime which calls zookeeper. stop servers when all workers finish; stop stub when all workers and servers finish

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c318a98c/src/proto/model.pb.h
----------------------------------------------------------------------
diff --git a/src/proto/model.pb.h b/src/proto/model.pb.h
index bc13e9b..9770964 100644
--- a/src/proto/model.pb.h
+++ b/src/proto/model.pb.h
@@ -8,12 +8,12 @@
 
 #include <google/protobuf/stubs/common.h>
 
-#if GOOGLE_PROTOBUF_VERSION < 2006000
+#if GOOGLE_PROTOBUF_VERSION < 2005000
 #error This file was generated by a newer version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please update
 #error your headers.
 #endif
-#if 2006000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#if 2005000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
 #error This file was generated by an older version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please
 #error regenerate this file with a newer version of protoc.
@@ -214,11 +214,12 @@ enum EntityType {
   kWorkerParam = 0,
   kWorkerLayer = 1,
   kServer = 2,
-  kStub = 3
+  kStub = 3,
+  kRuntime = 4
 };
 bool EntityType_IsValid(int value);
 const EntityType EntityType_MIN = kWorkerParam;
-const EntityType EntityType_MAX = kStub;
+const EntityType EntityType_MAX = kRuntime;
 const int EntityType_ARRAYSIZE = EntityType_MAX + 1;
 
 const ::google::protobuf::EnumDescriptor* EntityType_descriptor();
@@ -358,6 +359,7 @@ class ModelProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -624,15 +626,13 @@ class ModelProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::std::string* name_;
-  static ::std::string* _default_train_folder_;
   ::std::string* train_folder_;
-  static ::std::string* _default_test_folder_;
+  static ::std::string* _default_train_folder_;
   ::std::string* test_folder_;
-  static ::std::string* _default_validation_folder_;
+  static ::std::string* _default_test_folder_;
   ::std::string* validation_folder_;
+  static ::std::string* _default_validation_folder_;
   ::google::protobuf::int32 display_after_steps_;
   ::google::protobuf::int32 display_frequency_;
   ::google::protobuf::int32 validation_after_steps_;
@@ -652,6 +652,10 @@ class ModelProto : public ::google::protobuf::Message {
   int alg_;
   ::singa::NetProto* neuralnet_;
   ::google::protobuf::int32 warmup_steps_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(23 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -708,6 +712,7 @@ class NetProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -740,10 +745,12 @@ class NetProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::RepeatedPtrField< ::singa::LayerProto > layer_;
   int partition_type_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -800,6 +807,7 @@ class ParamProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -974,8 +982,6 @@ class ParamProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::std::string* name_;
   ::google::protobuf::RepeatedField< ::google::protobuf::int32 > shape_;
   ::google::protobuf::int32 id_;
@@ -990,6 +996,10 @@ class ParamProto : public ::google::protobuf::Message {
   float std_;
   float learning_rate_multiplier_;
   float weight_decay_multiplier_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(14 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -1046,6 +1056,7 @@ class BlobProtos : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -1097,11 +1108,13 @@ class BlobProtos : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::RepeatedPtrField< ::singa::BlobProto > blobs_;
   ::google::protobuf::RepeatedField< ::google::protobuf::int32 > ids_;
   ::google::protobuf::RepeatedPtrField< ::std::string> names_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(3 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -1158,6 +1171,7 @@ class LayerProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -1474,8 +1488,6 @@ class LayerProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::std::string* name_;
   ::std::string* type_;
   ::google::protobuf::RepeatedPtrField< ::std::string> srclayers_;
@@ -1502,6 +1514,10 @@ class LayerProto : public ::google::protobuf::Message {
   ::singa::SoftmaxLossProto* softmaxloss_param_;
   ::singa::TanhProto* tanh_param_;
   int partition_type_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(26 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -1558,6 +1574,7 @@ class RGBImage : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -1610,12 +1627,14 @@ class RGBImage : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   float scale_;
   ::google::protobuf::int32 cropsize_;
   ::std::string* meanfile_;
   bool mirror_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(4 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -1672,6 +1691,7 @@ class SplitProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -1692,9 +1712,11 @@ class SplitProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::int32 num_splits_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(1 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -1751,6 +1773,7 @@ class TanhProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -1780,10 +1803,12 @@ class TanhProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   float outer_scale_;
   float inner_scale_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -1840,6 +1865,7 @@ class SoftmaxLossProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -1869,10 +1895,12 @@ class SoftmaxLossProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::int32 topk_;
   float scale_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -1929,6 +1957,7 @@ class ConvolutionProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -1985,13 +2014,15 @@ class ConvolutionProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::uint32 num_filters_;
   bool bias_term_;
   ::google::protobuf::uint32 pad_;
   ::google::protobuf::uint32 stride_;
   ::google::protobuf::uint32 kernel_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(5 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -2048,6 +2079,7 @@ class ConcateProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -2077,10 +2109,12 @@ class ConcateProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::int32 concate_dimension_;
   ::google::protobuf::int32 concate_num_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -2137,6 +2171,7 @@ class DataProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -2194,12 +2229,14 @@ class DataProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::std::string* source_;
   ::std::string* path_;
   ::google::protobuf::uint32 batchsize_;
   ::google::protobuf::uint32 random_skip_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(4 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -2256,6 +2293,7 @@ class MnistProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -2348,8 +2386,6 @@ class MnistProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::int32 kernel_;
   float sigma_;
   float alpha_;
@@ -2359,6 +2395,10 @@ class MnistProto : public ::google::protobuf::Message {
   ::google::protobuf::int32 elastic_freq_;
   float norm_a_;
   float norm_b_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(9 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -2415,6 +2455,7 @@ class DropoutProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -2435,9 +2476,11 @@ class DropoutProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   float dropout_ratio_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(1 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -2494,6 +2537,7 @@ class InnerProductProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -2523,10 +2567,12 @@ class InnerProductProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::uint32 num_output_;
   bool bias_term_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -2583,6 +2629,7 @@ class LRNProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -2663,13 +2710,15 @@ class LRNProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::uint32 local_size_;
   float alpha_;
   float beta_;
   int norm_region_;
   float knorm_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(5 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -2726,6 +2775,7 @@ class PoolingProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -2797,12 +2847,14 @@ class PoolingProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   int pool_;
   ::google::protobuf::uint32 kernel_;
   ::google::protobuf::uint32 pad_;
   ::google::protobuf::uint32 stride_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(4 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -2859,6 +2911,7 @@ class SliceProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -2888,10 +2941,12 @@ class SliceProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::int32 slice_dimension_;
   ::google::protobuf::int32 slice_num_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -2948,6 +3003,7 @@ class ReLUProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -2968,9 +3024,11 @@ class ReLUProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   float negative_slope_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(1 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -3027,6 +3085,7 @@ class Record : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -3081,10 +3140,12 @@ class Record : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::singa::SingleLabelImageRecord* image_;
   int type_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -3141,6 +3202,7 @@ class Datum : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -3223,8 +3285,6 @@ class Datum : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::int32 channels_;
   ::google::protobuf::int32 height_;
   ::std::string* data_;
@@ -3232,6 +3292,10 @@ class Datum : public ::google::protobuf::Message {
   ::google::protobuf::int32 label_;
   ::google::protobuf::RepeatedField< float > float_data_;
   bool encoded_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(7 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -3288,6 +3352,7 @@ class SingleLabelImageRecord : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -3346,12 +3411,14 @@ class SingleLabelImageRecord : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::RepeatedField< ::google::protobuf::int32 > shape_;
   ::std::string* pixel_;
   ::google::protobuf::RepeatedField< float > data_;
   ::google::protobuf::int32 label_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(4 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -3408,6 +3475,7 @@ class UpdaterProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -3594,8 +3662,6 @@ class UpdaterProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   float momentum_;
   float weight_decay_;
   float gamma_;
@@ -3608,10 +3674,14 @@ class UpdaterProto : public ::google::protobuf::Message {
   int learning_rate_change_method_;
   ::google::protobuf::int32 sync_frequency_;
   float moving_rate_;
-  static ::std::string* _default_param_type_;
   ::std::string* param_type_;
+  static ::std::string* _default_param_type_;
   ::google::protobuf::RepeatedField< ::google::protobuf::int32 > step_;
   ::google::protobuf::RepeatedField< float > step_lr_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(15 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -3668,6 +3738,7 @@ class BlobProto : public ::google::protobuf::Message {
   void SharedDtor();
   void SetCachedSize(int size) const;
   public:
+
   ::google::protobuf::Metadata GetMetadata() const;
 
   // nested types ----------------------------------------------------
@@ -3739,8 +3810,6 @@ class BlobProto : public ::google::protobuf::Message {
 
   ::google::protobuf::UnknownFieldSet _unknown_fields_;
 
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
   ::google::protobuf::int32 num_;
   ::google::protobuf::int32 channels_;
   ::google::protobuf::int32 height_;
@@ -3749,6 +3818,10 @@ class BlobProto : public ::google::protobuf::Message {
   mutable int _data_cached_byte_size_;
   ::google::protobuf::RepeatedField< float > diff_;
   mutable int _diff_cached_byte_size_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(6 + 31) / 32];
+
   friend void  protobuf_AddDesc_model_2eproto();
   friend void protobuf_AssignDesc_model_2eproto();
   friend void protobuf_ShutdownFile_model_2eproto();
@@ -3774,59 +3847,54 @@ inline void ModelProto::clear_has_name() {
   _has_bits_[0] &= ~0x00000001u;
 }
 inline void ModelProto::clear_name() {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ != &::google::protobuf::internal::kEmptyString) {
     name_->clear();
   }
   clear_has_name();
 }
 inline const ::std::string& ModelProto::name() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.name)
   return *name_;
 }
 inline void ModelProto::set_name(const ::std::string& value) {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
   name_->assign(value);
-  // @@protoc_insertion_point(field_set:singa.ModelProto.name)
 }
 inline void ModelProto::set_name(const char* value) {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
   name_->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.ModelProto.name)
 }
 inline void ModelProto::set_name(const char* value, size_t size) {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
   name_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.ModelProto.name)
 }
 inline ::std::string* ModelProto::mutable_name() {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
-  // @@protoc_insertion_point(field_mutable:singa.ModelProto.name)
   return name_;
 }
 inline ::std::string* ModelProto::release_name() {
   clear_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     return NULL;
   } else {
     ::std::string* temp = name_;
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
     return temp;
   }
 }
 inline void ModelProto::set_allocated_name(::std::string* name) {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ != &::google::protobuf::internal::kEmptyString) {
     delete name_;
   }
   if (name) {
@@ -3834,9 +3902,8 @@ inline void ModelProto::set_allocated_name(::std::string* name) {
     name_ = name;
   } else {
     clear_has_name();
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.ModelProto.name)
 }
 
 // optional string train_folder = 2 [default = "train"];
@@ -3856,7 +3923,6 @@ inline void ModelProto::clear_train_folder() {
   clear_has_train_folder();
 }
 inline const ::std::string& ModelProto::train_folder() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.train_folder)
   return *train_folder_;
 }
 inline void ModelProto::set_train_folder(const ::std::string& value) {
@@ -3865,7 +3931,6 @@ inline void ModelProto::set_train_folder(const ::std::string& value) {
     train_folder_ = new ::std::string;
   }
   train_folder_->assign(value);
-  // @@protoc_insertion_point(field_set:singa.ModelProto.train_folder)
 }
 inline void ModelProto::set_train_folder(const char* value) {
   set_has_train_folder();
@@ -3873,7 +3938,6 @@ inline void ModelProto::set_train_folder(const char* value) {
     train_folder_ = new ::std::string;
   }
   train_folder_->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.ModelProto.train_folder)
 }
 inline void ModelProto::set_train_folder(const char* value, size_t size) {
   set_has_train_folder();
@@ -3881,14 +3945,12 @@ inline void ModelProto::set_train_folder(const char* value, size_t size) {
     train_folder_ = new ::std::string;
   }
   train_folder_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.ModelProto.train_folder)
 }
 inline ::std::string* ModelProto::mutable_train_folder() {
   set_has_train_folder();
   if (train_folder_ == _default_train_folder_) {
     train_folder_ = new ::std::string(*_default_train_folder_);
   }
-  // @@protoc_insertion_point(field_mutable:singa.ModelProto.train_folder)
   return train_folder_;
 }
 inline ::std::string* ModelProto::release_train_folder() {
@@ -3912,7 +3974,6 @@ inline void ModelProto::set_allocated_train_folder(::std::string* train_folder)
     clear_has_train_folder();
     train_folder_ = const_cast< ::std::string*>(_default_train_folder_);
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.ModelProto.train_folder)
 }
 
 // optional string test_folder = 3 [default = "test"];
@@ -3932,7 +3993,6 @@ inline void ModelProto::clear_test_folder() {
   clear_has_test_folder();
 }
 inline const ::std::string& ModelProto::test_folder() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.test_folder)
   return *test_folder_;
 }
 inline void ModelProto::set_test_folder(const ::std::string& value) {
@@ -3941,7 +4001,6 @@ inline void ModelProto::set_test_folder(const ::std::string& value) {
     test_folder_ = new ::std::string;
   }
   test_folder_->assign(value);
-  // @@protoc_insertion_point(field_set:singa.ModelProto.test_folder)
 }
 inline void ModelProto::set_test_folder(const char* value) {
   set_has_test_folder();
@@ -3949,7 +4008,6 @@ inline void ModelProto::set_test_folder(const char* value) {
     test_folder_ = new ::std::string;
   }
   test_folder_->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.ModelProto.test_folder)
 }
 inline void ModelProto::set_test_folder(const char* value, size_t size) {
   set_has_test_folder();
@@ -3957,14 +4015,12 @@ inline void ModelProto::set_test_folder(const char* value, size_t size) {
     test_folder_ = new ::std::string;
   }
   test_folder_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.ModelProto.test_folder)
 }
 inline ::std::string* ModelProto::mutable_test_folder() {
   set_has_test_folder();
   if (test_folder_ == _default_test_folder_) {
     test_folder_ = new ::std::string(*_default_test_folder_);
   }
-  // @@protoc_insertion_point(field_mutable:singa.ModelProto.test_folder)
   return test_folder_;
 }
 inline ::std::string* ModelProto::release_test_folder() {
@@ -3988,7 +4044,6 @@ inline void ModelProto::set_allocated_test_folder(::std::string* test_folder) {
     clear_has_test_folder();
     test_folder_ = const_cast< ::std::string*>(_default_test_folder_);
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.ModelProto.test_folder)
 }
 
 // optional string validation_folder = 4 [default = "validation"];
@@ -4008,7 +4063,6 @@ inline void ModelProto::clear_validation_folder() {
   clear_has_validation_folder();
 }
 inline const ::std::string& ModelProto::validation_folder() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.validation_folder)
   return *validation_folder_;
 }
 inline void ModelProto::set_validation_folder(const ::std::string& value) {
@@ -4017,7 +4071,6 @@ inline void ModelProto::set_validation_folder(const ::std::string& value) {
     validation_folder_ = new ::std::string;
   }
   validation_folder_->assign(value);
-  // @@protoc_insertion_point(field_set:singa.ModelProto.validation_folder)
 }
 inline void ModelProto::set_validation_folder(const char* value) {
   set_has_validation_folder();
@@ -4025,7 +4078,6 @@ inline void ModelProto::set_validation_folder(const char* value) {
     validation_folder_ = new ::std::string;
   }
   validation_folder_->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.ModelProto.validation_folder)
 }
 inline void ModelProto::set_validation_folder(const char* value, size_t size) {
   set_has_validation_folder();
@@ -4033,14 +4085,12 @@ inline void ModelProto::set_validation_folder(const char* value, size_t size) {
     validation_folder_ = new ::std::string;
   }
   validation_folder_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.ModelProto.validation_folder)
 }
 inline ::std::string* ModelProto::mutable_validation_folder() {
   set_has_validation_folder();
   if (validation_folder_ == _default_validation_folder_) {
     validation_folder_ = new ::std::string(*_default_validation_folder_);
   }
-  // @@protoc_insertion_point(field_mutable:singa.ModelProto.validation_folder)
   return validation_folder_;
 }
 inline ::std::string* ModelProto::release_validation_folder() {
@@ -4064,7 +4114,6 @@ inline void ModelProto::set_allocated_validation_folder(::std::string* validatio
     clear_has_validation_folder();
     validation_folder_ = const_cast< ::std::string*>(_default_validation_folder_);
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.ModelProto.validation_folder)
 }
 
 // optional int32 display_after_steps = 6 [default = 0];
@@ -4082,13 +4131,11 @@ inline void ModelProto::clear_display_after_steps() {
   clear_has_display_after_steps();
 }
 inline ::google::protobuf::int32 ModelProto::display_after_steps() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.display_after_steps)
   return display_after_steps_;
 }
 inline void ModelProto::set_display_after_steps(::google::protobuf::int32 value) {
   set_has_display_after_steps();
   display_after_steps_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.display_after_steps)
 }
 
 // optional int32 display_frequency = 7 [default = 0];
@@ -4106,13 +4153,11 @@ inline void ModelProto::clear_display_frequency() {
   clear_has_display_frequency();
 }
 inline ::google::protobuf::int32 ModelProto::display_frequency() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.display_frequency)
   return display_frequency_;
 }
 inline void ModelProto::set_display_frequency(::google::protobuf::int32 value) {
   set_has_display_frequency();
   display_frequency_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.display_frequency)
 }
 
 // optional int32 validation_after_steps = 10 [default = 0];
@@ -4130,13 +4175,11 @@ inline void ModelProto::clear_validation_after_steps() {
   clear_has_validation_after_steps();
 }
 inline ::google::protobuf::int32 ModelProto::validation_after_steps() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.validation_after_steps)
   return validation_after_steps_;
 }
 inline void ModelProto::set_validation_after_steps(::google::protobuf::int32 value) {
   set_has_validation_after_steps();
   validation_after_steps_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.validation_after_steps)
 }
 
 // optional int32 validation_frequency = 11 [default = 0];
@@ -4154,13 +4197,11 @@ inline void ModelProto::clear_validation_frequency() {
   clear_has_validation_frequency();
 }
 inline ::google::protobuf::int32 ModelProto::validation_frequency() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.validation_frequency)
   return validation_frequency_;
 }
 inline void ModelProto::set_validation_frequency(::google::protobuf::int32 value) {
   set_has_validation_frequency();
   validation_frequency_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.validation_frequency)
 }
 
 // optional int32 test_after_steps = 13 [default = 0];
@@ -4178,13 +4219,11 @@ inline void ModelProto::clear_test_after_steps() {
   clear_has_test_after_steps();
 }
 inline ::google::protobuf::int32 ModelProto::test_after_steps() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.test_after_steps)
   return test_after_steps_;
 }
 inline void ModelProto::set_test_after_steps(::google::protobuf::int32 value) {
   set_has_test_after_steps();
   test_after_steps_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.test_after_steps)
 }
 
 // optional int32 test_frequency = 14 [default = 0];
@@ -4202,13 +4241,11 @@ inline void ModelProto::clear_test_frequency() {
   clear_has_test_frequency();
 }
 inline ::google::protobuf::int32 ModelProto::test_frequency() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.test_frequency)
   return test_frequency_;
 }
 inline void ModelProto::set_test_frequency(::google::protobuf::int32 value) {
   set_has_test_frequency();
   test_frequency_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.test_frequency)
 }
 
 // optional int32 checkpoint_after_steps = 15 [default = 0];
@@ -4226,13 +4263,11 @@ inline void ModelProto::clear_checkpoint_after_steps() {
   clear_has_checkpoint_after_steps();
 }
 inline ::google::protobuf::int32 ModelProto::checkpoint_after_steps() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.checkpoint_after_steps)
   return checkpoint_after_steps_;
 }
 inline void ModelProto::set_checkpoint_after_steps(::google::protobuf::int32 value) {
   set_has_checkpoint_after_steps();
   checkpoint_after_steps_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.checkpoint_after_steps)
 }
 
 // optional int32 checkpoint_frequency = 16 [default = 0];
@@ -4250,13 +4285,11 @@ inline void ModelProto::clear_checkpoint_frequency() {
   clear_has_checkpoint_frequency();
 }
 inline ::google::protobuf::int32 ModelProto::checkpoint_frequency() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.checkpoint_frequency)
   return checkpoint_frequency_;
 }
 inline void ModelProto::set_checkpoint_frequency(::google::protobuf::int32 value) {
   set_has_checkpoint_frequency();
   checkpoint_frequency_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.checkpoint_frequency)
 }
 
 // optional bool prefetch = 18 [default = true];
@@ -4274,13 +4307,11 @@ inline void ModelProto::clear_prefetch() {
   clear_has_prefetch();
 }
 inline bool ModelProto::prefetch() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.prefetch)
   return prefetch_;
 }
 inline void ModelProto::set_prefetch(bool value) {
   set_has_prefetch();
   prefetch_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.prefetch)
 }
 
 // optional int32 train_steps = 20;
@@ -4298,13 +4329,11 @@ inline void ModelProto::clear_train_steps() {
   clear_has_train_steps();
 }
 inline ::google::protobuf::int32 ModelProto::train_steps() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.train_steps)
   return train_steps_;
 }
 inline void ModelProto::set_train_steps(::google::protobuf::int32 value) {
   set_has_train_steps();
   train_steps_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.train_steps)
 }
 
 // optional int32 validation_steps = 21;
@@ -4322,13 +4351,11 @@ inline void ModelProto::clear_validation_steps() {
   clear_has_validation_steps();
 }
 inline ::google::protobuf::int32 ModelProto::validation_steps() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.validation_steps)
   return validation_steps_;
 }
 inline void ModelProto::set_validation_steps(::google::protobuf::int32 value) {
   set_has_validation_steps();
   validation_steps_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.validation_steps)
 }
 
 // optional int32 test_steps = 22;
@@ -4346,13 +4373,11 @@ inline void ModelProto::clear_test_steps() {
   clear_has_test_steps();
 }
 inline ::google::protobuf::int32 ModelProto::test_steps() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.test_steps)
   return test_steps_;
 }
 inline void ModelProto::set_test_steps(::google::protobuf::int32 value) {
   set_has_test_steps();
   test_steps_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.test_steps)
 }
 
 // optional int32 step = 29 [default = 0];
@@ -4370,13 +4395,11 @@ inline void ModelProto::clear_step() {
   clear_has_step();
 }
 inline ::google::protobuf::int32 ModelProto::step() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.step)
   return step_;
 }
 inline void ModelProto::set_step(::google::protobuf::int32 value) {
   set_has_step();
   step_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.step)
 }
 
 // optional .singa.UpdaterProto updater = 31;
@@ -4394,13 +4417,11 @@ inline void ModelProto::clear_updater() {
   clear_has_updater();
 }
 inline const ::singa::UpdaterProto& ModelProto::updater() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.updater)
   return updater_ != NULL ? *updater_ : *default_instance_->updater_;
 }
 inline ::singa::UpdaterProto* ModelProto::mutable_updater() {
   set_has_updater();
   if (updater_ == NULL) updater_ = new ::singa::UpdaterProto;
-  // @@protoc_insertion_point(field_mutable:singa.ModelProto.updater)
   return updater_;
 }
 inline ::singa::UpdaterProto* ModelProto::release_updater() {
@@ -4417,7 +4438,6 @@ inline void ModelProto::set_allocated_updater(::singa::UpdaterProto* updater) {
   } else {
     clear_has_updater();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.ModelProto.updater)
 }
 
 // optional .singa.ModelProto.GradCalcAlg alg = 32 [default = kBackPropagation];
@@ -4435,14 +4455,12 @@ inline void ModelProto::clear_alg() {
   clear_has_alg();
 }
 inline ::singa::ModelProto_GradCalcAlg ModelProto::alg() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.alg)
   return static_cast< ::singa::ModelProto_GradCalcAlg >(alg_);
 }
 inline void ModelProto::set_alg(::singa::ModelProto_GradCalcAlg value) {
   assert(::singa::ModelProto_GradCalcAlg_IsValid(value));
   set_has_alg();
   alg_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.alg)
 }
 
 // optional bool hogwild = 33 [default = false];
@@ -4460,13 +4478,11 @@ inline void ModelProto::clear_hogwild() {
   clear_has_hogwild();
 }
 inline bool ModelProto::hogwild() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.hogwild)
   return hogwild_;
 }
 inline void ModelProto::set_hogwild(bool value) {
   set_has_hogwild();
   hogwild_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.hogwild)
 }
 
 // optional .singa.NetProto neuralnet = 40;
@@ -4484,13 +4500,11 @@ inline void ModelProto::clear_neuralnet() {
   clear_has_neuralnet();
 }
 inline const ::singa::NetProto& ModelProto::neuralnet() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.neuralnet)
   return neuralnet_ != NULL ? *neuralnet_ : *default_instance_->neuralnet_;
 }
 inline ::singa::NetProto* ModelProto::mutable_neuralnet() {
   set_has_neuralnet();
   if (neuralnet_ == NULL) neuralnet_ = new ::singa::NetProto;
-  // @@protoc_insertion_point(field_mutable:singa.ModelProto.neuralnet)
   return neuralnet_;
 }
 inline ::singa::NetProto* ModelProto::release_neuralnet() {
@@ -4507,7 +4521,6 @@ inline void ModelProto::set_allocated_neuralnet(::singa::NetProto* neuralnet) {
   } else {
     clear_has_neuralnet();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.ModelProto.neuralnet)
 }
 
 // optional bool debug = 41 [default = false];
@@ -4525,13 +4538,11 @@ inline void ModelProto::clear_debug() {
   clear_has_debug();
 }
 inline bool ModelProto::debug() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.debug)
   return debug_;
 }
 inline void ModelProto::set_debug(bool value) {
   set_has_debug();
   debug_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.debug)
 }
 
 // optional int32 warmup_steps = 50 [default = 0];
@@ -4549,13 +4560,11 @@ inline void ModelProto::clear_warmup_steps() {
   clear_has_warmup_steps();
 }
 inline ::google::protobuf::int32 ModelProto::warmup_steps() const {
-  // @@protoc_insertion_point(field_get:singa.ModelProto.warmup_steps)
   return warmup_steps_;
 }
 inline void ModelProto::set_warmup_steps(::google::protobuf::int32 value) {
   set_has_warmup_steps();
   warmup_steps_ = value;
-  // @@protoc_insertion_point(field_set:singa.ModelProto.warmup_steps)
 }
 
 // -------------------------------------------------------------------
@@ -4570,25 +4579,20 @@ inline void NetProto::clear_layer() {
   layer_.Clear();
 }
 inline const ::singa::LayerProto& NetProto::layer(int index) const {
-  // @@protoc_insertion_point(field_get:singa.NetProto.layer)
   return layer_.Get(index);
 }
 inline ::singa::LayerProto* NetProto::mutable_layer(int index) {
-  // @@protoc_insertion_point(field_mutable:singa.NetProto.layer)
   return layer_.Mutable(index);
 }
 inline ::singa::LayerProto* NetProto::add_layer() {
-  // @@protoc_insertion_point(field_add:singa.NetProto.layer)
   return layer_.Add();
 }
 inline const ::google::protobuf::RepeatedPtrField< ::singa::LayerProto >&
 NetProto::layer() const {
-  // @@protoc_insertion_point(field_list:singa.NetProto.layer)
   return layer_;
 }
 inline ::google::protobuf::RepeatedPtrField< ::singa::LayerProto >*
 NetProto::mutable_layer() {
-  // @@protoc_insertion_point(field_mutable_list:singa.NetProto.layer)
   return &layer_;
 }
 
@@ -4607,14 +4611,12 @@ inline void NetProto::clear_partition_type() {
   clear_has_partition_type();
 }
 inline ::singa::PartitionType NetProto::partition_type() const {
-  // @@protoc_insertion_point(field_get:singa.NetProto.partition_type)
   return static_cast< ::singa::PartitionType >(partition_type_);
 }
 inline void NetProto::set_partition_type(::singa::PartitionType value) {
   assert(::singa::PartitionType_IsValid(value));
   set_has_partition_type();
   partition_type_ = value;
-  // @@protoc_insertion_point(field_set:singa.NetProto.partition_type)
 }
 
 // -------------------------------------------------------------------
@@ -4632,59 +4634,54 @@ inline void ParamProto::clear_has_name() {
   _has_bits_[0] &= ~0x00000001u;
 }
 inline void ParamProto::clear_name() {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ != &::google::protobuf::internal::kEmptyString) {
     name_->clear();
   }
   clear_has_name();
 }
 inline const ::std::string& ParamProto::name() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.name)
   return *name_;
 }
 inline void ParamProto::set_name(const ::std::string& value) {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
   name_->assign(value);
-  // @@protoc_insertion_point(field_set:singa.ParamProto.name)
 }
 inline void ParamProto::set_name(const char* value) {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
   name_->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.ParamProto.name)
 }
 inline void ParamProto::set_name(const char* value, size_t size) {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
   name_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.ParamProto.name)
 }
 inline ::std::string* ParamProto::mutable_name() {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
-  // @@protoc_insertion_point(field_mutable:singa.ParamProto.name)
   return name_;
 }
 inline ::std::string* ParamProto::release_name() {
   clear_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     return NULL;
   } else {
     ::std::string* temp = name_;
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
     return temp;
   }
 }
 inline void ParamProto::set_allocated_name(::std::string* name) {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ != &::google::protobuf::internal::kEmptyString) {
     delete name_;
   }
   if (name) {
@@ -4692,9 +4689,8 @@ inline void ParamProto::set_allocated_name(::std::string* name) {
     name_ = name;
   } else {
     clear_has_name();
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.ParamProto.name)
 }
 
 // optional int32 id = 2;
@@ -4712,13 +4708,11 @@ inline void ParamProto::clear_id() {
   clear_has_id();
 }
 inline ::google::protobuf::int32 ParamProto::id() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.id)
   return id_;
 }
 inline void ParamProto::set_id(::google::protobuf::int32 value) {
   set_has_id();
   id_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.id)
 }
 
 // repeated int32 shape = 3;
@@ -4729,25 +4723,20 @@ inline void ParamProto::clear_shape() {
   shape_.Clear();
 }
 inline ::google::protobuf::int32 ParamProto::shape(int index) const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.shape)
   return shape_.Get(index);
 }
 inline void ParamProto::set_shape(int index, ::google::protobuf::int32 value) {
   shape_.Set(index, value);
-  // @@protoc_insertion_point(field_set:singa.ParamProto.shape)
 }
 inline void ParamProto::add_shape(::google::protobuf::int32 value) {
   shape_.Add(value);
-  // @@protoc_insertion_point(field_add:singa.ParamProto.shape)
 }
 inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
 ParamProto::shape() const {
-  // @@protoc_insertion_point(field_list:singa.ParamProto.shape)
   return shape_;
 }
 inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
 ParamProto::mutable_shape() {
-  // @@protoc_insertion_point(field_mutable_list:singa.ParamProto.shape)
   return &shape_;
 }
 
@@ -4766,13 +4755,11 @@ inline void ParamProto::clear_split_threshold() {
   clear_has_split_threshold();
 }
 inline ::google::protobuf::int32 ParamProto::split_threshold() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.split_threshold)
   return split_threshold_;
 }
 inline void ParamProto::set_split_threshold(::google::protobuf::int32 value) {
   set_has_split_threshold();
   split_threshold_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.split_threshold)
 }
 
 // optional int32 partition_dim = 5 [default = -1];
@@ -4790,13 +4777,11 @@ inline void ParamProto::clear_partition_dim() {
   clear_has_partition_dim();
 }
 inline ::google::protobuf::int32 ParamProto::partition_dim() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.partition_dim)
   return partition_dim_;
 }
 inline void ParamProto::set_partition_dim(::google::protobuf::int32 value) {
   set_has_partition_dim();
   partition_dim_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.partition_dim)
 }
 
 // optional int32 owner = 6;
@@ -4814,13 +4799,11 @@ inline void ParamProto::clear_owner() {
   clear_has_owner();
 }
 inline ::google::protobuf::int32 ParamProto::owner() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.owner)
   return owner_;
 }
 inline void ParamProto::set_owner(::google::protobuf::int32 value) {
   set_has_owner();
   owner_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.owner)
 }
 
 // optional .singa.ParamProto.InitMethod init_method = 7 [default = kConstant];
@@ -4838,14 +4821,12 @@ inline void ParamProto::clear_init_method() {
   clear_has_init_method();
 }
 inline ::singa::ParamProto_InitMethod ParamProto::init_method() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.init_method)
   return static_cast< ::singa::ParamProto_InitMethod >(init_method_);
 }
 inline void ParamProto::set_init_method(::singa::ParamProto_InitMethod value) {
   assert(::singa::ParamProto_InitMethod_IsValid(value));
   set_has_init_method();
   init_method_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.init_method)
 }
 
 // optional float value = 8 [default = 1];
@@ -4863,13 +4844,11 @@ inline void ParamProto::clear_value() {
   clear_has_value();
 }
 inline float ParamProto::value() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.value)
   return value_;
 }
 inline void ParamProto::set_value(float value) {
   set_has_value();
   value_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.value)
 }
 
 // optional float low = 9 [default = -1];
@@ -4887,13 +4866,11 @@ inline void ParamProto::clear_low() {
   clear_has_low();
 }
 inline float ParamProto::low() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.low)
   return low_;
 }
 inline void ParamProto::set_low(float value) {
   set_has_low();
   low_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.low)
 }
 
 // optional float high = 10 [default = 1];
@@ -4911,13 +4888,11 @@ inline void ParamProto::clear_high() {
   clear_has_high();
 }
 inline float ParamProto::high() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.high)
   return high_;
 }
 inline void ParamProto::set_high(float value) {
   set_has_high();
   high_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.high)
 }
 
 // optional float mean = 11 [default = 0];
@@ -4935,13 +4910,11 @@ inline void ParamProto::clear_mean() {
   clear_has_mean();
 }
 inline float ParamProto::mean() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.mean)
   return mean_;
 }
 inline void ParamProto::set_mean(float value) {
   set_has_mean();
   mean_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.mean)
 }
 
 // optional float std = 12 [default = 1];
@@ -4959,13 +4932,11 @@ inline void ParamProto::clear_std() {
   clear_has_std();
 }
 inline float ParamProto::std() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.std)
   return std_;
 }
 inline void ParamProto::set_std(float value) {
   set_has_std();
   std_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.std)
 }
 
 // optional float learning_rate_multiplier = 13 [default = 1];
@@ -4983,13 +4954,11 @@ inline void ParamProto::clear_learning_rate_multiplier() {
   clear_has_learning_rate_multiplier();
 }
 inline float ParamProto::learning_rate_multiplier() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.learning_rate_multiplier)
   return learning_rate_multiplier_;
 }
 inline void ParamProto::set_learning_rate_multiplier(float value) {
   set_has_learning_rate_multiplier();
   learning_rate_multiplier_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.learning_rate_multiplier)
 }
 
 // optional float weight_decay_multiplier = 14 [default = 1];
@@ -5007,13 +4976,11 @@ inline void ParamProto::clear_weight_decay_multiplier() {
   clear_has_weight_decay_multiplier();
 }
 inline float ParamProto::weight_decay_multiplier() const {
-  // @@protoc_insertion_point(field_get:singa.ParamProto.weight_decay_multiplier)
   return weight_decay_multiplier_;
 }
 inline void ParamProto::set_weight_decay_multiplier(float value) {
   set_has_weight_decay_multiplier();
   weight_decay_multiplier_ = value;
-  // @@protoc_insertion_point(field_set:singa.ParamProto.weight_decay_multiplier)
 }
 
 // -------------------------------------------------------------------
@@ -5028,25 +4995,20 @@ inline void BlobProtos::clear_blobs() {
   blobs_.Clear();
 }
 inline const ::singa::BlobProto& BlobProtos::blobs(int index) const {
-  // @@protoc_insertion_point(field_get:singa.BlobProtos.blobs)
   return blobs_.Get(index);
 }
 inline ::singa::BlobProto* BlobProtos::mutable_blobs(int index) {
-  // @@protoc_insertion_point(field_mutable:singa.BlobProtos.blobs)
   return blobs_.Mutable(index);
 }
 inline ::singa::BlobProto* BlobProtos::add_blobs() {
-  // @@protoc_insertion_point(field_add:singa.BlobProtos.blobs)
   return blobs_.Add();
 }
 inline const ::google::protobuf::RepeatedPtrField< ::singa::BlobProto >&
 BlobProtos::blobs() const {
-  // @@protoc_insertion_point(field_list:singa.BlobProtos.blobs)
   return blobs_;
 }
 inline ::google::protobuf::RepeatedPtrField< ::singa::BlobProto >*
 BlobProtos::mutable_blobs() {
-  // @@protoc_insertion_point(field_mutable_list:singa.BlobProtos.blobs)
   return &blobs_;
 }
 
@@ -5058,25 +5020,20 @@ inline void BlobProtos::clear_ids() {
   ids_.Clear();
 }
 inline ::google::protobuf::int32 BlobProtos::ids(int index) const {
-  // @@protoc_insertion_point(field_get:singa.BlobProtos.ids)
   return ids_.Get(index);
 }
 inline void BlobProtos::set_ids(int index, ::google::protobuf::int32 value) {
   ids_.Set(index, value);
-  // @@protoc_insertion_point(field_set:singa.BlobProtos.ids)
 }
 inline void BlobProtos::add_ids(::google::protobuf::int32 value) {
   ids_.Add(value);
-  // @@protoc_insertion_point(field_add:singa.BlobProtos.ids)
 }
 inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
 BlobProtos::ids() const {
-  // @@protoc_insertion_point(field_list:singa.BlobProtos.ids)
   return ids_;
 }
 inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
 BlobProtos::mutable_ids() {
-  // @@protoc_insertion_point(field_mutable_list:singa.BlobProtos.ids)
   return &ids_;
 }
 
@@ -5088,49 +5045,39 @@ inline void BlobProtos::clear_names() {
   names_.Clear();
 }
 inline const ::std::string& BlobProtos::names(int index) const {
-  // @@protoc_insertion_point(field_get:singa.BlobProtos.names)
   return names_.Get(index);
 }
 inline ::std::string* BlobProtos::mutable_names(int index) {
-  // @@protoc_insertion_point(field_mutable:singa.BlobProtos.names)
   return names_.Mutable(index);
 }
 inline void BlobProtos::set_names(int index, const ::std::string& value) {
-  // @@protoc_insertion_point(field_set:singa.BlobProtos.names)
   names_.Mutable(index)->assign(value);
 }
 inline void BlobProtos::set_names(int index, const char* value) {
   names_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.BlobProtos.names)
 }
 inline void BlobProtos::set_names(int index, const char* value, size_t size) {
   names_.Mutable(index)->assign(
     reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.BlobProtos.names)
 }
 inline ::std::string* BlobProtos::add_names() {
   return names_.Add();
 }
 inline void BlobProtos::add_names(const ::std::string& value) {
   names_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add:singa.BlobProtos.names)
 }
 inline void BlobProtos::add_names(const char* value) {
   names_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add_char:singa.BlobProtos.names)
 }
 inline void BlobProtos::add_names(const char* value, size_t size) {
   names_.Add()->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_add_pointer:singa.BlobProtos.names)
 }
 inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
 BlobProtos::names() const {
-  // @@protoc_insertion_point(field_list:singa.BlobProtos.names)
   return names_;
 }
 inline ::google::protobuf::RepeatedPtrField< ::std::string>*
 BlobProtos::mutable_names() {
-  // @@protoc_insertion_point(field_mutable_list:singa.BlobProtos.names)
   return &names_;
 }
 
@@ -5149,59 +5096,54 @@ inline void LayerProto::clear_has_name() {
   _has_bits_[0] &= ~0x00000001u;
 }
 inline void LayerProto::clear_name() {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ != &::google::protobuf::internal::kEmptyString) {
     name_->clear();
   }
   clear_has_name();
 }
 inline const ::std::string& LayerProto::name() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.name)
   return *name_;
 }
 inline void LayerProto::set_name(const ::std::string& value) {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
   name_->assign(value);
-  // @@protoc_insertion_point(field_set:singa.LayerProto.name)
 }
 inline void LayerProto::set_name(const char* value) {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
   name_->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.LayerProto.name)
 }
 inline void LayerProto::set_name(const char* value, size_t size) {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
   name_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.LayerProto.name)
 }
 inline ::std::string* LayerProto::mutable_name() {
   set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     name_ = new ::std::string;
   }
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.name)
   return name_;
 }
 inline ::std::string* LayerProto::release_name() {
   clear_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
     return NULL;
   } else {
     ::std::string* temp = name_;
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
     return temp;
   }
 }
 inline void LayerProto::set_allocated_name(::std::string* name) {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (name_ != &::google::protobuf::internal::kEmptyString) {
     delete name_;
   }
   if (name) {
@@ -5209,9 +5151,8 @@ inline void LayerProto::set_allocated_name(::std::string* name) {
     name_ = name;
   } else {
     clear_has_name();
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.name)
 }
 
 // optional string type = 2;
@@ -5225,59 +5166,54 @@ inline void LayerProto::clear_has_type() {
   _has_bits_[0] &= ~0x00000002u;
 }
 inline void LayerProto::clear_type() {
-  if (type_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (type_ != &::google::protobuf::internal::kEmptyString) {
     type_->clear();
   }
   clear_has_type();
 }
 inline const ::std::string& LayerProto::type() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.type)
   return *type_;
 }
 inline void LayerProto::set_type(const ::std::string& value) {
   set_has_type();
-  if (type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
     type_ = new ::std::string;
   }
   type_->assign(value);
-  // @@protoc_insertion_point(field_set:singa.LayerProto.type)
 }
 inline void LayerProto::set_type(const char* value) {
   set_has_type();
-  if (type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
     type_ = new ::std::string;
   }
   type_->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.LayerProto.type)
 }
 inline void LayerProto::set_type(const char* value, size_t size) {
   set_has_type();
-  if (type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
     type_ = new ::std::string;
   }
   type_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.LayerProto.type)
 }
 inline ::std::string* LayerProto::mutable_type() {
   set_has_type();
-  if (type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
     type_ = new ::std::string;
   }
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.type)
   return type_;
 }
 inline ::std::string* LayerProto::release_type() {
   clear_has_type();
-  if (type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
     return NULL;
   } else {
     ::std::string* temp = type_;
-    type_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    type_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
     return temp;
   }
 }
 inline void LayerProto::set_allocated_type(::std::string* type) {
-  if (type_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (type_ != &::google::protobuf::internal::kEmptyString) {
     delete type_;
   }
   if (type) {
@@ -5285,9 +5221,8 @@ inline void LayerProto::set_allocated_type(::std::string* type) {
     type_ = type;
   } else {
     clear_has_type();
-    type_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    type_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.type)
 }
 
 // repeated string srclayers = 3;
@@ -5298,49 +5233,39 @@ inline void LayerProto::clear_srclayers() {
   srclayers_.Clear();
 }
 inline const ::std::string& LayerProto::srclayers(int index) const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.srclayers)
   return srclayers_.Get(index);
 }
 inline ::std::string* LayerProto::mutable_srclayers(int index) {
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.srclayers)
   return srclayers_.Mutable(index);
 }
 inline void LayerProto::set_srclayers(int index, const ::std::string& value) {
-  // @@protoc_insertion_point(field_set:singa.LayerProto.srclayers)
   srclayers_.Mutable(index)->assign(value);
 }
 inline void LayerProto::set_srclayers(int index, const char* value) {
   srclayers_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.LayerProto.srclayers)
 }
 inline void LayerProto::set_srclayers(int index, const char* value, size_t size) {
   srclayers_.Mutable(index)->assign(
     reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.LayerProto.srclayers)
 }
 inline ::std::string* LayerProto::add_srclayers() {
   return srclayers_.Add();
 }
 inline void LayerProto::add_srclayers(const ::std::string& value) {
   srclayers_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add:singa.LayerProto.srclayers)
 }
 inline void LayerProto::add_srclayers(const char* value) {
   srclayers_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add_char:singa.LayerProto.srclayers)
 }
 inline void LayerProto::add_srclayers(const char* value, size_t size) {
   srclayers_.Add()->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_add_pointer:singa.LayerProto.srclayers)
 }
 inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
 LayerProto::srclayers() const {
-  // @@protoc_insertion_point(field_list:singa.LayerProto.srclayers)
   return srclayers_;
 }
 inline ::google::protobuf::RepeatedPtrField< ::std::string>*
 LayerProto::mutable_srclayers() {
-  // @@protoc_insertion_point(field_mutable_list:singa.LayerProto.srclayers)
   return &srclayers_;
 }
 
@@ -5359,13 +5284,11 @@ inline void LayerProto::clear_locationid() {
   clear_has_locationid();
 }
 inline ::google::protobuf::int32 LayerProto::locationid() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.locationid)
   return locationid_;
 }
 inline void LayerProto::set_locationid(::google::protobuf::int32 value) {
   set_has_locationid();
   locationid_ = value;
-  // @@protoc_insertion_point(field_set:singa.LayerProto.locationid)
 }
 
 // optional int32 partitionid = 5 [default = 0];
@@ -5383,13 +5306,11 @@ inline void LayerProto::clear_partitionid() {
   clear_has_partitionid();
 }
 inline ::google::protobuf::int32 LayerProto::partitionid() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.partitionid)
   return partitionid_;
 }
 inline void LayerProto::set_partitionid(::google::protobuf::int32 value) {
   set_has_partitionid();
   partitionid_ = value;
-  // @@protoc_insertion_point(field_set:singa.LayerProto.partitionid)
 }
 
 // optional .singa.PartitionType partition_type = 6;
@@ -5407,14 +5328,12 @@ inline void LayerProto::clear_partition_type() {
   clear_has_partition_type();
 }
 inline ::singa::PartitionType LayerProto::partition_type() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.partition_type)
   return static_cast< ::singa::PartitionType >(partition_type_);
 }
 inline void LayerProto::set_partition_type(::singa::PartitionType value) {
   assert(::singa::PartitionType_IsValid(value));
   set_has_partition_type();
   partition_type_ = value;
-  // @@protoc_insertion_point(field_set:singa.LayerProto.partition_type)
 }
 
 // optional string datablob = 7;
@@ -5428,59 +5347,54 @@ inline void LayerProto::clear_has_datablob() {
   _has_bits_[0] &= ~0x00000040u;
 }
 inline void LayerProto::clear_datablob() {
-  if (datablob_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (datablob_ != &::google::protobuf::internal::kEmptyString) {
     datablob_->clear();
   }
   clear_has_datablob();
 }
 inline const ::std::string& LayerProto::datablob() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.datablob)
   return *datablob_;
 }
 inline void LayerProto::set_datablob(const ::std::string& value) {
   set_has_datablob();
-  if (datablob_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (datablob_ == &::google::protobuf::internal::kEmptyString) {
     datablob_ = new ::std::string;
   }
   datablob_->assign(value);
-  // @@protoc_insertion_point(field_set:singa.LayerProto.datablob)
 }
 inline void LayerProto::set_datablob(const char* value) {
   set_has_datablob();
-  if (datablob_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (datablob_ == &::google::protobuf::internal::kEmptyString) {
     datablob_ = new ::std::string;
   }
   datablob_->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.LayerProto.datablob)
 }
 inline void LayerProto::set_datablob(const char* value, size_t size) {
   set_has_datablob();
-  if (datablob_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (datablob_ == &::google::protobuf::internal::kEmptyString) {
     datablob_ = new ::std::string;
   }
   datablob_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.LayerProto.datablob)
 }
 inline ::std::string* LayerProto::mutable_datablob() {
   set_has_datablob();
-  if (datablob_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (datablob_ == &::google::protobuf::internal::kEmptyString) {
     datablob_ = new ::std::string;
   }
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.datablob)
   return datablob_;
 }
 inline ::std::string* LayerProto::release_datablob() {
   clear_has_datablob();
-  if (datablob_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (datablob_ == &::google::protobuf::internal::kEmptyString) {
     return NULL;
   } else {
     ::std::string* temp = datablob_;
-    datablob_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    datablob_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
     return temp;
   }
 }
 inline void LayerProto::set_allocated_datablob(::std::string* datablob) {
-  if (datablob_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
+  if (datablob_ != &::google::protobuf::internal::kEmptyString) {
     delete datablob_;
   }
   if (datablob) {
@@ -5488,9 +5402,8 @@ inline void LayerProto::set_allocated_datablob(::std::string* datablob) {
     datablob_ = datablob;
   } else {
     clear_has_datablob();
-    datablob_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+    datablob_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.datablob)
 }
 
 // repeated string share_ary = 11;
@@ -5501,49 +5414,39 @@ inline void LayerProto::clear_share_ary() {
   share_ary_.Clear();
 }
 inline const ::std::string& LayerProto::share_ary(int index) const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.share_ary)
   return share_ary_.Get(index);
 }
 inline ::std::string* LayerProto::mutable_share_ary(int index) {
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.share_ary)
   return share_ary_.Mutable(index);
 }
 inline void LayerProto::set_share_ary(int index, const ::std::string& value) {
-  // @@protoc_insertion_point(field_set:singa.LayerProto.share_ary)
   share_ary_.Mutable(index)->assign(value);
 }
 inline void LayerProto::set_share_ary(int index, const char* value) {
   share_ary_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.LayerProto.share_ary)
 }
 inline void LayerProto::set_share_ary(int index, const char* value, size_t size) {
   share_ary_.Mutable(index)->assign(
     reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.LayerProto.share_ary)
 }
 inline ::std::string* LayerProto::add_share_ary() {
   return share_ary_.Add();
 }
 inline void LayerProto::add_share_ary(const ::std::string& value) {
   share_ary_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add:singa.LayerProto.share_ary)
 }
 inline void LayerProto::add_share_ary(const char* value) {
   share_ary_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add_char:singa.LayerProto.share_ary)
 }
 inline void LayerProto::add_share_ary(const char* value, size_t size) {
   share_ary_.Add()->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_add_pointer:singa.LayerProto.share_ary)
 }
 inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
 LayerProto::share_ary() const {
-  // @@protoc_insertion_point(field_list:singa.LayerProto.share_ary)
   return share_ary_;
 }
 inline ::google::protobuf::RepeatedPtrField< ::std::string>*
 LayerProto::mutable_share_ary() {
-  // @@protoc_insertion_point(field_mutable_list:singa.LayerProto.share_ary)
   return &share_ary_;
 }
 
@@ -5555,25 +5458,20 @@ inline void LayerProto::clear_param() {
   param_.Clear();
 }
 inline const ::singa::ParamProto& LayerProto::param(int index) const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.param)
   return param_.Get(index);
 }
 inline ::singa::ParamProto* LayerProto::mutable_param(int index) {
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.param)
   return param_.Mutable(index);
 }
 inline ::singa::ParamProto* LayerProto::add_param() {
-  // @@protoc_insertion_point(field_add:singa.LayerProto.param)
   return param_.Add();
 }
 inline const ::google::protobuf::RepeatedPtrField< ::singa::ParamProto >&
 LayerProto::param() const {
-  // @@protoc_insertion_point(field_list:singa.LayerProto.param)
   return param_;
 }
 inline ::google::protobuf::RepeatedPtrField< ::singa::ParamProto >*
 LayerProto::mutable_param() {
-  // @@protoc_insertion_point(field_mutable_list:singa.LayerProto.param)
   return &param_;
 }
 
@@ -5585,49 +5483,39 @@ inline void LayerProto::clear_share_param() {
   share_param_.Clear();
 }
 inline const ::std::string& LayerProto::share_param(int index) const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.share_param)
   return share_param_.Get(index);
 }
 inline ::std::string* LayerProto::mutable_share_param(int index) {
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.share_param)
   return share_param_.Mutable(index);
 }
 inline void LayerProto::set_share_param(int index, const ::std::string& value) {
-  // @@protoc_insertion_point(field_set:singa.LayerProto.share_param)
   share_param_.Mutable(index)->assign(value);
 }
 inline void LayerProto::set_share_param(int index, const char* value) {
   share_param_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set_char:singa.LayerProto.share_param)
 }
 inline void LayerProto::set_share_param(int index, const char* value, size_t size) {
   share_param_.Mutable(index)->assign(
     reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:singa.LayerProto.share_param)
 }
 inline ::std::string* LayerProto::add_share_param() {
   return share_param_.Add();
 }
 inline void LayerProto::add_share_param(const ::std::string& value) {
   share_param_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add:singa.LayerProto.share_param)
 }
 inline void LayerProto::add_share_param(const char* value) {
   share_param_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add_char:singa.LayerProto.share_param)
 }
 inline void LayerProto::add_share_param(const char* value, size_t size) {
   share_param_.Add()->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_add_pointer:singa.LayerProto.share_param)
 }
 inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
 LayerProto::share_param() const {
-  // @@protoc_insertion_point(field_list:singa.LayerProto.share_param)
   return share_param_;
 }
 inline ::google::protobuf::RepeatedPtrField< ::std::string>*
 LayerProto::mutable_share_param() {
-  // @@protoc_insertion_point(field_mutable_list:singa.LayerProto.share_param)
   return &share_param_;
 }
 
@@ -5639,27 +5527,22 @@ inline void LayerProto::clear_exclude() {
   exclude_.Clear();
 }
 inline ::singa::Phase LayerProto::exclude(int index) const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.exclude)
   return static_cast< ::singa::Phase >(exclude_.Get(index));
 }
 inline void LayerProto::set_exclude(int index, ::singa::Phase value) {
   assert(::singa::Phase_IsValid(value));
   exclude_.Set(index, value);
-  // @@protoc_insertion_point(field_set:singa.LayerProto.exclude)
 }
 inline void LayerProto::add_exclude(::singa::Phase value) {
   assert(::singa::Phase_IsValid(value));
   exclude_.Add(value);
-  // @@protoc_insertion_point(field_add:singa.LayerProto.exclude)
 }
 inline const ::google::protobuf::RepeatedField<int>&
 LayerProto::exclude() const {
-  // @@protoc_insertion_point(field_list:singa.LayerProto.exclude)
   return exclude_;
 }
 inline ::google::protobuf::RepeatedField<int>*
 LayerProto::mutable_exclude() {
-  // @@protoc_insertion_point(field_mutable_list:singa.LayerProto.exclude)
   return &exclude_;
 }
 
@@ -5678,13 +5561,11 @@ inline void LayerProto::clear_convolution_param() {
   clear_has_convolution_param();
 }
 inline const ::singa::ConvolutionProto& LayerProto::convolution_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.convolution_param)
   return convolution_param_ != NULL ? *convolution_param_ : *default_instance_->convolution_param_;
 }
 inline ::singa::ConvolutionProto* LayerProto::mutable_convolution_param() {
   set_has_convolution_param();
   if (convolution_param_ == NULL) convolution_param_ = new ::singa::ConvolutionProto;
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.convolution_param)
   return convolution_param_;
 }
 inline ::singa::ConvolutionProto* LayerProto::release_convolution_param() {
@@ -5701,7 +5582,6 @@ inline void LayerProto::set_allocated_convolution_param(::singa::ConvolutionProt
   } else {
     clear_has_convolution_param();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.convolution_param)
 }
 
 // optional .singa.ConcateProto concate_param = 31;
@@ -5719,13 +5599,11 @@ inline void LayerProto::clear_concate_param() {
   clear_has_concate_param();
 }
 inline const ::singa::ConcateProto& LayerProto::concate_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.concate_param)
   return concate_param_ != NULL ? *concate_param_ : *default_instance_->concate_param_;
 }
 inline ::singa::ConcateProto* LayerProto::mutable_concate_param() {
   set_has_concate_param();
   if (concate_param_ == NULL) concate_param_ = new ::singa::ConcateProto;
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.concate_param)
   return concate_param_;
 }
 inline ::singa::ConcateProto* LayerProto::release_concate_param() {
@@ -5742,7 +5620,6 @@ inline void LayerProto::set_allocated_concate_param(::singa::ConcateProto* conca
   } else {
     clear_has_concate_param();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.concate_param)
 }
 
 // optional .singa.DataProto data_param = 22;
@@ -5760,13 +5637,11 @@ inline void LayerProto::clear_data_param() {
   clear_has_data_param();
 }
 inline const ::singa::DataProto& LayerProto::data_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.data_param)
   return data_param_ != NULL ? *data_param_ : *default_instance_->data_param_;
 }
 inline ::singa::DataProto* LayerProto::mutable_data_param() {
   set_has_data_param();
   if (data_param_ == NULL) data_param_ = new ::singa::DataProto;
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.data_param)
   return data_param_;
 }
 inline ::singa::DataProto* LayerProto::release_data_param() {
@@ -5783,7 +5658,6 @@ inline void LayerProto::set_allocated_data_param(::singa::DataProto* data_param)
   } else {
     clear_has_data_param();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.data_param)
 }
 
 // optional .singa.DropoutProto dropout_param = 23;
@@ -5801,13 +5675,11 @@ inline void LayerProto::clear_dropout_param() {
   clear_has_dropout_param();
 }
 inline const ::singa::DropoutProto& LayerProto::dropout_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.dropout_param)
   return dropout_param_ != NULL ? *dropout_param_ : *default_instance_->dropout_param_;
 }
 inline ::singa::DropoutProto* LayerProto::mutable_dropout_param() {
   set_has_dropout_param();
   if (dropout_param_ == NULL) dropout_param_ = new ::singa::DropoutProto;
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.dropout_param)
   return dropout_param_;
 }
 inline ::singa::DropoutProto* LayerProto::release_dropout_param() {
@@ -5824,7 +5696,6 @@ inline void LayerProto::set_allocated_dropout_param(::singa::DropoutProto* dropo
   } else {
     clear_has_dropout_param();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.dropout_param)
 }
 
 // optional .singa.InnerProductProto inner_product_param = 24;
@@ -5842,13 +5713,11 @@ inline void LayerProto::clear_inner_product_param() {
   clear_has_inner_product_param();
 }
 inline const ::singa::InnerProductProto& LayerProto::inner_product_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.inner_product_param)
   return inner_product_param_ != NULL ? *inner_product_param_ : *default_instance_->inner_product_param_;
 }
 inline ::singa::InnerProductProto* LayerProto::mutable_inner_product_param() {
   set_has_inner_product_param();
   if (inner_product_param_ == NULL) inner_product_param_ = new ::singa::InnerProductProto;
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.inner_product_param)
   return inner_product_param_;
 }
 inline ::singa::InnerProductProto* LayerProto::release_inner_product_param() {
@@ -5865,7 +5734,6 @@ inline void LayerProto::set_allocated_inner_product_param(::singa::InnerProductP
   } else {
     clear_has_inner_product_param();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.inner_product_param)
 }
 
 // optional .singa.LRNProto lrn_param = 25;
@@ -5883,13 +5751,11 @@ inline void LayerProto::clear_lrn_param() {
   clear_has_lrn_param();
 }
 inline const ::singa::LRNProto& LayerProto::lrn_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.lrn_param)
   return lrn_param_ != NULL ? *lrn_param_ : *default_instance_->lrn_param_;
 }
 inline ::singa::LRNProto* LayerProto::mutable_lrn_param() {
   set_has_lrn_param();
   if (lrn_param_ == NULL) lrn_param_ = new ::singa::LRNProto;
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.lrn_param)
   return lrn_param_;
 }
 inline ::singa::LRNProto* LayerProto::release_lrn_param() {
@@ -5906,7 +5772,6 @@ inline void LayerProto::set_allocated_lrn_param(::singa::LRNProto* lrn_param) {
   } else {
     clear_has_lrn_param();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.lrn_param)
 }
 
 // optional .singa.MnistProto mnist_param = 26;
@@ -5924,13 +5789,11 @@ inline void LayerProto::clear_mnist_param() {
   clear_has_mnist_param();
 }
 inline const ::singa::MnistProto& LayerProto::mnist_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.mnist_param)
   return mnist_param_ != NULL ? *mnist_param_ : *default_instance_->mnist_param_;
 }
 inline ::singa::MnistProto* LayerProto::mutable_mnist_param() {
   set_has_mnist_param();
   if (mnist_param_ == NULL) mnist_param_ = new ::singa::MnistProto;
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.mnist_param)
   return mnist_param_;
 }
 inline ::singa::MnistProto* LayerProto::release_mnist_param() {
@@ -5947,7 +5810,6 @@ inline void LayerProto::set_allocated_mnist_param(::singa::MnistProto* mnist_par
   } else {
     clear_has_mnist_param();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.mnist_param)
 }
 
 // optional .singa.PoolingProto pooling_param = 27;
@@ -5965,13 +5827,11 @@ inline void LayerProto::clear_pooling_param() {
   clear_has_pooling_param();
 }
 inline const ::singa::PoolingProto& LayerProto::pooling_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.pooling_param)
   return pooling_param_ != NULL ? *pooling_param_ : *default_instance_->pooling_param_;
 }
 inline ::singa::PoolingProto* LayerProto::mutable_pooling_param() {
   set_has_pooling_param();
   if (pooling_param_ == NULL) pooling_param_ = new ::singa::PoolingProto;
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.pooling_param)
   return pooling_param_;
 }
 inline ::singa::PoolingProto* LayerProto::release_pooling_param() {
@@ -5988,7 +5848,6 @@ inline void LayerProto::set_allocated_pooling_param(::singa::PoolingProto* pooli
   } else {
     clear_has_pooling_param();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.pooling_param)
 }
 
 // repeated .singa.LayerProto sublayers = 35;
@@ -5999,25 +5858,20 @@ inline void LayerProto::clear_sublayers() {
   sublayers_.Clear();
 }
 inline const ::singa::LayerProto& LayerProto::sublayers(int index) const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.sublayers)
   return sublayers_.Get(index);
 }
 inline ::singa::LayerProto* LayerProto::mutable_sublayers(int index) {
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.sublayers)
   return sublayers_.Mutable(index);
 }
 inline ::singa::LayerProto* LayerProto::add_sublayers() {
-  // @@protoc_insertion_point(field_add:singa.LayerProto.sublayers)
   return sublayers_.Add();
 }
 inline const ::google::protobuf::RepeatedPtrField< ::singa::LayerProto >&
 LayerProto::sublayers() const {
-  // @@protoc_insertion_point(field_list:singa.LayerProto.sublayers)
   return sublayers_;
 }
 inline ::google::protobuf::RepeatedPtrField< ::singa::LayerProto >*
 LayerProto::mutable_sublayers() {
-  // @@protoc_insertion_point(field_mutable_list:singa.LayerProto.sublayers)
   return &sublayers_;
 }
 
@@ -6036,13 +5890,11 @@ inline void LayerProto::clear_slice_param() {
   clear_has_slice_param();
 }
 inline const ::singa::SliceProto& LayerProto::slice_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.slice_param)
   return slice_param_ != NULL ? *slice_param_ : *default_instance_->slice_param_;
 }
 inline ::singa::SliceProto* LayerProto::mutable_slice_param() {
   set_has_slice_param();
   if (slice_param_ == NULL) slice_param_ = new ::singa::SliceProto;
-  // @@protoc_insertion_point(field_mutable:singa.LayerProto.slice_param)
   return slice_param_;
 }
 inline ::singa::SliceProto* LayerProto::release_slice_param() {
@@ -6059,7 +5911,6 @@ inline void LayerProto::set_allocated_slice_param(::singa::SliceProto* slice_par
   } else {
     clear_has_slice_param();
   }
-  // @@protoc_insertion_point(field_set_allocated:singa.LayerProto.slice_param)
 }
 
 // optional .singa.SplitProto split_param = 33;
@@ -6077,13 +5928,11 @@ inline void LayerProto::clear_split_param() {
   clear_has_split_param();
 }
 inline const ::singa::SplitProto& LayerProto::split_param() const {
-  // @@protoc_insertion_point(field_get:singa.LayerProto.split_param)
   return split_param_ != NULL ? *split_param_ : *default_instance_->split_param_;
 }
 inline ::singa::SplitProto* La

<TRUNCATED>
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/c318a98c/src/proto/model.proto
----------------------------------------------------------------------
diff --git a/src/proto/model.proto b/src/proto/model.proto
index 19727a9..5dcf9c0 100644
--- a/src/proto/model.proto
+++ b/src/proto/model.proto
@@ -18,6 +18,7 @@ enum EntityType{
   kWorkerLayer=1;
   kServer=2;
   kStub=3;
+  kRuntime=4;
 };
 enum Phase {
   kTrain = 0;