LLMのエネルギー効率はServing Stackに左右される
Tech
AI
LLM Inference
Energy Efficiency
MLOps

LLMのエネルギー効率はServing Stackに左右される

LLMのエネルギー効率は、トラフィック、Servingの選択、ハードウェア、SLOによって変化します。Production Inferenceを最適化する前に、このフェーズ対応型の監査を実施しましょう。

Uygar DuzgunUUygar Duzgun
Aug 9, 2026
更新日 2026年8月10日
12 min read

LLMのエネルギー効率は、モデルに固定された特性ではありません。同じモデルでも、Prefillの長さ、出力の長さ、Batchの形状、Precision、リクエストのタイミング、GPUのクロック、Serving Runtimeを変えると、有用なリクエスト1件あたりの消費エネルギーは大きく変わります。ある構成を効率的だと判断する前に、LatencyとQualityとともに、これらの要因を測定してください。

このガイドは、LLM Inferenceを運用または評価する上級者向けです。実務上の結論はシンプルです。エネルギーをデバイスまたはノードで収集し、Serving Telemetryで説明し、リクエスト層の有用な仕事量に対して正規化します。単一のワット数の読み取り値だけでは、この3つの役割をすべて果たせません。

Reasoning Budgetが増えるほど、この区別は重要になります。生成される追加Tokenは計算量を増やしますが、ハードウェアがその処理をどれだけ効率的に実行できるかは、そのTokenを取り巻くシステムによって決まります。以前のReasoning Tokenとその計算コストに関する分析では、Workload側を扱いました。この記事では、Energy AuditとServing側に焦点を当てます。

LLMのエネルギー効率はServing Stackの結果である

エネルギーは、時間にわたって積分された電力です。GPUが10秒間平均400ワットで動作した場合、4,000ジュールを消費します。ここまでは簡単です。難しいのは、時間の範囲、ハードウェアの境界、報告単位を選ぶことです。

「Tokenあたりのエネルギー」は、少なくとも次の3つの異なる意味を持ちます。

MetricUseful forWhat it can hide
---------
出力TokenあたりのジュールDecode中心のChatとGenerationPrompt処理、失敗したリクエスト、Qualityの違い
実効入力TokenあたりのジュールPrefillとLong Contextの処理出力処理とEnd-to-Endのリクエスト価値
成功したリクエストあたりのジュールProductとWorkloadの比較PromptとResponseの長さの大きな違い
キロワット時あたりのリクエスト数Capacityと運用計画リクエストの難易度、Quality、Latency

普遍的に正しい指標はありません。Service Contractに合う単位を選び、別のチームがテストを再現できるよう、十分なコンテキストを併せて報告してください。

ハードウェアの境界も同じくらい重要です。NVIDIAのManagement APIは、対応ハードウェア上でデバイスのエネルギーカウンターを公開します。これによりGPUの差分を明確に取得できますが、デフォルトではCPU処理、ホストメモリ、Storage、Network、Cooling、電力変換損失は含まれません。CodeCarbonは、測定値と推定値を組み合わせて境界を広げられますが、読み取れないハードウェアについてはFallback推定値を使うとドキュメントに記載されています。「ツールで測定した」ことは、すべての部分がMeteringされたことを意味しません。

4つの研究がStackの異なる部分を測定した

近年の研究は、システムの影響を明らかにしています。以下の見出しとなる割合はLeaderboardではありません。各研究は、異なるPlatform、Workload、Baseline、Energy Boundaryを使用しています。

StudyScope and methodReported resultBoundary to keep in view
------------
AFlexAttentionとFeed-Forward処理を分離し、A800システム上でProvisioning、Frequency、Batch Size、Microbatchingを制御TTFTとTPOTの目標を満たしながら、テストした分離構成のBaselineと比べてTokenあたり最大49%のエネルギー削減2つのModel Family、A800 Hardware、評価対象となったProduction形式のTrace
Festina共有H100 Inference向けに、配置、GPU Partitioning、Operating Point、Consolidation、Migrationを調整報告された構成でSLO達成率を2ポイント以内に維持しながら、エネルギーを最大56%削減共有GPUのServerless Context。PrefillがすでにCompute Intensiveな場合、効果は小さくなる
EnerInferNPUとMemoryの設定全体でThroughputとPowerを予測し、Thermal Limit下でControl Settingを管理Phoneで65%、Laptopで12%、Edge Boardで24%のEnergy Efficiency向上End-to-Endのデバイス削減は4.2〜11%と小さかった。その他の部分とPhaseが依然としてエネルギーを消費したため
Understanding EfficiencyH100 GPU上でQuantization、Batching、Arrival Pattern、Servingの選択をテストContinuous Batchingにより、研究のSequential Baselineと比べてリクエストあたりのエネルギーを12.5倍削減。固定テストではStructured Arrivalでさらに大きな効果Short Prompt、2種類のLlama Model Size、1種類のAccelerator Family、主にGPU中心のEnergy Data

共通する結果は、個々の割合よりも重要です。Orchestrationは、Modelだけから見積もった値を無効にするほどエネルギー使用量を変えられます。また、論文は「Lower Precisionを使う」という助言が不完全である理由も示しています。H100の研究では、Lower PrecisionはCompute-BoundなPrefillには有効でしたが、Memory-BoundなDecodeではDequantizationとKernel Overheadが効果を打ち消したり、逆効果にしたりする可能性がありました。

「最大」という数値はすべて、著者の実験における特性として扱ってください。AFlexは、あなたのB200 Clusterで49%の削減が実現することを証明していません。EnerInferは、すべてのPhoneでデバイス全体のエネルギーを65%削減できることを証明していません。これらの結果は、テストする価値のあるControlを示すものであり、Forecastにそのままコピーできる削減量ではありません。

最適化する前にPrefillとDecodeを分ける

LLMのリクエストには、ボトルネックが異なる2つのPhaseがあります。

Prefillは通常Compute Heavyである

PrefillはPromptを処理し、Key-Value Cacheを構築します。長いPromptは、並列性の高いMatrix処理のBurstを生みます。このPhaseがCompute-Boundであれば、Precisionの変更や高いClockが有効な場合がありますが、Time to First Tokenが短くなってもPower Peakが高くなる可能性があります。Powerだけでなく、エネルギーを測定してください。

Decodeは通常Memory Heavyである

Decodeは、一度に1つずつTokenを生成します。Model Weightと増加するKV Cacheを繰り返し読み込むため、Memory TrafficとBatch形成が支配的になることがよくあります。高いClockは、Throughputに比例した効果をもたらさずにPowerだけを増加させる可能性があります。KernelやHardware Pathとの適合が不十分な場合、QuantizationによってConversion Overheadが追加されることもあります。

このPhase分割は、リクエスト全体の平均が誤解を招く理由を説明します。ある構成がLong PromptのPrefillを改善する一方で、Short PromptのDecodeを悪化させる可能性があります。すべてのEnergy Resultに、少なくともPrompt Length、Output Length、BatchまたはConcurrency、Precision、Phase Timingを記録してください。

KV Cacheも同じ記録に含めるべきです。KV Cache Evictionの失敗に関するガイドでは、Reliability側を説明しています。Energy Workでは、Cache PressureがMemory Traffic、Recomputation、Placement、Retry Rateを変える可能性があります。静かなEvictionが発生しているRunは、発生していないRunと比較できません。

Latency SLOを守るEnergy Auditを実行する

Auditには、Request Outcome、Serving Context、DeviceまたはNode Energyという、相互に接続された3つのLayerが必要です。

Request、Serving Runtime、Device全体でLLMのエネルギーを測定するための3層Diagram
Request、Serving Runtime、Device全体でLLMのエネルギーを測定するための3層Diagram

*有用なEnergy Resultには、明確な単位、Serving Context、明示的なHardware Boundaryが必要です。*

1. 代表的なWorkloadを固定する

1つのSynthetic Averageではなく、Workload Sliceを作成してください。最低限、Short PromptとLong Prompt、Short OutputとLong Output、Steady ArrivalとBursty Arrival、アプリケーションが使用するQuality Tierを分けます。比較中は、Model、Tokenizer、Sampling Policy、Stopping Ruleを固定してください。

PrivacyとConsentが許す場合は、実際のリクエスト形状を使用してください。Synthetic Promptを使う場合は、システムを動かすToken LengthとArrival Distributionを維持します。最終レポートでは、Synthetic DemandをSyntheticとして明示してください。

2. Request LevelのOutcomeを記録する

各リクエストについて、次を取得します。

受け付けた入力Token数と生成された出力Token数
Time to First Token(TTFT)とOutput Tokenあたりの時間(TPOT)
End-to-End LatencyとQueue Time
Success、Timeout、Cancellation、Retryの状態
Task固有のQuality CheckまたはRegression Result

Energy Totalから失敗を削除しないでください。難しいリクエストをTimeoutさせることで完了したリクエストのエネルギーを少なく見せる構成は、より効率的ではありません。

3. Serving Contextを記録する

変化を説明できるControlをLogに記録します。PrefillとDecodeのDuration、Batch Size、Active Sequence数、Queue Depth、Precision、Parallelism、Cache Occupancy、Placement、GPU ClockまたはPower Limit、Co-Tenant Loadなどです。

このTelemetryは、IdleとBurstの影響も捉えます。GPUが待機している間もCPUを稼働させ続けるRuntimeは、GPUのみの読み取りでは問題なく見えても、NodeまたはFleetの境界では悪化して見える可能性があります。Open SourceのIssue Threadは、こうしたFailure Modeを見つけるのに役立ちますが、自分のStackで再現するまでは逸話にすぎません。

4. 明示的なEnergy Boundaryを測定する

対応するNVIDIA GPUでは、NVMLがミリジュール単位のTotal Energy Counterを公開します。最小限のPython Probeで、固定Workloadの前後を測定できます。

python from pynvml import ( nvmlDeviceGetHandleByIndex, nvmlDeviceGetTotalEnergyConsumption, nvmlInit, nvmlShutdown, )

nvmlInit() gpu = nvmlDeviceGetHandleByIndex(0) start_mj = nvmlDeviceGetTotalEnergyConsumption(gpu)

run_fixed_workload() # same requests, model, and stopping rules

end_mj = nvmlDeviceGetTotalEnergyConsumption(gpu) nvmlShutdown()

gpu_joules = (end_mj - start_mj) / 1_000 joules_per_output_token = gpu_joules / completed_output_tokens

NVML Device Queryのドキュメントでは、Counterとその単位を定義しています。正確なGPUとDriverでサポート状況を確認してください。累積値はDriverがReloadされるとResetされるため、負の差分や壊れた差分は除外します。Energy Counterのないデバイスでは、短いリクエストを捉えられるRateでPowerをSamplingし、同じWindowでTraceを積分してください。

GPU Energyは、名前を明示すれば有効なBoundaryです。Capacity、Cost、Carbon Accountingでは、意思決定に応じてHostとFacilityの要素を追加してください。CodeCarbonのドキュメントはAuditの範囲を広げられますが、Toolがどの値を測定し、どの値を推定しているかを確認してください。Whole Nodeの比較では、外部のRackまたはWall Meteringがより強力な検証になります。

5. 結果を複数の方法で正規化する

1つの勝ち数値ではなく、小さなMetric Setを報告してください。

Output TokenあたりのGPU Joule
成功したリクエストあたりのNode Joule
キロワット時あたりのToken数またはリクエスト数
p50およびp95のTTFT、TPOT、End-to-End Latency
Failure RateとRetry Rate
同じEvaluation SetにおけるTask Quality

1つのMetricはDecode PathのTuningに役立ちます。別のMetricは、変更をProduct Valueに結び付けます。LatencyとQualityの項目により、Energy Optimizationがサービスを密かに弱体化させることを防げます。

6. 1つのControlを変更してからDemandを再生する

まず、Precision、Batch Policy、Request Bucketing、Cache Setup、GPU PowerまたはClock Limit、Placementについて、分離した実験を行います。Warm-up後にTrialを繰り返してください。熱や時刻が結果に偏りを与える可能性がある場合は、Trial間で順序を入れ替えます。

次に、最良の候補をMixed Arrivalの下で再生します。FestinaとAFlexはいずれも複数のControlを調整しています。これは、局所最適が相互作用するためです。最初のPassでは原因を分離し、最終Passでは実際のSLOの下でCombined Policyをテストしてください。

Evidenceが支持する順序で最適化する

最も安全なOptimization Orderは、無駄な処理から始め、より細かなHardware Controlへ進むことです。

Retryと回避可能なTokenを削減する。 失敗したリクエスト、重複したPrompt、制御されていないOutput Lengthは、すべてのLayerで処理を無駄にします。
Request ShapingとContinuous Batchingを改善する。 互換性のあるRequest LengthをBucket化し、TTFTとのバランスを見ながら待機時間の上限を調整します。H100の研究ではServingとArrivalの判断による大きな効果が確認されましたが、最適なBatch SizeはTraffic MixとReporting Unitによって異なります。
再利用が実際にある場所でCachingを使う。 Prompt Cachingは、繰り返されるPrefill処理を削減できます。ProviderのDiscountだけでなく、Hit RateとInvalidation Behaviorを測定してください。Cost側については、Prompt Cachingの経済性に関するガイドを参照してください。
PhaseとHardware PathごとにPrecisionをテストする。 Kernel Support、Memory使用量、Latency、Quality、Energyを確認してください。ParameterのBit Widthだけでは結果を予測できません。
SLOの下でClockまたはPower Limitを調整する。 AFlex、Festina、EnerInferはDynamic Controlの価値を示しています。固定されたLow-Power Settingは、BurstやThermal Transitionに対応できない可能性があります。
PlacementとConsolidationを見直す。 Active Deviceを減らすとIdle Overheadを削減できますが、Migration、Cache Transfer、Contentionによって削減分が消費される可能性があります。

システムが異なるQuality Tierを提供する場合は、このプロセスを実際のWork Benchmarkと組み合わせてください。実務的なModel Benchmarking Workflowでは、Serving Pathを変更する間もQuality、Latency、Costを可視化できます。

Energy、Cost、Carbonを混同しない

これらのMetricは、それぞれ異なる問いに答えます。

Energyは物理的な仕事量を測定し、通常はJouleまたはKilowatt-hourで表します。
PowerはEnergyの使用Rateを測定し、通常はWattで表します。
Costは、Pricing、Utilization、Reservation、Provider Marginに左右されます。
Carbon Emissionは、Energy、Location、Time、Grid Mix、Accounting Boundaryに左右されます。

Cloud Billが低くなったからといって、Energyが低くなったとは限りません。GPU Counterが低くなったからといって、Facility Energyが低くなったとは限りません。Energyの少ないRunでも、異なる時間や場所で実行されれば、Emissionが自動的に低くなるわけではありません。

Reportingの問題は、Standards Workにまで発展するほど活発です。AI InferenceのEnergy Efficiency Metricに関するITU-T Work Itemでは、Token Boundary、Energy-per-Token Indicator、Carbon Math、Reporting RuleがScopeに含まれています。この取り組みは、Token UnitとSystem Boundaryが依然として確定していないことを示しています。これは完成済みのBenchmarkではありません。

Productionにおける意思決定ルール

LLMのEnergy Efficiencyの変更は、意図した有用な仕事量の単位あたりのEnergyを削減し、Request Contractを予算内に維持できる場合にのみ採用してください。

テストの前に、そのContractを記述します。

Prompt — Copy & Paste
Workload Slice Wにおいて、Node Joule per Successful Requestが低下し、p95 TTFTとTPOTがSLO内に収まり、Task Qualityが承認済みの範囲内に維持され、Failureが増加しない場合、Setup BはBaseline Aを置き換えられる。

このルールは、よくある3つの誤りを防ぎます。JouleではなくWattを最適化すること、Failureを隠しながらCompleted Tokenを最適化すること、論文の「最大」という結果を異なるHardwareに移植することです。

研究が示しているのは、普遍的な設定ではなく、実務的な方向性です。PrefillとDecodeを分けてProfileしてください。Request、Runtime、Hardwareの記録を結合した状態に保ってください。管理する予定のBoundaryを測定してください。そうすることで、Energyの数値がEngineering Decisionになります。

Sources

CodeCarbon docs — Official Project Docs。