Blog
Google® Coral Edge TPUを16個搭載したPCIeボードの実力検証(1)環境構築と簡易動作検証
Japanese / English
サイバーエージェント AI Lab HCI (Human Computer Interaction) チームの 兵頭 です。2021年4月から大阪大学の研究チームでリサーチエンジニアとしてお世話になっています。HCIというと少し聞きなれないワードですが、接客対話エージェントを研究・開発 しているチームです。前職は SIer の R&Dチーム のマネージメントをしていましたが、いきなりエンジニア職へ転向した、というちょっとした変わり者です。周りはものすごい経歴の方々に囲まれておりとても恐縮していますが、伸び伸びと活動させていただけています。
さて、本記事をご覧いただいている方の中には私の プライベートの活動 をご存じの方がいらっしゃるかもしれませんが、今回はちょっと普段とは色味の異なることを記事にしてみようと思います。好きなことを書いていいんですって。ワクワクしますね。
図1 CRL-G116U-P3DF (参考文献 [1] より引用)
1. Google® Coral Edge TPU CRL-G116U-P3DF
初のブログですが、今回はこのデバイスの性能検証や現実的な使い道を模索します。2020年12月に ASUS から発売された、TPUが16個も搭載されたハイパフォーマンスアクセラレータカードです。2021年6月8日時点のAmazonでの販売価格は ¥291,103- です。まずはこのいかにもなデバイスがどのような仕様なのかを見てみましょう。右側の列が今回検証する CRL-G116U-P3DF のスペックです。 仕様上で注目すべき点は PCI Express 3.0 x16 のスロットを専有することでGPUのスロットと競合する点です。そしてGPU並に大きい、高価。とても悩ましいですね。いったいどのような用途で稼働させればペイできるのでしょうか。
表1 CRL-G18U-P3DF / CRL-G116U-P3DF 仕様 (参考文献 [2] より引用)
また、公式サポートOSが Ubuntu18.04 あるいは Deian 10 と、かなり古いものになっています。必要なリソースが全てOSSとして公開されていてビルド可能な状態であれば、最新の Ubuntu 21.04 や Debian 11 などのOSへも頑張れば導入できるかもしれませんが、コンパイラのバージョン齟齬などによって動作に支障をきたして本来実施したい検証が滞ることを避けるため、今回は公式のチュートリアルどおりにセッティングを行っていきたいと思います。
ハードウェアのブロックダイアグラムです。16個の TPU が PCIe Gen3 で2個ずつ接続されていますね。過去に3個を並列で長時間使用してみた体感として、連続利用をするとかなりの高温になることがありました。16個のTPUの作動温度上限の 55 ℃ 以下を保つために冷却用FANが2個も付属しているのはなんとなく納得感があります。
図2 ブロックダイアグラム (参考文献 [3] より引用)
セッティングの前に、念の為 EdgeTPU USB Accelerator のスペックと比較してみましょう。正確な数値が公称されているとすれば、WATTあたりの処理性能は USB Accelerator のほうが 1.6 倍高いことになっています。また、一見すると一般的な RTX30xx 系のGPUと比べてWATTあたりの処理性能は高く見えますが、 EdgeTPU は INT8 の整数演算に特化したデバイスであることから単純比較はできないと考えます。のちに動作検証を行いますが、INT8量子化によるモデルの精度劣化を一切加味しない場合は十分に高性能であると言えそうです。問題は 16個 ものTPUをいかにうまく活用・運用するかに尽きそうです。
表2 EdgeTPU USB Accelerator 仕様 (参考文献 [4] より引用)
2. Google® Coral Edge TPU CRL-G116U-P3DF のキッティング
では早速ですが、アクセラレータカードをキッティングします。PC筐体への物理的な取り付けの手順は省略し、ソフトウェアの導入部分からの手順を順次記載します。OSのバージョンが Ubuntu 18.04 である場合は、公式のユーザーズマニュアルの通りに作業を実施することで、おおむね1時間ほどで初回動作確認までたどり着くことができます。公式のドキュメントは こちら です。
2-1. Edge TPU driver のインストール
2-1-1. Kernel のバージョン確認
下記のコマンドを実行した結果表示されたバージョン番号が 4.18 以下なら 2-1-4 へ。 4.19 以上なら 2-1-2 へ
1 |
$ uname -r |
2-1-2. Apex ドライバの存在確認
下記のコマンドを実行した結果、何も表示されなければ 2-1-4 へ。 apex という文字が含まれた出力が表示された場合は 2-1-3 へ
1 |
$ lsmod | grep apex |
2-1-3. Apex および Gasket の無効化
下記のコマンドを実行して端末を再起動
1 2 3 |
$ echo "blacklist gasket" >> /etc/modprobe.d/blacklist-apex.conf $ echo "blacklist apex" >> /etc/modprobe.d/blacklist-apex.conf $ sudo reboot |
2-1-4. ドライバインストール
下記のコマンドを実行して端末を再起動
1 2 3 4 5 6 7 |
$ 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 update && sudo apt install -y gasket-dkms libedgetpu1-std $ sudo sh -c "echo 'SUBSYSTEM==\"apex\", MODE=\"0660\", GROUP=\"apex\"' >> /etc/udev/rules.d/65-apex.rules" $ sudo groupadd apex && sudo adduser $USER apex $ sudo rm /etc/modprobe.d/blacklist-apex.conf $ sudo reboot |
2-2. Edge TPU runtime のインストール
2-2-1. Pythonライブラリ (PyCoral) のインストール
下記コマンドを実行
1 |
$ sudo apt install python3-pycoral |
2-3. Edge TPU の動作確認
恒例の 「オウムの画像認識」 が正常に行われるかどうかを確認します。下記のとおり実行します。
1 2 3 4 5 6 7 |
$ mkdir coral && cd coral $ git clone https://github.com/google-coral/pycoral.git && cd pycoral $ bash examples/install_requirements.sh classify_image.py $ python3 examples/classify_image.py \ --model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \ --labels test_data/inat_bird_labels.txt \ --input test_data/parrot.jpg |
下記のように結果が表示されれば導入成功です。
1 2 3 4 5 6 7 8 9 10 11 |
Initializing TF Lite interpreter... INFO: Initialized TensorFlow Lite runtime. ----INFERENCE TIME---- Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory. 11.8ms 3.0ms 2.8ms 2.9ms 2.9ms -------RESULTS-------- Ara macao (Scarlet Macaw): 0.76562 |
認識対象の画像は下図のオウム (コンゴウインコ = Ara macao) の画像です。ここまでは何も躓くことなく EdgeTPU USB Accelerator を使用するときと同じ使用感で動作させることができました。とても簡単ですね。これだけの検証では意味がありませんので、特有のAPIなどを利用してマルチTPUの利点を最大限に活かしてどのようなことができるか、を模索していきたいと思います。
図3 Ara macao (参考文献 [5] より引用)
3. 初回記事はここまで
少々物足りないのは承知の上ですが、初回の記事は環境構築と簡易的な動作確認までとします。次回以降は概ね下記のようなトピックであまり期間を空けずに記事を連載していく予定です。ただし、詳細や公開の順序は検証結果に応じて柔軟に変更させていただくスタイルとするつもりです。私がいつも他のスペースで書いている記事はとてもボリュームのあるものが多いですが、本記事を書くツールの制約上、大きなボリュームの記事を一気に書き切ることがとても大変でしたので分割させていだく次第です。
- 量子化モデルの分割・マルチTPU推論
- 入力データの分割推論
- 異なるタスクのモデルの直列推論
- 異なるタスクのモデルの並列推論
- 連続稼働耐性の検証
- TPUごとのコンテナ化駆動は可能?
- 推論Pipelineの構築
では、次回をお楽しみに。
4. 参考文献
[1] ASUS, AI-Accelerator-PCIe-Card, 概要, https://www.asus.com/jp/Networking-IoT-Servers/AIoT-Industrial-Solution/AI-Accelerator/AI-Accelerator-PCIe-Card/
[2] ASUS, AI Accelerator Card CRL-G18U-P3DF/CRL-G116U-P3DF Hardware User Manual, 1.3 Product specification
[3] ASUS, AI Accelerator Card CRL-G18U-P3DF/CRL-G116U-P3DF Hardware User Manual, 1.7 Block diagram
[4] Google Coral, USB Accelerator Tech specs, https://coral.ai/products/accelerator/
[5] Google Coral, Get started with the USB Accelerator, https://coral.ai/docs/accelerator/get-started/#3-run-a-model-on-the-edge-tpu
Author