Skip to main content

ONNXMLTools_logo_main

CI

Introduction

ONNXMLTools enables you to convert models from different machine learning toolkits into ONNX. Currently the following toolkits are supported:

Pytorch has its builtin ONNX exporter check here for details.

Install

You can install latest release of ONNXMLTools from PyPi:

pip install onnxmltools

or install from source:

pip install git+https://github.com/onnx/onnxmltools

If you choose to install onnxmltools from its source code, you must set the environment variable ONNX_ML=1 before installing the onnx package.

Dependencies

This package relies on ONNX, NumPy, and ProtoBuf. If you are converting a model from scikit-learn, Core ML, Keras, LightGBM, SparkML, XGBoost, H2O, CatBoost or LibSVM, you will need an environment with the respective package installed from the list below:

  1. scikit-learn
  2. CoreMLTools (version 3.1 or lower)
  3. Keras (version 2.0.8 or higher) with the corresponding Tensorflow version
  4. LightGBM
  5. SparkML
  6. XGBoost
  7. libsvm
  8. H2O
  9. CatBoost

ONNXMLTools is tested with Python 3.7+.

Examples

If you want the converted ONNX model to be compatible with a certain ONNX version, please specify the target_opset parameter upon invoking the convert function. The following Keras model conversion example demonstrates this below. You can identify the mapping from ONNX Operator Sets (referred to as opsets) to ONNX releases in the versioning documentation.

Keras to ONNX Conversion

Next, we show an example of converting a Keras model into an ONNX model with target_opset=7, which corresponds to ONNX release version 1.2.

import onnxmltools
from keras.layers import Input, Dense, Add
from keras.models import Model

# N: batch size, C: sub-model input dimension, D: final model's input dimension
N, C, D = 2, 3, 3

# Define a sub-model, it will become a part of our final model
sub_input1 = Input(shape=(C,))
sub_mapped1 = Dense(D)(sub_input1)
sub_model1 = Model(inputs=sub_input1, outputs=sub_mapped1)

# Define another sub-model, it will become a part of our final model
sub_input2 = Input(shape=(C,))
sub_mapped2 = Dense(D)(sub_input2)
sub_model2 = Model(inputs=sub_input2, outputs=sub_mapped2)

# Define a model built upon the previous two sub-models
input1 = Input(shape=(D,))
input2 = Input(shape=(D,))
mapped1_2 = sub_model1(input1)
mapped2_2 = sub_model2(input2)
sub_sum = Add()([mapped1_2, mapped2_2])
keras_model = Model(inputs=[input1, input2], outputs=sub_sum)

# Convert it! The target_opset parameter is optional.
onnx_model = onnxmltools.convert_keras(keras_model, target_opset=7)

CoreML to ONNX Conversion

Here is a simple code snippet to convert a Core ML model into an ONNX model.

import onnxmltools
import coremltools

# Load a Core ML model
coreml_model = coremltools.utils.load_spec('example.mlmodel')

# Convert the Core ML model into ONNX
onnx_model = onnxmltools.convert_coreml(coreml_model, 'Example Model')

# Save as protobuf
onnxmltools.utils.save_model(onnx_model, 'example.onnx')

H2O to ONNX Conversion

Below is a code snippet to convert a H2O MOJO model into an ONNX model. The only prerequisite is to have a MOJO model saved on the local file-system.

import onnxmltools

# Convert the Core ML model into ONNX
onnx_model = onnxmltools.convert_h2o('/path/to/h2o/gbm_mojo.zip')

# Save as protobuf
onnxmltools.utils.save_model(onnx_model, 'h2o_gbm.onnx')

Testing model converters

onnxmltools converts models into the ONNX format which can be then used to compute predictions with the backend of your choice.

Checking the operator set version of your converted ONNX model

You can check the operator set of your converted ONNX model using Netron, a viewer for Neural Network models. Alternatively, you could identify your converted model's opset version through the following line of code.

opset_version = onnx_model.opset_import[0].version

If the result from checking your ONNX model's opset is smaller than the target_opset number you specified in the onnxmltools.convert function, be assured that this is likely intended behavior. The ONNXMLTools converter works by converting each operator to the ONNX format individually and finding the corresponding opset version that it was most recently updated in. Once all of the operators are converted, the resultant ONNX model has the maximal opset version of all of its operators.

To illustrate this concretely, let's consider a model with two operators, Abs and Add. As of December 2018, Abs was most recently updated in opset 6, and Add was most recently updated in opset 7. Therefore, the converted ONNX model's opset will always be 7, even if you request target_opset=8. The converter behavior was defined this way to ensure backwards compatibility.

Documentation for the ONNX Model format and more examples for converting models from different frameworks can be found in the ONNX tutorials repository.

Test all existing converters

All converter unit test can generate the original model and converted model to automatically be checked with onnxruntime or onnxruntime-gpu. The unit test cases are all the normal python unit test cases, you can run it with pytest command line, for example:

python -m pytest --ignore .\tests\

It requires onnxruntime, numpy for most models, pandas for transforms related to text features, and scipy for sparse features. One test also requires keras to test a custom operator. That means sklearn or any machine learning library is requested.

Add a new converter

Once the converter is implemented, a unit test is added to confirm that it works. At the end of the unit test, function dump_data_and_model or any equivalent function must be called to dump the expected output and the converted model. Once these file are generated, a corresponding test must be added in tests_backend to compute the prediction with the runtime.

License

Apache License v2.0

Release files for onnxmltools 1.16.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for onnxmltools 1.16.0
File Size Uploaded
onnxmltools-1.16.0.tar.gz 208.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for onnxmltools 1.16.0
File Interpreter ABI Platform
onnxmltools-1.16.0-py3-none-any.whl Python 3 none any Details

Total release size: 512.4 kB

Release files / onnxmltools-1.16.0.tar.gz

Download URL onnxmltools-1.16.0.tar.gz
Size 208.4 kB
Tags Source
SHA-256 checksum
How to use checksums
cd76e0a7ba6a3c4ca4acf3b4c7973cda6a70f2edc146ab11d4efc3dfbee6805a
BLAKE2b-256 checksum
How to use checksums
413e85a40b6e56a8aaa45bffc9eb00f93182b87841b4dc5a4198ea609993e17c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 30, 2026.

Transparency log

Release files / onnxmltools-1.16.0-py3-none-any.whl

Download URL onnxmltools-1.16.0-py3-none-any.whl
Size 304.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7b27196e7dcc0d9de29110f211e7941ad1c71dd97606baa729144d9acd105d3c
BLAKE2b-256 checksum
How to use checksums
fbe66713d9a089a6861b4bf748f02a6238cb2759968aadf672dccef3e960376b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.16.0 This release

2 release files

1.15.0

2 release files

1.14.0

2 release files

1.13.0

2 release files

1.12.0

2 release files

1.11.1

1 release file

1.10.0

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.7.0

1 release file

1.6.1

1 release file

1.6.0

1 release file

1.5.1

1 release file

1.5.0

1 release file

1.4.1

1 release file

1.4.0

1 release file

1.3.2

1 release file

1.3.1

1 release file

1.3.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page