ONE - On-device Neural Engine
Loading...
Searching...
No Matches
Session.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef __API_NNFW_SESSION_H__
18#define __API_NNFW_SESSION_H__
19
20#include "nnfw.h"
21
24#include "compiler/ICompiler.h"
25#include "exec/Execution.h"
26#include "ir/NNPkg.h"
28#include "odc/CodegenManager.h"
29#include "odc/QuantizeManager.h"
30
31#include <util/TracingCtx.h>
32
33#include <filesystem>
34#include <memory>
35#include <string>
36#include <thread>
37#include <vector>
38
39namespace onert::api
40{
41
42struct Session
43{
44private:
80 enum class State
81 {
82 INITIALIZED, //< Session is initialized and nothing has done to it
83 MODEL_LOADED, //< Model is loaded
84 PREPARED, //< Prepared(compiled) for execution
85 RUNNING, //< Execution is in progress (only for asynchronous execution)
86 FINISHED_RUN, //< Executed at least once
87 PREPARED_TRAINING, //< Prepared for training
88 FINISHED_TRAINING //< Trained at least once
89 };
90
91 enum class AutoCompilationState
92 {
93 INITIAL_STATE, //< Initial state
94 QUANTIZED_MODEL_LOADED, //< Qunatized model is loaded
95 COMPILED_MODEL_LOADED //< Compiled model is loaded
96 };
97
98public:
104 static NNFW_STATUS create(Session **session);
105
106private:
107 Session();
108
109public:
111 NNFW_STATUS load_model_from_path(const char *path);
114
117
118 NNFW_STATUS set_input(uint32_t index, NNFW_TYPE type, const void *buffer, size_t length);
119 NNFW_STATUS set_output(uint32_t index, NNFW_TYPE type, void *buffer, size_t length);
120
121 NNFW_STATUS input_size(uint32_t *number);
122 NNFW_STATUS output_size(uint32_t *number);
123
124 NNFW_STATUS set_input_layout(uint32_t index, NNFW_LAYOUT layout);
125 NNFW_STATUS set_output_layout(uint32_t index, NNFW_LAYOUT layout);
126 NNFW_STATUS set_input_type(uint32_t index, NNFW_TYPE type);
127 NNFW_STATUS set_output_type(uint32_t index, NNFW_TYPE type);
128
129 NNFW_STATUS set_input_tensorinfo(uint32_t index, const nnfw_tensorinfo *ti);
130
131 NNFW_STATUS input_tensorinfo(uint32_t index, nnfw_tensorinfo *ti);
132 NNFW_STATUS output_tensorinfo(uint32_t index, nnfw_tensorinfo *ti);
133
135
136 NNFW_STATUS set_workspace(const char *dir);
137
138 NNFW_STATUS configure_signature(const char *signature);
139 NNFW_STATUS set_signature_run(const char *signature);
140
141 static NNFW_STATUS deprecated(const char *msg);
142
143 //
144 // Internal-only API
145 //
146
147 NNFW_STATUS set_config(const char *key, const char *value);
148 NNFW_STATUS get_config(const char *key, char *value, size_t value_size);
149 NNFW_STATUS load_circle_from_buffer(uint8_t *buffer, size_t size);
150 NNFW_STATUS get_output(uint32_t index, nnfw_tensorinfo *out_info, const void **out_buffer);
151
152 //
153 // Experimental API
154 //
155 NNFW_STATUS register_custom_operation(const std::string &id, nnfw_custom_eval eval_func);
156 NNFW_STATUS input_tensorindex(const char *tensorname, uint32_t *index);
157 NNFW_STATUS output_tensorindex(const char *tensorname, uint32_t *index);
158
159 // Run inference with auto compilation
161 // Set odc parameter: minmax_records_count for quantization in auto compilation mode
162 NNFW_STATUS set_odc_param_minmax_records_count(int minmax_records_count);
163 // delete MinMax File of on-device compiler
165
170 NNFW_STATUS set_backends_per_operation(const char *backend_settings);
171
177 NNFW_STATUS train_set_input(uint32_t index, const void *input,
179 NNFW_STATUS train_set_expected(uint32_t index, const void *expected,
180 const nnfw_tensorinfo *expected_tensorinfo);
181 NNFW_STATUS train_set_output(uint32_t index, NNFW_TYPE type, void *buffer, size_t length);
182 NNFW_STATUS train_run(bool update_weights);
183 NNFW_STATUS train_get_loss(uint32_t index, float *loss);
184 NNFW_STATUS train_export_circle(const char *path);
185 NNFW_STATUS train_export_circleplus(const char *path);
186 NNFW_STATUS train_import_checkpoint(const char *path);
187 NNFW_STATUS train_export_checkpoint(const char *path);
188
190 NNFW_STATUS set_quantized_model_path(const char *path);
192
193 NNFW_STATUS set_codegen_model_path(const char *path);
194 NNFW_STATUS codegen(const char *target, NNFW_CODEGEN_PREF pref);
195
196 NNFW_STATUS set_prepare_config(const NNFW_PREPARE_CONFIG key, const char *value);
198 NNFW_STATUS set_execute_config(const NNFW_RUN_CONFIG key, const char *value);
200
201private:
202 const onert::ir::IGraph *primary_subgraph();
203 uint32_t getInputSize();
204 uint32_t getOutputSize();
205 NNFW_STATUS loadModelFile(const std::string &model_file_path, const std::string &model_type);
206
207 bool isStateInitialized();
208 bool isStateModelLoaded();
209 bool isStatePrepared();
210 bool isStateRunning();
211 bool isStateFinishedRun();
212 bool isStatePreparedOrFinishedRun();
213 bool isStatePreparedTraining();
214 bool isStateFinishedTraining();
215 bool isStatePreparedOrFinishedTraining();
216
217private:
218 State _state{State::INITIALIZED};
219 std::unique_ptr<onert::ir::NNPkg> _nnpkg;
220 std::unique_ptr<onert::compiler::CompilerOptions> _coptions;
221 std::unique_ptr<onert::compiler::CompilerArtifact> _compiler_artifact;
222 std::unique_ptr<onert::exec::Execution> _execution;
223 std::shared_ptr<onert::api::CustomKernelRegistry> _kernel_registry;
224 std::vector<std::thread> _threads;
225 std::unique_ptr<onert::ir::train::TrainingInfo> _train_info;
226 std::unique_ptr<onert::odc::QuantizeManager> _quant_manager;
227 std::unique_ptr<onert::odc::CodegenManager> _codegen_manager;
228 AutoCompilationState _autoCompilationState = AutoCompilationState::INITIAL_STATE;
229 // Remember path to loaded original model
230 // It may be used for on-device compiler / on-device training.
231 //
232 // If necessary, we may replace _model_path to _model_origin like:
233 //
234 // union _model_origin {
235 // const char *path;
236 // const uint8 *buf;
237 // }
238 std::filesystem::path _model_path;
239 std::unordered_map<onert::ir::SubgraphIndex, std::string> _signature_map;
240 onert::ir::SubgraphIndex _selected_signature;
241};
242
243} // namespace onert::api
244
245#endif // __API_NNFW_SESSION_H__
int32_t type
This file defines execution.
This file contains ICompiler class to define and run compilation phase.
volatile const char info[]
This file describes runtime API.
NNFW_LAYOUT
Data format of a tensor.
Definition nnfw.h:134
void(* nnfw_custom_eval)(nnfw_custom_kernel_params *params, char *userdata, size_t userdata_size)
NNFW_CODEGEN_PREF
Preference for target-dependent code generation.
NNFW_QUANTIZE_TYPE
Convert between training mode and inference mode.
NNFW_RUN_CONFIG
Configuration key for execution.
NNFW_PREPARE_CONFIG
Configuration key for prepare (compile and schedule)
int32_t size[5]
Definition Slice.cpp:35
NNFW_STATUS
Result values returned from a call to an API function.
Definition onert-micro.h:86
NNFW_TYPE
Definition onert-micro.h:75
tensor info describes the type and shape of tensors
Training information to prepare training.
NNFW_STATUS reset_execute_config()
Definition Session.cc:2252
NNFW_STATUS set_codegen_model_path(const char *path)
Definition Session.cc:2100
NNFW_STATUS run_async()
Definition Session.cc:532
NNFW_STATUS train_prepare()
Definition Session.cc:1612
NNFW_STATUS set_output_type(uint32_t index, NNFW_TYPE type)
Definition Session.cc:794
NNFW_STATUS set_signature_run(const char *signature)
Definition Session.cc:1100
NNFW_STATUS train_set_input(uint32_t index, const void *input, const nnfw_tensorinfo *input_tensorinfo)
Definition Session.cc:1684
NNFW_STATUS train_get_loss(uint32_t index, float *loss)
Definition Session.cc:1838
NNFW_STATUS await()
Definition Session.cc:547
NNFW_STATUS train_export_checkpoint(const char *path)
Definition Session.cc:1957
NNFW_STATUS load_model_from_path(const char *path)
Definition Session.cc:321
NNFW_STATUS reset_prepare_config()
Definition Session.cc:2209
NNFW_STATUS set_input_type(uint32_t index, NNFW_TYPE type)
Definition Session.cc:749
NNFW_STATUS train_set_output(uint32_t index, NNFW_TYPE type, void *buffer, size_t length)
Definition Session.cc:1775
NNFW_STATUS set_backends_per_operation(const char *backend_settings)
Set backends with string-encoded mapping from operation index to backend type (cpu,...
Definition Session.cc:1361
NNFW_STATUS prepare()
Definition Session.cc:468
NNFW_STATUS set_input_layout(uint32_t index, NNFW_LAYOUT layout)
Definition Session.cc:660
NNFW_STATUS train_get_traininfo(nnfw_train_info *info)
Definition Session.cc:1392
NNFW_STATUS set_workspace(const char *dir)
Definition Session.cc:1059
NNFW_STATUS load_circle_from_buffer(uint8_t *buffer, size_t size)
Definition Session.cc:294
static NNFW_STATUS deprecated(const char *msg)
Definition Session.cc:1125
NNFW_STATUS input_tensorindex(const char *tensorname, uint32_t *index)
Definition Session.cc:1351
NNFW_STATUS set_available_backends(const char *backends)
Definition Session.cc:1035
NNFW_STATUS output_tensorindex(const char *tensorname, uint32_t *index)
Definition Session.cc:1356
NNFW_STATUS set_prepare_config(const NNFW_PREPARE_CONFIG key, const char *value)
Definition Session.cc:2186
NNFW_STATUS set_output(uint32_t index, NNFW_TYPE type, void *buffer, size_t length)
Definition Session.cc:589
NNFW_STATUS set_input(uint32_t index, NNFW_TYPE type, const void *buffer, size_t length)
Definition Session.cc:562
NNFW_STATUS input_size(uint32_t *number)
Definition Session.cc:616
NNFW_STATUS set_config(const char *key, const char *value)
Definition Session.cc:1131
NNFW_STATUS train_export_circleplus(const char *path)
Definition Session.cc:1901
NNFW_STATUS train_input_tensorinfo(uint32_t index, nnfw_tensorinfo *ti)
Definition Session.cc:1652
NNFW_STATUS get_output(uint32_t index, nnfw_tensorinfo *out_info, const void **out_buffer)
Definition Session.cc:979
NNFW_STATUS train_set_traininfo(const nnfw_train_info *info)
Definition Session.cc:1510
NNFW_STATUS train_run(bool update_weights)
Definition Session.cc:1804
NNFW_STATUS set_quantized_model_path(const char *path)
Definition Session.cc:2054
NNFW_STATUS set_quantization_type(NNFW_QUANTIZE_TYPE qtype)
Definition Session.cc:2014
NNFW_STATUS output_size(uint32_t *number)
Definition Session.cc:638
NNFW_STATUS run_with_auto_compilation(const char *target, NNFW_CODEGEN_PREF pref)
Definition Session.cc:2296
NNFW_STATUS get_config(const char *key, char *value, size_t value_size)
Definition Session.cc:1235
NNFW_STATUS run()
Definition Session.cc:503
NNFW_STATUS register_custom_operation(const std::string &id, nnfw_custom_eval eval_func)
Definition Session.cc:973
NNFW_STATUS output_tensorinfo(uint32_t index, nnfw_tensorinfo *ti)
Definition Session.cc:930
NNFW_STATUS delete_odc_minmax_file()
Definition Session.cc:2281
NNFW_STATUS set_output_layout(uint32_t index, NNFW_LAYOUT layout)
Definition Session.cc:704
NNFW_STATUS train_export_circle(const char *path)
Definition Session.cc:1872
NNFW_STATUS quantize()
Definition Session.cc:2075
NNFW_STATUS train_set_expected(uint32_t index, const void *expected, const nnfw_tensorinfo *expected_tensorinfo)
Definition Session.cc:1727
NNFW_STATUS train_import_checkpoint(const char *path)
Definition Session.cc:1930
NNFW_STATUS set_odc_param_minmax_records_count(int minmax_records_count)
Definition Session.cc:2267
static NNFW_STATUS create(Session **session)
Factory method. It creates and initialize Session.
Definition Session.cc:267
NNFW_STATUS input_tensorinfo(uint32_t index, nnfw_tensorinfo *ti)
Definition Session.cc:889
NNFW_STATUS set_execute_config(const NNFW_RUN_CONFIG key, const char *value)
Definition Session.cc:2222
NNFW_STATUS configure_signature(const char *signature)
Definition Session.cc:1074
NNFW_STATUS train_expected_tensorinfo(uint32_t index, nnfw_tensorinfo *ti)
Definition Session.cc:1668
NNFW_STATUS set_input_tensorinfo(uint32_t index, const nnfw_tensorinfo *ti)
Definition Session.cc:839