Skip to content
This repository was archived by the owner on Jan 13, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions _doc/examples/plot_experimental.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
"""
.. _l-example-experimental:

Compares implementation of stanard function
===========================================

The following function benchmark different implementation
of standard function.



.. contents::
:local:

Einsum
++++++
"""
import numpy
import pandas
import matplotlib.pyplot as plt
from tqdm import tqdm
from cpyquickhelper.numbers.speed_measure import measure_time
from mlprodict.testing.experimental_c import custom_einsum_double
from onnxruntime import InferenceSession
from skl2onnx.algebra.onnx_ops import OnnxEinsum
from skl2onnx.common.data_types import DoubleTensorType
import onnx


def build_ort_einsum(equation, op_version=12):
node = OnnxEinsum('x', 'y', equation=equation,
op_version=op_version,
output_names=['z'])
onx = node.to_onnx(inputs=[('x', DoubleTensorType()), ('y', DoubleTensorType())],
target_opset=op_version)
sess = InferenceSession(onx.SerializeToString())
return lambda x, y: sess.run(None, {'x': x, 'y': y})


equation = "bsnh,btnh->bnts"
ort_einsum = build_ort_einsum(equation)
res = []
for dim in tqdm([8, 16, 32, 64, 128, 256, 512]):
x = numpy.random.rand(1, dim, 12, 64)
y = numpy.random.rand(1, dim, 12, 64)

ort_einsum(x, y)

ctx = dict(equation=equation, x=x, y=y, einsum=numpy.einsum)
obs = measure_time("einsum(equation, x, y)", div_by_number=True, context=ctx,
repeat=5, number=5)
obs['dim'] = dim
obs['fct'] = 'numpy.einsum'
res.append(obs)

ctx['einsum'] = ort_einsum
obs = measure_time("einsum(x, y)", div_by_number=True, context=ctx,
repeat=5, number=5)
obs['dim'] = dim
obs['fct'] = 'ort_einsum'
res.append(obs)

ctx['einsum'] = custom_einsum_double
obs = measure_time("einsum(equation, x, y)", div_by_number=True, context=ctx,
repeat=5, number=5)
obs['dim'] = dim
obs['fct'] = 'custom_einsum_double'
res.append(obs)

df = pandas.DataFrame(res)
df
print(df.T)

###########################################
# Pivot

piv = df.pivot('dim', 'fct', 'average')
piv

###########################################
# Ratios

rs = piv.copy()
rs['custom_einsum_double'] = rs['numpy.einsum'] / rs['custom_einsum_double']
rs['ort_einsum'] = rs['numpy.einsum'] / rs['ort_einsum']
rs['numpy.einsum'] = 1.
rs

###########################################
# Graphs.
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
piv.plot(logx=True, logy=True, ax=ax[0], title="Einsum benchmark")
rs.plot(logx=True, ax=ax[1], title="Einsum Speedup, baseline=numpy")
plt.show()
1 change: 1 addition & 0 deletions _doc/sphinxdoc/source/api/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ API
sklapi
asv
validation
testing
tools
17 changes: 17 additions & 0 deletions _doc/sphinxdoc/source/api/testing.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

testing
=======

.. contents::
:local:

Experimental
++++++++++++

Experimental implementations for algorithm.

.. autosignature:: mlprodict.testing.experimental.custom_einsum

.. autosignature:: mlprodict.testing.experimental_c.custom_einsum_double

.. autosignature:: mlprodict.testing.experimental.custom_pad
2 changes: 1 addition & 1 deletion _unittests/ut__skl2onnx/test_sklearn_cast_transformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
import unittest
import math
import numpy
from onnxruntime import InferenceSession
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeRegressor
from onnxruntime import InferenceSession
from skl2onnx.sklapi import CastTransformer
from skl2onnx import convert_sklearn, to_onnx
from skl2onnx.common.data_types import (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
"""
import unittest
import numpy as np
from sklearn.datasets import load_iris
from sklearn.mixture import GaussianMixture, BayesianGaussianMixture
from onnxruntime import InferenceSession
from onnxruntime.capi.onnxruntime_pybind11_state import Fail as OrtFail # pylint: disable=E0611
from sklearn.datasets import load_iris
from sklearn.mixture import GaussianMixture, BayesianGaussianMixture
from skl2onnx import convert_sklearn, to_onnx
from skl2onnx.common.data_types import FloatTensorType
from mlprodict.testing.test_utils import dump_data_and_model, TARGET_OPSET
Expand Down
2 changes: 1 addition & 1 deletion _unittests/ut__skl2onnx/test_sklearn_gaussian_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import numpy as np
import pandas as pd
from numpy.testing import assert_almost_equal
from onnxruntime import __version__ as ort_version
from sklearn.datasets import load_iris
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import (
Expand All @@ -18,7 +19,6 @@
from pyquickhelper.texthelper import compare_module_version
from skl2onnx.common.data_types import FloatTensorType, DoubleTensorType
from skl2onnx import to_onnx, __version__ as skl2_vers
from onnxruntime import __version__ as ort_version
from mlprodict.onnxrt import OnnxInference
from mlprodict.testing.test_utils import (
dump_data_and_model, fit_regression_model, TARGET_OPSET)
Expand Down
2 changes: 1 addition & 1 deletion _unittests/ut__skl2onnx/test_sklearn_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import numpy
from numpy.testing import assert_almost_equal
import pandas
from onnxruntime import __version__ as ort_version, InferenceSession
from sklearn import __version__ as sklearn_version
from sklearn import datasets
from sklearn.compose import ColumnTransformer
Expand All @@ -23,7 +24,6 @@
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import (
FloatTensorType, Int64TensorType, StringTensorType)
from onnxruntime import __version__ as ort_version, InferenceSession
from mlprodict.testing.test_utils import (
dump_data_and_model, fit_classification_model)

Expand Down
2 changes: 1 addition & 1 deletion _unittests/ut_documentation/test_run_notebooks_onnx_sbs.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"""
import os
import unittest
from onnxruntime import __version__ as ort_version
from sklearn.exceptions import ConvergenceWarning
try:
from sklearn.utils._testing import ignore_warnings
Expand All @@ -16,7 +17,6 @@
add_missing_development_version, ExtTestCase
)
from skl2onnx import __version__ as skl2onnx_version
from onnxruntime import __version__ as ort_version
import mlprodict


Expand Down
2 changes: 1 addition & 1 deletion _unittests/ut_onnx_conv/test_onnx_conv_knn.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import numpy
from pandas import DataFrame
from scipy.spatial.distance import cdist as scipy_cdist
from onnxruntime.capi.onnxruntime_pybind11_state import InvalidArgument as OrtInvalidArgument # pylint: disable=E0611
from pyquickhelper.pycode import ExtTestCase
from sklearn.calibration import CalibratedClassifierCV
from sklearn.datasets import load_iris, make_regression
Expand All @@ -24,7 +25,6 @@
from skl2onnx.common.data_types import Int64TensorType
import skl2onnx
from skl2onnx.algebra.complex_functions import onnx_cdist
from onnxruntime.capi.onnxruntime_pybind11_state import InvalidArgument as OrtInvalidArgument # pylint: disable=E0611
from mlprodict.onnx_conv import (
register_converters, to_onnx)
from mlprodict.onnxrt import OnnxInference
Expand Down
2 changes: 1 addition & 1 deletion _unittests/ut_onnxrt/test_onnxrt_side_by_side.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
from logging import getLogger
import numpy
import pandas
from onnxruntime import __version__ as ort_version
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as CK, Sum
from pyquickhelper.pycode import ExtTestCase
from pyquickhelper.texthelper.version_helper import compare_module_version
from onnxruntime import __version__ as ort_version
from skl2onnx.common.data_types import FloatTensorType
try:
from skl2onnx.operator_converters.gaussian_process import convert_kernel
Expand Down
2 changes: 1 addition & 1 deletion _unittests/ut_onnxrt/test_onnxrt_validate_bug.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import unittest
import numpy
import onnx
from onnxruntime import InferenceSession
from pyquickhelper.pycode import ExtTestCase
from skl2onnx.algebra.onnx_ops import OnnxAdd, OnnxMatMul # pylint: disable=E0611
from onnxruntime import InferenceSession
from mlprodict.onnxrt import OnnxInference
from mlprodict.tools import get_opset_number_from_onnx

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import unittest
from logging import getLogger
import numpy
from onnxruntime import __version__ as ort_version
from pyquickhelper.loghelper import fLOG
from pyquickhelper.pycode import ExtTestCase, skipif_circleci
from pyquickhelper.texthelper.version_helper import compare_module_version
Expand All @@ -16,7 +17,6 @@
from sklearn.gaussian_process.kernels import RBF, ExpSineSquared
from skl2onnx import __version__ as skl2onnx_version
from skl2onnx.common.data_types import FloatTensorType
from onnxruntime import __version__ as ort_version
from mlprodict.onnxrt.validate import enumerate_validated_operator_opsets
from mlprodict.onnxrt import OnnxInference
from mlprodict.tools.asv_options_helper import get_ir_version_from_onnx
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"""
import unittest
from logging import getLogger
from onnxruntime import __version__ as ort_version
from pyquickhelper.loghelper import fLOG
from pyquickhelper.pycode import ExtTestCase, skipif_circleci
from pyquickhelper.texthelper.version_helper import compare_module_version
Expand All @@ -12,7 +13,6 @@
except ImportError:
from sklearn.utils.testing import ignore_warnings
from skl2onnx import __version__ as skl2onnx_version
from onnxruntime import __version__ as ort_version
from mlprodict.onnxrt.validate import enumerate_validated_operator_opsets


Expand Down
Loading