Home

Awesome

Example Applications for the onnxruntime_go Library

This repository contains a collection of (mostly) simple standalone examples using the onnxruntime_go library to run neural-network applications.

Prerequisites

You will need to be using a version of Go with cgo enabled---meaning that on Windows you'll need to have gcc available on your PATH.

If you wish to use hardware acceleration such as CUDA, you'll need to have a compatible version of the onnxruntime library compiled with support for your platform of choice. CoreML should almost always be available on Apple hardware, but other supported acceleration frameworks (e.g., TensorRT or CUDA) may have additional prerequisites, which are documented in the official onnxruntime documentation. Note that not all execution providers supported by onnxruntime itself are supported by onnxruntime_go.

The onnxruntime shared libraries for some common platforms are included under the third_party/ directory in this repository.

Usage

Navigate to any one of the subdirectories, and run go build to produce an executable on your system. Many executables will provide a mechanism for specifying a path to an onnxruntime shared library file. For example:

cd sum_and_difference
go build

# You can specify any version of the onnxruntime library here, but this would
# be the correct library version on 64-bit AMD or Intel Linux systems.
./sum_and_difference --onnxruntime_lib ../third_party/onnxruntime.so

Be aware that different examples may use different mechanisms for locating the correct shared library version.

List of Examples

Contributing and Opening New Issues

PRs with new examples to this repository are welcome. Each example should be in its own subdirectory with its own go.mod file, and include only minimal dependencies (i.e., do not include several hundred megabytes of .onnx files or data). Each example should include a README, be formatted using gofmt, and contain ample comments to serve as a useful example to other users.

Please limit open issues in this repository to bugs with existing examples. Issues are not a place to request help with onnxruntime in general. Such issues will be ignored going forward. If you have not run your .onnx network using the onnxruntime library in python, this is not the place to get help with it. Learning to use onnxruntime in python is easier than in Go, and will give a point of reference that you understand the network you are trying to run, and that your inputs and outputs are correct.

In short, this repository is intended to provide examples for using the onnxruntime_go wrapper in specific. Users are expected to already understand .onnx files and how to use onnxruntime in general.