Loading...
Searching...
No Matches
network.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 Artificial Intelligence Techniques, S.L. and Roberto López González
3
4#pragma once
5
6#include <cstdint>
7#include <functional>
8#include <initializer_list>
9
14
15namespace opennn
16{
17
18class Network;
20
21namespace detail
22{
24{
25public:
27
28 State state() const noexcept
29 {
30 if(master.get_device() != Device::CUDA) return State::Host;
31 if(!master.owns_memory()) return State::DeviceCompact;
32 return bf16.empty() && int8.empty()
34 }
35
36 bool low_precision_ready(Type type) const noexcept
37 {
38 if(type == Type::BF16) return !bf16.empty();
39 if(type == Type::INT8) return !int8.empty();
40 return true;
41 }
42
44 {
45 bf16.resize_bytes(0, Device::CUDA);
46 fp32_inference.resize_bytes(0, Device::CUDA);
47 int8.resize_bytes(0, Device::CUDA);
48 bf16_compact = false;
49 }
50
51 void validate(Type type) const
52 {
53 throw_if(type == Type::BF16 && bf16_compact && bf16.empty(),
54 "ParameterStore: compact BF16 layout has no BF16 storage.");
56 && bf16.empty() && fp32_inference.empty() && int8.empty(),
57 "ParameterStore: compact master view has no owning storage.");
58 throw_if(type == Type::BF16 && !int8.empty(),
59 "ParameterStore: BF16 precision cannot own INT8 storage.");
60 }
61
62private:
63 Buffer master;
64 Buffer bf16{Device::CUDA};
65 Buffer fp32_inference{Device::CUDA};
66 Buffer int8{Device::CUDA};
67 bool bf16_compact = false;
68
69 friend class ::opennn::Network;
70};
71}
72
85
87{
88
89public:
90
92 {
95 {
96 if (was_on_device) network.copy_parameters_host();
97 }
98
100 {
101 if (!was_on_device) return;
102 try { network.copy_parameters_device(); } catch (...) {}
103 }
104
107
109 const bool was_on_device;
110 };
111
113
114 virtual ~Network() = default;
115
116 Network(const filesystem::path&);
117
118 NetworkTask get_task() const noexcept { return task; }
119 void set_task(NetworkTask new_task) noexcept { task = new_task; }
120
121 Index add_layer(unique_ptr<Layer>,
122 const vector<Index>& = {});
123
124 const EffectiveConfig& get_config() const noexcept { return config; }
125 Device get_device() const noexcept { return config.device; }
126 bool is_gpu() const noexcept { return config.device == Device::CUDA; }
127 Type get_training_type() const noexcept { return config.training_type; }
128 const PrecisionPlan& get_precision() const noexcept { return precision; }
129 Type get_activation_type() const noexcept { return precision.activations; }
130
131 void set_training_activation_recomputation(bool enabled) noexcept
132 {
134 }
139
141
142 vector<vector<TensorSpec>> get_parameter_specs() const
143 {
144 return collect_layer_specs([](const Layer& layer) { return layer.get_parameter_specs(); });
145 }
146
147 vector<vector<TensorSpec>> get_state_specs() const
148 {
149 return collect_layer_specs([](const Layer& layer) { return layer.get_state_specs(); });
150 }
151
152 vector<vector<TensorSpec>> get_forward_specs(Index batch_size) const
153 {
154 auto specs = collect_layer_specs([batch_size](const Layer& layer) { return layer.get_forward_specs(batch_size); });
155 if (!is_gpu()) force_specs_to_fp32(specs);
156 return specs;
157 }
158
159 vector<vector<TensorSpec>> get_backward_specs(Index batch_size) const
160 {
161 auto specs = collect_layer_specs([batch_size](const Layer& layer) { return layer.get_backward_specs(batch_size); });
162 if (!is_gpu()) force_specs_to_fp32(specs);
163 return specs;
164 }
165
167
168 void compile();
170
173 bool has(const string&) const;
174 bool has(LayerType) const;
176
177 bool is_empty() const noexcept { return layers.empty(); }
178
179 // Anything derived from the parameters -- a packed cuDNN weight space, a
180 // batch-norm fold, a quantized copy -- has to know when they change. There
181 // is no way to observe that passively, because callers write straight
182 // through the mutable handles below, so handing one out counts as a change.
183 // That over-counts the few readers that take a mutable handle and only read,
184 // which costs those callers a recompute and cannot make a cache stale. The
185 // reverse policy, trusting writers to announce themselves, is one missed
186 // call site away from silently wrong weights.
187 // A handle retained across an execution has already consumed that one
188 // invalidation; call mark_parameters_changed() before executing after any
189 // later writes through the retained handle.
190 //
191 // Cache holders should store the version they were built at and compare, not
192 // assume any particular increment.
193 uint64_t get_parameters_version() const noexcept { return parameters_version; }
194
196
197 float* get_parameters_data() { mark_parameters_changed(); return parameter_store.master.as<float>(); }
198 const float* get_parameters_data() const { return parameter_store.master.as<float>(); }
200 {
202 return parameter_store.master.as_vector();
203 }
205 {
206 return parameter_store.master.as_vector();
207 }
208 Index get_parameters_buffer_size() const noexcept { return parameter_store.master.size_in_floats(); }
209 Device get_parameters_device() const noexcept { return parameter_store.master.get_device(); }
210 float* get_states_data() { return states.as<float>(); }
211 const float* get_states_data() const { return states.as<float>(); }
212 Index get_states_buffer_size() const noexcept { return states.size_in_floats(); }
213
214 const vector<Variable>& get_input_variables() const noexcept { return input_variables; }
216
217 const vector<Variable>& get_output_variables() const noexcept { return output_variables; }
219
220 const vector<unique_ptr<Layer>>& get_layers() const noexcept { return layers; }
221 const unique_ptr<Layer>& get_layer(const Index layer_index) const { return layers[layer_index]; }
222 const unique_ptr<Layer>& get_layer(const string&) const;
223
224 Index get_layer_index(const string&) const;
225
226 const vector<vector<Index>>& get_source_layers() const noexcept { return source_layers; }
227 vector<vector<pair<size_t, size_t>>> get_consumer_edges() const;
228
229 Layer* get_first(const string&);
231 const Layer* get_first(const string&) const;
232 const Layer* get_first(LayerType) const;
233
234 void set_input_variables(const vector<Variable>& new_input_variables) { input_variables = new_input_variables; }
235 void set_output_variables(const vector<Variable>& new_output_variables) { output_variables = new_output_variables; }
236
237 void set_input_names(const vector<string>&);
238 void set_output_names(const vector<string>&);
239
240 void set_input_shape(const Shape&);
241
242 void clear();
243 void steal_from(Network& src);
244
245 Index get_layers_number() const noexcept { return ssize(layers); }
246 Index get_layers_number(const string&) const;
248
251
252
253 Index get_inputs_number() const { return get_input_shape().size(); }
254 Index get_outputs_number() const { return get_output_shape().size(); }
255
258
261
263 void set_states(const VectorR&);
264 void set_parameters_random() { initialize_parameters(&Operator::set_parameters_random); }
265 void set_parameters_glorot() { initialize_parameters(&Operator::set_parameters_glorot); }
268
276
278 {
279 static_assert(int(ParameterStorage::DeviceCompact)
281 return static_cast<ParameterStorage>(parameter_store.state());
282 }
283
284 bool fp32_master_released() const noexcept
285 {
287 }
288
289 // Whether the derived storage this precision needs has been built yet. A
290 // separate question from where the master lives: FP32 needs nothing derived,
291 // so it is always ready.
292 bool low_precision_storage_ready() const noexcept
293 {
294 return parameter_store.low_precision_ready(config.training_type);
295 }
296
297 void link_gradients(const Buffer&) const;
298 void link_gradients(span<const TensorView> layer_gradients) const;
299
302 MatrixR calculate_outputs(const vector<TensorView>&);
303
304 void calculate_outputs(const vector<TensorView>&, MatrixR& outputs);
305
306 TensorView calculate_outputs_resident(const vector<TensorView>&,
308 bool upload_parameters = true);
309
311
313
315
316 // Text input for a single-input network with a layer named "tokenizer".
317 MatrixR calculate_text_outputs(const Tensor<string, 1>&);
318
319 void set_tokenizer(unique_ptr<TokenizerOperator>, const string& label = "tokenizer");
320 const TokenizerOperator* get_tokenizer(const string& label = "tokenizer") const;
321 void set_vocabulary(const vector<string>&, const string& label = "tokenizer");
322 const vector<string>& get_vocabulary(const string& label = "tokenizer") const;
323
324 void calculate_outputs(const MatrixR&, MatrixR& outputs);
325
326 void calculate_outputs(const Tensor3&, MatrixR& outputs);
327
328 void calculate_outputs(const Tensor4&, MatrixR& outputs);
329
331
332 void calculate_outputs(const Tensor3&, const Tensor3&, Tensor3& outputs);
333
335
336 void to_JSON(JsonWriter&) const;
337
338 void save(const filesystem::path&) const;
339 void save_parameters_binary(const filesystem::path&) const;
340 void save_states_binary(const filesystem::path&) const;
341
342 void load(const filesystem::path&);
343 void load_parameters_binary(const filesystem::path&);
344
345 void load_parameters_bf16_inference_binary(const filesystem::path&);
346 void load_states_binary(const filesystem::path&);
347
348 void forward_propagate(const vector<TensorView>&,
351
352 void forward_propagate(const vector<TensorView>&,
355 Index,
356 Index) const;
357
358 void forward_propagate(const vector<TensorView>&,
359 const VectorR&,
361
363
365
367
369
371 {
372 return config.training_type == Type::BF16 && parameter_store.master.owns_memory()
373 ? parameter_store.bf16.as<bfloat16>()
374 : nullptr;
375 }
376
379
382
383 vector<string> get_layer_labels() const;
384
385protected:
386
388 Network(const filesystem::path&, NetworkTask);
389
390 // Compile a newly built model and initialize its parameters with Glorot.
392 // Update execution settings without changing parameter/state layouts.
393 // Preserve learned values and the compiled device/precision configuration.
394 void configure_layers(const function<void(Layer&)>&);
395 void set_attention_and_dense_dropout(float, initializer_list<string_view> dense_prefixes);
396
397 // For a model factory that builds the layers and loads a BF16 inference
398 // binary in one step: compiles without the fp32 master the loader would
399 // discard. The network has no parameter storage of any kind until the
400 // load completes, so nothing may observe it in between; a factory keeps
401 // it private until then and drops it if the load throws.
403
405
406 vector<Variable> input_variables;
407 vector<Variable> output_variables;
408
409 vector<unique_ptr<Layer>> layers;
410
411 vector<vector<Index>> source_layers;
412
414 {
415 const void* parameter_master = nullptr;
416 const void* bf16_mirror = nullptr;
417 const void* fp32_inference = nullptr;
418 const void* int8_storage = nullptr;
419 const void* states = nullptr;
420
421 friend bool operator==(const DeviceResidency&, const DeviceResidency&) = default;
422 };
423
425
426 // Bumped whenever a mutable handle to the parameters is handed out, so a
427 // derived cache can tell that what it was built from has moved on.
428 uint64_t parameters_version = 1;
429
430 detail::ParameterStore parameter_store;
431
433
436
438
439 mutable bool stale_configuration_warned = false;
440
441 mutable const void* linked_gradient_base = nullptr;
442
443private:
444
445 void compile(EffectiveConfig, bool allocate_parameter_master = true);
446
447 void read_parameters_bf16_inference_binary(const filesystem::path&, Index parameters_number);
448
449 MatrixR calculate_outputs_device(const vector<TensorView>&, ForwardPropagation&);
450
451 void calculate_outputs_device(const vector<TensorView>&, ForwardPropagation&,
452 MatrixR& outputs);
453
454 struct HostStatesGuard
455 {
456 explicit HostStatesGuard(Network& n)
457 : HostStatesGuard(n, n.states.get_device() == Device::CUDA) {}
458
459 HostStatesGuard(Network& n, bool stage)
460 : network(n), was_on_device(stage)
461 {
462 if (was_on_device) network.copy_states_host();
463 }
464
465 ~HostStatesGuard()
466 {
467 if (!was_on_device) return;
468 try { network.copy_states_device(); } catch (...) {}
469 }
470
471 HostStatesGuard(const HostStatesGuard&) = delete;
472 HostStatesGuard& operator=(const HostStatesGuard&) = delete;
473
474 Network& network;
475 const bool was_on_device;
476 };
477
478 void initialize_parameters(void (Operator::*)());
479
480 uint64_t parameter_layout_fingerprint() const;
481 uint64_t state_layout_fingerprint() const;
482
483 void clear_low_precision_parameter_storage();
484 void activate_transposed_inference_weights();
485
486 struct ParameterSlot
487 {
488 Layer* layer = nullptr;
489 Shape shape;
490 Type dtype = Type::FP32;
491 bool tied = false;
492 Index scale_channels = 0;
493 int scale_axis = 0;
494 Index master_offset = 0;
495 Index bf16_offset = 0;
496 Index int8_offset = 0;
497 Index fp32_offset = 0;
498 };
499
500 struct ParameterSlotTotals
501 {
502 Index bf16_elements = 0;
503 Index int8_elements = 0;
504 Index fp32_elements = 0;
505 };
506
507 ParameterSlotTotals for_each_parameter_slot(
508 const function<void(const ParameterSlot&)>& visit,
509 const function<void(Layer&)>& begin_layer = {}) const;
510
511 void allocate_compact_parameter_storage(const ParameterSlotTotals&);
512 void use_compact_parameter_storage();
513
514 static void force_specs_to_fp32(vector<vector<TensorSpec>>& specs)
515 {
516 for (auto& layer_specs : specs)
517 for (auto& spec : layer_specs)
518 if (spec.dtype == Type::BF16)
519 spec.dtype = Type::FP32;
520 }
521
522 template<typename Fn>
523 vector<vector<TensorSpec>> collect_layer_specs(Fn fn) const
524 {
525 vector<vector<TensorSpec>> out(layers.size());
526 ranges::transform(layers, out.begin(),
527 [&](const unique_ptr<Layer>& layer) { return fn(*layer); });
528 return out;
529 }
530};
531
532}
Definition json.h:75
Definition json.h:92
Definition layer.h:38
virtual vector< TensorSpec > get_state_specs() const
virtual vector< TensorSpec > get_parameter_specs() const
virtual vector< TensorSpec > get_backward_specs(Index batch_size) const
Definition layer.h:80
virtual vector< TensorSpec > get_forward_specs(Index batch_size) const
Definition layer.h:76
Definition network.h:87
Index get_parameters_number() const
bool is_gpu() const noexcept
Definition network.h:126
void copy_states_device()
Index get_layers_number(LayerType) const
vector< vector< TensorSpec > > get_state_specs() const
Definition network.h:147
vector< Variable > input_variables
Definition network.h:406
bool low_precision_storage_ready() const noexcept
Definition network.h:292
NetworkTask get_task() const noexcept
Definition network.h:118
vector< string > get_output_feature_names() const
Definition network.h:218
void steal_from(Network &src)
DeviceResidency get_device_residency() const noexcept
PrecisionPlan precision
Definition network.h:435
void set_attention_and_dense_dropout(float, initializer_list< string_view > dense_prefixes)
VectorMap get_parameters_map() &
Definition network.h:199
vector< vector< pair< size_t, size_t > > > get_consumer_edges() const
const float * get_states_data() const
Definition network.h:211
const EffectiveConfig & get_config() const noexcept
Definition network.h:124
float * get_states_data()
Definition network.h:210
MatrixR calculate_text_outputs(const Tensor< string, 1 > &)
const Layer * get_first(const string &) const
void calculate_outputs(const vector< TensorView > &, MatrixR &outputs)
void release_bf16_fp32_parameter_master_for_inference()
const TokenizerOperator * get_tokenizer(const string &label="tokenizer") const
void cast_parameters_to_bf16()
Index get_parameters_buffer_size() const noexcept
Definition network.h:208
MatrixR calculate_outputs(const Tensor3 &)
void copy_parameters_device()
Index get_layer_index(const string &) const
const unique_ptr< Layer > & get_layer(const Index layer_index) const
Definition network.h:221
Shape get_input_shape() const
vector< vector< TensorSpec > > get_forward_specs(Index batch_size) const
Definition network.h:152
void load(const filesystem::path &)
void copy_parameters_host()
MatrixR calculate_outputs(const MatrixR &)
const vector< Variable > & get_input_variables() const noexcept
Definition network.h:214
void calculate_outputs(const Tensor3 &, MatrixR &outputs)
vector< vector< Index > > source_layers
Definition network.h:411
bool has(LayerType) const
const vector< string > & get_vocabulary(const string &label="tokenizer") const
void upload_parameters_int8_inference()
void set_parameters(const VectorR &)
void set_vocabulary(const vector< string > &, const string &label="tokenizer")
Index get_last_trainable_layer_index() const
bool fp32_master_released() const noexcept
Definition network.h:284
void set_task(NetworkTask new_task) noexcept
Definition network.h:119
void set_attention_sdpa_min_sequence_length(Index)
void set_parameters_random()
Definition network.h:264
void save_states_binary(const filesystem::path &) const
vector< vector< TensorSpec > > get_parameter_specs() const
Definition network.h:142
bool get_training_activation_recomputation() const noexcept
Definition network.h:135
vector< string > get_layer_labels() const
void set_parameters_pytorch()
Definition network.h:266
void load_parameters_bf16_inference_binary(const filesystem::path &)
uint64_t get_parameters_version() const noexcept
Definition network.h:193
void set_tokenizer(unique_ptr< TokenizerOperator >, const string &label="tokenizer")
void load_states_binary(const filesystem::path &)
void save_parameters_binary(const filesystem::path &) const
ParameterStorage get_parameter_storage() const noexcept
Definition network.h:277
Index get_outputs_number() const
Definition network.h:254
const PrecisionPlan & get_precision() const noexcept
Definition network.h:128
void set_input_shape(const Shape &)
Layer * get_first(LayerType)
const vector< Variable > & get_output_variables() const noexcept
Definition network.h:217
void copy_states_host()
float * get_parameters_data()
Definition network.h:197
void save(const filesystem::path &) const
void configure_layers(const function< void(Layer &)> &)
Index get_layers_number() const noexcept
Definition network.h:245
void load_parameters_binary(const filesystem::path &)
const unique_ptr< Layer > & get_layer(const string &) const
bfloat16 * get_parameters_bf16_mirror_data()
Definition network.h:370
void calculate_outputs(const Tensor3 &, const Tensor3 &, Tensor3 &outputs)
void to_JSON(JsonWriter &) const
void link_gradients(span< const TensorView > layer_gradients) const
void forward_propagate(const vector< TensorView > &, ForwardPropagation &, ForwardPropagationMode, Index, Index) const
Index get_first_trainable_layer_index() const
Index add_layer(unique_ptr< Layer >, const vector< Index > &={})
void calculate_outputs(const Tensor4 &, MatrixR &outputs)
Layer * get_first(const string &)
void compile(Device device)
void set_parameters_glorot()
Definition network.h:265
Type get_activation_type() const noexcept
Definition network.h:129
bool stale_configuration_warned
Definition network.h:439
uint64_t parameters_version
Definition network.h:428
vector< string > get_input_feature_names() const
Definition network.h:215
void link_parameters()
Index get_layers_number(const string &) const
void forward_propagate(const vector< TensorView > &, ForwardPropagation &, ForwardPropagationMode=ForwardPropagationMode::Inference) const
bool has_recurrent_layers() const
void set_output_variables(const vector< Variable > &new_output_variables)
Definition network.h:235
Tensor3 calculate_outputs(const Tensor3 &, const Tensor3 &)
const vector< vector< Index > > & get_source_layers() const noexcept
Definition network.h:226
void calculate_outputs(const MatrixR &, MatrixR &outputs)
Shape get_output_shape() const
ParameterStorage
Definition network.h:270
@ DeviceMasterWithMirror
Definition network.h:273
@ DeviceCompact
Definition network.h:274
@ Host
Definition network.h:271
@ DeviceMaster
Definition network.h:272
vector< vector< TensorSpec > > get_backward_specs(Index batch_size) const
Definition network.h:159
MatrixR calculate_outputs(const vector< TensorView > &)
const Layer * get_first(LayerType) const
void set_attention_sdpa_auto(bool)
ConstVectorMap get_parameters_map() const &
Definition network.h:204
Index get_states_buffer_size() const noexcept
Definition network.h:212
void forward_propagate(const vector< TensorView > &, const VectorR &, ForwardPropagation &)
TensorView calculate_outputs_resident(const vector< TensorView > &, ForwardPropagation &, bool upload_parameters=true)
void from_JSON(const JsonDocument &)
detail::ParameterStore parameter_store
Definition network.h:430
bool has(const string &) const
Device get_device() const noexcept
Definition network.h:125
void set_input_variables(const vector< Variable > &new_input_variables)
Definition network.h:234
virtual ~Network()=default
Buffer states
Definition network.h:432
Device get_parameters_device() const noexcept
Definition network.h:209
Type get_training_type() const noexcept
Definition network.h:127
void upload_parameters_bf16_inference()
Network(NetworkTask)
MatrixR calculate_outputs(const Tensor4 &)
void link_gradients(const Buffer &) const
void finalize_build()
bool training_activation_recomputation
Definition network.h:437
ActivationFunction get_output_activation() const
Network(const filesystem::path &)
void set_states(const VectorR &)
void set_training_activation_recomputation(bool enabled) noexcept
Definition network.h:131
void set_input_names(const vector< string > &)
void mark_parameters_changed() noexcept
Definition network.h:195
vector< Variable > output_variables
Definition network.h:407
Index get_inputs_number() const
Definition network.h:253
Network(const filesystem::path &, NetworkTask)
Index get_states_size() const
Definition network.h:166
void link_states(Device)
void compile_and_load_parameters_bf16_inference_binary(const filesystem::path &)
const float * get_parameters_data() const
Definition network.h:198
vector< unique_ptr< Layer > > layers
Definition network.h:409
void set_output_names(const vector< string > &)
EffectiveConfig config
Definition network.h:434
void warn_if_stale_configuration() const
const vector< unique_ptr< Layer > > & get_layers() const noexcept
Definition network.h:220
const void * linked_gradient_base
Definition network.h:441
NetworkTask task
Definition network.h:404
bool is_empty() const noexcept
Definition network.h:177
Definition tokenizer_operator.h:35
Definition network.h:24
State state() const noexcept
Definition network.h:28
bool low_precision_ready(Type type) const noexcept
Definition network.h:36
void clear_derived()
Definition network.h:43
State
Definition network.h:26
@ DeviceMasterWithMirror
Definition network.h:26
@ DeviceCompact
Definition network.h:26
@ Host
Definition network.h:26
@ DeviceMaster
Definition network.h:26
void validate(Type type) const
Definition network.h:51
Definition opennn_types.h:204
Definition energy_meter.h:7
Definition configuration.h:10
NetworkTask
Definition network.h:74
@ ImageClassification
Definition network.h:80
@ Forecasting
Definition network.h:78
@ AnomalyDetection
Definition network.h:79
@ ObjectDetection
Definition network.h:81
@ Approximation
Definition network.h:76
@ Classification
Definition network.h:77
@ Generic
Definition network.h:75
@ TextClassification
Definition network.h:82
@ LanguageModeling
Definition network.h:83
Device
Definition configuration.h:12
@ CUDA
Definition configuration.h:12
vector< string > get_variable_feature_names(const vector< Variable > &)
LayerType
Definition layer_registry.h:15
Index get_aligned_size(Index size)
Definition tensor_types.h:156
Type
Definition configuration.h:13
@ FP32
Definition configuration.h:13
@ INT8
Definition configuration.h:13
@ BF16
Definition configuration.h:13
ForwardPropagationMode
Definition forward_propagation.h:33
@ Inference
Definition forward_propagation.h:35
__nv_bfloat16 bfloat16
Definition opennn_types.h:171
float type
Definition opennn_types.h:197
ActivationFunction
Definition configuration.h:39
Eigen::Matrix< float, Eigen::Dynamic, 1 > VectorR
Definition opennn_types.h:335
Eigen::Matrix< float, Eigen::Dynamic, Eigen::Dynamic, Layout > MatrixR
Definition opennn_types.h:331
Eigen::Map< const VectorR, Eigen::AlignedMax > ConstVectorMap
Definition opennn_types.h:340
Eigen::Map< VectorR, Eigen::AlignedMax > VectorMap
Definition opennn_types.h:339
Eigen::Tensor< float, 3, Layout|Eigen::AlignedMax > Tensor3
Definition opennn_types.h:352
Eigen::Tensor< float, 4, Layout|Eigen::AlignedMax > Tensor4
Definition opennn_types.h:353
#define throw_if(condition,...)
Definition opennn_types.h:243
Definition tensor_types.h:340
Device get_device() const noexcept
Definition tensor_types.h:385
Definition configuration.h:58
Definition forward_propagation.h:52
Definition network.h:414
const void * parameter_master
Definition network.h:415
friend bool operator==(const DeviceResidency &, const DeviceResidency &)=default
const void * int8_storage
Definition network.h:418
const void * states
Definition network.h:419
const void * bf16_mirror
Definition network.h:416
const void * fp32_inference
Definition network.h:417
const bool was_on_device
Definition network.h:109
Network & network
Definition network.h:108
~HostParametersGuard()
Definition network.h:99
HostParametersGuard(const HostParametersGuard &)=delete
HostParametersGuard & operator=(const HostParametersGuard &)=delete
HostParametersGuard(Network &n)
Definition network.h:93
Definition operator.h:28
virtual void set_parameters_pytorch()
Definition operator.h:91
virtual void set_parameters_glorot()
Definition operator.h:89
virtual void set_parameters_random()
Definition operator.h:88
Definition configuration.h:16
Definition tensor_types.h:172
Index size() const
Definition tensor_types.h:221
Definition tensor_types.h:540