TPU (Tensor Processing Unit)
テンソル・プロセッシング・ユニット(TPU)は、ニューラルネットワークの計算に特化したGoogleのカスタムチップです。シストリックアレイの仕組み、GPUとの比較、Edge TPUについて解説します。
Tensor Processing Unit (TPU)は、Googleがニューラルネットワークの学習と推論を高速化するために設計した、アプリケーション固有の集積回路です。TPUは、大規模な行列乗算がディープラーニングの処理の大部分を占めることから、大規模な行列乗算ユニットを中心に構成されています。Googleは2015年からデータセンターでTPUを運用し、Geminiモデルの学習に使うほか、他社向けにCloud TPUとして貸し出しています。2026年4月に発表された第8世代は、学習用のTPU 8tと推論用のTPU 8iの2種類に分かれています。
TPUの仕組み#
各TPUの中核は、シストリックアレイとして構成された行列乗算ユニット(MXU)です。これは、データを隣接セルに直接渡す積和演算セルのグリッドです。重みは一度だけセルに読み込まれ、入力はクロックサイクルごとにグリッドを1ステップ進み、部分和は列方向に流れます。そのため、メモリから読み込んだ各値を多数のセルで再利用できます。メモリの読み出しは演算よりも時間とエネルギーをはるかに多く消費するため、この設計で高い効率を実現できます。Cloud TPU v2とv3では、各MXUは128×128のアレイで、bfloat16で乗算し、FP32で累積していました。短いシミュレーションで4×4グリッド上のデータフローを確認できます。
import numpy as np
rng = np.random.default_rng(0)
W = rng.integers(-5, 5, (4, 4)) # weights, preloaded one per cell of a 4x4 grid
X = rng.integers(-5, 5, (6, 4)) # six input rows stream through the grid
Y = np.zeros((6, 4), dtype=int)
# Cell (k, j) holds W[k, j]. Input X[i, k] enters row k from the left and reaches
# cell (k, j) at cycle i + k + j, where it is multiplied by the stored weight and
# added to the partial sum for Y[i, j] passing down column j
cycles = 6 + 4 + 4 - 2
for t in range(cycles):
for k in range(4):
for j in range(4):
i = t - k - j
if 0 <= i < 6:
Y[i, j] += X[i, k] * W[k, j]
print(f"{X.size * 4} multiply-adds in {cycles} cycles, equal to X @ W: {np.array_equal(Y, X @ W)}")96 multiply-adds in 12 cycles, equal to X @ W: True が出力されます。16個のセルが正確な行列積を計算する間、各重みはメモリから一度だけ読み込まれ、6つすべての入力行で再利用されます。第1世代TPUはこのパターンを256×256の8ビットセルのグリッドで実行し、1サイクル当たり65,536回の積和演算、ピーク性能92 兆回/秒を実現しました。シンプルで決定的な実行方式は、推論で99パーセンタイルの応答時間目標を達成するというGoogleの目標に適していました。
TPUはXLAでコンパイルされたコードを実行します。XLAはJAX、TensorFlow、PyTorchから計算グラフ全体を受け取り、行列ユニットに割り当てます。専用インターコネクトでチップを接続して数千個規模のポッドを構成することで、最大規模の基盤モデルを多数のTPUにまたがって同時に学習できます。
TPU、GPU、CPUの比較#
- CPU: 分岐処理や汎用コードに適した少数の高性能コアを備えており、多くの学習パイプラインでデータの読み込みと前処理を担います。
- GPU: 行列演算用のTensor Coreと、プログラム可能な数千個のコアを備えています。GPUはほぼあらゆるモデルやフレームワークを実行でき、多数のベンダーやクラウド事業者から提供されています。
- TPU: 柔軟性を抑える代わりに、大規模で密な行列演算の効率を高めます。テンソル形状が変わるとXLAで再コンパイルが必要になるため、静的な形状のワークロードに最適です。カスタム演算、分岐の多い処理、高精度演算にはあまり適していません。
- NPU: スマートフォン、ノートPC、エッジチップに搭載されるニューラルネットワークアクセラレーターの総称で、Edge TPUもこのカテゴリに含まれます。
Edge TPU#
Edge TPUは推論専用の小型TPUで、GoogleのCoral USB Accelerator、M.2およびPCIeモジュール、Dev Boardに搭載されています。2ワットで毎秒4兆回の演算を実行し、8ビット整数演算だけに対応するため、ネットワーク全体をモデル量子化でINT8に変換してから、GoogleのEdge TPU Compilerでコンパイルします。コンパイラーは対応する演算をチップに割り当て、それ以外をホストCPUに残します。Ultralytics YOLOでは format="edgetpu" によりこの2つの手順を自動化できます。この機能はINT8量子化を有効にし、x86-64 Linuxマシン上でコンパイラーを実行して、Coral USB Acceleratorを接続したRaspberry Piなどのボードで動作するモデルを生成します。
from ultralytics import YOLO
# Load the smallest YOLO26 detection model
model = YOLO("yolo26n.pt")
# Quantize to INT8 and compile for the Edge TPU (x86-64 Linux only)
path = model.export(format="edgetpu")
print(f"Edge TPU model: {path}")GoogleのCoralプラットフォームは現在、ウェアラブル向けに2025年10月に発表されたオープンソースのRISC-Vアクセラレーター設計であるCoral NPUを中心に展開しており、数ミリワットで毎秒5,120億回の演算を目標としています。










