yalue/onnxruntime_go
A Go (golang) library wrapping microsoft/onnxruntime.
解決する問題
アプリケーションから ONNX ニューラルネットワークを実行したい Go 開発者は課題に直面しています。公式の ONNX Runtime ライブラリは主に C および C++ API を提供しており、既存の Go ラッパーは MSVC コンパイラに依存しているため、Windows では失敗することがよくあります。Go の cgo は Windows では Mingw を必要とします。このライブラリは、ONNX Runtime 共有ライブラリを実行時にロードすることで、その摩擦を排除します。そのため、同じ Go コードが Windows、Linux、macOS、ARM64 システムで ONNX モデルをロードして実行でき、ONNX Runtime ソースコードに対してコンパイルする必要はありません。
仕組み
このラッパーは Go のグルーコードにのみ cgo を使用し、ONNX Runtime に直接リンクしません。代わりに、SetSharedLibraryPath を呼び出して、現在のプラットフォームに適した onnxruntime.so、.dll、または .dylib を指定し、ONNX C API ヘッダーを使用してその共有ライブラリから関数を手動でロードします。このアプローチにより、Windows で動作し、すべてのプラットフォームで同じパターンを維持します。また、このライブラリは Go のジェネリクスを活用して型付きテンソル(NewTensor、NewEmptyTensor)を定義しているため、float32 などの一般的なデータ型を追加の変換なしで使用できます。セッションは NewAdvancedSession で作成し、入力および出力テンソル名と事前割り当てされたテンソルを指定します。Run() を呼び出すとネットワークが実行され、出力テンソルが更新されます。迅速な反復のために、DynamicAdvancedSession もあり、セッション作成時ではなく Run() 時にテンソルを提供できます。
対象読者
ONNX ニューラルネットワーク推論をアプリケーションに統合したい Go 開発者、特に Windows を含む複数のオペレーティングシステムを対象とする開発者向けです。また、特定の ONNX Runtime バージョンを扱う必要があり、シンプルでバージョン固定のセットアップを希望するチームにも適しています。このライブラリは小さなスクリプトに十分シンプルですが、基盤となる ONNX Runtime ビルドに含まれている場合、CUDA、TensorRT、CoreML などの高度な実行プロバイダーもサポートします。
ハイライト
- クロスプラットフォームサポート:リンクではなく実行時に共有ライブラリをロードすることで、Windows、Linux、macOS、ARM64 で動作します。
- ジェネリクスベースのテンソル:
NewTensorとNewEmptyTensorは Go のジェネリクスを使用するため、一般的なデータ型にネイティブの Go スライスをボイラープレートなしで使用できます。 - パフォーマンスのための事前割り当てテンソル:入力および出力テンソルを一度作成し、複数の
Run()呼び出しで再利用して、わずかな速度向上を実現します。 - 実行プロバイダーサポート:CUDA、TensorRT、CoreML との互換性が確認されており、ライブラリに含まれていない場合、アクセラレータテストを自動的にスキップするテストがあります。
- バージョン管理:プロジェクトは ONNX Runtime 1.31.0 に固定され、ヘッダーファイルと共有ライブラリを置き換えることで簡単なアップグレードパスを提供します。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト