powered by TechFeed
表示モード
Deep Dive

AI推論GPUの選定で無駄金を払わないために — NVIDIAが公開したサイジングとTCO最適化の実践フレームワーク

9月2日、NVIDIA Developerが「How to Size GPUs for AI Inference and TCO Without Overspending」と題した記事を公開した。AI推論の本番運用を考えるとき、「どのGPUを何台用意すればいいか」という問いに自信を持って答えられるチームは少ない。スペックシートを眺めて大きめのGPUを確保しておけば安心、という判断が積み重なると、TCOは静かに膨らんでいく。本記事はその意思決定を体系化しようという試みだ。まず「ユースケース」から始めるサイジングの出発点は、ハードウェアスペックではなくユースケースの特定だ。NVIDIAは主要な推論ワークロードを以下の4つに分類している。

9月2日、NVIDIA Developerが「How to Size GPUs for AI Inference and TCO Without Overspending」と題した記事を公開した。AI推論の本番運用を考えるとき、「どのGPUを何台用意すればいいか」という問いに自信を持って答えられるチームは少ない。スペックシートを眺めて大きめのGPUを確保しておけば安心、という判断が積み重なると、TCOは静かに膨らんでいく。本記事はその意思決定を体系化しようという試みだ。

まず「ユースケース」から始める

サイジングの出発点は、ハードウェアスペックではなくユースケースの特定だ。NVIDIAは主要な推論ワークロードを以下の4つに分類している。

ユースケース キャッシュ済み入力トークン 入力トークン 出力トークン
AIチャットボット / コパイロット(長入力・短出力) 1,000〜5,000 2,000〜8,000 200〜800
AIエージェント(超長コンテキスト) 128,000超 500〜1,000 200〜300
コンテンツ生成(短入力・長出力) 50〜300 200〜1,000 1,000〜4,000
翻訳アプリ 50〜250 200〜1,000 200〜1,000

これらはあくまで例示的な数値であり、実際のプロダクション環境では大きく異なる場合がある。また、「キャッシュ済み入力トークン」列を含む上記の表構成は元記事の表に基づいているが、各行の値については元記事を直接確認することを推奨する。

AIエージェントが128,000トークン超のキャッシュ入力を必要とするのに対し、翻訳アプリは50〜250トークンと桁が違う。このトークンパターンの差異が、必要なGPUメモリとコンピュート量を根本的に規定する。

サイジングの主要入力変数

ユースケースが決まったら、以下の要素を軸にサイジング計画を組み立てる。

  • モデル選定:大きいほど良いわけではない。用途とレイテンシ要件に合ったモデルを選ぶことが重要で、小規模なファインチューニング済みモデルが最適解になることも多い。記事中で言及される「Nemotron 3.5 Lightning」はNVIDIAが提供する軽量推論向けモデル、「Inkling Small」は小型コーディング・推論タスク向けモデルであり、どちらもリソース効率を重視した選択肢として挙げられている。
  • DAUと同時実行数:デイリーアクティブユーザー(DAU)の総数より、同時リクエスト数(コンカレンシー)がGPUメモリとレイテンシに与える影響が大きい。
  • ISL / OSL:入力・出力トークン長の予測。長くなるほどGPUメモリとコンピュート需要が増す。
  • KVキャッシュヒット率:リクエスト間で繰り返されるトークンはKVキャッシュから提供でき、プリフィル処理をスキップできる。ヒット率が高いほどTTFT(Time to First Token)と1リクエストあたりのコストが下がる。
  • レイテンシ目標:TTFTの平均値だけでなく、99パーセンタイルとトークン間レイテンシも考慮する。

コアアンドフレックス戦略

ワークロードの変動リスクをコスト効率よく吸収するため、記事は「コアアンドフレックス」モデルを推奨している。

  • コア:オンプレミスまたは予約済みクラウドGPUで定常的なベースライン需要をカバー。価格変動リスクを排除し、安定したサービスを保証する。
  • フレックス:スパイク、新機能リリース、実験的ワークロードにはスポットやオンデマンドのクラウドGPUを充てる。

キャペックス(設備投資)とオペックス(運用費)のバランスを取ることで、過剰プロビジョニングも成長阻害も避けられる。

TCO改善の最大の武器:量子化

モデル最適化によるTCO改善には3つの手法がある。

  1. 量子化(Quantization):数値精度をFP16→FP8/INT8に落とし、メモリを25〜50%削減。再学習不要
  2. プルーニング(Pruning):重要度の低いレイヤーやニューロンを除去してパラメータ数を削減。
  3. 知識蒸留(Knowledge Distillation):大きな「教師モデル」の能力を小さな「生徒モデル」に転移。

この中で最もコストパフォーマンスが高いのが量子化だ。記事が「クイックウィン」と位置づけるのには理由がある。

FP8量子化の具体的な効果

モデルは通常FP16/BF16(1パラメータあたり2バイト)で配布される。FP8量子化はこれを1バイトに圧縮し、ウェイトメモリをほぼ半減させる。空いたメモリで小さいGPUに移行するか、同じGPU上でより大きなバッチやKVキャッシュを扱えるようになり、トークンあたりのコストが下がる。

量子化の実装にはNVIDIAのTensorRT Model Optimizer(ModelOpt)が利用できる。ポスト学習量子化(PTQ)は数行のコードで完結する。以下は元記事掲載のサンプルコードだ。

※編集部の考察:上記GitHubリンクは元記事に明示されていない可能性があるため、参考情報として付記している。

import torch
import modelopt.torch.quantization as mtq
from modelopt.torch.export import export_hf_checkpoint
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B-Instruct", dtype=torch.float16, device_map="auto"
).eval()
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B-Instruct")

def calibration_loop(model):
    for prompt in ["Summarize this client email:", "What are the key risks here?"]:
        inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
        with torch.no_grad():
            model(**inputs)

model = mtq.quantize(model, mtq.FP8_DEFAULT_CFG, forward_loop=calibration_loop)
export_hf_checkpoint(model, export_dir="./llama-3.1-8b-fp8")

この処理により、Llama-3.1-8BのウェイトメモリはFP16の16.06GBからFP8の9.08GBへ、43.5%削減される。再学習は一切不要で、少量のキャリブレーションプロンプトを通すだけだ。

精度が許容範囲を超えて劣化する場合は、量子化をフォワードパスにシミュレートしながらファインチューニングするQAT(Quantization-Aware Training)にエスカレートする。

産業別のサイジング例

記事では4つの具体的なシナリオも紹介されている。

  • 金融:関係マネージャー向けコパイロット(5,000入力・500出力トークン、FP16/BF16、7〜13Bモデル、24〜48GB GPUメモリ)
  • ライフサイエンス:創薬AIエージェント(20,000入力・2,000出力トークン、80GB超のGPUメモリが必要)
  • メディア・マーケティング:コンテンツ生成(500入力・2,000出力トークン、3〜7Bモデル、16〜24GB)
  • ITコンサルティング:多言語翻訳プラットフォーム(1,000トークン入出力、INT8精度も許容、8〜16GB)

創薬AIエージェントが80GB超を要求する一方、翻訳プラットフォームでは8〜16GBのエントリーレベルGPUで対応できると示されており、ユースケースによる要件の幅の広さが具体的に把握できる。

詳細はHow to Size GPUs for AI Inference and TCO Without Overspendingを参照していただきたい。