深層学習にはPyTorchやTensorFlowなど様々なフレームワークがあります。これらはあくまでもプログラミングの効率化のために存在しているものであり、特定のフレームワークでないと開発出来ないモデルはありません。しかし、開発している途中でフレームワークを変えたくなるときがあります。そのときに役立つのがIR(intermediate representation、中間表現)であり、深層学習向けのIRのことを「Graph IR」と呼びます。
ここでは2019年11月にLinux Foundationの公開プロジェクトとなったOpen Neural Network Exchange(ONNX)フォーマットを取り上げ、そのREADME.mdファイルの日本語翻訳を行います。これは、Graph IRの代表例であり、米MicrosoftとFacebookによって開発され、2017年に公開されました。多くの深層学習フレームワークがONNXに対応しています。
Open Neural Network Exchange(ONNX)のREADME.mdの日本語翻訳はこちら
Open Neural Network Exchange (ONNX) は、AI開発者を支援するオープンなエコシステムです。
は、プロジェクトの進化に合わせて適切なツールを選択することができます。ONNXは,ディープラーニングと従来のMLの両方のAIモデルのためのオープンソース・フォーマットを提供します.拡張可能な計算グラフモデルを定義しており,組み込み演算子や標準的なデータ型を使用しています。現在は推論(スコアリング)に必要な機能に注目しています。
ONNXは広くサポートされているし、多くのフレームワーク、ツール、ハードウェアに搭載されています。異なるフレームワーク間の相互運用性を可能にし、研究から生産までのパスを合理化することは、AIコミュニティにおけるイノベーションのスピードアップに役立ちます。コミュニティの皆様にもご参加いただき、ONNXをさらに進化させていきましょう。
ONNXを利用する
ONNXの仕様についてはこちら
- [概要] (docs/Overview.md)
- ONNX中間表現仕様
- 仕様のバージョン管理原則
- オペレータの説明書
- Python API Overview
ONNXグラフを操作するためのプログラミングユーティリティー
貢献する
ONNXはコミュニティプロジェクトです。この取り組みに参加して、フィードバック、アイデア、コードを投稿することをお勧めします。ONNXの将来を形作るために、SIGsやWorking Groupsに参加することができます。
貢献ガイドを参考にしてください。
ONNXの仕様に追加すべき演算子がある場合はこのドキュメントをご覧になってください。
議論をする
Issuesを開くか、Slackを使ってリアルタイムで議論することをお勧めします。
フォローしてください
ONNXの最新情報をお届けします。
Facebook
Twitter
インスタレーション
バイナリー
ONNXのバイナリビルドはConda、conda-forgeから入手可能です。
conda install -c conda-forge onnx
ソース
Linux と MacOS
ONNXを構築するにはProtobufとNumPyのインストールが必要です。 簡単なこれらの依存関係を解決する方法はアナコンダを使うことです。
# デフォルトではprotocが付属していないので、conda-forgeのprotobufを使用します。
conda install -c conda-forge protobuf numpy
これでPyPiからONNXをインストールすることができます(注: onnx-mlには環境変数 ONNX_ML=1
を設定してください)。
pip install onnx
また、ソースコードからローカルにONNXをビルドしてインストールすることもできます。
git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
python setup.py install
注意:Anaconda 以外の環境でインストールする場合は、onnx の pip インストールを実行する前に Protobuf コンパイラをインストールするようにしてください。例えばUbuntuでは
sudo apt-get install protobuf-compiler libprotoc-dev
pip install onnx
Windowsの場合
Windows上でソースからONNXをビルドする場合は、Protobufもスタティックライブラリとしてローカルにビルドすることをお勧めします。conda-forgeで配布されているバージョンはDLLであり、ONNXではスタティックライブラリであることを期待しているため、これは競合します。
WindowsでProtobufとONNXをビルドする
ステップ1:Protobufをローカルに構築する
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git checkout 3.9.x
cd cmake
# Explicitly set -Dprotobuf_MSVC_STATIC_RUNTIME=OFF to make sure protobuf does not statically link to runtime library
cmake -G "Visual Studio 15 2017 Win64" -Dprotobuf_MSVC_STATIC_RUNTIME=OFF -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_EXAMPLES=OFF -DCMAKE_INSTALL_PREFIX=<protobuf_install_dir>
msbuild protobuf.sln /m /p:Configuration=Release
msbuild INSTALL.vcxproj /p:Configuration=Release
ステップ2:ONNXの構築
# Get ONNX
git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
# Set environment variables to find protobuf and turn off static linking of ONNX to runtime library.
# Even better option is to add it to user\system PATH so this step can be performed only once.
# For more details check https://docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library?view=vs-2017
set PATH=<protobuf_install_dir>\bin;%PATH%
set USE_MSVC_STATIC_RUNTIME=0
# Optional: Set environment variable `ONNX_ML=1` for onnx-ml
# Build ONNX
python setup.py install
ソースからProtobufをビルドするのではなく、conda-forgeからProtobufを使用したい場合は、以下の手順を使用することができます。
WindowsでAnacondaでONNXをビルドする
# Use conda-forge protobuf
conda install -c conda-forge numpy libprotobuf=3.11.3 protobuf
# Get ONNX
git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
# Set environment variable for ONNX to use protobuf shared lib
set USE_MSVC_STATIC_RUNTIME=0
set CMAKE_ARGS="-DONNX_USE_PROTOBUF_SHARED_LIBS=ON -DProtobuf_USE_STATIC_LIBS=OFF -DONNX_USE_LITE_PROTO=ON"
# Build ONNX
# Optional: Set environment variable `ONNX_ML=1` for onnx-ml
python setup.py install
ARM 64でONNXをビルド
ARM 64デバイス上でONNXを構築する場合は、依存関係を適切にインストールしてください。
pip install cython protobuf numpy
sudo apt-get install libprotobuf-dev protobuf-compiler
pip install onnx
Verify Installation
インストール後、以下を実行します。
python -c "import onnx"
をクリックして動作を確認してください。
よくあるエラー
Environment variables: USE_MSVC_STATIC_RUNTIME
(ONでもOFFでもなく、1か0でなければなりません)
CMake variables: ONNX_USE_PROTOBUF_SHARED_LIBS,
Protobuf_USE_STATIC_LIBS`.
ON の場合、ONNX_USE_PROTOBUF_SHARED_LICBS
はOFF、USE_MSVC_STATIC_RUNTIME
は0でなければならない。
ONNX_USE_PROTOBUF_SHARED_LIBS
がOFFの場合は、Protobuf_USE_STATIC_LIBS
をONにし、USE_MSVC_STATIC_RUNTIME
を1または0にする。
ソースのチェックアウトディレクトリから import onnx
コマンドを実行しても動作しないことに注意してください。この場合、ModuleNotFoundError: No module named 'onnx.onnx_cpp2py_export'
と表示されます。別のディレクトリに変更して、このエラーを修正してください。
UbuntuでのONNXのビルドは問題なく動作しますが、CentOS/RHELやその他のManyLinuxシステムでは、CMakeListsファイルを開き、/lib
のインスタンスをすべて/lib64
に置き換える必要があるかもしれません。
デバッグモードでONNXをビルドする場合は、環境変数 DEBUG=1
を設定することを忘れないようにしてください。デバッグ版の依存関係には、CMakeListsファイルを開き、パッケージ名の行の最後に d
を追加する必要がある。例えば、NAMES protobuf-lite
は NAMES protobuf-lite
になります。
また、Linux ベースのインストールには onnx-dev docker image を使用することで、依存関係のバージョン管理を気にすることなくインストールすることができます。
テスト中
ONNXでは、テストドライバとしてpytestを使用しています。テストを実行するためには、まずpytestをインストールする必要があります。
pip install pytest nbval
pytestをインストールしたら、以下のコマンドでテストを実行してください。
pytest
開発
使い方は 投稿者ガイド をチェックしてください。