model_variant_handle.py Source File

model_variant_handle.py Source File#

SDK qb Runtime Library: model_variant_handle.py Source File
SDK qb Runtime Library v0.29
MCS001-KR
model_variant_handle.py
Go to the documentation of this file.
1
4
5from typing import List, Tuple
6
7import maccel.maccel as _cMaccel
8from .type import *
9
10_Shape = Tuple[int, ...]
11
12
15
17 def __init__(self, _model_variant_handle: _cMaccel.ModelVariantHandle):
18 self._model_variant_handle = _model_variant_handle
20
21 @classmethod
22 def from_cpp(cls, _model_variant_handle: _cMaccel.ModelVariantHandle):
23 return cls(_model_variant_handle)
24
25 def get_model_input_shape(self) -> List[_Shape]:
26 return self._model_variant_handle.get_model_input_shape()
27
28 def get_model_output_shape(self) -> List[_Shape]:
29 return self._model_variant_handle.get_model_output_shape()
30
31 def get_input_buffer_info(self) -> List[BufferInfo]:
32 return [
33 BufferInfo.from_cpp(bi)
34 for bi in self._model_variant_handle.get_input_buffer_info()
35 ]
36
37 def get_output_buffer_info(self) -> List[BufferInfo]:
38 return [
39 BufferInfo.from_cpp(bi)
40 for bi in self._model_variant_handle.get_output_buffer_info()
41 ]
42
43 def get_input_scale(self) -> List[Scale]:
44 return [Scale.from_cpp(s) for s in self._model_variant_handle.get_input_scale()]
45
46 def get_output_scale(self) -> List[Scale]:
47 return [
48 Scale.from_cpp(s) for s in self._model_variant_handle.get_output_scale()
49 ]
50
51 def acquire_input_buffer(self, seqlens: List[List[int]] = []) -> List[Buffer]:
52 return [
53 Buffer(b) for b in self._model_variant_handle.acquire_input_buffer(seqlens)
54 ]
55
56 def acquire_output_buffer(self, seqlens: List[List[int]] = []) -> List[Buffer]:
57 return [
58 Buffer(b) for b in self._model_variant_handle.acquire_output_buffer(seqlens)
59 ]
60
61 def release_buffer(self, buffer: List[Buffer]) -> None:
62 self._model_variant_handle.release_buffer([b._buffer for b in buffer])
63
64 def reposition_inputs(
65 self,
66 inputs: List[np.ndarray],
67 input_bufs: List[Buffer],
68 seqlens: List[List[int]] = [],
69 ) -> None:
70 inputs = [np.ascontiguousarray(i) for i in inputs]
71 self._model_variant_handle.reposition_inputs(
72 inputs, [buf._buffer for buf in input_bufs], seqlens
73 )
74
75 def reposition_outputs(
76 self,
77 output_bufs: List[Buffer],
78 outputs: List[np.ndarray],
79 seqlens: List[List[int]] = [],
80 ) -> None:
81 if len(outputs) != len(self._output_shape):
82 outputs.clear()
83 for shape in self._output_shape:
84 outputs.append(np.empty(shape=shape, dtype=np.float32))
85 else:
86 for oi in range(len(outputs)):
87 outputs[oi] = np.ascontiguousarray(outputs[oi])
88 self._model_variant_handle.reposition_outputs(
89 [buf._buffer for buf in output_bufs], outputs, seqlens
90 )
91
92