Google Coral TPU on Ubuntu — エッジAI推論を最大100倍高速化

GPU

この記事のポイント

  • Google Coral USB アクセラレータは Ubuntu 22.04 LTS で公式にサポートされており、apt + pip で動かせる
  • python3-pycoral(apt 版)は python3 << 3.10 依存のため Ubuntu 22.04 では機能しない。pip 版(Google Coral PyPI)の cp310 ホイールを使うこと
  • Ubuntu 24.04(Python 3.12)は公式ビルドが存在せず、pyenv または deadsnakes PPA で Python 3.10 を別途インストールする必要あり
  • Edge TPU は INT8 量子化済みモデルのみ対応。通常の .tfliteedgetpu_compiler を掛けてから使う
  • MobileNet V1 で CPU 比 約 60 倍の推論速度が出る(Raspberry Pi 4 実測値 / 公式ベンチ)

Google Coral USB アクセラレータを Ubuntu に繋ぐと、TensorFlow Lite モデルの推論が CPU のみの場合と比べて最大 100 倍近く速くなります。物体検出でも画像分類でも、エッジデバイスに毎秒何十フレームも処理させたいとき、真っ先に選択肢に上がるハードウェアです。

ただし、パッケージの扱いには落とし穴があります。Ubuntu 22.04(Python 3.10)では apt 版の python3-pycoral がそのままでは動きません。apt リポジトリのメタデータを直接調べると、python3 (<< 3.10) という依存が書かれており、Python 3.10 以降のシステムとは非互換です。pip 版(Google Coral 独自の PyPI インデックス)には cp310 ホイールが存在するので、そちらを使うのが正解です。

本記事では Ubuntu 22.04 LTS を主環境として、Coral apt リポジトリと pip を組み合わせた正しいインストール手順を紹介します。

Google Coral 公式 Software ページ(coral.ai)
Google Coral 公式 Software ページ(coral.ai)

目次

Google Coral TPU とは

Google Coral は、TensorFlow Lite の INT8 量子化モデルをハードウェアで高速実行するための Edge TPU(Tensor Processing Unit) を搭載したプロダクト群です。

通常、深層学習の推論は CPU や GPU で行いますが、Edge TPU はニューラルネット演算専用に設計されており、消費電力が 2W 前後と非常に低いにもかかわらず、4 TOPS(1 秒間に 4 兆回の INT8 演算)を実現します。Raspberry Pi や Linux PC に USB 接続するだけで、クラウドへの問い合わせなしにミリ秒単位で画像分類・物体検出が動きます。

正直、最初に動かしたときは「これが USB スティック 1 本でできるのか」と驚きました。MobileNet V1 の推論が 180ms から 3ms になるのは、目に見えて体感できる差です。

ハードウェアラインナップ

Coral TPU には接続方式の異なる複数の製品が存在します。Ubuntu PC で手軽に試すなら USB アクセラレータ、組み込み機器に組み込むなら M.2 や PCIe モジュールを選択します。

Google Coral TPU ハードウェアラインナップ比較
Google Coral TPU ハードウェアラインナップ比較

本記事では USB アクセラレータ(USB 3.0 接続)を対象に手順を説明します。M.2 / PCIe 接続のモジュールは追加で gasket-dkms(PCIe ブリッジドライバ)のインストールが必要になりますが、その後の Python ライブラリ部分は同じです。

Ubuntu バージョンと互換性

実際に Coral の apt リポジトリ(packages.cloud.google.com)から Packages ファイルを取得して依存関係を解析しました。重要な発見が2つあります。

ひとつ目:apt 版の python3-pycoralpython3 (<< 3.10) を依存に持ちます。Ubuntu 22.04 のデフォルト Python は 3.10 なので、apt でインストールしても機能しません。pip 版を使う必要があります。

ふたつ目:pip 版(Google Coral PyPI)には cp310(Python 3.10)ホイールが存在するため、Ubuntu 22.04 では pip 経由で問題なく使えます。Ubuntu 24.04(Python 3.12)は pip 版も未対応です。

Ubuntu バージョン × Coral TPU 互換性マトリクス(実測)
Ubuntu バージョン × Coral TPU 互換性マトリクス(実測)

Ubuntu 22.04 ユーザーへの注意

sudo apt install python3-pycoral をそのまま実行しても、python3-pycoral が「インストール済みだが機能しない」状態になります。libedgetpu1-std は apt、pycoral は pip — と使い分けるのが Ubuntu 22.04 での正解です。

STEP 1:apt リポジトリを追加する

Coral のランタイムライブラリ(libedgetpu1-std)は packages.cloud.google.com の専用リポジトリからインストールします。まずリポジトリを登録します。




ubuntu@linuxlab: ~
$ sudo apt-get install -y curl gnupg
Reading package lists… Done

$ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg \
| sudo gpg –dearmor -o /usr/share/keyrings/coral-edgetpu-archive-keyring.gpg
$ echo “deb [signed-by=/usr/share/keyrings/coral-edgetpu-archive-keyring.gpg] \
https://packages.cloud.google.com/apt coral-edgetpu-stable main” \
| sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
deb [signed-by=…] https://packages.cloud.google.com/apt coral-edgetpu-stable main
$ sudo apt-get update
Get:1 https://packages.cloud.google.com/apt coral-edgetpu-stable InRelease
Reading package lists… Done
libedgetpu1-std インストール手順(mock)
libedgetpu1-std インストール手順(mock)

STEP 2:libedgetpu1-std をインストールする

libedgetpu1-std は USB と PCIe 接続両方に対応するランタイムです。標準クロック(Standard speed)版と高クロック(Maximum speed)版の2種があり、発熱を気にするなら std 版を選びます。max 版は基板が熱くなるため、持続的な推論には冷却が必要です。




ubuntu@linuxlab: ~
$ sudo apt-get install -y libedgetpu1-std
The following NEW packages will be installed:
libedgetpu1-std libusb-1.0-0
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Setting up udev rules for Coral USB Accelerator …
$ dpkg -l | grep edgetpu
ii libedgetpu1-std 16.0 amd64 Support library (standard speed) for the Edge TPU

apt で python3-pycoral はインストールしないこと

sudo apt-get install python3-pycoral を実行すると Python 3.9 以下向けのバイナリが入りますが、Ubuntu 22.04(Python 3.10)では import pycoral がエラーになります。ここでは libedgetpu1-std だけを apt でインストールし、pycoral は次のステップで pip から入れます。

STEP 3:USB デバイスを接続・確認する

libedgetpu1-std のインストール時に udev ルールが自動で設定されます。Coral USB アクセラレータを接続したら lsusb で認識されているか確認します。




ubuntu@linuxlab: ~
$ lsusb | grep -i “Google\|coral\|18d1”
Bus 003 Device 004: ID 18d1:9302 Google Inc. Coral USB Accelerator
# ↑ 18d1:9302 が表示されれば認識成功

18d1:9302 が Google Coral USB アクセラレータのベンダー ID + プロダクト ID です。表示されない場合は USB 3.0 ポートへの差し替えを試してください。USB 2.0 でも動きますが、データ転送速度の制限から推論速度が落ちます。

初回接続時は udev が usbモードスイッチを処理するため、一度抜いて再接続すると 18d1:9302 に変わることがあります(初期状態では 18d1:9303 と表示される場合があります)。

STEP 4:Python ライブラリをインストールする

Google Coral TPU パッケージ一覧とバージョン(実測)
Google Coral TPU パッケージ一覧とバージョン(実測)

Google Coral PyPI(google-coral.github.io/py-repo/)からパッケージインデックスを直接取得して確認しました。pycoral 2.0.0 は cp310 ホイールがあり Ubuntu 22.04 で動作します。




ubuntu@linuxlab: ~
# pycoral と tflite-runtime を Google Coral PyPI から pip でインストール
$ pip3 install –extra-index-url https://google-coral.github.io/py-repo/ \
pycoral~=2.0 tflite-runtime~=2.5
Looking in indexes: https://pypi.org/simple, https://google-coral.github.io/py-repo/
Collecting pycoral~=2.0
Downloading pycoral-2.0.0-cp310-cp310-linux_x86_64.whl (…) ← cp310 が選ばれる
Collecting tflite-runtime~=2.5
Downloading tflite_runtime-2.5.0.post1-cp310-cp310-linux_x86_64.whl (…)
Successfully installed pycoral-2.0.0 tflite-runtime-2.5.0.post1 …
$ python3 -c “import pycoral; print(‘pycoral OK’)”
pycoral OK

~=2.0~=2.5 は「同じメジャーバージョン内の最新版」を意味します。新しいバージョンが出た場合の自動更新を防ぎつつ、パッチ版は取り込める書き方です。

インストールフロー図
インストールフロー図

初回推論を動かす

Google Coral が提供するサンプルスクリプトを使って、動作確認をします。MobileNet V1 で画像を分類する最小限の例です。




ubuntu@linuxlab: ~
# サンプルコードと事前学習済みモデルを取得
$ git clone https://github.com/google-coral/pycoral.git
$ cd pycoral
$ bash examples/install_requirements.sh classify_image.py
Downloading mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite …
Downloading inat_bird_labels.txt …
Downloading parrot.jpg …
$ 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
—-INFERENCE TIME—-
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
4.6ms
3.1ms
3.2ms
3.0ms
3.1ms
——-RESULTS——-
Ara macao (Scarlet Macaw): 0.76563

最初の推論だけ 4.6ms と少し遅いのは、モデルを Edge TPU のオンチップメモリにロードする時間が含まれるためです。2回目以降は 3ms 台に安定します。ターミナルに「RESULTS」が表示されて分類ラベルが返れば、Edge TPU が正常に動いています。

Edge TPU 対応モデルの作り方

Edge TPU は INT8 量子化済みの TFLite モデル のみに対応しています。一般的な .tflite ファイルはそのままでは動きません。edgetpu_compiler(apt でインストール可)を掛けると、演算の大部分を Edge TPU 上で実行できる形に変換されます。




ubuntu@linuxlab: ~
$ sudo apt-get install -y edgetpu-compiler
$ edgetpu_compiler mobilenet_v1_1.0_224_quant.tflite
Edge TPU Compiler version 16.0.384591198
Started a compilation timeout timer of 180 seconds.
Model compiled successfully in 1 second.
Input model: mobilenet_v1_1.0_224_quant.tflite
Compiled model: mobilenet_v1_1.0_224_quant_edgetpu.tflite
Minimum runtime version required: 13
Number of Edge TPU subgraphs: 1
Number of operations that will run on Edge TPU: 31
Number of operations that will run on CPU: 0

「Number of operations that will run on Edge TPU: 31」と全演算が Edge TPU にオフロードされれば最速構成です。一部の演算が CPU フォールバックになる場合は「Number of operations that will run on CPU: N」と出ます。

量子化されていないモデルはコンパイルできない

Float32 精度のまま変換した .tflite には edgetpu_compiler が通りません。TensorFlow または TFLite Converter で INT8 フルインテジャー量子化(Full Integer Quantization)を行ってから edgetpu_compiler に渡す必要があります。量子化には代表データセット(representative dataset)が必要です。

実測ベンチマーク:CPU vs Edge TPU

以下は Google Coral 公式ベンチマークドキュメントに掲載されている Raspberry Pi 4B(ARM Cortex-A72)での比較値です。x86_64 Ubuntu では CPU 部分の速度が変わりますが、Edge TPU の性能は同等なので相対値として参考になります。

Edge TPU vs CPU 推論速度比較(公式ベンチマーク)
Edge TPU vs CPU 推論速度比較(公式ベンチマーク)

MobileNet V1(224×224)で CPU 181ms → Edge TPU 3.0ms と、約 60 倍の高速化になっています。SSD MobileNet による物体検出でも同様の傾向があり、10〜80 倍の範囲で高速化が期待できます。

USB 2.0 で接続した場合や、一部の演算が CPU フォールバックになったモデルでは、この数値から大きく落ちることがあります。パフォーマンスが出ていないと感じたら、edgetpu_compiler のコンパイルログで「CPU: 0 operations」になっているか確認してください。

Ubuntu 24.04 で使う場合

Ubuntu 24.04 LTS(Python 3.12)では、現時点で pycoral の公式ビルドが存在しません。使うには Python 3.10 を別途インストールします。

① deadsnakes PPA で Python 3.10 を追加する方法




ubuntu@linuxlab: ~ (Ubuntu 24.04 LTS)
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get update && sudo apt-get install -y python3.10 python3.10-venv
$ python3.10 -m venv coral_env
$ source coral_env/bin/activate
(coral_env) $ pip install –extra-index-url https://google-coral.github.io/py-repo/ \
pycoral~=2.0 tflite-runtime~=2.5
Successfully installed pycoral-2.0.0 tflite-runtime-2.5.0.post1

② pyenv で Python 3.10 をインストールする方法

deadsnakes PPA を使いたくない場合は pyenv が選択肢です。ビルド依存が多く初回は時間がかかりますが、任意の Python バージョンを管理できます。




ubuntu@linuxlab: ~ (Ubuntu 24.04 LTS)
$ curl https://pyenv.run | bash
# ~/.bashrc に export PATH=”$HOME/.pyenv/bin:$PATH” 等を追記してから:
$ pyenv install 3.10.14
$ pyenv local 3.10.14
$ python –version
Python 3.10.14
$ pip install –extra-index-url https://google-coral.github.io/py-repo/ pycoral~=2.0
Successfully installed pycoral-2.0.0
pycoral GitHub リリースページ
pycoral GitHub リリースページ

よくあるエラーと対処

①「RuntimeError: Failed to load delegate from libedgetpu.so.1」

libedgetpu1-std がインストールされていないか、USB が認識されていない場合に出ます。




ubuntu@linuxlab: ~
RuntimeError: Failed to load delegate from libedgetpu.so.1
# 原因の確認
$ lsusb | grep 18d1
# 何も出なければ USB が認識されていない → 差し直すか USB 3.0 ポートへ変更
$ dpkg -l | grep edgetpu
# libedgetpu1-std が表示されなければ再インストール
$ sudo apt-get install -y libedgetpu1-std

②「ImportError: libedgetpu.so.1: cannot open shared object file」

pip で pycoral を入れたが libedgetpu1-std(apt)がない状態です。apt と pip の両方が必要なことを思い出してください。




ubuntu@linuxlab: ~
ImportError: libedgetpu.so.1: cannot open shared object file: No such file or directory
$ sudo apt-get install -y libedgetpu1-std
# インストール後は再度 python3 スクリプトを実行

③「The interpreter does not support running Coral models」

通常の TFLite インタープリタ(tflite_runtime.interpreter)に edgetpu.tflite モデルを渡した場合です。make_interpreter() 関数を経由して pycoral のデリゲートを使う必要があります。




ubuntu@linuxlab: ~
# ❌ 間違い: 通常の tflite Interpreter を使っている
from tflite_runtime.interpreter import Interpreter
interp = Interpreter(model_path=”model_edgetpu.tflite”)

# ✅ 正解: pycoral の make_interpreter を使う
from pycoral.utils.edgetpu import make_interpreter
interp = make_interpreter(“model_edgetpu.tflite”)
interp.allocate_tensors()

④「permission denied: /dev/bus/usb/…」

現在のユーザーが plugdev グループに入っていない場合です。libedgetpu1-std のインストール時に udev ルールは設定されますが、グループへの追加が必要なことがあります。




ubuntu@linuxlab: ~
$ sudo adduser $USER plugdev
# ログアウトして再ログイン後に確認
$ groups | grep plugdev
ubuntu plugdev …

まとめ

Google Coral USB アクセラレータは、Ubuntu 22.04 LTS で apt と pip を組み合わせることで比較的簡単に動かせます。今回の調査で明確になった落とし穴は1点です。

  • apt 版 python3-pycoral は Python 3.10 未満にしか対応していないため、Ubuntu 22.04(Python 3.10)では libedgetpu1-std だけ apt で入れ、pycoral / tflite-runtime は Google Coral PyPI から pip でインストールする
  • Ubuntu 24.04(Python 3.12)は公式の cp312 ビルドが存在せず、pyenv や deadsnakes PPA で Python 3.10 環境を作ってから使う
  • Edge TPU は INT8 量子化済みモデルにしか対応しない。既存の Float32 モデルは edgetpu_compiler をかける前に量子化変換が必要

MobileNet V1 で CPU 比 60 倍という高速化は、リアルタイム処理が必要なアプリケーションを自宅サーバーやラズパイで動かしたい人にとって、かなり魅力的な数字だと思います。VPS でクラウドに頼らず推論を完結させたい場合にも、USB アクセラレータを挿すという選択肢は有力です。

VPS の選び方については VPS 比較記事 もご参照ください。

コメント

タイトルとURLをコピーしました