LLM性能の隠れた変数:ハードウェア親和性設計
AIモデルの性能を語る際、私たちは通常、精度(Accuracy)だけを思い浮かべがちです。しかし、実際のサービス運用では**スループット(Throughput)とインタラクティビティ(Interactivity、レイテンシ)**が精度と同様に重要であることに気づかされます。どんなに優れたモデルでも応答が遅ければユーザー離脱につながり、スループットが低ければサーバーコストが急増します。
これら3つの目標はトレードオフの関係にあります。精度を固定すると、問題は2次元のパレートフロンティア(Pareto frontier)に単純化されます。つまり、スループットを上げればレイテンシが増加し、レイテンシを減らせばスループットが低下する状況で、この曲線自体を外側に拡張することが核心課題となります。
本記事では、LLM(大規模言語モデル)の構造的選択がこのパレートフロンティアをどのように変えるかを分析します。特にGPUハードウェアの動作方式(GEMM演算、メモリ帯域幅、タイリング)とモデルの次元(H、H'、L)がどのように相互作用するかを考察し、実務で即適用できる7つの設計原則をまとめました。
💡 核心ポイント モデル設計時にハードウェアとの整合性を考慮すると、同じ演算量でより高い性能を得られます。これはGPU利用率を向上させてサーバーコストを削減し、ユーザー体験を改善する一石二鳥の方法です。
本記事はNVIDIAテクニカルブログのAIモデル設計とハードウェア親和性LLM設計の内容を基に、日本市場の文脈で再解釈したものです。

GPUの動作原理:GEMMとメモリ帯域幅
GPUがLLM演算を実行する方法は、主に2つの要素によって決定されます。
- 演算強度(Arithmetic Intensity):演算(FLOPs)に対するメモリ移動(Byte)の比率。この値が低いとメモリ帯域幅によって性能が制限され(Memory-bound)、高いとGPUの演算能力(Compute-bound)によって制限されます。
- GEMMタイリング(Tiling):GPUは出力行列を小さなタイルに分割し、各ストリーミングマルチプロセッサ(SM)が並列に処理します。このとき、タイルサイズとモデル次元が正確に一致しないと、タイル量子化(Tile Quantization)が発生してGPU利用率が低下します。
GEMM次元とモデル構造の関係
トランスフォーマーブロックの各線形レイヤーはGEMM演算で表現されます。入力トークン数(Tokens)、ヒドゥン次元(H)、中間投影次元(H')がGEMMのM、N、K次元を決定します。
| レイヤー | 投影 (in → out) | GEMM M | GEMM N | GEMM K |
|---|---|---|---|---|
| Q/K/V入力 | H → 3H | Tokens | 3H | H |
| アテンション出力 | H → H | Tokens | H | H |
| FFN-1(アップ投影) | H → H′ | Tokens | H′ | H |
| FFN-2(ダウン投影) | H′ → H | Tokens | H | H′ |
実際のケース:小さなH'の罠
FFN-2レイヤーでH'=512、H=8192の場合を想定します。4ビット入力、8ビット出力、GB300 GPUでの演算時間を分析すると以下のようになります。
| M (Tokens) | N | K | 演算 (µs) | FP4読み取り (µs) | FP8書き込み (µs) |
|---|---|---|---|---|---|
| 256 | 8192 | 512 | 0.14 | 0.30 | 0.26 |
| 2048 | 8192 | 512 | 1.15 | 0.37 | 2.10 |
| 16384 | 8192 | 512 | 9.16 | 0.89 | 16.8 |
ご覧の通り、K次元(512)が小さいため、GEMMは**メモリバウンド(Memory-bound)**状態に留まります。演算時間よりもデータ移動時間がはるかに大きいためです。これはモデル次元がバッチサイズと同様にGPU利用率を決定する重要な要素であることを示しています。
# 例:PyTorchでGEMM演算のメモリ vs 演算コスト分析
import torch
import time
# H'=512(小さいK)、H=8192(大きいN)
# FFN-2: (M, K) @ (K, N) 形式
M, K, N = 2048, 512, 8192
# FP4演算を模倣した低精度テンソル(実際はFP16でテスト)
a = torch.randn(M, K, dtype=torch.float16, device='cuda')
b = torch.randn(K, N, dtype=torch.float16, device='cuda')
# メモリ移動時間の測定(おおよその比較)
start = time.time()
c = a @ b # GEMM演算
torch.cuda.synchronize()
gemm_time = time.time() - start
# メモリ読み取り/書き込み時間(帯域幅想定:2TB/s)
read_bytes = (M * K + K * N) * 2 # FP16 = 2 bytes
write_bytes = M * N * 2
memory_time = (read_bytes + write_bytes) / (2e12) * 1e6 # マイクロ秒
print(f"GEMM演算時間: {gemm_time*1e6:.2f} µs")
print(f"メモリ移動時間(理論): {memory_time:.2f} µs")
print(f"演算強度: {2*M*N*K / (read_bytes + write_bytes):.2f} FLOPs/byte")
# 演算強度が低いとメモリバウンド -> GPU演算ユニットが遊んでいる
このコードは、GEMM演算の演算強度を計算してメモリバウンドかどうかを判断する方法を示しています。実際のGPUプロファイラーを使用すると、より正確な分析が可能です。

7つの設計原則:GPU利用率を最大化するモデル作り
原則1:正方形に近い重み行列を維持
固定パラメータ予算で、GEMMのM、N、K次元がすべて同程度のサイズの場合、演算強度が最大化されます。特定の次元が極端に小さいとメモリバウンド状態に陥り、GPUの演算能力を無駄にします。
原則2:次元を128の倍数で設計(可能なら256または512)
GPUのタイルサイズとキャッシュライン幅に合わせるため、モデル次元を128の倍数に設定してください。BlackwellアーキテクチャのclusterMMA(256)とCGA(512)を活用するには、より大きな倍数が有利です。
原則3:深さよりも幅(Wider is Better)
同じパラメータ数なら、より広く浅いモデルがハードウェア親和性に優れます。重み再利用が増加し、順次クリティカルパスが短くなり、スループットとレイテンシの両方が改善されます。ただし、精度が維持される範囲内でのみ適用してください。
原則4:量子化に有利な構造設計
NVFP4のような低ビット量子化は、演算速度とメモリ効率を同時に向上させます。モデル設計段階で量子化を考慮すると、デプロイ時に性能低下なく大きな利得を得られます。
原則5:大規模エキスパート並列化(Expert Parallelism)の活用
MoE(Mixture-of-Experts)モデルでは、エキスパート並列化(EP)がスループットを最大化する核心戦略です。アテンションはデータ並列化、FFNエキスパートはGPUに分散配置して、すべてのリソースを効率的に活用します。
原則6:バランスの取れたパイプライン並列化設計
プリフィル(Prefill)とデコード(Decode)を分離し、レイヤーを均等に分割できる規則的なパターンでモデルを設計してください。これはチャンクパイプライン並列化(CPP)の効率を高めます。
原則7:アテンションとFFNの独立並列化
低レイテンシサービスでは、アテンションとFFNを別々に最適化する必要があります。アテンションはKV並列化、FFNはテンソル並列化(TP)またはエキスパート並列化(EP)を適用するハイブリッド戦略が効果的です。
注意事項と限界点
これらのガイドラインはハードウェア効率に焦点を当てています。実際のモデル設計では、精度、学習安定性、データ分布など様々な要素を一緒に考慮する必要があります。特に:
- モデル品質低下:幅を過度に広げると表現力が低下する可能性があります。
- 通信オーバーヘッド:並列化戦略が増えるほど通信コストが増加します。
- ハードウェア依存性:GPUアーキテクチャが変わると最適次元も変わります。
日本市場での適用
国内のAIサービス企業は、ほとんどがクラウド環境でGPUインスタンスを使用しています。この場合、インフラコスト最適化が核心課題ですが、上記の原則を適用すれば、同じGPUリソースでより高いスループットを達成できます。特に大規模言語モデルをサービスする企業なら、モデル構造をハードウェアに合わせて調整するだけで、相当なコスト削減効果が期待できます。

まとめ:設計段階からハードウェアを考える
LLMの性能は、単にモデルアーキテクチャだけで決定されるわけではありません。ハードウェアとの整合性が実際のサービス品質を左右します。本記事で紹介した7つの原則を設計チェックリストとして活用してみてください。
- 次元を正方形に近く、128の倍数で維持
- 深さよりも幅を優先
- 低ビット量子化(NVFP4)に有利な構造設計
- 規則的でバランスの取れたレイヤーパターンを使用
これらの小さな選択がGPU利用率を大きく向上させ、同じハードウェアでより高速な推論速度とより高いスループットを達成できます。実践適用のために、NVIDIA Model OptimizerとTensorRT-LLMのエキスパート並列化機能を探索してみてください。