# -*- coding: utf-8 -*- # MegEngine is Licensed under the Apache License, Version 2.0 (the "License") # # Copyright (c) 2014-2021 Megvii Inc. All rights reserved. # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # pylint: disable=redefined-builtin import numpy as np from ..functional.external import ( atlas_runtime_opr, cambricon_runtime_opr, extern_opr_subgraph, magicmind_runtime_opr, tensorrt_runtime_opr, ) from .module import Module class ExternOprSubgraph(Module): r"""Load a serialized ExternOpr subgraph. See :func:`~.extern_opr` for more details. """ def __init__( self, output_shapes, dump_name, dump_data, output_dtypes=None, **kwargs ): super(ExternOprSubgraph, self).__init__(**kwargs) self._output_shapes = output_shapes self._dump_name = dump_name self._dump_data = dump_data self._output_dtypes = output_dtypes if self._output_dtypes is None: self._output_dtypes = [np.float32] * len(output_shapes) @property def data(self): return self._dump_data @data.setter def data(self, val): self._dump_data = np.frombuffer(val, dtype=np.uint8) @property def name(self): return self._dump_name @name.setter def name(self, val): self._dump_name = val def forward(self, *inputs): return extern_opr_subgraph( inputs, output_shapes=self._output_shapes, dump_name=self._dump_name, dump_data=self._dump_data, output_dtypes=self._output_dtypes, ) class TensorrtRuntimeSubgraph(Module): r"""Load a serialized TensorrtRuntime subgraph. See :func:`~.tensorrt_runtime_opr` for more details. """ def __init__(self, data, **kwargs): super(TensorrtRuntimeSubgraph, self).__init__(**kwargs) self._data = data @property def data(self): return self._data @data.setter def data(self, val): self._data = np.frombuffer(val, dtype=np.uint8) def forward(self, *inputs): return tensorrt_runtime_opr(inputs, data=self._data) class CambriconRuntimeSubgraph(Module): r"""Load a serialized CambriconRuntime subgraph. See :func:`~.cambricon_runtime_opr` for more details. """ def __init__(self, data, symbol, tensor_dim_mutable, **kwargs): super(CambriconRuntimeSubgraph, self).__init__(**kwargs) self._data = data self.symbol = symbol self.tensor_dim_mutable = tensor_dim_mutable @property def data(self): return self._data @data.setter def data(self, val): self._data = np.frombuffer(val, dtype=np.uint8) def forward(self, *inputs): outputs = cambricon_runtime_opr( inputs, self._data, self.symbol, self.tensor_dim_mutable ) return outputs class AtlasRuntimeSubgraph(Module): r"""Load a serialized AtlasRuntime subgraph. See :func:`~.atlas_runtime_opr` for more details. """ def __init__(self, data, **kwargs): super(AtlasRuntimeSubgraph, self).__init__(**kwargs) self._data = data @property def data(self): return self._data @data.setter def data(self, val): self._data = np.frombuffer(val, dtype=np.uint8) def forward(self, *inputs): return atlas_runtime_opr(inputs, data=self._data) class MagicMindRuntimeSubgraph(Module): r"""Load a serialized MagicMindRuntime subgraph. See :func:`~.magicmind_runtime_opr` for more details. """ def __init__(self, data, **kwargs): super(MagicMindRuntimeSubgraph, self).__init__(**kwargs) self._data = data @property def data(self): return self._data @data.setter def data(self, val): self._data = np.frombuffer(val, dtype=np.uint8) def forward(self, *inputs): return magicmind_runtime_opr(inputs, data=self._data)