ラズパイ4でエッジAIデバイスのUSB Acceleratorを動かし方を紹介します。
ラズベリーパイのUSB3.0とUSB2.0でエッジデバイスとしての性能・速度を比較しています。
ラズパイのUSB3.0でエッジAIデバイスを接続!USB2.0との比較
結論としてはラズパイ4のUSB3.0でエッジデバイスを使うことでUSB2.0と比べて推論速度が2倍以上となりました。
エッジ端末側のデバイス速度向上にUSB3.0は使える!
USB3.0を搭載したことにより、ラズパイ4がエッジ向け端末として更にスペックアップしたことになります。
USB接続のエッジデバイスをUSB3.0接続してどれだけ高速化になるか確認した方法を紹介します。
ラズパイ4(USB3.0)でストレージ接続した場合も高速化した
下記記事でもラズパイ4と外付けHDDをUSB3.0で接続した場合、単純なRead速度のUSB2.0比で5~6倍になっていました。
(サーバーとしての性能向上には影響しなかったが…)
USB3.0(5.0Gbps)のストレージとして認識して、190.96MB/sの読み込み速度が出ていました。
ラズパイ4でEdge TPU USB Acceleratorを動かす
以前の記事でEdge TPUの使い方を説明していましたが、ラズパイ4には未対応でした。
これから紹介するインストール手順はラズパイ4(ラズパイ3B+にも)対応していますので安心です。
前回とはインストール手順・コマンドも異なっていますので注意してください
TensorFlow Lite のライブラリ含めてインストールする
正式なインストール手順はCoralのHPを参考にお願いします(リンク先はこちらから)
USBアクセラレータをラズパイ4に接続してインストール作業を開始します
Edge TPU runtimeをインストールする(必須)
Coral USB Acceleratorをラズパイに接続して、下記コマンドを実行します。
1 2 3 4 5 |
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo apt-get update |
1 |
<span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> libedgetpu1-std |
Edge TPUを最高周波数で動作させるruntimeを入れる(任意)
Edge TPUが電力を消費して発熱するようになりますが、最高スペック(周波数)で動かせるようにできます。
特にインストールしなくても十分に動作しますので任意箇所です。
1 |
sudo apt-get install libedgetpu1-max |
EdgeTPUの推奨雰囲気温度が25℃以下になるということです
※もし誤ってインストールしてしまい、通常Verにしたい場合は「libedgetpu1-std」を再インストールすれば大丈夫です。
TensorFlow Lite libraryをダウンロード・インストールする(必須)
ここが前回と大きく違う箇所です。TensorFlow Liteのライブラリをダウンロード・インストールする必要があります。
PythonのVerでもコマンドが異なってきますので注意してください。下記コマンドでVerは確認できます。
1 |
python3 --version |
ラズベリーパイのwebブラウザでTensorFlow Liteのダウンロードサイトに行きます。
最初にご自身のPythonにあったVerのTensorFlow Liteのライブラリをダウンロードします。
今回(筆者の)はラズパイのPythonが3.7.3ですのでサイトに書いてあるコマンドのVerをダウンロードしました。
1 |
pip3 install tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl |
ダウンロードすると基本「/home/pi/Downloads」に入っていると思います。
そのため下記コマンドを打ってインストールしました。
1 2 |
cd Downloads/ pip3 install tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl |
TensorFlow Lite APIを使ってデモプログラムを実行する。(必須)
後はディレクトリ作ってサンプルプログラムをダウンロードして動かすだけです。
正式な手順のコマンドだと「coral」というフォルダを作ってダウンロードしていきます。(そのため新たなターミナルを開いて実行していきます)
1 2 3 |
mkdir coral && cd coral git clone https://github.com/google-coral/tflite.git |
1 2 3 |
cd tflite/python/examples/classification bash install_requirements.sh |
最後にデモプログラムを動かします
1 |
python3 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 |
おそらく下記のような結果が帰ってきていると思います。(USB3.0接続で実施)
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
18.2ms
4.9ms
5.1ms
5.0ms
5.0ms
-------RESULTS--------
Ara macao (Scarlet Macaw): 0.76562
デモプログラムの内容・結果
このプログラム何を行っているかというと、「Google Edge TPU」で「鳥」のデータを読み込んで機械学習させて「この写真の鳥は何か?」と聞いています。
今回の結果だと「Google Edge TPU」はコンゴウインコ(Scarlet Macaw)と判断したようです。
ラズベリーパイのUSB3.0とUSB2.0での速度比較
先ほどはUSB3.0で接続したので、今度はUSB2.0で接続して推論速度を確認します。
同様にデモプログラムを走らせると下記結果になりました。
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
118.1ms
11.8ms
11.4ms
11.4ms
11.3ms
-------RESULTS--------
Ara macao (Scarlet Macaw): 0.76562
「Note: The first inference on Edge TPU is slow」と注記されています。
1回目の推論時間はEdgeTPUのメモリにモデルをロードする時間があり遅いということです。
そのため、2回目~5回目の平均で推論時間を比較しますと…
「USB3.0…5.0ms」「USB2.0…11.5ms」となりUSB3.0はUSB2.0比で2倍以上の推論速度となりました。
やはりUSB2.0(480Mbps)の箇所がエッジデバイスを使う上で大分ボトルネックとなっている様子です。
リアルタイムの画像認識でもラズパイの性能を比較しました
<<20191230追記>>
下記記事でカメラを使ったリアルタイムの画像認識でもラズパイ4の性能を確認しました。
よろしければご覧ください(リンク先はこちらから)
まとめ・感想
ラズベリーパイ(raspberry pi)とCoral USB AcceleratorをUSB3.0で接続することで高速化できました。
USB接続のエッジAIデバイス使う上でもUSB3.0を持つラズパイ4は使えそうです。
ぜひ皆さまも試してみてください
コメント