예제 #1
0
 def _test_relu_graph(self, X, batch_size, trt_max_batch_size):
     node_def = make_node("Relu", ["X"], ["Y"])
     Y_c2 = c2.run_node(node_def, {"X": X})
     graph_def = make_graph(
         [node_def],
         name="test",
         inputs=[
             make_tensor_value_info("X", onnx.TensorProto.FLOAT,
                                    [batch_size, 1, 3, 2])
         ],
         outputs=[
             make_tensor_value_info("Y", onnx.TensorProto.FLOAT,
                                    [batch_size, 1, 3, 2])
         ])
     model_def = make_model(graph_def, producer_name='relu-test')
     op_outputs = [x.name for x in model_def.graph.output]
     op = convert_onnx_model_to_trt_op(model_def,
                                       max_batch_size=trt_max_batch_size)
     device_option = core.DeviceOption(caffe2_pb2.CUDA, 0)
     op.device_option.CopyFrom(device_option)
     Y_trt = None
     ws = Workspace()
     with core.DeviceScope(device_option):
         ws.FeedBlob("X", X)
         ws.RunOperatorsOnce([op])
         output_values = [ws.FetchBlob(name) for name in op_outputs]
         Y_trt = namedtupledict('Outputs', op_outputs)(*output_values)
     np.testing.assert_almost_equal(Y_c2, Y_trt)
예제 #2
0
    def test_gemm(self):
        # simple
        A = np.random.randn(3, 2).astype(np.float32)
        B = np.random.randn(2, 4).astype(np.float32)
        C = np.random.randn(3, 4).astype(np.float32)
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"])
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"], np.dot(A, B) + C)

        # transA
        A = np.transpose(A)
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"], transA=True)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"],
                                       np.dot(np.transpose(A), B) + C)
        # revert A
        A = np.transpose(A)

        # transB
        B = np.transpose(B)
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"], transB=True)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"],
                                       np.dot(A, np.transpose(B)) + C)
        # revert A
        B = np.transpose(B)

        # scale
        alpha = np.random.random()
        beta = np.random.random()
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"],
                             alpha=alpha,
                             beta=beta)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"],
                                       alpha * np.dot(A, B) + beta * C)

        # broadcast
        C = np.random.randn(4).astype(np.float32)
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"],
                             alpha=alpha,
                             beta=beta,
                             broadcast=1)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"],
                                       alpha * np.dot(A, B) + beta * C)
예제 #3
0
    def test_relu_graph(self):
        X = np.random.randn(3, 2).astype(np.float32)
        Y_ref = np.clip(X, 0, np.inf)

        node_def = make_node(
            "Relu", ["X"], ["Y"])
        output = c2.run_node(
            node_def, {"X": X})
        np.testing.assert_almost_equal(output.Y, Y_ref)

        graph_def = make_graph(
            [node_def],
            name="test",
            inputs=[make_tensor_value_info("X", onnx.TensorProto.FLOAT, [3, 2])],
            outputs=[make_tensor_value_info("Y", onnx.TensorProto.FLOAT, [3, 2])])
        c2_rep = c2.prepare(make_model(graph_def, producer_name='caffe2-ref-test'))
        output = c2_rep.run(X)
        np.testing.assert_almost_equal(output.Y, Y_ref)
예제 #4
0
    def test_relu_graph(self):
        X = np.random.randn(3, 2).astype(np.float32)
        Y_ref = np.clip(X, 0, np.inf)

        node_def = make_node(
            "Relu", ["X"], ["Y"])
        output = c2.run_node(
            node_def, {"X": X})
        np.testing.assert_almost_equal(output.Y, Y_ref)

        graph_def = make_graph(
            [node_def],
            name="test",
            inputs=[make_tensor_value_info("X", onnx.TensorProto.FLOAT, [3, 2])],
            outputs=[make_tensor_value_info("Y", onnx.TensorProto.FLOAT, [3, 2])])
        c2_rep = c2.prepare(make_model(graph_def, producer_name='caffe2-ref-test'))
        output = c2_rep.run(X)
        np.testing.assert_almost_equal(output.Y, Y_ref)
예제 #5
0
 def _test_relu_graph(self, X, batch_size, trt_max_batch_size):
     node_def = make_node("Relu", ["X"], ["Y"])
     Y_c2 = c2.run_node(node_def, {"X": X})
     graph_def = make_graph(
         [node_def],
         name="test",
         inputs=[make_tensor_value_info("X", onnx.TensorProto.FLOAT, [batch_size, 1, 3, 2])],
         outputs=[make_tensor_value_info("Y", onnx.TensorProto.FLOAT, [batch_size, 1, 3, 2])])
     model_def = make_model(graph_def, producer_name='relu-test')
     op_outputs = [x.name for x in model_def.graph.output]
     op = convert_onnx_model_to_trt_op(model_def, max_batch_size=trt_max_batch_size)
     device_option = core.DeviceOption(caffe2_pb2.CUDA, 0)
     op.device_option.CopyFrom(device_option)
     Y_trt = None
     ws = Workspace()
     with core.DeviceScope(device_option):
         ws.FeedBlob("X", X)
         ws.RunOperatorsOnce([op])
         output_values = [ws.FetchBlob(name) for name in op_outputs]
         Y_trt = namedtupledict('Outputs', op_outputs)(*output_values)
     np.testing.assert_almost_equal(Y_c2, Y_trt)
예제 #6
0
    def test_gemm(self):
        # simple
        A = np.random.randn(3, 2).astype(np.float32)
        B = np.random.randn(2, 4).astype(np.float32)
        C = np.random.randn(3, 4).astype(np.float32)
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"])
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"], np.dot(A, B) + C)

        # transA
        A = np.transpose(A)
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"], transA=1)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"],
                                       np.dot(np.transpose(A), B) + C)
        # revert A
        A = np.transpose(A)

        # transB
        B = np.transpose(B)
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"], transB=1)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"],
                                       np.dot(A, np.transpose(B)) + C)
        # revert B
        B = np.transpose(B)

        # scale
        alpha = np.random.random()
        beta = np.random.random()
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"],
                             alpha=alpha,
                             beta=beta)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"],
                                       alpha * np.dot(A, B) + beta * C)

        # setup broadcastable C
        C = np.random.randn(4).astype(np.float32)

        # broadcast for opset7
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"],
                             alpha=alpha,
                             beta=beta)
        output = c2.run_node(node_def, [A, B, C], opset_version=7)
        np.testing.assert_almost_equal(output["Y"],
                                       alpha * np.dot(A, B) + beta * C)
        # broadcast for opset3 and 6
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"],
                             alpha=alpha,
                             beta=beta,
                             broadcast=1)
        output = c2.run_node(node_def, [A, B, C], opset_version=6)
        np.testing.assert_almost_equal(output["Y"],
                                       alpha * np.dot(A, B) + beta * C)

        # transB
        B = np.transpose(B)

        # transB and broadcast for opset7
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"],
                             alpha=alpha,
                             beta=beta,
                             transB=1)
        output = c2.run_node(node_def, [A, B, C], opset_version=7)
        np.testing.assert_almost_equal(
            output["Y"],
            alpha * np.dot(A, np.transpose(B)) + beta * C)
        # transB and broadcast for opset3 and 6
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"],
                             alpha=alpha,
                             beta=beta,
                             broadcast=1,
                             transB=1)
        output = c2.run_node(node_def, [A, B, C], opset_version=6)
        np.testing.assert_almost_equal(
            output["Y"],
            alpha * np.dot(A, np.transpose(B)) + beta * C)

        # revert B
        B = np.transpose(B)
        # set a scalar to C
        C = np.random.randn(1).astype(np.float32)

        # scalar broadcast for opset7
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"],
                             alpha=alpha,
                             beta=beta)
        output = c2.run_node(node_def, [A, B, C], opset_version=7)
        np.testing.assert_almost_equal(output["Y"],
                                       alpha * np.dot(A, B) + beta * C)
        # scalar broadcast for opset3 and 6
        node_def = make_node('Gemm', ['A', 'B', 'C'], ["Y"],
                             alpha=alpha,
                             beta=beta,
                             broadcast=1)
        output = c2.run_node(node_def, [A, B, C], opset_version=6)
        np.testing.assert_almost_equal(output["Y"],
                                       alpha * np.dot(A, B) + beta * C)
예제 #7
0
    def test_gemm(self):
        # simple
        A = np.random.randn(3, 2).astype(np.float32)
        B = np.random.randn(2, 4).astype(np.float32)
        C = np.random.randn(3, 4).astype(np.float32)
        node_def = make_node(
            'Gemm',
            ['A', 'B', 'C'],
            ["Y"])
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(output["Y"], np.dot(A, B) + C)

        # transA
        A = np.transpose(A)
        node_def = make_node(
            'Gemm',
            ['A', 'B', 'C'],
            ["Y"],
            transA=True)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(
            output["Y"],
            np.dot(np.transpose(A), B) + C)
        # revert A
        A = np.transpose(A)

        # transB
        B = np.transpose(B)
        node_def = make_node(
            'Gemm',
            ['A', 'B', 'C'],
            ["Y"],
            transB=True)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(
            output["Y"],
            np.dot(A, np.transpose(B)) + C)
        # revert A
        B = np.transpose(B)

        # scale
        alpha = np.random.random()
        beta = np.random.random()
        node_def = make_node(
            'Gemm',
            ['A', 'B', 'C'],
            ["Y"],
            alpha=alpha,
            beta=beta)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(
            output["Y"],
            alpha * np.dot(A, B) + beta * C)

        # broadcast
        C = np.random.randn(4).astype(np.float32)
        node_def = make_node(
            'Gemm',
            ['A', 'B', 'C'],
            ["Y"],
            alpha=alpha,
            beta=beta,
            broadcast=1)
        output = c2.run_node(node_def, [A, B, C])
        np.testing.assert_almost_equal(
            output["Y"],
            alpha * np.dot(A, B) + beta * C)