LBANN  0.103.0
LivermoreBigArtificialNeuralNetworkToolkit
callback.hpp
Go to the documentation of this file.
1 // Copyright (c) 2014-2023, Lawrence Livermore National Security, LLC.
3 // Produced at the Lawrence Livermore National Laboratory.
4 // Written by the LBANN Research Team (B. Van Essen, et al.) listed in
5 // the CONTRIBUTORS file. <lbann-dev@llnl.gov>
6 //
7 // LLNL-CODE-697807.
8 // All rights reserved.
9 //
10 // This file is part of LBANN: Livermore Big Artificial Neural Network
11 // Toolkit. For details, see http://software.llnl.gov/LBANN or
12 // https://github.com/LLNL/LBANN.
13 //
14 // Licensed under the Apache License, Version 2.0 (the "Licensee"); you
15 // may not use this file except in compliance with the License. You may
16 // obtain a copy of the License at:
17 //
18 // http://www.apache.org/licenses/LICENSE-2.0
19 //
20 // Unless required by applicable law or agreed to in writing, software
21 // distributed under the License is distributed on an "AS IS" BASIS,
22 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
23 // implied. See the License for the specific language governing
24 // permissions and limitations under the license.
25 //
26 // callback .hpp - Base class for LBANN callbacks
28 
29 #ifndef LBANN_CALLBACKS_CALLBACK_HPP_INCLUDED
30 #define LBANN_CALLBACKS_CALLBACK_HPP_INCLUDED
31 
33 #include "lbann/utils/memory.hpp"
34 #include "lbann/utils/summary.hpp"
35 
36 #include <google/protobuf/message.h>
37 
38 #include <algorithm>
39 #include <string>
40 
41 // Forward-declare protobuf classes
42 namespace lbann_data {
43 class Callback;
44 }
45 
48 #define LBANN_ADD_DEFAULT_CALLBACK_BUILDER(Class, FunctionName) \
49  inline std::unique_ptr<callback_base> FunctionName( \
50  const google::protobuf::Message&, \
51  std::shared_ptr<lbann_summary> const&) \
52  { \
53  return std::make_unique<Class>(); \
54  }
55 
56 namespace cereal {
57 class access;
58 } // namespace cereal
59 
60 namespace lbann {
61 
62 // Forward-declarations
63 class Layer;
64 class model;
65 class trainer;
66 class weights;
67 
77 {
78 public:
80 
84  callback_base(int batch_interval = 1)
85  : m_batch_interval(std::max(batch_interval, 1))
86  {}
87  callback_base(const callback_base&) = default;
88  virtual ~callback_base() = default;
89 
91 
92 
94  virtual callback_base* copy() const = 0;
95 
97 
98 
102  virtual void setup(trainer* t){};
103 
107  virtual void setup(model* m){};
108 
110 
111 
114  virtual void on_setup_end(model* m) {}
116  virtual void on_train_begin(model* m) {}
118  virtual void on_train_end(model* m) {}
122  virtual void on_phase_end(model* m) {}
124  virtual void on_epoch_begin(model* m) {}
126  virtual void on_epoch_end(model* m) {}
128  virtual void on_batch_begin(model* m) {}
130  virtual void on_batch_end(model* m) {}
132  virtual void on_test_begin(model* m) {}
134  virtual void on_test_end(model* m) {}
136  virtual void on_validation_begin(model* m) {}
138  virtual void on_validation_end(model* m) {}
140  virtual void on_forward_prop_begin(model* m) {}
142  virtual void on_forward_prop_begin(model* m, Layer* l) {}
144  virtual void on_forward_prop_end(model* m) {}
146  virtual void on_forward_prop_end(model* m, Layer* l) {}
148  virtual void on_backward_prop_begin(model* m) {}
150  virtual void on_backward_prop_begin(model* m, Layer* l) {}
152  virtual void on_backward_prop_end(model* m) {}
154  virtual void on_backward_prop_end(model* m, Layer* l) {}
156  virtual void on_optimize_begin(model* m) {}
158  virtual void on_optimize_begin(model* m, weights* w) {}
160  virtual void on_optimize_end(model* m) {}
162  virtual void on_optimize_end(model* m, weights* w) {}
163 
167  virtual void on_batch_evaluate_begin(model* m) {}
171  virtual void on_batch_evaluate_end(model* m) {}
187  virtual void on_evaluate_forward_prop_end(model* m, Layer* l) {}
188 
190 
191 
194  int get_batch_interval() const { return m_batch_interval; }
195 
197  virtual std::string name() const = 0;
198 
200  virtual description get_description() const;
201 
203 
204 
207  template <class Archive>
208  void serialize(Archive& ar);
209 
211  void write_proto(lbann_data::Callback& proto) const;
212 
213 protected:
215  virtual void write_specific_proto(lbann_data::Callback& proto) const = 0;
216 
218 
221  std::string get_multi_trainer_path(const model& m,
222  const std::string& root_dir);
223 
227  std::string get_multi_trainer_ec_model_path(const model& m,
228  const std::string& root_dir);
229 
233  std::string get_multi_trainer_model_path(const model& m,
234  const std::string& root_dir);
235 
236 protected:
241  callback_base& operator=(const callback_base&) = default;
242 
243 protected:
248 };
249 
250 } // namespace lbann
251 
252 #endif // LBANN_CALLBACKS_CALLBACK_HPP_INCLUDED
virtual void on_validation_end(model *m)
Called immediately after the end of validation.
Definition: callback.hpp:138
virtual void on_evaluate_forward_prop_end(model *m, Layer *l)
Called when a layer ends forward propagation for evaluation (validation / testing).
Definition: callback.hpp:187
virtual void on_forward_prop_begin(model *m, Layer *l)
Called when a layer begins forward propagation.
Definition: callback.hpp:142
callback_base(int batch_interval=1)
Initialize a callback with an optional batch interval.
Definition: callback.hpp:84
virtual void on_optimize_begin(model *m)
Called when a model begins optimization.
Definition: callback.hpp:156
virtual void on_forward_prop_end(model *m, Layer *l)
Called when a layer ends forward propagation.
Definition: callback.hpp:146
virtual void on_epoch_begin(model *m)
Called at the beginning of each epoch.
Definition: callback.hpp:124
virtual void on_batch_begin(model *m)
Called at the beginning of a (mini-)batch.
Definition: callback.hpp:128
virtual void on_evaluate_forward_prop_end(model *m)
Called when a model ends forward propagation for evaluation (validation / testing).
Definition: callback.hpp:183
virtual void on_setup_end(model *m)
Called at the end of setup.
Definition: callback.hpp:114
virtual void on_train_begin(model *m)
Called at the beginning of training.
Definition: callback.hpp:116
virtual void on_backward_prop_end(model *m, Layer *l)
Called when a layer ends backward propagation.
Definition: callback.hpp:154
virtual void setup(model *m)
Called once to set up the callback on the model (after all layers are set up).
Definition: callback.hpp:107
virtual void on_test_begin(model *m)
Called at the beginning of testing.
Definition: callback.hpp:132
virtual void on_epoch_end(model *m)
Called immediate after the end of each epoch.
Definition: callback.hpp:126
virtual void on_batch_evaluate_begin(model *m)
Called at the beginning of a (mini-)batch evaluation (validation / testing).
Definition: callback.hpp:167
void serialize(std::ostream &os, google::protobuf::Message const &msg)
Serialize the protobuf message to a stream.
Neural network tensor operation.
Definition: layer.hpp:285
Generates nicely formatted description messages.
Definition: description.hpp:49
virtual void on_backward_prop_begin(model *m)
Called when a model begins backward propagation.
Definition: callback.hpp:148
virtual void on_test_end(model *m)
Called immediately after the end of testing.
Definition: callback.hpp:134
virtual void on_optimize_begin(model *m, weights *w)
Called when weights begins optimization.
Definition: callback.hpp:158
virtual void setup(trainer *t)
Called once to set up the callback on the trainer.
Definition: callback.hpp:102
virtual void on_batch_end(model *m)
Called immediately after the end of a (mini-)batch.
Definition: callback.hpp:130
virtual void on_backward_prop_begin(model *m, Layer *l)
Called when a layer begins backward propagation.
Definition: callback.hpp:150
Base class for callbacks during training/testing.
Definition: callback.hpp:76
Abstract base class for neural network models.
Definition: model.hpp:83
virtual void on_evaluate_forward_prop_begin(model *m)
Called when a model begins forward propagation for evaluation (validation / testing).
Definition: callback.hpp:175
virtual void on_forward_prop_end(model *m)
Called when a model ends forward propagation.
Definition: callback.hpp:144
virtual void on_optimize_end(model *m, weights *w)
Called when weights ends optimization.
Definition: callback.hpp:162
virtual void on_optimize_end(model *m)
Called when a model ends optimization.
Definition: callback.hpp:160
virtual void on_validation_begin(model *m)
Called at the beginning of validation.
Definition: callback.hpp:136
virtual void on_evaluate_forward_prop_begin(model *m, Layer *l)
Called when a layer begins forward propagation for evaluation (validation / testing).
Definition: callback.hpp:179
virtual void on_backward_prop_end(model *m)
Called when a model ends backward propagation.
Definition: callback.hpp:152
User-facing class that represents a set of compute resources.
Definition: trainer.hpp:60
virtual void on_forward_prop_begin(model *m)
Called when a model begins forward propagation.
Definition: callback.hpp:140
int m_batch_interval
Batch methods should once every this many steps.
Definition: callback.hpp:247
virtual void on_phase_end(model *m)
Called at the end of every phase (multiple epochs) in a layer-wise model training.
Definition: callback.hpp:122
virtual void on_train_end(model *m)
Called at the end of training.
Definition: callback.hpp:118
virtual void on_batch_evaluate_end(model *m)
Called at the end of a (mini-)batch evaluation (validation / testing).
Definition: callback.hpp:171
int get_batch_interval() const
Return the batch interval.
Definition: callback.hpp:194