Tensorコアと行列演算アクセラレータの仕組み
なぜAI向けGPUは桁違いに速いのか。行列積をハード化するTensorコアと混合精度の原理を押さえ、TFLOPS表記の読み方と性能の勘所が掴めます。
- 1.Tensorコアは小行列の積和(例 4x4)を1命令で一括処理する専用回路で、シストリックアレイ風にデータを流して大量の積和を並列実行する。
- 2.入力をFP16/BF16/FP8/INT8など低精度にし、累算だけFP32で行う混合精度により、帯域とトランジスタを節約しつつ精度を保つ。
- 3.GEMM(行列積)はデータ再利用が大きく低精度に強いため、AIの主要演算はTensorコアで通常のFP32演算より一桁速くなる。
なぜ行列積を専用回路にするのか
ディープラーニングの計算の大半は GEMM(General Matrix Multiply、行列積) です。全結合層も畳み込みも注意機構も、突き詰めれば大きな行列同士の積に落ちます。行列積は C = A × B で、C の各要素が「A の1行と B の1列の内積」、すなわち積和(multiply-accumulate, MAC)の連続です。
汎用の演算器でこれを回すと、要素1つを計算するたびに命令フェッチ・デコード・レジスタ読み書きが発生します。GPUのSIMT実行で多数のスレッドに分散しても、MAC 1回あたりの制御オーバーヘッドは残ります。そこで「積和を大量に・固定パターンで行う」という性質に特化し、小さな行列積を丸ごと1命令で処理する専用回路を置いたのが Tensorコア(NVIDIA の呼称。一般には行列演算ユニット、MMA ユニット)です。
N×N の行列積は演算量が N の3乗のオーダー、入力データ量は N の2乗のオーダーです。つまり1要素を読むほどに何度も使い回せる「演算密度の高い」処理で、メモリ帯域より演算器の数が効きます。だからこそ演算器を敷き詰める専用ハードが報われます。
シストリックアレイ ─ データを流して積和を稼ぐ
行列演算アクセラレータの古典的な実装が シストリックアレイです。心臓(systole)が血液を送り出すように、データを格子状に並べた PE(処理要素、各PEは1個のMAC器) へ規則正しく流し込みます。
シストリックアレイ(積和の格子)
B列 → → →
A行 ┌───┬───┬───┐
↓ │PE │PE │PE │ 各PE: acc += a * b して
↓ ├───┼───┼───┤ a を右へ、b を下へ受け渡す
↓ │PE │PE │PE │
└───┴───┴───┘
各 PE は毎サイクル「流れてきた a と b を掛けて自分の累算器に足し、a を右隣へ、b を下隣へ送る」だけを行います。データは外周から一度入れれば、あとは PE 間をバケツリレーで伝播するので、1つの入力値が多数の PE で再利用され、レジスタファイルや SRAM への往復が激減します。N×N のアレイなら毎サイクル N の2乗回の MAC を、わずかな制御で実行できます。Google の TPU はこの方式を大規模化したものです。
NVIDIA の Tensorコアはアレイをそのまま露出する代わりに、D = A × B + C という小行列の積和を1つの命令(MMA)で実行する形を取ります。内部では同様に多数の MAC を空間的に並べて一括処理しますが、ワープ(32スレッド)が協調して断片を持ち寄る点が GPU 流です。
Tensorコアの基本演算が「積 A × B に既存の C を足し込む」形なのは、大きな行列積をタイル(小ブロック)に分割して部分積を足し上げるためです。大行列を一度に置けないので、小タイルの積和を繰り返し累算して最終結果を組み立てます。
混合精度 ─ 入力は低精度、累算はFP32
Tensorコアが効率的な最大の理由が 混合精度(mixed precision) です。乗算の入力には FP16・BF16・FP8・INT8 といった低ビット幅を使い、積を足し込む累算器だけは FP32(または INT32)の広い精度を保ちます。
なぜ分けるのか。掛け算は入力の精度が低くても、結果を足し合わせる段で誤差が累積します。多数の積を低精度のまま足すと桁落ちで精度が崩れますが、累算器を広く取れば、入力を削っても全体の精度は実用上保てます。一方で入力を低精度にすると、データ量が半分・1/4になりメモリ帯域とキャッシュ占有が減り、同じ面積により多くの乗算器を詰め込めます。
| 形式 | ビット幅 | 特徴 | 主な用途 |
|---|---|---|---|
| FP32 | 32 | 基準精度。指数8・仮数23 | 従来演算・最終累算 |
| FP16 | 16 | 仮数10で精度高いが指数5で範囲が狭い | 学習・推論 |
| BF16 | 16 | 指数8でFP32と同じ範囲。仮数7 | 学習(範囲重視) |
| FP8 | 8 | E4M3/E5M2。さらに高密度 | 大規模学習・推論 |
| INT8 | 8 | 整数。要量子化 | 推論(量子化後) |
BF16 と FP16 の違いは資格・実務で頻出です。両者とも 16 ビットですが、FP16 は仮数(精度)を、BF16 は指数(ダイナミックレンジ)を優先します。学習では勾配が極端な大小を取るため、範囲が FP32 と同じ BF16 が扱いやすく、損失スケーリングなしで安定しやすいのが利点です。FP8 は指数4・仮数3の E4M3 と、指数5・仮数2の E5M2 を用途で使い分けます。
ビット幅を削るほど表現できる値が粗くなり、量子化(特に INT8)では値域のスケーリングや外れ値処理を誤ると精度が大きく劣化します。混合精度が成立するのは「累算を広く保つ」「範囲に合った形式を選ぶ」前提があってこそで、闇雲に全部を FP8 にすれば速いわけではありません。
TFLOPS換算と「GPUが速い」の正体
カタログの TFLOPS(毎秒1兆回の浮動小数点演算) は、ざっくり次で決まります。
ピークFLOPS ≒ (MAC器の数) × (クロック周波数) × 2
※ 1回のMAC = 乗算1 + 加算1 で2 FLOP と数える
Tensorコアが通常のFP32演算より一桁以上速いのは、この式の MAC器の数を稼げるからです。混合精度で1つの乗算器が小さくなる分、同じシリコン面積により多くの器を敷き詰められ、さらに低精度ほど器あたりの面積が小さいので FP16 はFP32の数倍、FP8/INT8 はさらに倍のスループットが出ます。
ただしこれは理論ピークです。実効性能は、行列が小さくアレイを埋めきれない、タイルの端数で器が遊ぶ、入力供給がキャッシュ/メモリ帯域に律速される、といった要因で下がります。実測の指標が MFU(Model FLOPs Utilization、ピークに対する到達率) で、これが GPU を使いこなせているかの目安になります。
「TensorコアはGEMMの積和を1命令で一括処理する専用回路」「シストリックアレイはデータをPE格子に流して再利用し積和を稼ぐ」「混合精度は入力を低精度(FP16/BF16/FP8/INT8)、累算をFP32にする」「BF16はFP16より範囲が広く学習向き」「TFLOPSはMAC数×周波数×2で、低精度ほど高い」の5点を押さえましょう。
まとめ
- AIの計算の大半は GEMM(行列積) で、積和の繰り返しという固定パターンを専用回路化したのが Tensorコア。
- シストリックアレイはデータを PE 格子に流して各値を多数の器で再利用し、わずかな制御で大量の MAC を並列実行する。
- 混合精度は乗算入力を FP16/BF16/FP8/INT8 に落とし累算を FP32 に保つことで、帯域と面積を節約しつつ精度を維持する。BF16 は範囲重視で学習向き。
- ピーク TFLOPS は MAC 数×周波数×2 で決まり、低精度ほど器を詰め込めて速い。実効性能は供給帯域とタイル充填率で決まる。
Tensorコアは「行列積に絞って演算器を敷き詰め、精度を必要な分だけ使う」設計です。土台にある並列実行とメモリ階層はGPUのSIMTアーキテクチャとキャッシュメモリの原理も合わせてどうぞ。
CPU/メモリ/ディスク Article
Tensorコアと行列演算アクセラレータの仕組みを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
Tensorコア
比較で見る軸
難易度: advanced / カテゴリ: CPU/メモリ/ディスク / タグ数: 5
導入後に効く点
入力をFP16/BF16/FP8/INT8など低精度にし、累算だけFP32で行う混合精度により、帯域とトランジスタを節約しつつ精度を保つ。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- CPU/メモリ/ディスク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「Tensorコア / GEMM」に近いか確認する。
- 強みである「Tensorコアは小行列の積和(例 4x4)を1命令で一括処理する専用回路で、シストリックアレイ風にデータを流して大量の積和を並列実行する。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。