- Authors

- Name
- Youngju Kim
- @fjvbn20031
はじめに
GPUはAIと深層学習の爆発的な成長を支える不可欠な原動力です。GPT-4、Llama 3、GeminiのようなLLMの学習には、何千ものGPUが数週間から数ヶ月稼働し続けます。GPUがなぜAIにとってこれほど重要なのでしょうか?そして、どのGPUを選ぶべきでしょうか?
このガイドでは、AIエンジニア、研究者、ML実践者向けにGPUハードウェアについて、アーキテクチャの基礎から最新のBlackwell GPU、クラウドサービスの比較、実践的な選定ガイダンスまで、あらゆることを網羅します。
1. GPU vs CPU:AI学習にGPUが必要な理由
並列コンピューティング:AIの本質
深層学習の中核演算は行列乗算です。ニューラルネットワークのフォワードパスとバックワードパスは、数十億回の乗算と加算で構成されます。これらの演算は互いに独立しているため、並列化に完全に適しています。
CPUは高性能なシリアル処理に最適化されています。典型的なサーバーCPUは64〜128コアを搭載し、各コアに複雑な制御ロジック、大容量キャッシュ、分岐予測を備えています。これはシーケンシャルなタスク、複雑な条件分岐、OSの管理に優れています。
一方でGPUは、数千から数万の小さなコアがSIMD(Single Instruction, Multiple Data)方式で同時に同じ演算を実行します。NVIDIA H100には驚異の16,896個のCUDAコアがあります。行列乗算のように同じ演算を繰り返すワークロードでは、GPUはCPUの数百倍のスループットを発揮できます。
FLOPS:計算性能の尺度
深層学習の性能議論で最も一般的に使われる単位はFLOPS(Floating Point Operations Per Second)です。
- TFLOPS(テラフロップス):1秒間に1兆回の浮動小数点演算
- PFLOPS(ペタフロップス):1秒間に1000兆回の浮動小数点演算
現代のAIワークロードは主に以下の精度を使用します:
- FP32(単精度浮動小数点):学習時のマスター重みの保存
- FP16(半精度浮動小数点):混合精度学習
- BF16(Brain Float 16):FP16より安定した学習
- TF32(TensorFloat-32):NVIDIA A100以降でサポート
- FP8:HopperとBlackwellでサポート、推論と学習の両方に使用
- FP4:Blackwellで新たにサポート、超高密度推論
NVIDIA H100のFP16 Tensor Core性能は驚異の989 TFLOPSに達します——ほぼ1 PFLOPSです。
メモリ帯域幅:真のボトルネック
多くのAIワークロードは計算ではなくメモリ帯域幅によって制限されます——これをメモリバウンドと呼びます。
LLM(大規模言語モデル)の推論を例に挙げると:トークンを生成するたびに、フルモデルの重みをメモリから読み取る必要があります。FP16でのLlama 3 70Bモデルは約140GBのメモリを消費します。毎秒数十トークンを生成するには、毎秒テラバイト単位でメモリから読み取る必要があります。
最新のGPUメモリ帯域幅:
- NVIDIA A100 SXM:2,000 GB/s
- NVIDIA H100 SXM:3,350 GB/s
- NVIDIA H200 SXM:4,800 GB/s
- NVIDIA B200:8,000 GB/s(予定)
これがデータセンターGPUでHBM(High Bandwidth Memory)が採用されている理由です。HBMは従来のGDDRメモリよりはるかに高い帯域幅を提供します。
2. NVIDIA GPUアーキテクチャの歴史
Pascalアーキテクチャ(2016年):AIルネサンスの幕開け
エンジニアのBlaise Pascalにちなんで名付けられたPascalアーキテクチャは2016年にリリースされました。GTX 1080(コンシューマー向け)とP100(データセンター向け)がこのアーキテクチャを採用しました。
P100の主要スペック:
- CUDAコア数:3,584
- FP32性能:9.3 TFLOPS
- FP16性能:18.7 TFLOPS
- メモリ:16GB HBM2、720 GB/s
P100はHBM2メモリを採用した最初のデータセンターGPUです。この時代にNVLink 1.0も導入されました。AlphaGoが李世乭を破った頃で、AIブームが本格的に始まりました。
Voltaアーキテクチャ(2017年):Tensor Coreの登場
VoltaアーキテクチャはGPUの歴史における転換点です。2017年にリリースされたV100は世界で初めてTensor Coreを導入しました。Tensor Coreは行列乗算を高速化する専用ハードウェアユニットです。
V100の主要スペック:
- CUDAコア数:5,120
- 第1世代Tensor Core:640
- FP32性能:14 TFLOPS
- FP16 Tensor Core性能:112 TFLOPS(8倍の向上!)
- メモリ:32GB HBM2、900 GB/s
- NVLink 2.0:300 GB/s
単一のTensor CoreはFP16の4x4行列乗算累積(D = A*B + C)を1サイクルで実行します。これによりFP16性能がFP32比で8倍に向上し、深層学習の学習速度に革命をもたらしました。
Turingアーキテクチャ(2018年):RT CoreとDLSS
Turingアーキテクチャはコンシューマー向けRTXシリーズで有名です。RT Core(専用レイトレーシングユニット)が初めて登場し、AIベースの画像アップスケーリングであるDLSSも導入されました。
RTX 2080 Tiの主要スペック:
- CUDAコア数:4,352
- Tensor Core:544(第2世代)
- FP32性能:13.4 TFLOPS
- FP16 Tensor Core:107 TFLOPS
- メモリ:11GB GDDR6、616 GB/s
AI観点からのTuringの意義は、INT8量子化推論のサポートです。推論サーバーのモデルをINT8に量子化することで、FP16と比べて2倍高速な推論が実現しました。
Ampereアーキテクチャ(2020年):A100と第3世代Tensor Core
Ampereアーキテクチャはパラダイムを再び変えました。A100は現在も多くのデータセンターで主力GPUとして活躍しています。
A100 SXM4 80GBの主要スペック:
- CUDAコア数:6,912
- 第3世代Tensor Core:432
- FP32性能:19.5 TFLOPS
- FP16 Tensor Core:312 TFLOPS
- TF32 Tensor Core:156 TFLOPS
- BF16 Tensor Core:312 TFLOPS
- INT8 Tensor Core:624 TOPS
- メモリ:80GB HBM2e、2,000 GB/s
- NVLink 3.0:600 GB/s
Ampereの主要なイノベーション:
TF32(TensorFloat-32):FP32とFP16のハイブリッド。指数部はFP32と同じ(8ビット)、仮数部はFP16と同じ(10ビット)。既存のFP32コードを変更することなくTensor Coreの速度を利用できます——数値的安定性と速度のバランスをとります。
スパース性サポート:A100はハードウェアで2:4構造化スパース性をサポートします。モデルパラメータの50%をゼロに設定する(プルーニング)と、Tensor Coreがこれを活用してさらに2倍の性能向上を得られます。INT8では理論上最大1,248 TOPSに達します。
Multi-Instance GPU(MIG):A100は最大7つの独立したGPUインスタンスに分割できます。推論サーバーで分離された環境で複数の小規模モデルを実行するのに便利です。
Hopperアーキテクチャ(2022年):Transformer Engine
Hopperアーキテクチャはトランスフォーマーモデルに特化したイノベーションをもたらしました。H100は現在最も広く普及している高性能AI学習GPUです。
H100 SXM5 80GBの主要スペック:
- CUDAコア数:16,896
- 第4世代Tensor Core:528
- FP32性能:60 TFLOPS
- FP16/BF16 Tensor Core:989 TFLOPS(約1 PFLOPS!)
- FP8 Tensor Core:1,979 TFLOPS(約2 PFLOPS)
- メモリ:80GB HBM3、3,350 GB/s
- NVLink 4.0:900 GB/s
- TDP:700W
Hopperの主要なイノベーション:
Transformer Engine:トランスフォーマーモデルのアテンションおよびMLPレイヤーに対するハードウェアレベルの最適化。レイヤーごとにFP8とFP16を自動で切り替えます。リリース時にA100比最大9倍のAI性能を実現。
FP8サポート:E4M3とE5M2のFP8フォーマットをサポート。FP16比でTensor Core性能が2倍。メモリ使用量は半分。
Thread Block Clusters:SM(Streaming Multiprocessor)同士が共有メモリのように通信できます。分散共有メモリが可能になります。
NVLink 4.0:900 GB/s、前世代比1.5倍の向上。最大8 GPUのフルメッシュ接続。
H200 SXM 141GBの主要スペック:
- 計算性能:H100と同等
- メモリ:141GB HBM3e(H100比76%増)
- 帯域幅:4,800 GB/s(H100比43%増)
- LLM推論のスループットがH100比最大2倍
- 大規模モデル(70B以上のLLM)をシングルGPUに搭載可能
Blackwellアーキテクチャ(2024年):次世代AI加速
2024年に発表されたBlackwellアーキテクチャは、NVIDIAの最新世代です。
B200 SXMの主要スペック:
- 計算性能:20 PFLOPS(FP4)
- FP8性能:9 PFLOPS
- メモリ:192GB HBM3e、8,000 GB/s
- NVLink 5.0:1,800 GB/s
Blackwellの主要なイノベーション:
FP4サポート:4ビット浮動小数点のサポートにより超高密度推論が可能——FP8比で2倍以上のスループット。
第2世代Transformer Engine:FP4やFP6を含む新しい精度フォーマットを自動管理。
NVLink 5.0:1,800 GB/s、前世代比2倍の向上。
GB200 NVL72:36基のGrace CPUと72基のB200 GPUを単一のラックスケールシステムに統合。すべてのGPUがNVLinkで接続され、1台の巨大なGPUとして機能。1.4 ExaFLOPS(FP4)を達成。
3. Tensor Coreの深掘り
CUDAコア vs Tensor Core
CUDAコアは汎用の浮動小数点実行ユニットです。1クロックサイクルあたり1回のFP32 FMA(Fused Multiply-Add)演算を処理します。
Tensor Coreは専用の行列乗算ユニットです。第1世代のTensor Coreは1クロックサイクルで4x4 FP16行列乗算累積(D = A * B + C)を実行します。これはFP16の乗算64回とFP16の加算64回——1サイクルあたり128回のFP16演算に相当します。
世代別Tensor Coreの進化:
| 世代 | アーキテクチャ | サポート精度 | 行列サイズ | 備考 |
|---|---|---|---|---|
| 第1世代 | Volta | FP16 | 4x4 | 最初のTensor Core |
| 第2世代 | Turing | FP16、INT8、INT4 | - | INTサポート追加 |
| 第3世代 | Ampere | FP16、BF16、TF32、INT8、INT4 | - | TF32、スパース性 |
| 第4世代 | Hopper | FP16、BF16、TF32、FP8、INT8 | - | FP8、Transformer Engine |
| 第5世代 | Blackwell | FP16、BF16、TF32、FP8、FP4 | - | FP4サポート |
WMMA(Warp Matrix Multiply-Accumulate)
CUDAプログラミングでTensor Coreを直接使用するには、WMMA APIを使います:
#include <mma.h>
using namespace nvcuda::wmma;
// 16x16x16 FP16行列乗算
fragment<matrix_a, 16, 16, 16, half, row_major> a_frag;
fragment<matrix_b, 16, 16, 16, half, col_major> b_frag;
fragment<accumulator, 16, 16, 16, float> c_frag;
fill_fragment(c_frag, 0.0f);
// 行列のロード
load_matrix_sync(a_frag, a_ptr, 16);
load_matrix_sync(b_frag, b_ptr, 16);
// Tensor Core乗算の実行
mma_sync(c_frag, a_frag, b_frag, c_frag);
// 結果の保存
store_matrix_sync(c_ptr, c_frag, 16, mem_row_major);
実際にはcuBLASとPyTorchがこれを自動的に処理します。
混合精度学習
混合精度学習はFP32のマスター重みを維持しながら、フォワード/バックワードパスをFP16またはBF16で実行します。
# PyTorch AMP(Automatic Mixed Precision)
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
for batch in dataloader:
with autocast(dtype=torch.bfloat16):
output = model(batch)
loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
BF16はFP16より学習安定性が高いです。FP16の5ビット指数は範囲が狭くオーバーフローの可能性がありますが、BF16の8ビット指数(FP32と同じ)はずっと広い範囲を表現できます。
スパース性サポート
A100以降でサポートされる2:4構造化スパース性は、パラメータを4つのグループに分けて、そのうち正確に2つをゼロに設定します。
# PyTorch Sparse Tensor Core
from torch.nn.utils import prune
# 2:4構造化プルーニングの適用
prune.ln_structured(model.layer, name='weight', amount=0.5, n=2, dim=0)
50%プルーニング後、同じモデルの推論速度が理論上2倍になります。
4. GPUメモリ階層
GDDR vs HBM:ゲームチェンジャー
GDDR6(Graphics DDR6):コンシューマー向けGPUに使用。パッケージ外に別チップとして搭載。RTX 4090:24GB GDDR6X、1,008 GB/s。
HBM2e(High Bandwidth Memory 2e):データセンターGPUに使用。シリコンインターポーザーで接続し、2.5Dパッケージングでわずか。A100:80GB HBM2e、2,000 GB/s。
HBM3:H100に搭載。80GB、3,350 GB/s。
HBM3e:H200に搭載。141GB、4,800 GB/s。B200にも搭載:192GB、8,000 GB/s。
HBMがなぜ高速なのか?HBMは複数のDRAMダイを垂直に積層し、シリコンインターポーザー上に配置されたGPUダイとHBMスタックが超短距離で超広帯域幅通信を行います。
メモリ階層構造
レジスタ(Register File)
└── 最高速;スレッドあたり数十〜数百個
L1キャッシュ / 共有メモリ
└── SM(Streaming Multiprocessor)内で共有
└── H100:SMあたり228KB
L2キャッシュ
└── 全SMで共有
└── H100:50MB
HBM(メインメモリ)
└── 全SMからアクセス可能
└── H100:80GB
カーネル最適化の鍵は、データをできる限り長く共有メモリに保持して、低速なHBMアクセスを最小化することです。Flash Attentionはこの原則をアテンション計算に適用した好例です。
ECCメモリ
ECC(Error-Correcting Code)メモリはビットエラーを検出・訂正します。データセンターGPU(A100、H100など)はECCをサポートします。コンシューマーGPU(RTX 4090)はサポートしません。
長時間の学習中のメモリエラーは学習の発散やNaN値を引き起こす可能性があります。重要な学習ジョブにはECC対応GPUを推奨します。ECCを有効にすると使用可能なメモリ容量が約6.25%減少します。
5. マルチGPU接続:NVLinkとNVSwitch
PCIeのボトルネック
標準のPCIe 4.0 x16スロットは最大32 GB/s(双方向で64 GB/s)の帯域幅を提供します。マルチGPU学習では、勾配同期がこのインターフェースのボトルネックになります。
4つのGPUでAll-Reduceを考えてみましょう:各GPUは他の3つと勾配を交換する必要があります。10Bパラメータモデルは約40GBのFP32勾配を持ちます。PCIe経由でこれを交換すると数十秒かかる場合があります。
NVLinkの進化
| バージョン | アーキテクチャ | 単方向BW | 双方向BW |
|---|---|---|---|
| 1.0 | Pascal | 20 GB/s | 40 GB/s |
| 2.0 | Volta | 25 GB/s | 50 GB/s |
| 3.0 | Ampere | 25 GB/s | 50 GB/s(合計600 GB/s) |
| 4.0 | Hopper | 50 GB/s | 900 GB/s |
| 5.0 | Blackwell | 100 GB/s | 1,800 GB/s |
NVLink 4.0はGPUペア間で最大900 GB/sの双方向帯域幅を提供——PCIe 4.0 x16の14倍以上高速です。
NVSwitch:全対全接続
NVLinkはGPUのペアを直接接続しますが、8台以上のGPUを接続するにはNVSwitchが必要です。NVSwitchは専用のGPUインターコネクトスイッチチップで、接続されたすべてのGPUがフルNVLink帯域幅で直接通信できるようにします。
DGX H100システム構成:
- H100 SXM5 GPUが8基
- NVSwitch 4.0が4基
- すべてのGPUペアが900 GB/sで直接接続
- NVLink全対全合計帯域幅:7.2 TB/s
DGX A100 vs DGX H100
DGX A100:
- GPU:A100 80GBが8基
- NVLink合計帯域幅:4.8 TB/s
- GPUメモリ:640GB
- AI性能:5 PFLOPS(FP16)
DGX H100:
- GPU:H100 80GBが8基
- NVLink合計帯域幅:7.2 TB/s
- GPUメモリ:640GB
- AI性能:32 PFLOPS(FP8)
- DGX A100比約6.4倍の性能
InfiniBand:ノード間接続
NVLinkはノード内接続を担いますが、複数のサーバーノードを接続するのはInfiniBand(IB)ネットワークです。NVIDIA ConnectX-7 NICとInfiniBand NDR(400 Gb/s)により、サーバー間通信のレイテンシを最小化します。
大規模LLMの学習には数千のGPUを接続する必要があります。MetaのLlama 3の学習では16,000基のH100が使用され、すべてが大規模なInfiniBandファブリックで接続されました。
6. AI GPU詳細比較
NVIDIA A100(80GB HBM2e)
2020年にリリースされたA100は、多くのAIワークロードの標準として現在も活躍しています。FP16 312 TFLOPS、BF16 312 TFLOPS、TF32 156 TFLOPSを提供します。
SXM4フォームファクターはNVLink 3.0で最大8 GPUをサポート;PCIe 4.0バージョンも存在します。MIG(Multi-Instance GPU)によりA100を最大7つの独立したインスタンスに分割できます。
クラウド時間単価の目安:AWS p4d.24xlarge(8x A100)で約$32.77/時。
NVIDIA H100(80GB HBM3)
2022年リリース。現在最も広く普及している高性能AI学習GPU。
SXM5バージョン:
- FP16/BF16 Tensor Core:989 TFLOPS
- FP8 Tensor Core:1,979 TFLOPS
- メモリ:80GB HBM3、3,350 GB/s
- TDP:700W
- NVLink 4.0:900 GB/s
PCIeバージョン:
- FP16/BF16 Tensor Core:756 TFLOPS
- メモリ:80GB HBM3、2,000 GB/s
- TDP:350W
H100 vs A100:
- Tensor Core性能:3.2倍(FP16)
- FP8 vs INT8:6倍
- メモリ帯域幅:1.7倍(HBM3)
- NVLink帯域幅:1.5倍
クラウド時間単価の目安:AWS p5.48xlarge(8x H100)で約$98.32/時。
NVIDIA H200(141GB HBM3e)
メモリを強化したH100。計算性能はH100と同一ですが、メモリ容量と帯域幅が大幅に向上しています。
- メモリ:141GB HBM3e(H100比76%増)
- 帯域幅:4,800 GB/s(H100比43%増)
- LLM推論のスループットがH100比最大2倍
- 大規模モデル(70B以上のLLM)をシングルGPUに搭載可能
NVIDIA B100 / B200(Blackwell)
2024年発表。まだ初期デプロイ段階。
B200 SXM:
- FP4 Tensor Core:20 PFLOPS
- FP8 Tensor Core:9 PFLOPS
- FP16/BF16 Tensor Core:4.5 PFLOPS
- メモリ:192GB HBM3e、8,000 GB/s
- TDP:1,000W
B200 vs H100:
- FP8性能:4.5倍
- メモリ:2.4倍
- 帯域幅:2.4倍
NVIDIA GB200 NVL72(ラックスケールAI)
GB200はGrace CPU(ARMベース)とB200 GPUを単一のスーパーチップパッケージに統合しています。GB200 NVL72は36基のGrace CPUと72基のB200 GPUを単一のラックシステムに統合します。
GB200 NVL72のスペック:
- GPU:72基のB200
- CPU:36基のGrace Hopperスーパーチップ
- GPUメモリ:13.8TB HBM3e
- NVLink 5.0全対全接続
- AI性能:1.4 ExaFLOPS(FP4)、720 PFLOPS(FP8)
- 総消費電力:120kW
これは事実上1台の巨大なGPUとして動作します。単一のラックでLlama 3 405Bのような大規模モデルを高スループットで処理できます。
GeForce RTX 4090(コンシューマー向け)
AIスタートアップや個人研究者向けの最良のコンシューマーGPU。
- CUDAコア数:16,384
- FP32性能:82.6 TFLOPS
- FP16 Tensor Core:約330 TFLOPS(概算)
- メモリ:24GB GDDR6X、1,008 GB/s
- TDP:450W
- 価格:約$1,599(希望小売価格)
H100 SXMとの比較:
- Tensor Core:約1/3の性能
- メモリ:24GB vs 80GB
- 帯域幅:1,008 vs 3,350 GB/s
- ECC:非サポート
- NVLink:非サポート(PCIeのみ)
- MIG:非サポート
- 価格:約1/20(H100は3万ドル以上)
AMD MI300X
AMDのデータセンターAI GPU。
- Compute Unit(CU)数:304
- FP16性能:1,307 TFLOPS
- BF16性能:1,307 TFLOPS
- FP8性能:2,614 TOPS
- メモリ:192GB HBM3、5,300 GB/s
- TDP:750W
MI300XはH100に対してメモリ容量(192GB vs 80GB)と帯域幅(5,300 vs 3,350 GB/s)で顕著な優位性を持ちます。LLM推論に特に優れています。
GPU性能比較表
| GPU | FP16 TFLOPS | メモリ | 帯域幅 | TDP | 年 |
|---|---|---|---|---|---|
| A100 SXM | 312 | 80GB HBM2e | 2,000 GB/s | 400W | 2020 |
| RTX 4090 | 約330 | 24GB GDDR6X | 1,008 GB/s | 450W | 2022 |
| H100 SXM | 989 | 80GB HBM3 | 3,350 GB/s | 700W | 2022 |
| MI300X | 1,307 | 192GB HBM3 | 5,300 GB/s | 750W | 2023 |
| H200 SXM | 989 | 141GB HBM3e | 4,800 GB/s | 700W | 2024 |
| B200 SXM | 4,500 | 192GB HBM3e | 8,000 GB/s | 1,000W | 2024 |
7. AI向けAMD GPU
ROCmエコシステム
AMDのAIソフトウェアスタックはROCm(Radeon Open Compute)です——CUDAと互換性のあるオープンソースプラットフォームです。PyTorchやTensorFlowなどの主要フレームワークとの互換性は近年大幅に向上しています。
ROCmのCUDA相当コンポーネント:
- HIP(Heterogeneous-compute Interface for Portability):CUDA C++相当
- rocBLAS:cuBLAS相当(行列演算)
- MIOpen:cuDNN相当(深層学習プリミティブ)
- rccl:NCCL相当(GPU通信)
ROCmサポート付きPyTorchのインストール:
# ROCmサポート付きPyTorchのインストール
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.0
MI300Xの主要特性
MI300XはAMDの現行フラグシップAI GPUです。GPUダイとHBMスタックを3Dで統合する先進パッケージング(MCM:Multi-Chip Module)を使用したCDNA 3アーキテクチャを採用しています。
MI300Xの192GB HBM3と5,300 GB/sの帯域幅は、一部のLLM推論シナリオ——特にメモリバウンドのワークロード(大バッチ、長シーケンス)——でH100を上回ることができます。
Microsoft Azure、Oracle CloudなどがすでにMI300Xインスタンスの提供を開始しています。MetaやMicrosoftを含む大手テック企業がAMD GPUを積極的に採用し始めています。
AMD vs NVIDIAのソフトウェアエコシステム
率直に言えば、現在AI分野ではNVIDIA CUDAのソフトウェアエコシステムが依然として圧倒的です。
- NVIDIA独自ライブラリ:cuDNN、cuBLAS、TensorRT、NCCL、NVTXなど
- FlashAttentionはもともとCUDA専用(後にROCmポートが登場)
- 多くの研究コードがCUDAを前提としている
- ROCmは急速に追いついているが完全な互換性にはまだ至っていない
本番環境でAMD GPUを選択すると、ソフトウェア互換性の問題に対処するために追加のエンジニアリング時間が必要になる場合があります。
8. クラウドGPUサービスの比較
AWS GPUインスタンス
p3シリーズ(V100):
- p3.2xlarge:1基のV100、$3.06/時
- p3.16xlarge:8基のV100、$24.48/時
p4dシリーズ(A100):
- p4d.24xlarge:8基のA100、320GB HBM2、$32.77/時
p5シリーズ(H100):
- p5.48xlarge:8基のH100、640GB HBM3、$98.32/時
AWS Trainium(Trn1):
- AWS独自のAI学習チップ(Trainium 2)
- Trn1.32xlarge:16基のTrainium、$21.50/時
- LLM学習においてH100よりコストパフォーマンスが優秀
AWS Inferentia(Inf2):
- 推論専用チップ
- Inf2.48xlarge:12基のInferentia2、$12.98/時
- Llama 2 70B推論に最適化
スポットインスタンスはオンデマンド比60〜90%の節約が可能。インスタンスが中断される可能性があるため、チェックポイントが不可欠です。
Google Cloud GPUインスタンス
A100インスタンス:
- a2-highgpu-1g:1基のA100(40GB)、$3.67/時
- a2-megagpu-16g:16基のA100、$55.74/時
H100インスタンス:
- a3-highgpu-8g:8基のH100、約$19〜25/時(地域によって異なる)
Google TPU v4/v5:
- TPU v4:AI学習最適化ASIC、400 TFlops/チップ
- TPU v5e:大規模推論に最適化
- TPU v5p:最新の学習重視、459 TFlops/チップ
- GoogleのJAXフレームワークとの互換性が最良
Azure GPUインスタンス
ND H100 v5:
- Standard_ND96isr_H100_v5:8基のH100
- InfiniBand NDRによるノード間接続
NCas_T4_v3:
- T4ベースの推論インスタンス
- Standard_NC64as_T4_v3:4基のT4、$4.35/時
Lambda Labs、CoreWeave、Vast.ai
クラウドスタートアップはAWS/GCP/Azureよりも安価にGPUを提供しています。
Lambda Labs:
- H100 SXM5 8基インスタンス:$26.80/時(AWS p5比73%安)
- Lambda CloudはAI研究者向けに特化
CoreWeave:
- プロフェッショナルGPUクラウド
- H100シングル:$2.89/時
- 大規模クラスター構成が可能
Vast.ai:
- GPUマーケットプレイス(個人や企業がGPUを貸し出し)
- H100が約$2〜3/時(市場価格)
- セキュリティ感度が低い実験的学習に適している
クラウドGPUコスト試算
LLM学習コスト例(Llama 3 8B、8基のA100、1,000億トークン):
学習時間の見積もり:
- Chinchillaの法則:8Bパラメータ x 1,000億トークン
- 8基のA100クラスターで約7〜10日
- p4d.24xlarge:$32.77/時 x 24時間 x 8日 = 約$6,291
コスト削減戦略:
1. スポットインスタンス:70%節約 -> 約$1,887
2. Lambda Labs:$11.60/時 x 24時間 x 8日 = 約$2,227
3. CoreWeave:さらに安価な可能性
9. GPU選定ガイド
学習 vs 推論
学習で重要な要素:
- 高性能なTensor Core(BF16/FP8)
- 十分なメモリ(バッチサイズ、勾配、オプティマイザ状態)
- NVLink帯域幅(マルチGPU勾配同期)
- ECCメモリ(安定性)
推論で重要な要素:
- メモリ帯域幅(KVキャッシュの読み取り速度)
- メモリ容量(モデル+KVキャッシュ)
- INT8/FP8/FP4サポート
- MIG(複数の小規模モデルの分離実行)
モデルサイズ別GPUの必要量
FP16での必要メモリ:
| モデルサイズ | パラメータメモリ | 学習メモリ | 必要GPU数 |
|---|---|---|---|
| 7B | 14GB | 約56GB | H100 1基(80GB) |
| 13B | 26GB | 約104GB | H100 2基 |
| 70B | 140GB | 約560GB | H100 8基 |
| 405B | 810GB | 約3.2TB | H100 40基以上 |
| 1T | 2TB | 約8TB | H100 100基以上 |
学習メモリ = パラメータ x 4(FP16パラメータ、勾配、Adamの2つのモーメント)+アクティベーション
メモリ節約技術:
- Gradient Checkpointing:アクティベーションメモリを大幅削減(20〜30%の速度トレードオフ)
- FSDP/ZeRO:パラメータ、勾配、オプティマイザ状態をGPU間で分散
- Flash Attention:アテンション計算のO(N²)→O(N)メモリ化
- FP8学習:メモリ使用量を半減
予算別推奨
個人研究者(約20万円):
- RTX 4090(24GB、約20万円):小規模モデルのファインチューニング、LoRA学習
- 7Bモデルの QLoRA ファインチューニングが実現可能
- FlashAttentionサポート(Ada Lovelaceアーキテクチャ)
スタートアップチーム(約100〜500万円):
- RTX 4090を4〜8基:小規模LLM実験
- または中古のA100 40GB/80GB x 1〜4基
- ハイブリッドクラウド戦略を推奨
中規模AIチーム(1億円以上):
- H100 8基(DGX H100レベル):3,200万円以上
- またはLambda Labs/CoreWeaveクラウド
- 1,000億パラメータ以上のモデルを学習可能
大規模研究機関/エンタープライズ:
- 数百〜数千基のH100/H200 GPU
- GB200 NVL72ラックシステム
- 専用InfiniBandネットワーク
コンシューマー vs データセンター
| 特性 | RTX 4090 | H100 SXM |
|---|---|---|
| メモリ | 24GB GDDR6X | 80GB HBM3 |
| 帯域幅 | 1,008 GB/s | 3,350 GB/s |
| FP16性能 | 約330 TFLOPS | 989 TFLOPS |
| ECC | 非サポート | サポート |
| NVLink | 非サポート | サポート |
| MIG | 非サポート | サポート |
| TDP | 450W | 700W |
| 価格 | 約$1,600 | 約$30,000以上 |
| 保証 | コンシューマー3年 | エンタープライズ |
10. GPUのモニタリングと最適化
nvidia-smiの使用
nvidia-smiはNVIDIA GPUをモニタリングするための主要なCLIツールです。
# 基本的なGPUステータス
nvidia-smi
# リアルタイムモニタリング(1秒更新)
watch -n 1 nvidia-smi
# ログ記録のためのCSV出力
nvidia-smi --query-gpu=timestamp,name,pci.bus_id,driver_version,pstate,\
pcie.link.gen.max,pcie.link.gen.current,temperature.gpu,utilization.gpu,\
utilization.memory,memory.total,memory.free,memory.used \
--format=csv -l 1 > gpu_log.csv
# プロセスごとのGPUメモリ使用量
nvidia-smi pmon -s m
# GPUトポロジー(NVLink接続)
nvidia-smi topo -m
PyTorchのGPU使用率最適化
import torch
# GPUメモリ使用量の確認
print(f"Allocated memory: {torch.cuda.memory_allocated() / 1e9:.2f} GB")
print(f"Reserved memory: {torch.cuda.memory_reserved() / 1e9:.2f} GB")
# 詳細なメモリ解析
print(torch.cuda.memory_summary())
# DataLoaderの最適化
dataloader = DataLoader(
dataset,
batch_size=64,
num_workers=4, # CPUコア数に合わせて調整
pin_memory=True, # GPUへの転送を高速化するためCPU RAMをピン
prefetch_factor=2, # プリフェッチするバッチ数
persistent_workers=True # ワーカープロセスを再利用
)
# 演算のオーバーラップのためのCUDA Streams
stream1 = torch.cuda.Stream()
stream2 = torch.cuda.Stream()
with torch.cuda.stream(stream1):
result1 = model_part1(data1)
with torch.cuda.stream(stream2):
result2 = model_part2(data2) # stream1と並列実行
torch.cuda.synchronize()
GPU使用率最適化チェックリスト
GPU使用率が低い(70%未満)一般的な原因と対処法:
- データローディングのボトルネック:
num_workersを増やし、pin_memory=Trueを設定 - バッチサイズが小さすぎる:Gradient Accumulationを使用して実効バッチサイズを増やす
- Python GILのボトルネック:CUDA GraphsでCPUオーバーヘッドを最小化
- メモリフラグメンテーション:定期的に
torch.cuda.empty_cache()を呼び出す
# CPUオーバーヘッド最小化のためのCUDA Graphs
static_input = torch.randn(batch_size, input_size, device='cuda')
static_target = torch.randn(batch_size, output_size, device='cuda')
# ウォームアップ
for _ in range(3):
output = model(static_input)
loss = criterion(output, static_target)
loss.backward()
optimizer.step()
optimizer.zero_grad()
# CUDA Graphのキャプチャ
g = torch.cuda.CUDAGraph()
with torch.cuda.graph(g):
output = model(static_input)
loss = criterion(output, static_target)
loss.backward()
optimizer.step()
optimizer.zero_grad()
# 実データで実行
for real_input, real_target in dataloader:
static_input.copy_(real_input)
static_target.copy_(real_target)
g.replay() # CUDA Graphを再生(CPUオーバーヘッドほぼゼロ)
温度管理
データセンターGPUは数百ワットの熱を発生させます。温度管理は性能と寿命に直接影響します。
- H100 SXM TDP:700W、最大温度:83°C
- 超過した場合は自動的にサーマルスロットリングで性能を制限
- DGXシステムは直接液冷をサポート
# リアルタイムGPU温度モニタリング
nvidia-smi dmon -s t
# ファン速度制御(コンシューマーGPU)
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" \
-a "[fan:0]/GPUTargetFanSpeed=80"
# 電力制限(性能を一部犠牲にして過熱を防ぐ)
sudo nvidia-smi -pl 300 # 電力を300Wに制限
マルチGPUセットアップ
4基以上のGPU構成では正しい設定が重要です。
# GPU接続トポロジーの確認
nvidia-smi topo -m
# NVLinkで接続されたGPUペアとPCIe接続が表示される
# NCCLデバッグログの有効化
export NCCL_DEBUG=INFO
export NCCL_DEBUG_SUBSYS=ALL
# NVLink P2Pの確認
nvidia-smi nvlink --status
# NUMA最適化(マルチソケットサーバー)
numactl --cpunodebind=0 --membind=0 python train.py # GPU 0〜3と同じNUMAノード
# PyTorch分散学習の基礎
import torch.distributed as dist
import torch.multiprocessing as mp
def setup(rank, world_size):
dist.init_process_group(
backend='nccl', # NVIDIA GPU: nccl; AMD: gloo or rccl
init_method='env://',
world_size=world_size,
rank=rank
)
torch.cuda.set_device(rank)
def cleanup():
dist.destroy_process_group()
# torchrunで起動:
# torchrun --nproc_per_node=8 --nnodes=2 --rdzv_id=100 \
# --rdzv_backend=c10d --rdzv_endpoint=host:29400 train.py
まとめ:GPU選定の実践原則
GPU選定で最も重要なことは、自分自身のワークロードを正確に理解することです。
- メモリ容量が最優先:モデルとバッチがGPUメモリに収まらなければ、他は何も意味がありません。
- 帯域幅 vs 計算性能:学習は計算バウンドになりやすく、大規模モデルの推論はメモリバウンドになりやすいです。
- クラウドファースト戦略:不確かな場合は、まずクラウドで要件を把握してからオンプレミスハードウェアに投資してください。
- エコシステムが重要:NVIDIAのCUDAエコシステムは依然として圧倒的に成熟しています。AMD ROCmは急速に追いついています。
- 消費電力:オンプレミスGPUクラスターの電気代はハードウェアコストと同水準になります。
AIインフラは急速に進化しています。BlackwellによりFP4量子化が現実になり、GB200 NVL72のようなラックスケールシステムが大規模モデルの学習と推論を再定義しています。ハードウェアの発展を注視しながら、自分の要件に最適化された選択をしてください。