reComputer RK3576 で Google Coral USB アクセラレータを使用する
Google Coral USB アクセラレータは、USB 経由でホストに Edge TPU コプロセッサを追加します。このチュートリアルでは、reComputer RK3576 に接続し、USB 状態を確認し、Edge TPU ランタイムをインストールし、Edge TPU 向けにコンパイルされた TensorFlow Lite モデルを実行し、レイテンシベンチマークを再現する、実測済みの手順を紹介します。
ベンチマークの範囲: このページの結果は、Coral Edge TPU と 8 スレッド CPU の TensorFlow Lite ベースラインを比較したものです。RK3576 の内蔵 NPU はテストしていません。2 つのアクセラレータを比較するには、同じモデルと同等の前処理を Edge TPU と RKNN の両方のツールチェーンで展開する必要があります。
テスト環境
| 項目 | 実測構成 |
|---|---|
| ホスト | reComputer RK3576 Dev Kit |
| オペレーティングシステム | Armbian-unofficial 26.05.0-trunk、Debian 12(bookworm) |
| カーネル | 6.1.115-vendor-seeed-rk3576 |
| ホストアーキテクチャ | AArch64、8 論理 CPU |
| アクセラレータ | Google Coral USB Accelerator |
| USB リンク | USB 3 SuperSpeed、lsusb -t で 5000M と報告 |
| Edge TPU ランタイム | 標準(低周波数)ランタイム、libedgetpu.so.1.0 |
これは以下の測定に使用した構成であり、最低サポートバージョンを示すものではありません。Coral の USB Accelerator ドキュメントでは、Debian 系の Armv8 Linux がサポート対象として記載されており、最高性能のために USB 3 を推奨しています。
ハードウェア接続
USB 3 のホストポートと品質の良いケーブルを使用してください。次の写真は、テストに使用した reComputer RK3576、Coral USB アクセラレータ、ケーブルを示しています。

Coral を RK3576 の USB 3 ポートのいずれかに接続します。下のクローズアップは実際のテスト時の接続を示しています。

Coral の検出と確認
次のコマンドを実行して、アクセラレータが使用する 2 つの USB ID のいずれかを探します:
lsusb | grep -Ei '1a6e:089a|18d1:9302|Google|Global Unichip'これらの ID はデバイスの 2 つの通常状態を表します:
| USB ID | lsusb での典型的な名前 | 意味 |
|---|---|---|
1a6e:089a | Global Unichip Corp. | 初期 DFU/ブートローダー状態 |
18d1:9302 | Google Inc. | ファームウェアロード後の Edge TPU ランタイム状態 |
ネゴシエートされた USB 速度を確認します:
lsusb -tUSB 3 接続では、アクセラレータのブランチは 5000M と報告されるはずです。480M のエントリは USB 2 を示します。
最近の列挙とファームウェアのイベントを確認するには、次を実行します:
sudo dmesg | grep -E 'device firmware changed|New USB device found' | tail -n 10下のスクリーンショットは、ランタイムモードで 18d1:9302 として検出され、5000M で接続されたアクセラレータを示しています。dmesg には以前の DFU 列挙とその後のファームウェア変更メッセージも見えます。

アクセラレータを接続した直後に 1a6e:089a が見えるのは正常です。Edge TPU デリゲートをロードするとデバイスファームウェアがロードされ、18d1:9302 として再列挙されることがあります。
Edge TPU ランタイムのインストール
Coral の Linux リポジトリを使用し、標準ランタイムをインストールします:
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
sudo apt-get install libedgetpu1-stdインストール中にアクセラレータがすでに接続されていた場合は、新しくインストールされた udev ルールを有効にするために、一度取り外して再接続してください。
libedgetpu1-std は低い動作周波数を使用します。Coral は最大周波数ランタイムの代替として libedgetpu1-max も提供していますが、消費電力が増え、金属筐体が非常に熱くなることがあります。2 つのランタイムパッケージを同時にインストールすることはできません。
Python 環境の作成
テストしたボードでは Python 3.11 を使用し、PyCoral ではなく TensorFlow Lite Python API を直接使用しました。分離された環境を作成し、サンプルで使用するパッケージをインストールします:
sudo apt-get install python3-venv
python3 -m venv /tmp/coral-venv
/tmp/coral-venv/bin/pip install --upgrade pip
/tmp/coral-venv/bin/pip install tflite-runtime opencv-python-headlessPython が Edge TPU デリゲートをロードできることを確認します:
/tmp/coral-venv/bin/python -c "from tflite_runtime.interpreter import load_delegate; print(load_delegate('libedgetpu.so.1.0'))"このコマンドは TensorFlow Lite デリゲートオブジェクトを出力するはずです。初回アクセス時に 1a6e:089a から 18d1:9302 への切り替えが発生することもあります。
テストアセットのダウンロード
作業ディレクトリを作成し、Google のペアとなる Edge TPU モデルと CPU モデル、サンプル画像をダウンロードします:
mkdir -p /tmp/coral-test
cd /tmp/coral-test
curl -fL -o model.tflite \
https://raw.githubusercontent.com/google-coral/test_data/master/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite
curl -fL -o model_cpu.tflite \
https://raw.githubusercontent.com/google-coral/test_data/master/mobilenet_v2_1.0_224_inat_bird_quant.tflite
curl -fL -o labels.txt \
https://raw.githubusercontent.com/google-coral/test_data/master/inat_bird_labels.txt
curl -fL -o parrot.jpg \
https://raw.githubusercontent.com/google-coral/test_data/master/parrot.jpgparrot.jpg は Google の公開リポジトリ google-coral/test_data のサンプル画像であり、このチュートリアル用に作成された写真ではありません。Edge TPU モデルはアクセラレータ向けにコンパイルされており、model_cpu.tflite は Edge TPU を使わない TensorFlow Lite 版の対応モデルです。
最小の Edge TPU 推論を実行する
以下を /tmp/coral-test/inference.py として保存します:
import cv2
from tflite_runtime.interpreter import Interpreter, load_delegate
delegate = load_delegate("libedgetpu.so.1.0")
interpreter = Interpreter(
model_path="model.tflite",
experimental_delegates=[delegate],
)
interpreter.allocate_tensors()
input_info = interpreter.get_input_details()[0]
image = cv2.cvtColor(cv2.imread("parrot.jpg"), cv2.COLOR_BGR2RGB)
height, width = input_info["shape"][1:3]
tensor = cv2.resize(image, (int(width), int(height))).astype(input_info["dtype"])
interpreter.set_tensor(input_info["index"], tensor[None, ...])
interpreter.invoke()
print("Edge TPU inference completed")作業ディレクトリから実行します:
cd /tmp/coral-test
/tmp/coral-venv/bin/python inference.py任意の性能検証
ベンチマークは、各パスについて 10 回のウォームアップ呼び出しと、それに続く 100 回の計測呼び出しを実行します。計測対象は Interpreter.invoke() のみで、デリゲートの実行と関連するホスト-デバイス間通信を含みます。モデル/デリゲートの初期化、画像の読み込み、リサイズは除外されます。
CPU パスは Edge TPU を使わないバージョンのモデルを num_threads=8 で使用します。Edge TPU モデルと CPU モデルは同じ Google Coral MobileNet V2 iNaturalist 鳥類テストセット由来で、どちらも同じ前処理済み入力テンソルを受け取ります。
完全な任意テストスクリプトは benchmark.py として利用できます。上記の 3 つのリソースをダウンロードした後、/tmp/coral-test/benchmark.py として保存またはダウンロードしてください。
ベンチマークを実行します:
cd /tmp/coral-test
/tmp/coral-venv/bin/python benchmark.py観測された結果
テストした RK3576 での 1 回の実行結果:
| パス | 平均レイテンシ | 中央値レイテンシ | P95 レイテンシ | 導出スループット |
|---|---|---|---|---|
| Coral Edge TPU | 6.202 ms | 6.193 ms | 6.344 ms | 161.23 FPS |
| CPU(8 スレッド) | 20.700 ms | 20.610 ms | 21.196 ms | 48.31 FPS |
この実行では、Coral パスの平均レイテンシは 8 スレッド CPU パスの平均レイテンシより 3.34x 低かった。FPS 値は繰り返し行われる単一画像推論の 1000 / 平均レイテンシ であり、カメラ、デコード、前処理、表示を含む完全なパイプラインの測定値ではありません。

これらの値は 1 台のデバイスと 1 つのソフトウェア構成からの測定値であり、保証された製品仕様ではありません。周波数スケーリング、熱状態、バックグラウンドアクティビティ、ランタイムの選択、モデルのパーティショニング、USB トポロジは結果を変える可能性があります。
注記: この任意の確認は、Coral Edge TPU と 8 スレッドの CPU TensorFlow Lite パスのみを比較します。このテストでは RK3576 NPU を使用していないため、Coral と RK3576 NPU の比較ではありません。したがって、Coral の 4 TOPS と RK3576 NPU の 6 TOPS というピーク値は、この結果を説明または予測するものではありません。
トラブルシューティング
lsusbに Coral のエントリがない:デバイスを再接続し、正常に動作するケーブルを使用し、別の USB ホストポートを試し、dmesgを確認します。- デバイスが
1a6e:089aのまま:まずlibedgetpu.so.1.0が正常にロードできることを確認します。次にアクセラレータを再接続し、dmesgのファームウェアメッセージを確認します。 lsusb -tで480M:接続が USB 2 速度でネゴシエートされています。アクセラレータを USB 3 ポートに移動し、ケーブルを確認してください。Failed to load delegate:Edge TPU ランタイムがインストールされており、現在のユーザーが USB デバイスにアクセスできることを確認します。- 筐体の温度が高い:標準の
libedgetpu1-stdランタイムを使用し、通風を確保してください。最大周波数ランタイムは非常に熱くなることがあります。