メインコンテンツへスキップ
友田 陽大
Llama・オープンウェイトLLM
Llama
コスト最適化
生成AI
AWS Bedrock
FinOps
GPU
TypeScript

Llama 推論コストの設計:API vs セルフホストの損益分岐をTCOで出す

『Llama を本番で動かすといくら?』に、感覚ではなくTCOで答える記事。Bedrock等の従量課金とセルフホスト(GPU時間×スループット)の原価式、損益分岐の出し方、モデルルーティング・量子化・バッチ・冪等キャッシュ・スポットGPUといったコスト削減レバーを、検証可能なコードと実数で解説します。

公開日
読了時間
10分
著者
友田 陽大
シェア

この記事のゴール

「Llama を本番で動かすと、結局いくらかかるの?」——案件で最初に聞かれる問いです。本稿は、これに感覚ではなく TCO(総保有コスト)で答えます。Llama を本番投入する全体像の「原価」の章を、式と実数とコードで詰め切るのが狙いです。

読み終えたとき、次ができる状態を目指します。

  1. API とセルフホストの原価を同じ土俵で計算できる。
  2. 自社の volume で損益分岐がどこかを、式に当てはめて出せる。
  3. どのレバーを引けば一番効くかを、設計順に判断できる。

信頼性の開示:GPU 原価は、私が動画AIローカライズ基盤で実際に向き合った領域です。本稿の数値は2026年6月時点の公開情報に基づくであり、料金は変動します。価値は「式と考え方」にあります——絶対値ではなく、自分の数字を入れて判断してください。


30秒の結論

API(Bedrock 等・従量)セルフホスト(GPU を借りて自前運用)
課金使った分だけ(入力/出力トークン)GPU 時間が固定費(動いていなくても課金)
初期/運用ほぼゼロ環境構築・スケール・監視・障害対応
原価が下がる条件低〜中 volume・変動が大きい高く安定した稼働率
向くプロト・変動需要・少量多品種定常大量・データ主権・1リクエスト単価の最小化

本質はこの一行:API は変動費だけ、セルフホストは固定費(GPU時間)。だから「GPU をどれだけ暇させずに回せるか(稼働率)」が、セルフホストの勝ち負けを決めます。


原価式:同じ土俵に乗せる

API(従量)の原価

トークン単価のかけ算です。シンプルゆえに予測しやすいのが利点。

APIコスト = (入力トークン / 1e6) × 入力単価 + (出力トークン / 1e6) × 出力単価

2026年6月時点の例(Amazon Bedrock・on-demand・要確認)

モデル入力 / 1M出力 / 1M位置づけ
Llama 4 Scout$0.17$0.66長文脈・標準
Llama 4 Maverick$0.24$0.97高品質フラグシップ

セルフホストの原価

固定の GPU 時間料金を、その時間に実際に吐けたトークン量で割ります。ここに稼働率が効きます。

セルフホスト 出力1Mあたり = (GPU時間料金 × GPU台数) ÷ (実効出力スループット[tok/s] × 3600 × 稼働率 / 1e6)

2026年6月時点の例(要確認):H100 は概ね $1.5〜4 / GPU時(オンデマンド中央値 ≈ $3、スポット ≈ $1〜2.5)。実効スループットは必ず自分でベンチしてください(モデル・量子化・バッチ・文脈長で大きく変わる)。


検証可能なコスト計算機(純粋関数)

“世界最高峰”は派手なコードではなく、テストできる小さな純粋関数です。副作用ゼロ・入力だけで決まるので、そのまま単体テストに載ります(型安全の規律)。

// lib/llm-cost.ts — API とセルフホストを同じ単位($/1M出力tok)で比較する純粋関数群
export type TokenPrice = { readonly inputPer1M: number; readonly outputPer1M: number };

/** API の従量コスト(USD)。入力・出力トークンと単価から決定的に決まる。 */
export function apiCost(inputTokens: number, outputTokens: number, p: TokenPrice): number {
  return (inputTokens / 1e6) * p.inputPer1M + (outputTokens / 1e6) * p.outputPer1M;
}

/** セルフホストの「出力1Mトークンあたり原価」。稼働率が全てを左右する。 */
export function selfHostCostPer1MOutput(params: {
  gpuHourlyUsd: number;      // 例: 3.0(H100 オンデマンド)
  gpuCount: number;          // 例: 2(テンソル並列)
  aggOutputTokPerSec: number; // 例: 2500(要ベンチ:連続バッチ時の集約スループット)
  utilization: number;        // 01(GPUが実際に生成に使われている割合)
}): number {
  const { gpuHourlyUsd, gpuCount, aggOutputTokPerSec, utilization } = params;
  const tokensPerHour = aggOutputTokPerSec * 3600 * utilization;
  if (tokensPerHour <= 0) return Infinity; // 暇なGPUは原価無限大=丸損
  return (gpuHourlyUsd * gpuCount) / (tokensPerHour / 1e6);
}

/** セルフホストが API の出力単価を下回るのに必要な“損益分岐稼働率”。 */
export function breakEvenUtilization(params: {
  gpuHourlyUsd: number; gpuCount: number; aggOutputTokPerSec: number; apiOutputPer1M: number;
}): number {
  const fullUtilCost = selfHostCostPer1MOutput({ ...params, utilization: 1 });
  return Math.min(1, fullUtilCost / params.apiOutputPer1M);
}

数字を入れてみる(例・要ベンチ)

H100×2 を $3/GPU時、集約 2,500 tok/s(連続バッチ時のスループット)と置くと:

  • 100%稼働の出力原価 = (3×2) ÷ (2500×3600×1.0 / 1e6) = 約 $0.67 / 1M 出力tok
  • Bedrock Scout の出力 $0.66 / 1M とほぼ同額——つまり 100%稼働でようやくトントン
  • 損益分岐稼働率 ≈ 0.67 / 0.661.0。スループットがもっと出る(例 5,000 tok/s)なら分岐は ~0.5 に下がる。

💡 読み解き:セルフホストは「GPU を暇させた瞬間に負ける」。24時間ほぼ満稼働で回る定常ワークロードでなければ、API(変動費だけ)の方が安いことが多い。まず API で品質と需要を確かめ、稼働が steady に高くなってからセルフホストへ——が原価の定石です。スポット($1〜2/時)や Bedrock の Provisioned Throughput はこの分岐を動かすレバーです。


コスト削減レバー(効果の大きい順)

原価は「式のどの項を殴るか」で決まります。設計で効く順に並べます。

1. モデルルーティング(一番効く)

全部を最上位モデルに通すのは最大の無駄。タスクの難度でモデルを振り分けます。

// 難度に応じて安いモデルへ。簡単8割を安く流すだけで総額は大きく下がる。
function pickModel(task: { kind: "classify" | "extract" | "reason" }): string {
  switch (task.kind) {
    case "classify": return "meta/llama-3.3-8b"; // 分類・モデレーションは小型で十分
    case "extract":  return "meta/llama-4-scout"; // 抽出は中位
    case "reason":   return "meta/llama-4-maverick"; // 難所だけ上位
  }
}

2. 量子化(FP8)

vLLM で FP8 を使えば、VRAM を圧縮して同じGPUにより多くを詰め、スループット(=分母)を上げられる。--kv-cache-dtype fp8 は使える文脈を実質的に広げ、精度劣化は実用上小さいことが多い。

3. 連続バッチ(continuous batching)

vLLM の真価。多数のリクエストを動的に束ねて GPU を遊ばせない。これが「実効スループット」を決め、セルフホストの損益分岐を左右します。稼働率を上げる=原価を下げるの本丸。

4. 冪等キャッシュ(再生成ゼロ)

同じ入力に同じ生成を二度走らせない。sha256(モデル+プロンプト+パラメータ) をキーにキャッシュするだけで、連打・リトライ・重複依頼のコストが消えるピラー記事の冪等ルート実装)。プロンプトの定型部分には prompt caching も効く。

5. スポット/プリエンプティブル GPU

セルフホストの GPU 時間料金そのものを半額以下にできる。ただし中断耐性(チェックポイント・ドレイン・リトライ設計)が前提。

レバー効く項体感効果前提
モデルルーティング単価×件数難度判定
量子化(FP8)スループット中〜大対応GPU
連続バッチ稼働率/スループットvLLM
冪等キャッシュ件数KV/Redis
スポットGPUGPU時間料金中〜大中断耐性

可観測性:測っていないものは下げられない

コスト最適化は計測から始まります。呼び出しごとに入出力トークン・モデル・レイテンシを構造化ログへ落とし、モデル別・用途別の単価をダッシュボードで見える化する。これ無しの「なんとなく高い」は、改善の打ち手を持てません(OpenTelemetry での可観測性)。PII(プロンプト本文)は載せない——メタデータだけで原価は十分追えます


よくある質問(FAQ)

Q. 結局、API とセルフホストどちらが安い? A. 少量・変動が大きいなら API定常的に大量(高い稼働率を維持できる)ならセルフホスト。境界は「GPU をどれだけ満稼働で回せるか」。本稿の式に自分のスループット実測と volume を入れて出してください。

Q. スループットは何 tok/s で計算すればいい? A. 必ず自分でベンチしてください。モデル・量子化・バッチ・文脈長・GPU で数倍変わります。本稿の 2,500 tok/s はです。vllm の負荷試験で実測値を取り、式に入れます。

Q. Provisioned Throughput とは? A. Bedrock で専有スループットを時間課金で予約する方式。定常大量で従量が高くつくとき、自前GPU運用の手前の選択肢になります。「マネージドの楽さ × 大量時の単価」を両取りしたい場合に検討します。

Q. 入力トークンと出力トークン、どちらを気にすべき? A. 一般に出力単価が高い(例:Scout は入力$0.17 / 出力$0.66)。長い生成を垂れ流さない・maxTokens を絞る・要約は簡潔にが効きます。一方で長文脈RAGは入力が膨らむので、検索で文脈を絞るのも原価対策です。

Q. 一番効く一手は? A. モデルルーティング。簡単なタスクを安いモデルに流すだけで総額が大きく動きます。最上位モデルは“難所だけ”に使ってください。


まとめ

Llama の原価は、モデル選びより設計で決まります。API は変動費、セルフホストは固定費(GPU時間)——この違いを式で捉え、稼働率を主役に据えれば、「いくらかかるか」は感覚ではなく計算になります。

  1. まず API で品質と需要を確かめる(変動費・運用ゼロ)。
  2. 計測してモデル別・用途別の単価を可視化する。
  3. ルーティング → 量子化 → バッチ → 冪等キャッシュ → スポットの順に削る。
  4. 稼働率が steady に高くなったら、式でセルフホスト/Provisioned の損益分岐を確かめて移行する。

LLM スタックの原価設計(損益分岐の算出、ルーティング、セルフホスト移行)まで含めて伴走できます。GPU 原価に向き合った実績をご覧のうえ、お気軽にご相談ください。一人 × 生成AIで、速く・安く・安全に。

出典・公式リソース

※ 料金・スループットは変動・実測依存です。本稿の数値は例であり、実装前に自社の実数で再計算してください。

友田

友田 陽大

経済産業大臣賞 受賞プロダクト開発者。TypeScript + Python + AWS で、SaaS・業界DX・ 実用レベルの生成AI(RAG)を、要件定義からインフラ・運用まで一人で完遂します。

この記事で解説した技術の適用事例

AI動画ローカライズ・リップシンク基盤

ケーススタディを見る