GPUとTPUの違いを解説

GPUとTPUの違いを解説
大規模言語モデルを学習させるとき、GPUとTPUのどちらを選ぶかで、学習時間が数倍違うことがあります。その秘密は、両者のアーキテクチャの根本的な違いにあります。
GPU(Graphics Processing Unit)とTPU(Tensor Processing Unit)は、どちらも高速な並列計算が可能なプロセッサですが、設計思想や最適化の対象が大きく異なります。この記事では、演算ユニット、計算方式、メモリアーキテクチャの観点から、両者の技術的な違いを詳しく解説します。
注記: 本記事ではGPUの例としてNVIDIA A100を、TPUの例としてGoogle Cloud TPU v3を中心に説明しています。新しいバージョン(TPU v4/v5など)ではアーキテクチャの詳細が異なる場合があります。
命令セットの違い:ALUとMXUの役割
プロセッサの中核となる演算ユニットは、どの計算に最適化されているかで大きく異なります。
用語解説
- ALU(算術論理演算器):足し算、掛け算、論理演算など、様々な種類の計算ができる汎用の演算ユニット
- MXU(行列乗算ユニット):行列×行列の計算に特化した専用の演算ユニット
GPU:ALU(算術論理演算器)
GPUは従来のCPUと同じくALU(Arithmetic Logic Unit)を中心に設計されています。ALUは汎用的な演算を実行でき、加算、減算、乗算、除算、論理演算など多様な計算に対応できます。
AIにおける役割: 前処理データの加工、活性化関数(ReLU、sigmoid)、正規化、その他の補助的な計算を効率的に処理します。ニューラルネットワーク全体を支える「汎用の計算エンジン」として機能します。
TPU:MXU(行列乗算ユニット)
一方、TPUはGoogle Tensorflowの推論・学習を最適化するために設計されており、MXU(Matrix Multiply Unit)を中心としています。MXUは行列乗算に特化した演算ユニットであり、ディープラーニングの中核となるテンソル計算に最適化されています。
AIにおける役割: ニューラルネットワークの全体の計算量の大部分を占める行列乗算を、極限まで高速化します。大規模言語モデルでは計算の90%以上が行列乗算であり、MXUはこの重い処理を効率的に処理するために存在します。
| 特性 | ALU(GPU) | MXU(TPU) |
|---|---|---|
| 汎用性 | 高い(全演算対応) | 低い(行列乗算特化) |
| 計算速度 | 中程度 | 非常に高速 |
| AI向けタスク | 補助的な計算全般 | 行列乗算(計算の大部分) |
| 電力効率 | 中程度 | 非常に効率的 |
計算方式の違い:SIMTとシストリックアレイ
GPU:SIMT(Single Instruction Multiple Thread)
GPUが採用するSIMT方式は、同一の命令を複数のスレッドが異なるデータに対して同期的に実行します。NVIDIA A100 GPUの場合、108個のストリーミングマルチプロセッサ(SM)があり、各SMで最大2,048スレッド(ソフトウェアスレッド)が実行可能です。実際には、32スレッドのワープ単位でロック・ステップ実行されます。
具体的な動作例: 画像分類ネットワークの全結合層(1024入力×1000出力)を処理する際、1000個の出力値を異なるスレッドで並行計算します。各スレッドは同じ「内積計算」命令を実行しますが、異なる重みベクトルと入力データに対して作用します。
GPU SIMT の実行例(全結合層)
入力(1024) × 重み(1024×1000) = 出力(1000)
┌────────┐ ┌──────┐ ┌────────┐
│入力 │ │w[0] │ │出力1 │
│ベクトル│ × │w[1] │ = │出力2 │
│ │ │... │ │出力3 │
└────────┘ │w[999]│ │... │
└──────┘ │出力1000│
└────────┘
特徴:各スレッドが異なる出力を並行計算
全スレッドが同じ「内積」命令を実行AIにおける役割: ニューラルネットワークの多様な層を処理します。畳み込み層では異なる位置のカーネル適用、全結合層では異なる出力ユニットの計算、正規化や活性化関数の適用など、異なる計算パターンの層をすべて効率的に実行できます。
メモリアクセス特性: 各スレッドが独立したレジスタを保持し、シェアドメモリやグローバルメモリにアクセスします。スレッド数が多いため、一部スレッドのメモリ遅延を他のスレッドの実行で隠蔽できます。
TPU:シストリックアレイ
TPUはシストリックアレイアーキテクチャを採用しています。Google TPU v3の場合、128×128の格子状にALU(乗算・加算ユニット)を配置した2つのシストリックアレイで構成されます。
具体的な動作例: 行列乗算 A(128×128)×B(128×128)を計算する場合:
TPU シストリックアレイ (128×128)
データは上と左から流入 → 計算結果は下と右に流出
B の列 →
↓ ↓ ↓ ↓
┌──┬──┬──┬──┐
A ↓ │①②③④│ ①=積和①, ②=積和②, ...
の │⑤⑥⑦⑧│ 格子状に配置された
行 ├──┼──┼──┼──┤ 乗算・加算ユニット
│⑨⑩⑪⑫│ (各セルがALU)
├──┼──┼──┼──┤
│⑬⑭⑮⑯│
└──┴──┴──┴──┘
↓ ↓ ↓ ↓
(出力)
128クロックで128×128行列乗算が完成します
(メモリアクセス不要)このプロセス中、メモリアクセスは発生しません。データがALU間を「流れ」ながら計算が進行します。
🔑 TPUの最大の特徴:メモリアクセスなしで計算完結
行列乗算中にメモリアクセスが一切発生しません。 データがALU間を波状に伝播しながら計算が進むため、 メモリバンド幅がボトルネックにならず、 GPUの10倍以上のスループットを実現します。
AIにおける役割: ニューラルネットワークの学習と推論を支配する行列乗算に特化しています。大規模言語モデルでは計算の90%以上が行列乗算(テンソル積)であり、TPUのシストリックアレイはこの重い処理を他のハードウェアより数桁高速に処理します。
| 特性 | SIMT(GPU) | シストリックアレイ(TPU) |
|---|---|---|
| ユニット配置 | ストリーミングマルチプロセッサ(階層的) | 128×128格子状(平面的) |
| 実行方式 | 各スレッド独立(メモリアクセス多い) | 計算結果が隣接ユニット間を伝播 |
| 柔軟性 | 高い(多様なアルゴリズム対応) | 低い(規則的タスク向け) |
| メモリ遅延対策 | 多数スレッド+キャッシュ | データフロー(遅延なし) |
| 電力効率 | 中程度(多くのメモリアクセス) | 極めて高い(メモリアクセス最小) |
| 行列乗算性能 | 中程度(Tflops) | 最高峰(Pflops級) |
メモリ階層の違い
GPU:複雑なメモリ階層
GPUはメモリ階層が複雑で、複数のレベルで構成されています(Google Cloud公式ドキュメント参照):
- グローバルメモリ:全スレッドから参照可能。容量は16GB~80GB。メモリアクセス時のレイテンシが大きい。
- シェアドメモリ:スレッドブロック内で共有。容量はスレッドブロック当たり96KB。グローバルメモリより高速。
- レジスタ:各スレッドが数百バイト~数KBを独立に持つ。最高速だが容量が限定的。スレッドブロック単位では最大256KBのレジスタリソースを共有します。
GPUには2,500~5,000個のALUが搭載されており、各々が独立したデータにアクセスするため、メモリアクセスパターンは不規則になりやすく、キャッシュミスが発生します。プログラマはシェアドメモリを効果的に使い、メモリアクセスを最適化する必要があります。
アーキテクチャ特性: von Neumann アーキテクチャを採用。計算のたびにメモリからデータを読み込む必要があり、メモリアクセスがボトルネックになることがあります。ただし、多くの異なるアルゴリズムに柔軟に対応できます。
TPU:シストリックアレイに最適化されたメモリ
TPUはシストリックアレイアーキテクチャに特化して設計されています(Google Cloud公式ドキュメント参照):
- High Bandwidth Memory(HBM):大容量のメインメモリ。パラメータと入力データを保持。
- Matrix Multiplication Unit(MXU):128×128のALUを格子状に配置(TPU v3の場合)。2つのシストリックアレイで構成され、合計2×(128×128)=32,768個のALUがあります。
- データフロー:パラメータをHBMからMXUに読み込み、その後メモリアクセス不要で計算が進行。
TPUの最大の特徴は、行列乗算中にメモリアクセスが発生しないことです。データがMXU内を流れている間、追加のメモリアクセスなしに積和演算が繰り返されます。
アーキテクチャ特性: シストリックアレイでは、128×128個のALUが格子状に接続され、計算結果が隣接ユニットに自動的に送信されます。この「流れ」により、メモリバンド幅を限界まで活用でき、GPUの10倍以上のスループットを実現します。
| 特性 | GPU(複雑なメモリ階層) | TPU(シストリック最適化) |
|---|---|---|
| 演算ユニット数 | 2,500~5,000 ALU | 32,768 ALU(2×128×128) |
| メモリアクセス | 計算のたびに必要 | 行列乗算中は不要 |
| レイテンシ隠蔽 | キャッシュと多数スレッド | データフローによる自動最適化 |
| アーキテクチャ | von Neumann(汎用) | シストリックアレイ(特化) |
| 最適用途 | 多様なアルゴリズム | 行列乗算中心のタスク |
エコシステムの違い
GPU:CUDAエコシステム
CUDAはNVIDIAが提供するプログラミングプラットフォームで、GPUプログラミングの事実上の標準です。多くの深層学習フレームワーク(PyTorch、TensorFlowなど)がCUDAをサポートしており、エコシステムが非常に充実しています。
TPU:Google Cloudエコシステム
TPUはGoogle Cloudプラットフォーム(GCP)上で利用でき、TensorFlowとの統合が深いです。Google Colabで無料版TPUを利用することもできますが、GPUほどエコシステムは広範ではありません。
用途の使い分け
- GPU:汎用の並列計算、グラフィックス処理、多様な機械学習タスク、推論と学習の両方
- TPU:大規模な深層学習の学習と推論、行列計算が中心のタスク、特にGoogle CloudやTensorFlowベースのプロジェクト
参考資料
- Google Cloud TPU システムアーキテクチャ - Google Cloud公式ドキュメント
- NVIDIA CUDA Toolkit - NVIDIA公式ドキュメント
- Hennessy, J. L., & Patterson, D. A. (2019). Computer Architecture: A Quantitative Approach (6th ed.). Morgan Kaufmann Publishers.
この記事はGitHubのIssue(issue #6)を元に作成しました。