20210105のTensorFlowに関する記事は2件です。

MacでCoral USB Acceleratorを動かす

Edge TPUで推論

イントロ

Coral USB AcceleratorはUSB 3.0のポートに挿す事で機械学習処理の推論処理をオフロードできるアクセラレーターです。

Google Reserachにより提供されており、DesktopCPU比でも10倍程度の速度向上が見込めるのでM1 Macを持っていなくても機械学習の推論処理を高速化できます。

初期はDebian系のOSしかサポートしていなかったのですが、既存モデルを使うだけならMacやWindowsでも動くようになっており、手元のMacで動かしてみます。

unnamed.jpg

基本

公式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)

grace_hopper_processed.jpg

$ 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

segmentation_result.jpg

所感

似たようなアクセラレーターとしてIntelのNeural Compute Stick 2があります. そちらはラズパイのような組み込み用のCPU比だと十分速度向上が見込めるようなのですが、Desktop CPU比だと負けるという話もあります。またNCS2で使用するのはマイナーなOpenVINOというIntel製の機械学習ライブラリー(複数backend選択できるラッパー)です。

一方Coral USB AcceleratorはTFLiteベースなので慣れ親しんだTensorFlowですね。発熱の問題もあるので全ての場合にEdge TPUの方がいいというわけではないのですが、組み込みでない汎用PC向けのアクセラレーターとしてはCoralの方が向いている気はしました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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の将来を形作るために、SIGsWorking Groupsに参加することができます。

貢献ガイドを参考にしてください。

ONNXの仕様に追加すべき演算子がある場合はこのドキュメントをご覧になってください。

議論をする

Issuesを開くか、Slackを使ってリアルタイムで議論することをお勧めします。

フォローしてください

ONNXの最新情報をお届けします。
Facebook
Twitter

インスタレーション

バイナリー

ONNXのバイナリビルドはCondaconda-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-liteNAMES protobuf-lite になります。

また、Linux ベースのインストールには onnx-dev docker image を使用することで、依存関係のバージョン管理を気にすることなくインストールすることができます。

テスト中

ONNXでは、テストドライバとしてpytestを使用しています。テストを実行するためには、まずpytestをインストールする必要があります。

pip install pytest nbval

pytestをインストールしたら、以下のコマンドでテストを実行してください。

pytest

開発

使い方は 投稿者ガイド をチェックしてください。

ライセンス

MITライセンス

行動規範

ONNXオープンソース行動規範

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む