- 投稿日:2021-01-05T12:14:28+09:00
MacでCoral USB Acceleratorを動かす
Edge TPUで推論
イントロ
Coral USB AcceleratorはUSB 3.0のポートに挿す事で機械学習処理の推論処理をオフロードできるアクセラレーターです。
Google Reserachにより提供されており、DesktopCPU比でも10倍程度の速度向上が見込めるのでM1 Macを持っていなくても機械学習の推論処理を高速化できます。
初期はDebian系のOSしかサポートしていなかったのですが、既存モデルを使うだけならMacやWindowsでも動くようになっており、手元のMacで動かしてみます。
基本
公式docに従ってサンプルを動かしていきます。
https://coral.ai/docs/accelerator/get-started/Edge TPU Runtimeのインストール
curl -O https://dl.google.com/coral/edgetpu_api/edgetpu_runtime_20201204.zip unzip edgetpu_runtime_20201204.zip cd edgetpu_runtime sudo bash install.sh cd ..pathにEdge TPU Runtimeのlocationを追加。shellを再起動
# ~/.bashrcに追加 # libedgetpu.1.dylibの読み込み export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATHアクセラレーターをUSBポートに挿します。
TnesorFlowのインストール
# virtualenvの作成. 3.8系はサポートしていない pyenv local 3.7.4 python -m venv coral_accelerator source coral_accelerator/bin/activate pip install --upgrade pip pip install tensorflow pip install https://github.com/google-coral/pycoral/releases/download/release-frogfish/tflite_runtime-2.5.0-cp37-cp37m-macosx_10_15_x86_64.whl分類のサンプルを動かします。
mkdir coral && cd coral git clone https://github.com/google-coral/tflite.git bash install_requirements.sh python classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/parrot.jpg----INFERENCE TIME---- Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory. 14.4ms 4.4ms 4.3ms 4.7ms 4.4ms -------RESULTS-------- Ara macao (Scarlet Macaw): 0.77734無事インコをインコとして認識しました。
PyCoralで推論
2020/11の更新でPyCoral APIが発表されています。それに伴いEdge TPU Python libraryの使用は非推奨。
PyCoralも独立したrepositoryがあるのでそのサンプルも動かしてみます。
https://coral.ai/software/#pycoral-api
# macOS 10.15 Python 3.7 pip install https://github.com/google-coral/pycoral/releases/download/release-frogfish/pycoral-1.0.0-cp37-cp37m-macosx_10_15_x86_64.whl git clone --recurse-submodules https://github.com/google-coral/pycoral cd pycoral git submodule init && git submodule update$ python3 examples/detect_image.py --model test_data/ssd_mobilenet_v2_coco_quant_postprocess_edgetpu.tflite --labels test_data/coco_labels.txt --input test_data/grace_hopper.bmp --output ${HOME}/grace_hopper_processed.bmp ----INFERENCE TIME---- Note: The first inference is slow because it includes loading the model into Edge TPU memory. 32.00 ms 14.98 ms 15.08 ms 16.18 ms 16.02 ms -------RESULTS-------- tie id: 31 score: 0.83984375 bbox: BBox(xmin=227, ymin=419, xmax=292, ymax=541) person id: 0 score: 0.8046875 bbox: BBox(xmin=0, ymin=9, xmax=519, ymax=590)$ python3 examples/semantic_segmentation.py \ > --model test_data/deeplabv3_mnv2_pascal_quant_edgetpu.tflite \ > --input test_data/bird.bmp \ > --keep_aspect_ratio \ > --output ${HOME}/segmentation_result.jpg所感
似たようなアクセラレーターとしてIntelのNeural Compute Stick 2があります. そちらはラズパイのような組み込み用のCPU比だと十分速度向上が見込めるようなのですが、Desktop CPU比だと負けるという話もあります。またNCS2で使用するのはマイナーなOpenVINOというIntel製の機械学習ライブラリー(複数backend選択できるラッパー)です。
一方Coral USB AcceleratorはTFLiteベースなので慣れ親しんだTensorFlowですね。発熱の問題もあるので全ての場合にEdge TPUの方がいいというわけではないのですが、組み込みでない汎用PC向けのアクセラレーターとしてはCoralの方が向いている気はしました。
- 投稿日:2021-01-05T11:03:24+09:00
Graph IRの代表例「Open Neural Network Exchange(ONNX)」のREADME.mdを翻訳してみた!
深層学習には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の仕様についてはこちら
ONNXグラフを操作するためのプログラミングユーティリティー
貢献する
ONNXはコミュニティプロジェクトです。この取り組みに参加して、フィードバック、アイデア、コードを投稿することをお勧めします。ONNXの将来を形作るために、SIGsやWorking Groupsに参加することができます。
貢献ガイドを参考にしてください。
ONNXの仕様に追加すべき演算子がある場合はこのドキュメントをご覧になってください。
議論をする
Issuesを開くか、Slackを使ってリアルタイムで議論することをお勧めします。
フォローしてください
ONNXの最新情報をお届けします。
インスタレーション
バイナリー
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 onnxWindowsの場合
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 installARM 64でONNXをビルド
ARM 64デバイス上でONNXを構築する場合は、依存関係を適切にインストールしてください。
pip install cython protobuf numpy sudo apt-get install libprotobuf-dev protobuf-compiler pip install onnxVerify 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 nbvalpytestをインストールしたら、以下のコマンドでテストを実行してください。
pytest開発
使い方は 投稿者ガイド をチェックしてください。
ライセンス
行動規範