@@ -5,4 +5,4 @@ dnn/src/cuda/conv_bias/int8_imma/kimpl/* binary | |||||
dnn/src/cuda/batch_conv_bias/int8/kimpl/* binary | dnn/src/cuda/batch_conv_bias/int8/kimpl/* binary | ||||
dnn/src/cuda/sass/prebuilt/map_defs.cpp binary | dnn/src/cuda/sass/prebuilt/map_defs.cpp binary | ||||
tools/mlir/mlir-tblgen filter=lfs diff=lfs merge=lfs -text | tools/mlir/mlir-tblgen filter=lfs diff=lfs merge=lfs -text | ||||
sdk/c-opr-loaders/mc40/example/sinopec_nv12_extra.neu filter=lfs diff=lfs merge=lfs -text | |||||
*.caffemodel filter=lfs diff=lfs merge=lfs -text |
@@ -0,0 +1,22 @@ | |||||
# -*- 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 | |||||
from typing import Sequence | |||||
from ..core._imperative_rt.core2 import apply | |||||
from ..core.ops import builtin | |||||
def tensorrt_runtime_opr(inputs, *, data: bytes = None): | |||||
# empty model will give None result | |||||
if data is None: | |||||
return None | |||||
op = builtin.TensorRTRuntime(data, len(data)) | |||||
# return sequence of outputs | |||||
return apply(op, *inputs) |
@@ -0,0 +1,37 @@ | |||||
# -*- 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 tensorrt_runtime_opr | |||||
from .module import Module | |||||
class TensorrtRuntimeSubgraph(Module): | |||||
r"""Load a serialized TensorrtRuntime subgraph. | |||||
See :func:`~.tensorrt_runtime_opr` for more details. | |||||
""" | |||||
def __init__( | |||||
self, data, | |||||
): | |||||
super(TensorrtRuntimeSubgraph, self).__init__() | |||||
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) |
@@ -6,14 +6,20 @@ | |||||
# Unless required by applicable law or agreed to in writing, | # Unless required by applicable law or agreed to in writing, | ||||
# software distributed under the License is distributed on an | # software distributed under the License is distributed on an | ||||
# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
import io | |||||
import os | import os | ||||
import platform | |||||
import numpy as np | import numpy as np | ||||
import pytest | import pytest | ||||
import megengine as mge | import megengine as mge | ||||
import megengine.utils.comp_graph_tools as cgtools | |||||
from megengine import Tensor | from megengine import Tensor | ||||
from megengine.distributed.helper import get_device_count_by_fork | |||||
from megengine.jit import trace | |||||
from megengine.module import Module | from megengine.module import Module | ||||
from megengine.module.external import TensorrtRuntimeSubgraph | |||||
class MyModule(Module): | class MyModule(Module): | ||||
@@ -44,3 +50,5 @@ def test_cambricon_module(): | |||||
return pred | return pred | ||||
pred = inference([inp]) | pred = inference([inp]) | ||||
@@ -0,0 +1,32 @@ | |||||
/** | |||||
* \file imperative/src/impl/ops/tensorrt_runtime.cpp | |||||
* 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. | |||||
*/ | |||||
#include "../op_trait.h" | |||||
#include "megbrain/imperative/ops/autogen.h" | |||||
#if MGB_ENABLE_TENSOR_RT | |||||
#include "megbrain/tensorrt/tensorrt_runtime_opr.h" | |||||
namespace mgb::imperative { | |||||
namespace { namespace tensorrt_runtime { | |||||
auto apply_on_var_node( | |||||
const OpDef& def, | |||||
const VarNodeArray& inputs) { | |||||
auto&& op = static_cast<const TensorRTRuntime&>(def); | |||||
SymbolVarArray sinputs(inputs.begin(), inputs.end()); | |||||
return opr::TensorRTRuntimeOpr::make(op.buf.c_str(), op.buf_size, sinputs); | |||||
} | |||||
OP_TRAIT_REG(TensorRTRuntime, TensorRTRuntime) | |||||
.apply_on_var_node(apply_on_var_node) | |||||
.fallback(); | |||||
}} // tensorrt_runtime | |||||
} // namespace mgb::imperative | |||||
#endif // MGB_ENABLE_TENSOR_RT |
@@ -241,4 +241,11 @@ def ElemwiseMultiType: MgbHashableOp<"ElemwiseMultiType", [ElemwiseMultiTypePara | |||||
def InplaceAdd: MgbHashableOp<"InplaceAdd", [EmptyParam]>; | def InplaceAdd: MgbHashableOp<"InplaceAdd", [EmptyParam]>; | ||||
def TensorRTRuntime: MgbHashableOp<"TensorRTRuntime"> { | |||||
let extraArguments = (ins | |||||
MgbStringAttr:$buf, | |||||
MgbSizeTAddr:$buf_size | |||||
); | |||||
} | |||||
#endif // MGB_OPS | #endif // MGB_OPS |