ONE - On-device Neural Engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
nnfw_session_bindings.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025 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
18
19#include "nnfw_api_wrapper.h"
20
21namespace onert::api::python
22{
23
24namespace py = pybind11;
25
26// Bind the `NNFW_SESSION` class with common inference APIs
27void bind_nnfw_session(py::module_ &m)
28{
29 py::class_<NNFW_SESSION>(m, "nnfw_session", py::module_local())
30 .def(
31 py::init<const char *, const char *>(), py::arg("package_file_path"), py::arg("backends"),
32 "Create a new session instance, load model from nnpackage file or directory, "
33 "set available backends and prepare session to be ready for inference\n"
34 "Parameters:\n"
35 "\tpackage_file_path (str): Path to the nnpackage file or unzipped directory to be loaded\n"
36 "\tbackends (str): Available backends on which nnfw uses\n"
37 "\t\tMultiple backends can be set and they must be separated by a semicolon "
38 "(ex: \"acl_cl;cpu\")\n"
39 "\t\tAmong the multiple backends, the 1st element is used as the default backend.")
40 .def("set_input_tensorinfo", &NNFW_SESSION::set_input_tensorinfo, py::arg("index"),
41 py::arg("tensor_info"),
42 "Set input model's tensor info for resizing.\n"
43 "Parameters:\n"
44 "\tindex (int): Index of input to be set (0-indexed)\n"
45 "\ttensor_info (tensorinfo): Tensor info to be set")
46 .def("prepare", &NNFW_SESSION::prepare, "Prepare for inference")
47 .def("run", &NNFW_SESSION::run, "Run inference")
48 .def("run_async", &NNFW_SESSION::run_async, "Run inference asynchronously")
49 .def("wait", &NNFW_SESSION::wait, "Wait for asynchronous run to finish")
50 .def(
51 "set_input",
52 [](NNFW_SESSION &session, uint32_t index, py::array_t<float> &buffer) {
53 session.set_input<float>(index, buffer);
54 },
55 py::arg("index"), py::arg("buffer"),
56 "Set input buffer\n"
57 "Parameters:\n"
58 "\tindex (int): Index of input to be set (0-indexed)\n"
59 "\tbuffer (numpy): Raw buffer for input")
60 .def(
61 "set_input",
62 [](NNFW_SESSION &session, uint32_t index, py::array_t<int> &buffer) {
63 session.set_input<int>(index, buffer);
64 },
65 py::arg("index"), py::arg("buffer"),
66 "Set input buffer\n"
67 "Parameters:\n"
68 "\tindex (int): Index of input to be set (0-indexed)\n"
69 "\tbuffer (numpy): Raw buffer for input")
70 .def(
71 "set_input",
72 [](NNFW_SESSION &session, uint32_t index, py::array_t<uint8_t> &buffer) {
73 session.set_input<uint8_t>(index, buffer);
74 },
75 py::arg("index"), py::arg("buffer"),
76 "Set input buffer\n"
77 "Parameters:\n"
78 "\tindex (int): Index of input to be set (0-indexed)\n"
79 "\tbuffer (numpy): Raw buffer for input")
80 .def(
81 "set_input",
82 [](NNFW_SESSION &session, uint32_t index, py::array_t<bool> &buffer) {
83 session.set_input<bool>(index, buffer);
84 },
85 py::arg("index"), py::arg("buffer"),
86 "Set input buffer\n"
87 "Parameters:\n"
88 "\tindex (int): Index of input to be set (0-indexed)\n"
89 "\tbuffer (numpy): Raw buffer for input")
90 .def(
91 "set_input",
92 [](NNFW_SESSION &session, uint32_t index, py::array_t<int64_t> &buffer) {
93 session.set_input<int64_t>(index, buffer);
94 },
95 py::arg("index"), py::arg("buffer"),
96 "Set input buffer\n"
97 "Parameters:\n"
98 "\tindex (int): Index of input to be set (0-indexed)\n"
99 "\tbuffer (numpy): Raw buffer for input")
100 .def(
101 "set_input",
102 [](NNFW_SESSION &session, uint32_t index, py::array_t<int8_t> &buffer) {
103 session.set_input<int8_t>(index, buffer);
104 },
105 py::arg("index"), py::arg("buffer"),
106 "Set input buffer\n"
107 "Parameters:\n"
108 "\tindex (int): Index of input to be set (0-indexed)\n"
109 "\tbuffer (numpy): Raw buffer for input")
110 .def(
111 "set_input",
112 [](NNFW_SESSION &session, uint32_t index, py::array_t<int16_t> &buffer) {
113 session.set_input<int16_t>(index, buffer);
114 },
115 py::arg("index"), py::arg("buffer"),
116 "Set input buffer\n"
117 "Parameters:\n"
118 "\tindex (int): Index of input to be set (0-indexed)\n"
119 "\tbuffer (numpy): Raw buffer for input")
120 .def(
121 "set_output",
122 [](NNFW_SESSION &session, uint32_t index, py::array_t<float> &buffer) {
123 session.set_output<float>(index, buffer);
124 },
125 py::arg("index"), py::arg("buffer"),
126 "Set output buffer\n"
127 "Parameters:\n"
128 "\tindex (int): Index of output to be set (0-indexed)\n"
129 "\tbuffer (numpy): Raw buffer for output")
130 .def(
131 "set_output",
132 [](NNFW_SESSION &session, uint32_t index, py::array_t<int> &buffer) {
133 session.set_output<int>(index, buffer);
134 },
135 py::arg("index"), py::arg("buffer"),
136 "Set output buffer\n"
137 "Parameters:\n"
138 "\tindex (int): Index of output to be set (0-indexed)\n"
139 "\tbuffer (numpy): Raw buffer for output")
140 .def(
141 "set_output",
142 [](NNFW_SESSION &session, uint32_t index, py::array_t<uint8_t> &buffer) {
143 session.set_output<uint8_t>(index, buffer);
144 },
145 py::arg("index"), py::arg("buffer"),
146 "Set output buffer\n"
147 "Parameters:\n"
148 "\tindex (int): Index of output to be set (0-indexed)\n"
149 "\tbuffer (numpy): Raw buffer for output")
150 .def(
151 "set_output",
152 [](NNFW_SESSION &session, uint32_t index, py::array_t<bool> &buffer) {
153 session.set_output<bool>(index, buffer);
154 },
155 py::arg("index"), py::arg("buffer"),
156 "Set output buffer\n"
157 "Parameters:\n"
158 "\tindex (int): Index of output to be set (0-indexed)\n"
159 "\tbuffer (numpy): Raw buffer for output")
160 .def(
161 "set_output",
162 [](NNFW_SESSION &session, uint32_t index, py::array_t<int64_t> &buffer) {
163 session.set_output<int64_t>(index, buffer);
164 },
165 py::arg("index"), py::arg("buffer"),
166 "Set output buffer\n"
167 "Parameters:\n"
168 "\tindex (int): Index of output to be set (0-indexed)\n"
169 "\tbuffer (numpy): Raw buffer for output")
170 .def(
171 "set_output",
172 [](NNFW_SESSION &session, uint32_t index, py::array_t<int8_t> &buffer) {
173 session.set_output<int8_t>(index, buffer);
174 },
175 py::arg("index"), py::arg("buffer"),
176 "Set output buffer\n"
177 "Parameters:\n"
178 "\tindex (int): Index of output to be set (0-indexed)\n"
179 "\tbuffer (numpy): Raw buffer for output")
180 .def(
181 "set_output",
182 [](NNFW_SESSION &session, uint32_t index, py::array_t<int16_t> &buffer) {
183 session.set_output<int16_t>(index, buffer);
184 },
185 py::arg("index"), py::arg("buffer"),
186 "Set output buffer\n"
187 "Parameters:\n"
188 "\tindex (int): Index of output to be set (0-indexed)\n"
189 "\tbuffer (numpy): Raw buffer for output")
190 .def("input_size", &NNFW_SESSION::input_size,
191 "Get the number of inputs defined in loaded model\n"
192 "Returns:\n"
193 "\tint: The number of inputs")
194 .def("output_size", &NNFW_SESSION::output_size,
195 "Get the number of outputs defined in loaded model\n"
196 "Returns:\n"
197 "\tint: The number of outputs")
198 .def("set_input_layout", &NNFW_SESSION::set_input_layout, py::arg("index"),
199 py::arg("layout") = "NONE",
200 "Set the layout of an input\n"
201 "Parameters:\n"
202 "\tindex (int): Index of input to be set (0-indexed)\n"
203 "\tlayout (str): Layout to set to target input")
204 .def("set_output_layout", &NNFW_SESSION::set_output_layout, py::arg("index"),
205 py::arg("layout") = "NONE",
206 "Set the layout of an output\n"
207 "Parameters:\n"
208 "\tindex (int): Index of output to be set (0-indexed)\n"
209 "\tlayout (str): Layout to set to target output")
210 .def("input_tensorinfo", &NNFW_SESSION::input_tensorinfo, py::arg("index"),
211 "Get i-th input tensor info\n"
212 "Parameters:\n"
213 "\tindex (int): Index of input\n"
214 "Returns:\n"
215 "\ttensorinfo: Tensor info (shape, type, etc)")
216 .def("output_tensorinfo", &NNFW_SESSION::output_tensorinfo, py::arg("index"),
217 "Get i-th output tensor info\n"
218 "Parameters:\n"
219 "\tindex (int): Index of output\n"
220 "Returns:\n"
221 "\ttensorinfo: Tensor info (shape, type, etc)");
222}
223
224// Bind the `NNFW_SESSION` class with experimental APIs
226{
227 // Add experimental APIs for the `NNFW_SESSION` class
228 m.attr("nnfw_session")
229 .cast<py::class_<NNFW_SESSION>>()
230 .def("train_get_traininfo", &NNFW_SESSION::train_get_traininfo,
231 "Retrieve training information for the model.")
232 .def("train_set_traininfo", &NNFW_SESSION::train_set_traininfo, py::arg("info"),
233 "Set training information for the model.")
234 .def("train_prepare", &NNFW_SESSION::train_prepare, "Prepare for training")
235 .def("train", &NNFW_SESSION::train, py::arg("update_weights") = true,
236 "Run a training step, optionally updating weights.")
237 .def("train_get_loss", &NNFW_SESSION::train_get_loss, py::arg("index"),
238 "Retrieve the training loss for a specific index.")
239 .def("train_set_input", &NNFW_SESSION::train_set_input<float>, py::arg("index"),
240 py::arg("buffer"), "Set training input tensor for the given index (float).")
241 .def("train_set_input", &NNFW_SESSION::train_set_input<int>, py::arg("index"),
242 py::arg("buffer"), "Set training input tensor for the given index (int).")
243 .def("train_set_input", &NNFW_SESSION::train_set_input<uint8_t>, py::arg("index"),
244 py::arg("buffer"), "Set training input tensor for the given index (uint8).")
245 .def("train_set_expected", &NNFW_SESSION::train_set_expected<float>, py::arg("index"),
246 py::arg("buffer"), "Set expected output tensor for the given index (float).")
247 .def("train_set_expected", &NNFW_SESSION::train_set_expected<int>, py::arg("index"),
248 py::arg("buffer"), "Set expected output tensor for the given index (int).")
249 .def("train_set_expected", &NNFW_SESSION::train_set_expected<uint8_t>, py::arg("index"),
250 py::arg("buffer"), "Set expected output tensor for the given index (uint8).")
251 .def("train_set_output", &NNFW_SESSION::train_set_output<float>, py::arg("index"),
252 py::arg("buffer"), "Set output tensor for the given index (float).")
253 .def("train_set_output", &NNFW_SESSION::train_set_output<int>, py::arg("index"),
254 py::arg("buffer"), "Set output tensor for the given index (int).")
255 .def("train_set_output", &NNFW_SESSION::train_set_output<uint8_t>, py::arg("index"),
256 py::arg("buffer"), "Set output tensor for the given index (uint8).")
257 .def("train_export_circle", &NNFW_SESSION::train_export_circle, py::arg("path"),
258 "Export the trained model to a circle file.")
259 .def("train_import_checkpoint", &NNFW_SESSION::train_import_checkpoint, py::arg("path"),
260 "Import a training checkpoint from a file.")
261 .def("train_export_checkpoint", &NNFW_SESSION::train_export_checkpoint, py::arg("path"),
262 "Export the training checkpoint to a file.");
263}
264
265} // namespace onert::api::python
void train_export_circle(const py::str &path)
tensorinfo input_tensorinfo(uint32_t index)
void train_import_checkpoint(const py::str &path)
void set_input_tensorinfo(uint32_t index, const tensorinfo *tensor_info)
void train(bool update_weights)
void set_input_layout(uint32_t index, const char *layout)
void train_set_traininfo(const nnfw_train_info *info)
void set_output_layout(uint32_t index, const char *layout)
tensorinfo output_tensorinfo(uint32_t index)
void train_export_checkpoint(const py::str &path)
void bind_nnfw_session(pybind11::module_ &m)
void bind_experimental_nnfw_session(pybind11::module_ &m)