GPU
Graphics Processing Unit / グラフィックス処理装置
大量の演算を並列処理できる専用プロセッサで、深層学習の学習・推論を支える計算基盤
概要
GPU(Graphics Processing Unit)は、元々3Dグラフィックスのレンダリング用に設計された、数千個の小さな演算コアを持つプロセッサ。CPUが少数の高性能コアで逐次処理を得意とするのに対し、GPUは多数のコアで同じ演算を大量のデータに並列適用するのを得意とする。ニューラルネットワークの学習・推論は行列演算(積和演算)の繰り返しであり、この特性がGPUの並列処理能力と非常に相性が良いため、深層学習の実用化を支える計算基盤として不可欠な存在になっている。NVIDIAのCUDAのようなGPU向け並列計算プラットフォームの普及も、機械学習フレームワークの発展を後押しした。
背景
ニューラルネットワークの学習は膨大な行列積・畳み込み演算を伴い、CPUのみでは現実的な時間で処理できない規模になった。もともと画像処理向けに並列演算性能を追求してきたGPUが、この行列演算のニーズと合致し、汎用計算(GPGPU)に転用されるようになった。
歴史
2006年: NVIDIAがGPU上で汎用計算を行うためのCUDAを発表。2012年: AlexNetがGPUを用いてImageNetコンペで圧勝し、深層学習とGPUの組み合わせが注目される契機に。2016年以降: NVIDIAが深層学習向けTensorコアを搭載したGPU(Volta世代以降)を展開し、大規模モデルの学習を加速。2020年代: LLMの学習・推論需要の急増によりGPUの供給がAI開発のボトルネックとなる場面も発生。
アーキテクチャ
少数のコアで複雑な逐次処理を行うCPUと異なり、GPUは多数の単純な演算コア(ストリーミングマルチプロセッサ)を持ち、同一の命令を大量のデータに同時適用するSIMD/SIMT方式で並列演算を行う。深層学習向けGPUには、行列積演算に特化したTensorコアが搭載されることも多い。
ワークフロー
モデルとデータをGPUメモリに転送 → 行列演算(順伝播・逆伝播)をGPU上で並列実行 → 勾配を用いてパラメータを更新 → 必要に応じて複数GPU間で勾配や重みを同期(分散学習)。
コード例
PyTorchでGPUを使う基本例
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
inputs = inputs.to(device)利点
- 行列演算・畳み込み演算を高度に並列化でき、学習・推論を大幅に高速化する
- CUDA等のエコシステムが整備され、主要な機械学習フレームワークが標準対応
- 複数GPUを連携させることで、より大規模なモデル・データセットを扱える
欠点
- 高性能GPUは高価で、大規模学習には多数のGPUを要するため導入・運用コストが高い
- 消費電力・発熱が大きく、データセンターの電力コストや冷却負荷が課題になる
- 需要急増時にはGPUの供給不足が発生し、入手性がボトルネックになることがある
比較
- ニューラルネットワーク — GPUの並列演算能力がニューラルネットワークの大規模な行列演算の学習を実用的にした
- LLM — LLMの大規模な事前学習は、多数のGPUを用いた分散学習によって支えられている
関連用語
よくある質問
GPUとTPUの違いは?
GPUは元々グラフィックス処理向けの汎用並列プロセッサ。TPU(Tensor Processing Unit)はGoogleが機械学習の行列演算に特化して設計した専用チップで、特定の演算パターンにおいてGPUより高い効率を発揮する場合がある。
参考文献
- Official WebsiteNVIDIA CUDA
- DocumentationPyTorch: CUDA Semantics