こんにちは。
前回の Edge TPU 更新からはや2ヶ月。今回の更新では、複数台の Edge TPU を使ってひとつのモデルをパイプライン実行できる API がベータ提供されました。より高速な推論ができる可能性が広がったということですね。この記事では Edge TPU April update from Coral をベースに、意訳・追記をしています。R&D チームの奥村(@izariuo440)がお送りします。
Edge TPU に関しては、過去記事も参考になるかもしれません。
- 2019インターン紹介: Edge TPU向けPoseNetのリアルタイム姿勢推定 - OPTiM TECH BLOG
- Edge TPU の性能を引き出すためには? - OPTiM TECH BLOG
- Edge TPU の September 2019 Updates を追う - OPTiM TECH BLOG
- Edge TPU の January 2020 Updates を追う - OPTiM TECH BLOG
意訳
更新した Edge TPU コンパイラと新しい C++ API をリリースしました。新しい C++ API では、複数の Edge TPU にまたがって単一のモデルをパイプライン化できるようになりました。これにより、アプリケーションのスループットが向上し、単一の Edge TPU のキャッシュに収まらなかった大きいモデルの遅延時間を削減できます。この API を使うには、Edge TPU ごとに個別の *.tflite
ファイルを作成するために、モデルを再コンパイルする必要があります。
変更点
このリリースに含まれるすべての変更点は以下の通りです。
- Edge TPU コンパイラのバージョンが 2.0.291256449 から 2.1 になりました。更新するには
sudo apt-get update && sudo apt-get install edgetpu
を実行するか、この手順に従ってください。 - モデルのパイプライン化 API が GitHub でソースとして利用できます。現在は C++ のみでベータ利用可能です。詳細はこのガイド を参照してください。
- on-device backpropagation で使用するための EfficientNet 用の 新しい embedding 抽出モデルを追加。
- Edge TPU Python ライブラリ をマイナーアップデートしました。バージョンは 2.13.0 から 2.14 になりました。
run_inference()
に新しくサイズのパラメータを追加しました。 - C++ のサンプルをビルドするための新しい Colab ノートブックを追加しました。
おまけ
Edge TPU の歩み
これまでの動きを振り返ると、2〜4ヶ月ごとの更新で、今回は2ヶ月でした。次回の更新時は初夏ですかね。
- 2019/03/04: ベータ版リリース
- 2019/04/11: 正式版リリース
- 2019/05/29: オフラインコンパイラリリースなど
- 2019/07/24: post-training quantization サポート、TensorFlow Lite デリゲート対応など
- 2019/09/25:
apt-get
対応強化、コンパイラ更新、Python ライブラリ更新、GitHub への移行など - 2020/01/29: macOS・Windows サポート、TensorFlow 2.1 ベースになった、など
- 2020/04/01: モデルのパイプライン化 C++ API のベータ提供、など
モデル分割
詳細は Pipeline a model with multiple Edge TPUs | Coral に記載されていますが、モデルの分割数は モデル分割数 = ceil(モデルサイズ [MB] / 6 [MB])
がよいようです。
すでにモデル分割を試されている方もいらっしゃるようです。Inception などの大きいモデルで効果があったとのこと。
3分割したsegmented model。
— iwatake@禁酒0日目 (@iwatake2222) 2020年4月3日
レイヤ数で見るとバランス取れてないように見えますが、mobilenetのような小さいモデルも分割してくれるみたいです。 pic.twitter.com/vSWlH5rG9N
Tested inference time of model pipelining with multiple Edge TPUs
— iwatake@禁酒5日目 (@iwatake2222) 2020年4月3日
・Inception_v4_299: 100.7(original) → 41.4(3 segments)
・Mobilenet_v2_1.0_224: 2.9(original) → 2.3(3 segments)
* msec
* Coral Dev Borad + USB Edge TPUx2
Inceptionのように大きなモデルは効果大
量子化警察より
変更点として記載がありませんが、Edge TPU 向けの Semantic Segmentation モデルが公開されました。
MobileNet v2 DeepLab v3 (0.5 depth multiplier)、MobileNet v2 DeepLab v3 (1.0 depth multiplier) の二種類で、どちらも PASCAL VOC 2012 で訓練されたモデルのようです。
TensorFlow DeepLab Model Zoo には、Cityscapes で訓練されたモデルが公開され、レイテンシも記載されています。
models/model_zoo.md at master · tensorflow/models · GitHub
まとめ
Edge TPU の正式版がリリースされてから、およそ一年が経過しました。ハードウェアの能力が、ソフトウェアの更新によって徐々に引き出されていくさまは面白いですね(最初からまとまってリリースされるとさらに嬉しいですが・・・)。複数の Edge TPU を使いはじめたということは、単一の Edge TPU ではこれ以上大幅な速度改善などは見込めない、ということの裏返しかもしれません。とはいえ、複数の Edge TPU を使うとコスパ的にどうなんだ、という説もあるので、そうした検討はより複雑になっていきそうです。
Edge TPU で利用できるモデルは TensorFlow Lite がベースとなっています。TensorFlow Lite は XNNPACK の統合で各種主要 CPU で推論速度がかなり上がってきており、WebAssembly SIMD Proposal によってブラウザでもモデルによっては高速な推論ができるようになりつつあるなど、NVIDIA GPU のない世界でより一層存在感を強めています。これについては、また別の記事で紹介したいと思います。
オプティムでは、こうした技術に興味がある・作ってみたい・既に作っている、というエンジニアを募集しています。興味のある方は、こちらをご覧ください。