Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test against onnxruntime 1.16.0 + scikit-learn 1.3.1 #1027

Merged
merged 4 commits into from
Oct 2, 2023
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
35 changes: 24 additions & 11 deletions .azure-pipelines/linux-conda-CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,40 @@ jobs:
strategy:
matrix:

Py311-Onnx140-Rt151-Skl130:
Py311-Onnx141-Rt160-Skl131:
do.bench: '0'
python.version: '3.11' # onnxruntime cannot support python 3.11 yet
numpy.version: '>=1.21.1'
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.14.1' # '-i https://test.pypi.org/simple/ onnx==1.14.0rc3'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.15.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
sklearn.version: '>=1.3.0'
onnxrt.version: 'onnxruntime==1.16.0'
sklearn.version: '>=1.3.1'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
run.example: '1'

Py311-Onnx140-Rt151-Skl130:
do.bench: '0'
python.version: '3.11' # onnxruntime cannot support python 3.11 yet
numpy.version: '>=1.21.1'
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.14.0' # '-i https://test.pypi.org/simple/ onnx==1.14.0rc3'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.15.1'
sklearn.version: '==1.3.0'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
run.example: '0'

Py310-Onnx140-Rt140-Skl122:
do.bench: '0'
python.version: '3.10' # onnxruntime cannot support python 3.11 yet
numpy.version: '>=1.21.1'
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.14.1' # '-i https://test.pypi.org/simple/ onnx==1.14.0rc3'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.14.0' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.14.0'
sklearn.version: '==1.2.2'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
Expand All @@ -47,7 +60,7 @@ jobs:
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.13.0' #'-i https://test.pypi.org/simple/ onnx==1.13.0rc1'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.14.0' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.14.0'
sklearn.version: '==1.2.1'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
Expand All @@ -60,7 +73,7 @@ jobs:
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.13.0' #'-i https://test.pypi.org/simple/ onnx==1.13.0rc1'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.13.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.13.1'
sklearn.version: '==1.2.0'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
Expand All @@ -73,7 +86,7 @@ jobs:
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.12.0' #'-i https://test.pypi.org/simple/ onnx==1.12.0rc4'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.13.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.13.1'
sklearn.version: '==1.2.0'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
Expand All @@ -85,7 +98,7 @@ jobs:
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.12.0' #'-i https://test.pypi.org/simple/ onnx==1.12.0rc4'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.12.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.12.1'
sklearn.version: '==1.1.3'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
Expand All @@ -97,7 +110,7 @@ jobs:
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.12.0' #'-i https://test.pypi.org/simple/ onnx==1.12.0rc4'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.11.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.11.1'
sklearn.version: '==1.1.3'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
Expand All @@ -109,7 +122,7 @@ jobs:
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.11.0' # '-i https://test.pypi.org/simple/ onnx==1.11.0rc2'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.11.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.11.1'
sklearn.version: '==1.1.3'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
Expand All @@ -121,7 +134,7 @@ jobs:
scipy.version: '>=1.7.0'
onnx.version: 'onnx==1.11.0' # '-i https://test.pypi.org/simple/ onnx==1.11.0rc2'
onnx.target_opset: ''
onnxrt.version: 'onnxruntime==1.11.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.11.1'
sklearn.version: '==1.0.2'
lgbm.version: ''
onnxcc.version: '>=1.8.1' # git
Expand Down
31 changes: 20 additions & 11 deletions .azure-pipelines/win32-conda-CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,31 @@ jobs:
vmImage: 'windows-latest'
strategy:
matrix:
Py310-Onnx140-Rt151-Skl130:
Py310-Onnx141-Rt160-Skl131:
python.version: '3.11' # onnxruntime cannot support python 3.11 yet
onnx.version: 'onnx==1.14.1' # '-i https://test.pypi.org/simple/ onnx==1.14.0rc3'
onnx.target_opset: ''
numpy.version: 'numpy>=1.22.3'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.15.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.16.0'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '>=1.3.1'
Py310-Onnx140-Rt151-Skl130:
python.version: '3.11' # onnxruntime cannot support python 3.11 yet
onnx.version: 'onnx==1.14.0' # '-i https://test.pypi.org/simple/ onnx==1.14.0rc3'
onnx.target_opset: ''
numpy.version: 'numpy>=1.22.3'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.15.1'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '>=1.3.0'
sklearn.version: '==1.3.0'
Py310-Onnx140-Rt140-Skl122:
python.version: '3.10' # onnxruntime cannot support python 3.11 yet
onnx.version: 'onnx==1.14.1' # '-i https://test.pypi.org/simple/ onnx==1.14.0rc3'
onnx.target_opset: ''
numpy.version: 'numpy>=1.22.3'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.14.0' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.14.0'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '==1.2.2'
Py310-Onnx130-Rt140-Skl121:
Expand All @@ -37,7 +46,7 @@ jobs:
onnx.target_opset: ''
numpy.version: 'numpy>=1.22.3'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.14.0' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.14.0'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '==1.2.2'
Py310-Onnx130-Rt131-Skl120:
Expand All @@ -46,7 +55,7 @@ jobs:
onnx.target_opset: ''
numpy.version: 'numpy>=1.22.3'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.13.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.13.1'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '==1.2.0'
Py310-Onnx120-Rt131-Skl120:
Expand All @@ -55,7 +64,7 @@ jobs:
onnx.target_opset: ''
numpy.version: 'numpy>=1.22.3'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.13.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.13.1'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '==1.2.0'
Py310-Onnx120-Rt120-Skl11:
Expand All @@ -64,7 +73,7 @@ jobs:
onnx.target_opset: ''
numpy.version: 'numpy>=1.22.3'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.12.0' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.12.0'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '==1.1.3'
Py39-Onnx120-Rt1111-Skl11:
Expand All @@ -73,7 +82,7 @@ jobs:
onnx.target_opset: ''
numpy.version: 'numpy>=1.22.3'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.11.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.11.1'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '==1.1.3'
Py39-Onnx1110-Rt1111-Skl11:
Expand All @@ -82,7 +91,7 @@ jobs:
onnx.target_opset: ''
numpy.version: 'numpy>=1.22.3'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.11.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.11.1'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '==1.1.3'
Py39-Onnx1110-Rt1111-Skl10:
Expand All @@ -91,7 +100,7 @@ jobs:
onnx.target_opset: ''
numpy.version: 'numpy==1.23.5'
scipy.version: 'scipy'
onnxrt.version: 'onnxruntime==1.11.1' # -i https://test.pypi.org/simple/ ort-nightly==1.11.0.dev20220311003
onnxrt.version: 'onnxruntime==1.11.1'
onnxcc.version: 'onnxconverter-common>=1.8.1' # git+https://github.com/microsoft/onnxconverter-common.git
sklearn.version: '==1.0.2'
Py39-Onnx1110-Rt1100-Skl10:
Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/plot_wext_pyod_forest.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ def pyod_iforest_converter(scope, operator, container):
expected_labels = model1.predict(data)
expected_proba = model1.predict_proba(data)

sess = InferenceSession(onx.SerializeToString())
sess = InferenceSession(onx.SerializeToString(), providers=["CPUExecutionProvider"])
res = sess.run(None, {"float_input": data})

onx_labels = res[0]
Expand Down
4 changes: 2 additions & 2 deletions skl2onnx/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
"""
Main entry point to the converter from the *scikit-learn* to *onnx*.
"""
__version__ = "1.16.0"
__version__ = "1.16.1"
__author__ = "Microsoft"
__producer__ = "skl2onnx"
__producer_version__ = __version__
__domain__ = "ai.onnx"
__model_version__ = 0
__max_supported_opset__ = 18 # Converters are tested up to this version.
__max_supported_opset__ = 19 # Converters are tested up to this version.


from .convert import convert_sklearn, to_onnx, wrap_as_onnx_mixin # noqa
Expand Down
1 change: 1 addition & 0 deletions skl2onnx/common/_topology.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def _default_OPSET_TO_IR_VERSION():
17: 8,
18: 8,
19: 9,
20: 9,
}


Expand Down
38 changes: 31 additions & 7 deletions skl2onnx/operator_converters/ada_boost.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,30 @@
from .._supported_operators import sklearn_operator_name_map


def _scikit_learn_before_022():
def _scikit_learn_before_any(any_version: str) -> bool:
if ".dev" in __version__:
return pv.Version(__version__.split(".dev")[0]) < pv.Version("0.22")
return pv.Version(__version__.split(".dev")[0]) < pv.Version(any_version)
if ".post" in __version__:
return pv.Version(__version__.split(".post")[0]) < pv.Version("0.22")
return pv.Version(__version__) < pv.Version("0.22")
return pv.Version(__version__.split(".post")[0]) < pv.Version(any_version)
return pv.Version(__version__) < pv.Version(any_version)


def _scikit_learn_before_022() -> bool:
return _scikit_learn_before_any("0.22")


def _scikit_learn_before_131():
return _scikit_learn_before_any("1.3.1")


def _samme_proba(
scope, container, proba_name, weight, zero_name, classes_ind_name, one_name
scope,
container,
proba_name,
weight,
zero_name_or_symmetric,
classes_ind_name,
one_name,
):
weight_name = scope.get_unique_variable_name("weight")
container.add_initializer(weight_name, onnx_proto.TensorProto.FLOAT, [], [weight])
Expand All @@ -64,7 +78,7 @@ def _samme_proba(
max_proba_name = scope.get_unique_variable_name("probsmax")
container.add_node(
"Where",
[equal_name, one_name, zero_name],
[equal_name, one_name, zero_name_or_symmetric],
max_proba_name,
name=scope.get_unique_operator_name("Where"),
)
Expand Down Expand Up @@ -394,6 +408,7 @@ def convert_sklearn_ada_boost_classifier(
zero_name = None
one_name = None
classes_ind_name = None
symmetric_weight = None

proto_dtype = guess_proto_type(operator.inputs[0].type)
proba_type = operator.inputs[0].type.__class__
Expand Down Expand Up @@ -487,12 +502,21 @@ def convert_sklearn_ada_boost_classifier(
),
)

if not _scikit_learn_before_131() and symmetric_weight is None:
symmetric_weight = scope.get_unique_variable_name(
"symmetrix_weight"
)
container.add_initializer(
symmetric_weight, proto_dtype, [1], [-1 / (len(classes) - 1)]
)

cur_proba_name = _samme_proba(
scope,
container,
proba_name.onnx_name,
op.estimator_weights_[i_est],
zero_name,
# See https://github.com/scikit-learn/scikit-learn/pull/26521
zero_name if _scikit_learn_before_131() else symmetric_weight,
classes_ind_name,
one_name,
)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_sklearn_adaboost_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,5 +368,5 @@ def test_ada_boost_regressor_bool(self):


if __name__ == "__main__":
# TestSklearnAdaBoostModels().test_ada_boost_classifier_lr()
TestSklearnAdaBoostModels().test_ada_boost_classifier_samme()
unittest.main(verbosity=2)
6 changes: 5 additions & 1 deletion tests/test_sklearn_one_hot_encoder_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,11 @@ def test_shape_inference(self):
("cat_2", Int64TensorType([None, 1])),
]

model_onnx = convert_sklearn(model, initial_types=initial_type)
model_onnx = convert_sklearn(
model, initial_types=initial_type, target_opset=TARGET_OPSET
)
if TARGET_OPSET < 19:
model_onnx.ir_version = 8

feeds = dict(
[
Expand Down
2 changes: 1 addition & 1 deletion tests/test_sklearn_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -1387,7 +1387,7 @@ def test_feature_vectorizer_double(self):
X_train, X_test, y_train, y_test = train_test_split(X, y)
regr = Pipeline([("std", StandardScaler()), ("reg", LinearRegression())])
regr = regr.fit(X_train, y_train)
onnx_model = to_onnx(regr, X=X_train)
onnx_model = to_onnx(regr, X=X_train, target_opset=TARGET_OPSET)

sess = InferenceSession(
onnx_model.SerializeToString(), providers=["CPUExecutionProvider"]
Expand Down
2 changes: 2 additions & 0 deletions tests/test_utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ def max_onnxruntime_opset():
<https://github.com/microsoft/onnxruntime/blob/main/docs/Versioning.md>`_.
"""
vi = pv.Version(ort_version.split("+")[0])
if vi >= pv.Version("1.16.0"):
return 19
if vi >= pv.Version("1.14.0"):
return 18
if vi >= pv.Version("1.12.0"):
Expand Down
Loading