Skip to main content

ONNXRuntime Extensions

Project description

Introduction

ONNXRuntime Extensions is a comprehensive package to extend the capability of the ONNX conversion and inference.

  1. The CustomOp C++ library for ONNX Runtime on ONNXRuntime CustomOp API.
  2. Support PyOp feature to implement the custom op with a Python function.
  3. Build all-in-one ONNX model from the pre/post processing code, go to docs/pre_post_processing.md for details.
  4. Support Python per operator debugging, checking hook_model_op in onnxruntime_extensions Python package.

Quick Start

The following code shows how to run ONNX model and ONNXRuntime customop more straightforwardly.

import numpy
from onnxruntime_extensions import PyOrtFunction, VectorToString
# <ProjectDir>/tutorials/data/gpt-2/gpt2_tok.onnx
encode = PyOrtFunction.from_model('gpt2_tok.onnx')
# https://github.com/onnx/models/blob/master/text/machine_comprehension/gpt-2/model/gpt2-lm-head-10.onnx
gpt2_core = PyOrtFunction.from_model('gpt2-lm-head-10.onnx')
decode = PyOrtFunction.from_customop(VectorToString, map={' a': [257]}, unk='<unknown>')

input_text = ['It is very cool to have']
output, *_ = gpt2_core(input_ids)
next_id = numpy.argmax(output[:, :, -1, :], axis=-1)
print(input_text[0] + decode(next_id).item())

This is a simplified version of GPT-2 inference for the demonstration only, The comprehensive solution on the GPT-2 model and its deviants are under development, and here is the link to the experimental.

Android/iOS

The previous processing python code can be translated into all-in-one model to be run in Android/iOS mobile platform, without any Python runtime and the 3rd-party dependencies requirement. Here is the tutorial

CustomOp Conversion

The mainstream ONNX converters support the custom op generation if there is the operation from the original framework cannot be interpreted as ONNX standard operators. Check the following two examples on how to do this.

  1. CustomOp conversion by pytorch.onnx.exporter
  2. CustomOp conversion by tf2onnx

Inference with CustomOp library

The CustomOp library was written with C++, so that it supports run the model in the native binaries. The following is the example of C++ version.

  // The line loads the customop library into ONNXRuntime engine to load the ONNX model with the custom op
  Ort::ThrowOnError(Ort::GetApi().RegisterCustomOpsLibrary((OrtSessionOptions*)session_options, custom_op_library_filename, &handle));

  // The regular ONNXRuntime invoking to run the model.
  Ort::Session session(env, model_uri, session_options);
  RunSession(session, inputs, outputs);

Of course, with Python language, the thing becomes much easier since PyOrtFunction will directly translate the ONNX model into a python function. But if the ONNXRuntime Custom Python API want to be used, the inference process will be

import onnxruntime as _ort
from onnxruntime_extensions import get_library_path as _lib_path

so = _ort.SessionOptions()
so.register_custom_ops_library(_lib_path())

# Run the ONNXRuntime Session.
# sess = _ort.InferenceSession(model, so)
# sess.run (...)

More CustomOp

Welcome to contribute the customop C++ implementation directly in this repository, which will widely benefit other users. Besides C++, if you want to quickly verify the ONNX model with some custom operators with Python language, PyOp will help with that

import numpy
from onnxruntime_extensions import PyOp, onnx_op

# Implement the CustomOp by decorating a function with onnx_op
@onnx_op(op_type="Inverse", inputs=[PyOp.dt_float])
def inverse(x):
    # the user custom op implementation here:
    return numpy.linalg.inv(x)

# Run the model with this custom op
# model_func = PyOrtFunction(model_path)
# outputs = model_func(inputs)
# ...

Build and Development

This project supports Python and can be built from source easily, or a simple cmake build without Python dependency.

Python package

  • Install Visual Studio with C++ development tools on Windows, or gcc for Linux or xcode for MacOS, and cmake on the unix-like platform. (hints: in Windows platform, if cmake bundled in Visual Studio was used, please specify the set VCVARS=%ProgramFiles(x86)%\Microsoft Visual Studio\2019<Edition>\VC\Auxiliary\Build\vcvars64.bat)
  • Prepare Python env and install the pip packages in the requirements.txt.
  • python setup.py install to build and install the package.
  • OR python setup.py develop to install the package in the development mode, which is more friendly for the developer since (re)installation is not needed with every build.

Test:

  • run pytest test in the project root directory.

The share library for non-Python

If only DLL/shared library is needed without any Python dependencies, please run build.bat or bash ./build.sh to build the library. By default the DLL or the library will be generated in the directory out/<OS>/<FLAVOR>. There is a unit test to help verify the build.

The static library and link with ONNXRuntime

For sake of the binary size, the project can be built as a static library and link into ONNXRuntime. Here is the script to this, which is especially usefully on building the mobile release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

onnxruntime_extensions-0.4.0-cp39-cp39-win_amd64.whl (556.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

onnxruntime_extensions-0.4.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

onnxruntime_extensions-0.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (1.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

onnxruntime_extensions-0.4.0-cp38-cp38-win_amd64.whl (556.2 kB view details)

Uploaded CPython 3.8 Windows x86-64

onnxruntime_extensions-0.4.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

onnxruntime_extensions-0.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (1.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

onnxruntime_extensions-0.4.0-cp37-cp37m-win_amd64.whl (557.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

onnxruntime_extensions-0.4.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

onnxruntime_extensions-0.4.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (1.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

onnxruntime_extensions-0.4.0-cp36-cp36m-win_amd64.whl (557.3 kB view details)

Uploaded CPython 3.6m Windows x86-64

onnxruntime_extensions-0.4.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

onnxruntime_extensions-0.4.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl (1.2 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

File details

Details for the file onnxruntime_extensions-0.4.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 a8857693efa1fc54b1fe731af127d66ec3d9f0fddb32a8df8134c21ec8f3fdde
MD5 55e7ee22e58a848bdde8fc9c06b5e62b
BLAKE2b-256 e94d0cf1899143cbe83f5ed03578ad4c346087742980c33f4aad3cbbdf12a7ea

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 2f5017a19fd6cd5b3de54c03240039ee4ca7f054e4b9fe5f621382c1a5cca721
MD5 b3e309bb536d374a2a1a6fddcd5122b9
BLAKE2b-256 cee619d8c384350cd623f37a387e86f0de60ae68b518a2ac6f7d908ecec78b7c

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: onnxruntime_extensions-0.4.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 556.4 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.5

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 257d81750409df5e226f50bb7a1e46f072f1715ac18ded9374003886c93ea4c8
MD5 6851bb68136958e22debee76c75f75ec
BLAKE2b-256 a63d1f0068f4f1507dbf772e7d2e2e636125049a776550bfc174aa47dfc0d4ba

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 62ac310da928dfcd57c51e672745081681fcf78a6cae5d2cb2c43976ee0aed03
MD5 85cf9bd8bd846d283ff9857e54af78f6
BLAKE2b-256 43f6fe1e18716598844b04c24715d062a43a9184089edcecc57d9ccd5c97c7b1

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 880fbeead2361d4661bff178f9e8c8f8cc8e719acc23dc8afbd58b548cd9a535
MD5 f2562b1f8106812e7ea25cd8b7a85dac
BLAKE2b-256 fbae6beccf5b07c4406fc9711dcbcbcf3378874c141fe1791554d02ad91c478f

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: onnxruntime_extensions-0.4.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 556.2 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.5

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 448ae422127369842726d56d46d20998949ce8f878ad4e48751055fa51cf6052
MD5 2512156bb506cab5eb3195f3d2c115b3
BLAKE2b-256 ca12a53c3f5e2993ae58c1b50c2d9656351a465d7b138acebf5a68a74764b434

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 4c92c7319253486b2a4d453d42633d79620ecf38d02c331ab9c1509bed9f742d
MD5 87566f78458450fa2d07a0cf0de2d793
BLAKE2b-256 f1036da2ac92c5c25eb2ceaaeb1c374bf3b8436e257dbd27653450b1e1afa238

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 b42b75fc05f382a475e849ebf9b428596e111716e91764cfca70769e10f981a0
MD5 f232eaa85dba5d7f8cf9dde332e1973b
BLAKE2b-256 b12ce4e73aa949b21ea651a96d75eeba384c138d7ec96dc6277799fc27749f95

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: onnxruntime_extensions-0.4.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 557.3 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.5

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 348a81f9b234b6c6c7684623e8e8d0254c145c64f9a3a47427e93b9f22171bc7
MD5 16e2951bc1a6e4eff72b915d07f84afd
BLAKE2b-256 9b185bf905e1ef8f93a6f352a620ae68ff31e97a7ed55576165e4a9994eee60e

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 e31ab29251eceb23a282d3cdee949108e75ea227cddd4bb12e4dba167488c1d2
MD5 5808ccd35fcd74cc180b3215a501f79c
BLAKE2b-256 98c31a99cf4450e18da98af433b092013aa0981ced27d86fc4732b35b603035d

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 06680bab9afe2eb84cb550ad66980b430d84911b3eb02c0395c1a4f68931203a
MD5 4ad8ca5b330d928e2941585cfd9382cf
BLAKE2b-256 277e68ee24a807c65749a41fea8da6f6ada4b19fbe953a9c9dce144568672ae1

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: onnxruntime_extensions-0.4.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 557.3 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.5

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 00e0f1bc0937a0f81fee35dfe1da7ca0302434d6e3f3f434205ae3df7f3297fc
MD5 83355a6c2f8f6fb991254b1f18c8afa7
BLAKE2b-256 85d484fbee44f1b57f3d67dddf1b9a4c293e19fbd2e12648fe48f6b5f3d16c32

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 20f06ceab60403e9d4d6cb2f220272d732a3aca99fa6f1b845ef1d453957c90b
MD5 34e6351b444097c0c8a03e6757d2f093
BLAKE2b-256 e1efe1256b363b4a20436bf046cfa05559ad8b4a535b7a90085bed19f9745e4d

See more details on using hashes here.

File details

Details for the file onnxruntime_extensions-0.4.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for onnxruntime_extensions-0.4.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 c342886c25c7c86d90ff5c8f9c35cf1e0874b905957b9d3484651db235742108
MD5 3238ef3a08b489a87cc63a78fe38b9e3
BLAKE2b-256 dca2785f3b7e45077fa8172993b8309b265872649da535d8c9678954f2be6db5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page