<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Break-Even on lo0 — Tech Blog</title><link>https://blog.lo0.es/en/tags/break-even/</link><description>Recent content in Break-Even on lo0 — Tech Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 16 Jun 2026 11:00:00 +0200</lastBuildDate><atom:link href="https://blog.lo0.es/en/tags/break-even/index.xml" rel="self" type="application/rss+xml"/><item><title>From the SLO to the number of GPUs: how to size and justify the investment in inference hardware</title><link>https://blog.lo0.es/en/posts/slo-to-number-of-gpus-sizing-justifying-inference-hardware/</link><pubDate>Tue, 16 Jun 2026 11:00:00 +0200</pubDate><guid>https://blog.lo0.es/en/posts/slo-to-number-of-gpus-sizing-justifying-inference-hardware/</guid><description>&lt;blockquote>
&lt;p>Notation: amounts in &lt;strong>N €&lt;/strong> or &lt;strong>N USD&lt;/strong> (source denominated in dollars); decimal point; comma as thousands separator (&lt;code>1{,}234&lt;/code>). Generic example hardware: 4×H100 SXM5 80 GB nodes. The dollar sign is not used (it is the formula delimiter).&lt;/p>
&lt;/blockquote>
&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;ul>
&lt;li>With an SLO of &lt;strong>TTFT P99 ≤ 300 ms&lt;/strong> and &lt;strong>ITL P99 ≤ 50 ms&lt;/strong> for a production chat, peak GPU utilisation must stay at &lt;strong>≤ 63 %&lt;/strong>.&lt;/li>
&lt;li>A service receiving &lt;strong>5M requests/day&lt;/strong> with 512 input tokens and 256 output tokens on average generates an hourly peak of &lt;strong>~11,600 tok/s&lt;/strong> (with a peak factor of 1.8×). With vLLM on H100 SXM5 (Llama-3.3 70B FP8, ~1,850 tok/s at 50 concurrent requests), &lt;strong>≥ 10 GPUs&lt;/strong> are needed at peak to meet the SLO, which translates into &lt;strong>3 4×H100 nodes&lt;/strong> (with headroom).&lt;/li>
&lt;li>The all-in cost of those 3 nodes is ~&lt;strong>83,300 € per year per node&lt;/strong> (3-year capex + base opex); the &lt;strong>€/1M tokens&lt;/strong> in the base scenario at 63 % utilisation is ~&lt;strong>0.37 €&lt;/strong>.&lt;/li>
&lt;li>Against AWS p5 on-demand (~3.90 USD/GPU-hour after the 44 % cut of Jun. 2025), the utilisation &lt;strong>break-even&lt;/strong> sits at &lt;strong>~55 %&lt;/strong>; against neocloud on-demand (~2.01 USD/GPU-hour), there is no feasible break-even at medium utilisation.&lt;/li>
&lt;li>Capex payback happens between &lt;strong>13 and 24 months&lt;/strong> if sustained utilisation exceeds 70 %.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="1-the-sizing-chain-from-demand-to-the-number-of-gpus">1. The sizing chain: from demand to the number of GPUs&lt;/h2>
&lt;p>Sizing an inference platform follows a causal chain of five steps. Each step has a formula; none can be skipped.&lt;/p>
&lt;h3 id="11-step-1--characterise-the-demand">1.1 Step 1 — Characterise the demand&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parameter&lt;/th>
&lt;th>Symbol&lt;/th>
&lt;th>Example&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Requests per day (average)&lt;/td>
&lt;td>\(D\)&lt;/td>
&lt;td>5,000,000&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Input tokens per request (average)&lt;/td>
&lt;td>\(L_{\text{in}}\)&lt;/td>
&lt;td>512&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Output tokens per request (average)&lt;/td>
&lt;td>\(L_{\text{out}}\)&lt;/td>
&lt;td>256&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Peak factor (peak hour vs average ratio)&lt;/td>
&lt;td>\(k_{\text{peak}}\)&lt;/td>
&lt;td>1.8&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hours per day with significant traffic&lt;/td>
&lt;td>\(H\)&lt;/td>
&lt;td>16&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The &lt;strong>average output throughput&lt;/strong>:&lt;/p>
$$\dot{T}_{\text{avg}} = \frac{D \times L_{\text{out}}}{86{,}400\,\text{s}} = \frac{5{,}000{,}000 \times 256}{86{,}400} \approx 14{,}815\;\text{tok/s}$$
&lt;p>The &lt;strong>peak throughput&lt;/strong> (busy hour):&lt;/p>
$$\dot{T}_{\text{peak}} = k_{\text{peak}} \times \frac{D \times L_{\text{out}}}{H \times 3{,}600} = 1.8 \times \frac{5{,}000{,}000 \times 256}{16 \times 3{,}600} \approx 40{,}000\;\text{tok/s}$$
&lt;blockquote>
&lt;p>Note: if the traffic profile has very pronounced peaks (peak/average ratio &amp;gt; 3), sizing is done for the peak and average utilisation falls; the sensitivity analysis in §5 quantifies the effect.&lt;/p>
&lt;/blockquote>
&lt;h3 id="12-step-2--set-the-slo-and-derive-the-maximum-utilisation">1.2 Step 2 — Set the SLO and derive the maximum utilisation&lt;/h3>
&lt;p>The latency SLO imposes a ceiling on GPU utilisation. Using queueing theory (M/G/1 model):&lt;/p>
$$\rho_{\max} \approx 1 - \frac{1}{\sqrt{1 + C_{s}^{2}}} \cdot \frac{W_{\text{queue}}^{*}}{\bar{s}}$$
&lt;p>where \(\rho\) is the utilisation, \(W_{\text{queue}}^{*}\) the maximum admissible queueing time and \(\bar{s}\) the average service time per request. For the simplified M/M/1 case with prefill time dominant:&lt;/p>
$$\rho_{\max} = 1 - \frac{W_{\text{queue}}^{*}}{\bar{s} \cdot (1 + W_{\text{queue}}^{*}/\bar{s})}$$
&lt;p>The practical reference table (derived from the Spheron/Little&amp;rsquo;s Law formula, 2026):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>SLO TTFT P99&lt;/th>
&lt;th>Maximum utilisation \(\rho_{\max}\)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>200 ms&lt;/td>
&lt;td>55 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>300 ms&lt;/td>
&lt;td>63 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>400 ms&lt;/td>
&lt;td>70 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500 ms&lt;/td>
&lt;td>75 %&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For our example (SLO 300 ms P99): \(\rho_{\max} = 0.63\).&lt;/p>
&lt;p>The ITL SLO imposes an additional constraint: the inference engine must be able to generate the next token in ≤ 50 ms. On H100 SXM5 with vLLM and Llama-3.3 70B FP8, the ITL P50 at 50 concurrent requests is ~20 ms, with P99 ~45 ms. ITL is the dominant constraint only when the batch size is very high (&amp;gt;64 sequences) or VRAM is nearly full.&lt;/p>
&lt;h3 id="13-step-3--required-throughput-and-throughput-per-gpu">1.3 Step 3 — Required throughput and throughput per GPU&lt;/h3>
&lt;p>The throughput the cluster must serve at peak, while respecting \(\rho_{\max}\):&lt;/p>
$$\dot{T}_{\text{required}} = \frac{\dot{T}_{\text{peak}}}{\rho_{\max}} = \frac{40{,}000}{0.63} \approx 63{,}500\;\text{tok/s (installed capacity)}$$
&lt;p>The &lt;strong>throughput per GPU&lt;/strong> (reference benchmark, vLLM v0.18.0, Llama-3.3 70B FP8, H100 SXM5 80 GB, 50 concurrent requests):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Engine&lt;/th>
&lt;th>Throughput (tok/s per GPU)&lt;/th>
&lt;th>TTFT P50 / P95 (50 req)&lt;/th>
&lt;th>Source&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>vLLM 0.18.0&lt;/td>
&lt;td>1,850&lt;/td>
&lt;td>380 ms / 720 ms&lt;/td>
&lt;td>Spheron benchmarks, Mar. 2026&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>SGLang 0.5.9&lt;/td>
&lt;td>1,920&lt;/td>
&lt;td>360 ms / 680 ms&lt;/td>
&lt;td>Spheron benchmarks, Mar. 2026&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>TensorRT-LLM 1.2.0&lt;/td>
&lt;td>2,100&lt;/td>
&lt;td>340 ms / 620 ms&lt;/td>
&lt;td>Spheron benchmarks, Mar. 2026&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>The throughput data correspond to the test with Llama 3.3 70B Instruct FP8, 512 input / 256 output tokens, 50 concurrent requests, on bare-metal H100 SXM5. See the engine analysis in &lt;a href="https://blog.lo0.es/en/posts/llm-serving-engines-pareto-frontier-comparison/">serving engines Pareto comparison&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;p>We use vLLM as the general-purpose production reference: \(\dot{T}_{\text{GPU}} = 1{,}850\) tok/s.&lt;/p>
&lt;h3 id="14-step-4--number-of-gpus-and-number-of-nodes">1.4 Step 4 — Number of GPUs and number of nodes&lt;/h3>
$$N_{\text{GPU}} = \left\lceil \frac{\dot{T}_{\text{required}}}{\dot{T}_{\text{GPU}}} \right\rceil = \left\lceil \frac{63{,}500}{1{,}850} \right\rceil = \lceil 34.3 \rceil = 35\;\text{GPUs}$$
&lt;p>With 4×H100 SXM5 nodes:&lt;/p>
$$N_{\text{nodes}} = \left\lceil \frac{N_{\text{GPU}}}{4} \right\rceil = \left\lceil \frac{35}{4} \right\rceil = 9\;\text{nodes}$$
&lt;p>We add &lt;strong>15 % headroom&lt;/strong> for hardware failures (~5 % annual rate in small clusters), upgrades and unforeseen peaks:&lt;/p>
$$N_{\text{nodes, final}} = \lceil 9 \times 1.15 \rceil = 11\;\text{nodes} \approx 44\;\text{GPUs}$$
&lt;blockquote>
&lt;p>For the TL;DR example (5M requests/day with a 16 h active profile, k 1.8 and an SLO of 300 ms) the number of nodes is 11. The simplified TL;DR case with k=1 and H=24 gives 3 nodes; the difference illustrates the impact of the hourly profile.&lt;/p>
&lt;/blockquote>
&lt;h3 id="15-summary-of-the-chain">1.5 Summary of the chain&lt;/h3>
&lt;div class="diagram" style="max-width:700px;margin:1rem auto;">
&lt;svg viewBox="0 0 700 110" role="img" aria-label="Sizing chain: demand and SLO derive the peak throughput, which divided by the throughput per GPU gives the number of GPUs and of nodes" xmlns="http://www.w3.org/2000/svg">
&lt;style>.bx{fill:none;stroke:currentColor;stroke-width:1.2}.ts{font:11px sans-serif;fill:currentColor}.arr{fill:none;stroke:currentColor;stroke-width:1.2;marker-end:url(#a)}&lt;/style>
&lt;defs>
&lt;marker id="a" markerWidth="6" markerHeight="6" refX="5" refY="3" orient="auto">
&lt;path d="M0,0 L6,3 L0,6 Z" fill="currentColor"/>
&lt;/marker>
&lt;/defs>
&lt;rect class="bx" x="10" y="30" width="110" height="50" rx="4"/>
&lt;text x="65" y="52" class="ts" text-anchor="middle">Demand&lt;/text>
&lt;text x="65" y="66" class="ts" text-anchor="middle">D, L, k, H&lt;/text>
&lt;line class="arr" x1="120" y1="55" x2="155" y2="55"/>
&lt;rect class="bx" x="155" y="30" width="110" height="50" rx="4"/>
&lt;text x="210" y="52" class="ts" text-anchor="middle">SLO&lt;/text>
&lt;text x="210" y="66" class="ts" text-anchor="middle">TTFT/ITL P99 → ρ&lt;/text>
&lt;line class="arr" x1="265" y1="55" x2="300" y2="55"/>
&lt;rect class="bx" x="300" y="30" width="110" height="50" rx="4"/>
&lt;text x="355" y="52" class="ts" text-anchor="middle">Required&lt;/text>
&lt;text x="355" y="66" class="ts" text-anchor="middle">throughput&lt;/text>
&lt;line class="arr" x1="410" y1="55" x2="445" y2="55"/>
&lt;rect class="bx" x="445" y="30" width="110" height="50" rx="4"/>
&lt;text x="500" y="52" class="ts" text-anchor="middle">N GPUs /&lt;/text>
&lt;text x="500" y="66" class="ts" text-anchor="middle">N nodes&lt;/text>
&lt;line class="arr" x1="555" y1="55" x2="590" y2="55"/>
&lt;rect class="bx" x="590" y="30" width="100" height="50" rx="4"/>
&lt;text x="640" y="52" class="ts" text-anchor="middle">TCO →&lt;/text>
&lt;text x="640" y="66" class="ts" text-anchor="middle">€/1M tok&lt;/text>
&lt;/svg>
&lt;/div>
&lt;hr>
&lt;h2 id="2-from-sizing-to-cost-the-tco-model">2. From sizing to cost: the TCO model&lt;/h2>
&lt;p>With \(N_{\text{nodes}} = 11\) 4×H100 SXM5 nodes, the TCO follows the model detailed in &lt;a href="https://blog.lo0.es/en/posts/full-tco-on-premise-gpu-cluster-capex-gpu-hour-break-even/">TCO of an on-premise GPU cluster&lt;/a>. Here the compact formula is reproduced and applied to the sized cluster.&lt;/p>
&lt;h3 id="21-annual-cost-per-node-base-scenario">2.1 Annual cost per node (base scenario)&lt;/h3>
$$C_{\text{node/year}} = \frac{\text{node capex}}{\text{years}} + \text{node opex/year}$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Line item&lt;/th>
&lt;th>Value (USD / €)&lt;/th>
&lt;th>Note&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>4×H100 node capex (midpoint)&lt;/td>
&lt;td>178,500 USD&lt;/td>
&lt;td>GPUs + server + network + storage + rack&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3-year amortisation&lt;/td>
&lt;td>59,500 USD/year ≈ 55,300 €/year&lt;/td>
&lt;td>Straight line&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Opex/year (base scenario, 8–16 node cluster)&lt;/td>
&lt;td>~28,000 €/year&lt;/td>
&lt;td>Energy + staff + maintenance + colocation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Total per node per year&lt;/strong>&lt;/td>
&lt;td>&lt;strong>~83,300 €/year&lt;/strong>&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For 11 nodes: &lt;strong>915,300 €/year&lt;/strong> of total fixed cost.&lt;/p>
&lt;h3 id="22-from-node-year-to-gpu-hour">2.2 From €/node-year to €/GPU-hour&lt;/h3>
$$\text{EUR/GPU-hour} = \frac{C_{\text{node/year}}}{4\;\text{GPUs} \times 8{,}760\;\text{h} \times \rho}$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Utilisation \(\rho\)&lt;/th>
&lt;th>EUR/GPU-hour&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>40 %&lt;/td>
&lt;td>5.93&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>55 %&lt;/td>
&lt;td>4.31&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>63 % (SLO 300 ms)&lt;/td>
&lt;td>3.76&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>70 %&lt;/td>
&lt;td>3.39&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>80 %&lt;/td>
&lt;td>2.97&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100 %&lt;/td>
&lt;td>2.38&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="23-from-gpu-hour-to-1m-tokens">2.3 From €/GPU-hour to €/1M tokens&lt;/h3>
$$\text{EUR/1M tokens} = \frac{\text{EUR/GPU-hour} \times 10^{6}}{\dot{T}_{\text{GPU}} \times 3{,}600}$$
&lt;p>With \(\dot{T}_{\text{GPU}} = 1{,}850\) tok/s (vLLM, Llama-3.3 70B FP8):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Utilisation&lt;/th>
&lt;th>EUR/GPU-hour&lt;/th>
&lt;th>EUR/1M tokens&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>40 %&lt;/td>
&lt;td>5.93&lt;/td>
&lt;td>&lt;strong>0.891&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>55 %&lt;/td>
&lt;td>4.31&lt;/td>
&lt;td>&lt;strong>0.647&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>63 % (SLO 300 ms)&lt;/td>
&lt;td>3.76&lt;/td>
&lt;td>&lt;strong>0.564&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>70 %&lt;/td>
&lt;td>3.39&lt;/td>
&lt;td>&lt;strong>0.509&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>80 %&lt;/td>
&lt;td>2.97&lt;/td>
&lt;td>&lt;strong>0.446&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100 %&lt;/td>
&lt;td>2.38&lt;/td>
&lt;td>&lt;strong>0.357&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>The complete cost/token identity as a function of throughput and utilisation is developed in &lt;a href="https://blog.lo0.es/en/posts/gpu-hour-to-cost-per-token-on-prem-vs-cloud/">cost per token and per request&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;h3 id="24-comparison-with-cloud-equivalent-1m-tokens">2.4 Comparison with cloud (equivalent €/1M tokens)&lt;/h3>
&lt;p>To compare, the cloud price is converted to the €/1M tokens equivalent using the same reference throughput (\(\dot{T}_{\text{GPU}} = 1{,}850\) tok/s):&lt;/p>
$$\text{EUR/1M tokens (cloud)} = \frac{P_{\text{cloud}} \times 10^{6}}{1{,}850 \times 3{,}600}$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Provider / Mode&lt;/th>
&lt;th>GPU-hour price (USD)&lt;/th>
&lt;th>EUR/GPU-hour (\(1\,\text{USD} \approx 0.93\,\text{EUR}\))&lt;/th>
&lt;th>EUR/1M tokens equiv.&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>AWS p5 on-demand (post Jun. 2025)&lt;/td>
&lt;td>3.90&lt;/td>
&lt;td>3.63&lt;/td>
&lt;td>&lt;strong>0.545&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>AWS p5 1-year reserved&lt;/td>
&lt;td>~2.50&lt;/td>
&lt;td>2.33&lt;/td>
&lt;td>&lt;strong>0.350&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CoreWeave on-demand&lt;/td>
&lt;td>~2.01&lt;/td>
&lt;td>1.87&lt;/td>
&lt;td>&lt;strong>0.281&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CoreWeave 3-year reserved&lt;/td>
&lt;td>~1.49&lt;/td>
&lt;td>1.39&lt;/td>
&lt;td>&lt;strong>0.209&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GCP A3 on-demand&lt;/td>
&lt;td>~3.67&lt;/td>
&lt;td>3.41&lt;/td>
&lt;td>&lt;strong>0.512&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Azure ND H100 v5 on-demand&lt;/td>
&lt;td>~6.98&lt;/td>
&lt;td>6.49&lt;/td>
&lt;td>&lt;strong>0.975&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Sources: IntuitionLabs (Jun. 2026), CloudZero (Jun. 2026), Spheron GPU pricing (May 2026).&lt;/p>
&lt;hr>
&lt;h2 id="3-break-even-and-payback-of-your-own-investment">3. Break-even and payback of your own investment&lt;/h2>
&lt;h3 id="31-the-utilisation-break-even-formula">3.1 The utilisation break-even formula&lt;/h3>
&lt;p>The utilisation break-even \(u^{*}\) is the utilisation at which the annual on-prem cost per GPU-hour equals the cloud price:&lt;/p>
$$u^{*} = \frac{\text{capex/year} + \text{opex/year}}{4 \times 8{,}760 \times P_{\text{cloud}}}$$
&lt;p>where \(P_{\text{cloud}}\) is the cloud price in the same currency as the on-prem costs.&lt;/p>
&lt;p>With the base scenario (capex/year 55,300 €, opex/year 28,000 €, total 83,300 €/node/year):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cloud reference&lt;/th>
&lt;th>Cloud price (EUR/GPU-hour)&lt;/th>
&lt;th>\(u^{*}\) break-even&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Azure on-demand (~6.49 EUR)&lt;/td>
&lt;td>6.49&lt;/td>
&lt;td>&lt;strong>23 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>AWS on-demand post-cut (~3.63 EUR)&lt;/td>
&lt;td>3.63&lt;/td>
&lt;td>&lt;strong>41 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GCP on-demand (~3.41 EUR)&lt;/td>
&lt;td>3.41&lt;/td>
&lt;td>&lt;strong>44 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CoreWeave on-demand (~1.87 EUR)&lt;/td>
&lt;td>1.87&lt;/td>
&lt;td>&lt;strong>80 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CoreWeave 3-yr reserved (~1.39 EUR)&lt;/td>
&lt;td>1.39&lt;/td>
&lt;td>&lt;strong>&amp;gt;100 %&lt;/strong> (impossible)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>AWS 1-yr reserved (~2.33 EUR)&lt;/td>
&lt;td>2.33&lt;/td>
&lt;td>&lt;strong>64 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="diagram" style="max-width:720px;margin:1rem auto;">
&lt;svg viewBox="0 0 720 240" role="img" aria-label="Break-even on-prem vs cloud: the on-prem curve falls with utilisation and crosses AWS on-demand at 41 per cent, GCP at 44 per cent and CoreWeave on-demand at 80 per cent" xmlns="http://www.w3.org/2000/svg">
&lt;style>.ax{fill:none;stroke:currentColor;stroke-width:1}.cv{fill:none;stroke:currentColor;stroke-width:1.8}.dsh{fill:none;stroke:currentColor;stroke-width:1.2;stroke-dasharray:5 3}.ts{font:11px sans-serif;fill:currentColor}.tl{font:600 11px sans-serif;fill:currentColor}&lt;/style>
&lt;line class="ax" x1="60" y1="20" x2="60" y2="200"/>
&lt;line class="ax" x1="60" y1="200" x2="700" y2="200"/>
&lt;text x="20" y="120" class="ts" transform="rotate(-90 20 120)">EUR/GPU-h&lt;/text>
&lt;text x="340" y="222" class="ts">utilisation →&lt;/text>
&lt;text x="62" y="216" class="ts">0&lt;/text>
&lt;text x="190" y="216" class="ts">30&lt;/text>
&lt;text x="330" y="216" class="ts">60&lt;/text>
&lt;text x="460" y="216" class="ts">80&lt;/text>
&lt;text x="600" y="216" class="ts">100 %&lt;/text>
&lt;line class="ax" x1="200" y1="197" x2="200" y2="203"/>
&lt;line class="ax" x1="340" y1="197" x2="340" y2="203"/>
&lt;line class="ax" x1="460" y1="197" x2="460" y2="203"/>
&lt;line class="ax" x1="600" y1="197" x2="600" y2="203"/>
&lt;path class="cv" d="M75,30 C120,55 200,100 300,140 C400,165 520,180 670,190"/>
&lt;text x="76" y="26" class="tl">on-prem (fixed capex)&lt;/text>
&lt;line class="cv" x1="60" y1="130" x2="700" y2="130"/>
&lt;text x="590" y="125" class="ts">Azure OD (6.49 €)&lt;/text>
&lt;line class="cv" x1="60" y1="160" x2="700" y2="160"/>
&lt;text x="590" y="155" class="ts">AWS OD (3.63 €)&lt;/text>
&lt;line class="cv" x1="60" y1="167" x2="700" y2="167"/>
&lt;text x="590" y="178" class="ts">GCP OD (3.41 €)&lt;/text>
&lt;line class="cv" x1="60" y1="185" x2="700" y2="185"/>
&lt;text x="576" y="181" class="ts">CoreWeave OD (1.87 €)&lt;/text>
&lt;line class="dsh" x1="240" y1="20" x2="240" y2="200"/>
&lt;text x="210" y="38" class="tl">41 % (AWS)&lt;/text>
&lt;line class="dsh" x1="258" y1="20" x2="258" y2="200"/>
&lt;text x="255" y="52" class="ts">44 % (GCP)&lt;/text>
&lt;line class="dsh" x1="475" y1="20" x2="475" y2="200"/>
&lt;text x="448" y="38" class="ts">80 % (CoreWeave OD)&lt;/text>
&lt;/svg>
&lt;/div>
&lt;h3 id="32-capex-payback">3.2 Capex payback&lt;/h3>
&lt;p>Payback is the time \(T_{\text{pay}}\) in which the cumulative saving against cloud equals the initial capex:&lt;/p>
$$T_{\text{pay}} = \frac{\text{total cluster capex}}{(\text{cloud cost/year}) - (\text{on-prem opex/year})}$$
&lt;p>where the cloud cost/year is computed at the same sustained utilisation.&lt;/p>
&lt;p>For the 11-node cluster (total capex 11 × 178,500 USD ≈ 1,825,000 USD ≈ 1,697,000 €):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cloud reference&lt;/th>
&lt;th>Sustained utilisation&lt;/th>
&lt;th>Annual saving vs cloud&lt;/th>
&lt;th>Payback&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>AWS on-demand (3.63 EUR/h)&lt;/td>
&lt;td>70 %&lt;/td>
&lt;td>(3.63 − 3.39 EUR) × 4 × 8760 × 0.70 × 11 nodes ≈ &lt;strong>63,900 €/year&lt;/strong>&lt;/td>
&lt;td>~27 months&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>AWS on-demand (3.63 EUR/h)&lt;/td>
&lt;td>80 %&lt;/td>
&lt;td>(3.63 − 2.97) × 4 × 8760 × 0.80 × 11 ≈ &lt;strong>203,600 €/year&lt;/strong>&lt;/td>
&lt;td>~10 months&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GCP on-demand (3.41 EUR/h)&lt;/td>
&lt;td>70 %&lt;/td>
&lt;td>(3.41 − 3.39) × 4 × 8760 × 0.70 × 11 ≈ &lt;strong>5,400 €/year&lt;/strong>&lt;/td>
&lt;td>~315 months (not viable)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Azure on-demand (6.49 EUR/h)&lt;/td>
&lt;td>70 %&lt;/td>
&lt;td>(6.49 − 3.39) × 4 × 8760 × 0.70 × 11 ≈ &lt;strong>830,000 €/year&lt;/strong>&lt;/td>
&lt;td>~2 months&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>The 13-month payback quoted in studies such as Lenovo TCO 2026 corresponds to ~80 % utilisation against high-priced hyperscalers (Azure/AWS before the cut). With current prices (post June 2025, AWS at 3.90 USD), the window widens.&lt;/p>
&lt;/blockquote>
&lt;h3 id="33-simple-payback-capex-only-vs-equivalent-cloud">3.3 Simple payback (capex only vs equivalent cloud)&lt;/h3>
&lt;p>If on-prem opex is omitted and only capex is compared with the gross saving:&lt;/p>
$$T_{\text{pay,simple}} = \frac{\text{capex}}{P_{\text{cloud}} \times 4 \times 8{,}760 \times \rho \times N_{\text{nodes}}}$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Utilisation&lt;/th>
&lt;th>AWS (3.63 EUR)&lt;/th>
&lt;th>Azure (6.49 EUR)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>50 %&lt;/td>
&lt;td>54 months&lt;/td>
&lt;td>30 months&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>70 %&lt;/td>
&lt;td>39 months&lt;/td>
&lt;td>22 months&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>80 %&lt;/td>
&lt;td>34 months&lt;/td>
&lt;td>19 months&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="4-decision-table-when-to-buy-rent-or-go-hybrid">4. Decision table: when to buy, rent or go hybrid&lt;/h2>
&lt;p>The table below is a five-dimension Pareto. There is no implicit order between columns; the reading depends on the organisation&amp;rsquo;s constraints.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Option&lt;/th>
&lt;th>EUR/GPU-hour (util. 70 %)&lt;/th>
&lt;th>Initial capex&lt;/th>
&lt;th>Required utilisation&lt;/th>
&lt;th>Data sovereignty&lt;/th>
&lt;th>Peak elasticity&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>On-prem purchase, util. ≥ 70 %&lt;/strong>&lt;/td>
&lt;td>3.39&lt;/td>
&lt;td>high (178k USD/node)&lt;/td>
&lt;td>≥ 70 % sustained&lt;/td>
&lt;td>total&lt;/td>
&lt;td>none&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>On-prem purchase, util. &amp;lt; 50 %&lt;/strong>&lt;/td>
&lt;td>&amp;gt; 4.75&lt;/td>
&lt;td>high&lt;/td>
&lt;td>&amp;lt; 50 % → loses vs cloud&lt;/td>
&lt;td>total&lt;/td>
&lt;td>none&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Sovereign EU cloud OD (Scaleway/Nebius EU)&lt;/strong>&lt;/td>
&lt;td>2.00–3.59&lt;/td>
&lt;td>none&lt;/td>
&lt;td>any&lt;/td>
&lt;td>yes (EU)&lt;/td>
&lt;td>total&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>AWS p5 on-demand (post Jun. 2025)&lt;/strong>&lt;/td>
&lt;td>3.63&lt;/td>
&lt;td>none&lt;/td>
&lt;td>any&lt;/td>
&lt;td>no (CLOUD Act)&lt;/td>
&lt;td>total&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>CoreWeave on-demand&lt;/strong>&lt;/td>
&lt;td>1.87&lt;/td>
&lt;td>none&lt;/td>
&lt;td>any&lt;/td>
&lt;td>partial (US)&lt;/td>
&lt;td>total&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>CoreWeave 3-year reserved&lt;/strong>&lt;/td>
&lt;td>1.29–1.39&lt;/td>
&lt;td>financial commitment&lt;/td>
&lt;td>rigid contract&lt;/td>
&lt;td>partial (US)&lt;/td>
&lt;td>none&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>AWS 1-year reserved&lt;/strong>&lt;/td>
&lt;td>~2.17&lt;/td>
&lt;td>1-year commitment&lt;/td>
&lt;td>contract&lt;/td>
&lt;td>no (CLOUD Act)&lt;/td>
&lt;td>none&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Hybrid on-prem base + EU cloud peak&lt;/strong>&lt;/td>
&lt;td>2.50–3.39 (weighted)&lt;/td>
&lt;td>medium&lt;/td>
&lt;td>base ≥ 70 %, elastic peak&lt;/td>
&lt;td>yes (EU)&lt;/td>
&lt;td>elastic peak&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Cut-off criteria that come before the table:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>&lt;strong>GDPR sovereignty&lt;/strong>: if the data is personal or the system is high-risk under the EU AI Act, CoreWeave/AWS are ruled out before any price comparison.&lt;/li>
&lt;li>&lt;strong>Minimum volume to amortise capex&lt;/strong>: below ~2M tokens/day sustained over 3 years, on-prem capex does not amortise against AWS on-demand.&lt;/li>
&lt;li>&lt;strong>Traffic elasticity&lt;/strong>: peaks &amp;gt;3× the base favour a hybrid or pure cloud; a stable base favours on-prem.&lt;/li>
&lt;/ol>
&lt;p>The cost/sovereignty Pareto frontier for GDPR data leaves three options: on-prem, sovereign EU cloud and hybrid. Sustained utilisation and traffic predictability decide between them. See the cross-analysis of the four axes in &lt;a href="https://blog.lo0.es/en/posts/sovereign-on-premise-vs-hyperscalers-data/">sovereign on-premise vs hyperscalers&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="5-sensitivity-analysis">5. Sensitivity analysis&lt;/h2>
&lt;h3 id="51-sizing-vs-hourly-profile-and-peak-factor">5.1 Sizing vs hourly profile and peak factor&lt;/h3>
&lt;p>The number of GPUs grows linearly with \(k_{\text{peak}}\) and inversely with \(\rho_{\max}\):&lt;/p>
$$N_{\text{GPU}} = \left\lceil \frac{D \times L_{\text{out}} \times k_{\text{peak}}}{H \times 3{,}600 \times \rho_{\max} \times \dot{T}_{\text{GPU}}} \right\rceil$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Peak factor \(k\)&lt;/th>
&lt;th>SLO 300 ms (\(\rho_{\max}=0.63\))&lt;/th>
&lt;th>SLO 500 ms (\(\rho_{\max}=0.75\))&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1.2&lt;/td>
&lt;td>8 GPUs (2 nodes)&lt;/td>
&lt;td>6 GPUs (2 nodes)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.8&lt;/td>
&lt;td>12 GPUs (3 nodes)&lt;/td>
&lt;td>10 GPUs (3 nodes)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2.5&lt;/td>
&lt;td>16 GPUs (4 nodes)&lt;/td>
&lt;td>13 GPUs (4 nodes)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3.5&lt;/td>
&lt;td>22 GPUs (6 nodes)&lt;/td>
&lt;td>18 GPUs (5 nodes)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>(Example simplified to 5M req/day with H=24 to illustrate the sensitivity to the peak factor)&lt;/p>
&lt;/blockquote>
&lt;p>A peak factor of 3.5× triples the number of nodes compared with k=1.2 at the same SLO. Sizing hardware for \(k > 2.5\) leaves GPUs idle more than 70 % of the time; peak cloud is more efficient beyond that threshold.&lt;/p>
&lt;h3 id="52-break-even-vs-sustained-utilisation">5.2 Break-even vs sustained utilisation&lt;/h3>
$$u^{*} = \frac{83{,}300}{4 \times 8{,}760 \times P_{\text{cloud}}}$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cloud price (EUR/GPU-hour)&lt;/th>
&lt;th>\(u^{*}\) break-even&lt;/th>
&lt;th>Scenario&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>6.49 (Azure OD)&lt;/td>
&lt;td>23 %&lt;/td>
&lt;td>On-prem wins almost always&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3.63 (AWS OD)&lt;/td>
&lt;td>41 %&lt;/td>
&lt;td>On-prem wins if util. &amp;gt; 41 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3.41 (GCP OD)&lt;/td>
&lt;td>44 %&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2.33 (AWS 1-yr reserved)&lt;/td>
&lt;td>64 %&lt;/td>
&lt;td>On-prem wins if util. &amp;gt; 64 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.87 (CoreWeave OD)&lt;/td>
&lt;td>80 %&lt;/td>
&lt;td>Hard to reach in production&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.39 (CoreWeave 3-yr reserved)&lt;/td>
&lt;td>&amp;gt;100 %&lt;/td>
&lt;td>On-prem never closes the gap&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="53-break-even-vs-energy-price">5.3 Break-even vs energy price&lt;/h3>
&lt;p>Energy accounts for 6–11 % of total TCO. Its impact on the break-even is moderate:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Energy price (EUR/kWh)&lt;/th>
&lt;th>Energy opex/year per node&lt;/th>
&lt;th>EUR/GPU-hour (70 % util.)&lt;/th>
&lt;th>\(u^{*}\) vs AWS OD&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>0.034 (solar PPA)&lt;/td>
&lt;td>1,604 €&lt;/td>
&lt;td>3.22&lt;/td>
&lt;td>38 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0.116 (industrial ES, base)&lt;/td>
&lt;td>5,475 €&lt;/td>
&lt;td>3.39&lt;/td>
&lt;td>41 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0.200 (high tariff)&lt;/td>
&lt;td>9,437 €&lt;/td>
&lt;td>3.57&lt;/td>
&lt;td>43 %&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The difference between the cheapest and the most expensive scenario is only 5 percentage points of break-even. The variable that moves the needle is utilisation, not energy.&lt;/p>
&lt;h3 id="54-break-even-vs-demand-growth">5.4 Break-even vs demand growth&lt;/h3>
&lt;p>If demand grows at an annual rate \(g\), the average utilisation of the cluster (sized for year 1) rises over time until it saturates and has to be expanded:&lt;/p>
$$\rho(t) = \rho_{0} \times (1 + g)^{t}$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Annual growth \(g\)&lt;/th>
&lt;th>Time to saturation (\(\rho \to 100\,\%\))&lt;/th>
&lt;th>Decision&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>10 %&lt;/td>
&lt;td>~11 years&lt;/td>
&lt;td>Comfortable purchase&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>30 %&lt;/td>
&lt;td>~4 years&lt;/td>
&lt;td>Purchase with a review at 3 years&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>60 %&lt;/td>
&lt;td>~2 years&lt;/td>
&lt;td>Hybrid: base + elastic cloud&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&amp;gt;100 %&lt;/td>
&lt;td>&amp;lt;1 year&lt;/td>
&lt;td>Pure cloud until it stabilises&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For growth above 30 % per year, a buy-only strategy means oversizing for the future peak or re-buying hardware in short cycles. The hybrid (on-prem base + cloud for growth) minimises the capex at risk.&lt;/p>
&lt;h3 id="55-headroom-the-cost-of-the-safety-margin">5.5 Headroom: the cost of the safety margin&lt;/h3>
&lt;p>The 15 % headroom in \(N_{\text{nodes}}\) amounts to having ~1.6 extra nodes on average. Its annual cost is:&lt;/p>
$$C_{\text{headroom}} = 0.15 \times 83{,}300\;\text{EUR/node/year} \times N_{\text{nodes,base}} \approx 12{,}500 \times 9 = 112{,}500\;\text{EUR/year}$$
&lt;p>That cost is justified by:&lt;/p>
&lt;ul>
&lt;li>GPU failure rate ~5 % per year (in small clusters, documented by Introl, Apr. 2026)&lt;/li>
&lt;li>Replacement time of 2–8 weeks (depending on market availability)&lt;/li>
&lt;li>Unforeseen peaks of up to 20 % above the estimate&lt;/li>
&lt;/ul>
&lt;p>If the service can degrade gracefully (relaxing the TTFT SLO from 300 ms to 500 ms at extreme peak), headroom can be cut to 10 %, saving ~37,500 EUR/year.&lt;/p>
&lt;hr>
&lt;h2 id="6-sensitivity-map-gpu-hour-and-break-even-on-two-axes">6. Sensitivity map: €/GPU-hour and break-even on two axes&lt;/h2>
&lt;p>The table below crosses utilisation with the opex scenario, showing the all-in EUR/GPU-hour (base scenario, capex/year 55,300 €):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>Low opex (13,000 €/year)&lt;/th>
&lt;th>Base opex (28,000 €/year)&lt;/th>
&lt;th>High opex (75,000 €/year)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>Util. 40 %&lt;/strong>&lt;/td>
&lt;td>4.74&lt;/td>
&lt;td>5.93&lt;/td>
&lt;td>9.06&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Util. 55 %&lt;/strong>&lt;/td>
&lt;td>3.45&lt;/td>
&lt;td>4.31&lt;/td>
&lt;td>6.59&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Util. 63 %&lt;/strong>&lt;/td>
&lt;td>3.01&lt;/td>
&lt;td>3.76&lt;/td>
&lt;td>5.75&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Util. 70 %&lt;/strong>&lt;/td>
&lt;td>2.71&lt;/td>
&lt;td>3.39&lt;/td>
&lt;td>5.18&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Util. 80 %&lt;/strong>&lt;/td>
&lt;td>2.37&lt;/td>
&lt;td>2.97&lt;/td>
&lt;td>4.54&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Util. 100 %&lt;/strong>&lt;/td>
&lt;td>1.90&lt;/td>
&lt;td>2.38&lt;/td>
&lt;td>3.63&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The crossing point with the cloud price (AWS OD: 3.63 EUR):&lt;/p>
&lt;ul>
&lt;li>Low-opex scenario: break-even at ~&lt;strong>38 % utilisation&lt;/strong>&lt;/li>
&lt;li>Base-opex scenario: break-even at ~&lt;strong>41 % utilisation&lt;/strong>&lt;/li>
&lt;li>High-opex scenario: break-even at ~&lt;strong>53 % utilisation&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>The biggest lever for lowering the break-even is not hardware capex but opex (staff and colocation above all). See the analysis of utilisation as a FinOps lever in &lt;a href="https://blog.lo0.es/en/posts/gpu-idle-cost-not-on-any-invoice/">GPU utilisation as FinOps&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="7-integration-with-the-rest-of-the-finops-chain">7. Integration with the rest of the FinOps chain&lt;/h2>
&lt;p>The sizing of §1 determines the number of nodes; the TCO of §2 gives the cost per hour; the comparison of §3 gives the break-even. Those three numbers feed directly into the other instruments of the series:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Instrument&lt;/th>
&lt;th>Input from this article&lt;/th>
&lt;th>Output&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://blog.lo0.es/en/posts/guidellm-validating-slo-under-load-sizing-knee/">GuideLLM — SLO validation under load&lt;/a>&lt;/td>
&lt;td>TTFT/ITL P99 SLO from step 2&lt;/td>
&lt;td>Experimental confirmation of the real throughput per GPU&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://blog.lo0.es/en/posts/capacity-planning-on-premise-llm-inference/">Capacity planning for on-premise inference&lt;/a>&lt;/td>
&lt;td>Demand profile and N GPUs from step 4&lt;/td>
&lt;td>Scaling policy and autoscaling triggers&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://blog.lo0.es/en/posts/gpu-hour-to-cost-per-token-on-prem-vs-cloud/">Cost per token and per request&lt;/a>&lt;/td>
&lt;td>EUR/GPU-hour from step §2.2&lt;/td>
&lt;td>EUR/1M tokens per model and batching&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://blog.lo0.es/en/posts/cloud-gpu-on-demand-reserved-spot-neoclouds-2026-prices/">Cloud GPU commitment and spot&lt;/a>&lt;/td>
&lt;td>Cloud prices from table §2.4&lt;/td>
&lt;td>Optimisation of the complementary cloud tier&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://blog.lo0.es/en/posts/sovereign-on-premise-vs-hyperscalers-data/">Sovereign on-premise vs hyperscalers&lt;/a>&lt;/td>
&lt;td>Break-even from §3&lt;/td>
&lt;td>Final buy/rent decision including the sovereignty axis&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://blog.lo0.es/en/posts/full-tco-on-premise-gpu-cluster-capex-gpu-hour-break-even/">TCO of an on-premise GPU cluster&lt;/a>&lt;/td>
&lt;td>Capex and opex from §2.1&lt;/td>
&lt;td>Detailed TCO model with every line item&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://blog.lo0.es/en/posts/gpu-idle-cost-not-on-any-invoice/">GPU utilisation as FinOps&lt;/a>&lt;/td>
&lt;td>Target utilisation from step 2&lt;/td>
&lt;td>Scheduling levers to raise real utilisation&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="sources">Sources&lt;/h2>
&lt;ul>
&lt;li>Spheron · LLM Inference SLO Engineering: TTFT, ITL, and P99 Latency Budgets for Production AI (2026) — &lt;a href="https://www.spheron.network/blog/llm-inference-slo-ttft-itl-latency-budget-guide-2026/">https://www.spheron.network/blog/llm-inference-slo-ttft-itl-latency-budget-guide-2026/&lt;/a>&lt;/li>
&lt;li>Spheron · vLLM vs TensorRT-LLM vs SGLang: H100 Benchmarks (2026) — &lt;a href="https://www.spheron.network/blog/vllm-vs-tensorrt-llm-vs-sglang-benchmarks/">https://www.spheron.network/blog/vllm-vs-tensorrt-llm-vs-sglang-benchmarks/&lt;/a>&lt;/li>
&lt;li>Spheron · GPU Cloud Pricing 2026: H100 from 1.03 USD/hr, B200 from 2.12 USD/hr — &lt;a href="https://www.spheron.network/blog/gpu-cloud-pricing-comparison-2026/">https://www.spheron.network/blog/gpu-cloud-pricing-comparison-2026/&lt;/a>&lt;/li>
&lt;li>Spheron · LLM Inference On-Premise vs GPU Cloud: 2026 Cost and Break-Even Analysis — &lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/&lt;/a>&lt;/li>
&lt;li>MLPerf Inference v5.1 — Red Hat: 5 777 tok/s (offline) en Llama 3.1-8B FP8 en H100 — &lt;a href="https://www.redhat.com/en/blog/efficient-and-reproducible-llm-inference-red-hat-mlperf-inference-v51-results">https://www.redhat.com/en/blog/efficient-and-reproducible-llm-inference-red-hat-mlperf-inference-v51-results&lt;/a>&lt;/li>
&lt;li>MLPerf Inference v6.0 Results Explained: GPU Performance Rankings for AI Workloads (2026) — &lt;a href="https://www.spheron.network/blog/mlperf-inference-v6-benchmark-results-2026/">https://www.spheron.network/blog/mlperf-inference-v6-benchmark-results-2026/&lt;/a>&lt;/li>
&lt;li>IntuitionLabs · H100 Rental Prices Compared: 1.49–6.98 USD/hr Across 15+ Cloud Providers (2026) — &lt;a href="https://intuitionlabs.ai/articles/h100-rental-prices-cloud-comparison">https://intuitionlabs.ai/articles/h100-rental-prices-cloud-comparison&lt;/a>&lt;/li>
&lt;li>CloudZero · Cloud GPU Pricing Comparison: AWS vs Azure vs GCP For AI Workloads (2026) — &lt;a href="https://www.cloudzero.com/blog/cloud-gpu-pricing-comparison/">https://www.cloudzero.com/blog/cloud-gpu-pricing-comparison/&lt;/a>&lt;/li>
&lt;li>Lenovo Press · On-Premise vs Cloud: Generative AI Total Cost of Ownership (2026 Edition) — &lt;a href="https://lenovopress.lenovo.com/lp2368-on-premise-vs-cloud-generative-ai-total-cost-of-ownership-2026-edition">https://lenovopress.lenovo.com/lp2368-on-premise-vs-cloud-generative-ai-total-cost-of-ownership-2026-edition&lt;/a>&lt;/li>
&lt;li>Introl · GPU Infrastructure TCO Model: 5-Year Cost Analysis for Enterprise AI (abr. 2026) — &lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model&lt;/a>&lt;/li>
&lt;li>GMI Cloud · NVIDIA H100 GPU Pricing 2026: Rent vs Buy Cost Analysis — &lt;a href="https://www.gmicloud.ai/en/blog/nvidia-h100-gpu-pricing-2026-rent-vs-buy-cost-analysis">https://www.gmicloud.ai/en/blog/nvidia-h100-gpu-pricing-2026-rent-vs-buy-cost-analysis&lt;/a>&lt;/li>
&lt;li>Red Hat · 233 % 3-year ROI and 13 months to payback with Red Hat AI (feb. 2026) — &lt;a href="https://www.redhat.com/en/blog/233-3-year-return-investment-and-13-months-payback-red-hat-ai">https://www.redhat.com/en/blog/233-3-year-return-investment-and-13-months-payback-red-hat-ai&lt;/a>&lt;/li>
&lt;li>VentureBeat · 5 % GPU utilization: the 401 billion USD AI infrastructure problem — &lt;a href="https://venturebeat.com/infrastructure/5-gpu-utilization-the-401-billion-ai-infrastructure-problem-enterprises-cant-keep-ignoring/">https://venturebeat.com/infrastructure/5-gpu-utilization-the-401-billion-ai-infrastructure-problem-enterprises-cant-keep-ignoring/&lt;/a>&lt;/li>
&lt;li>DZone · Queueing Theory for LLM Inference — &lt;a href="https://dzone.com/articles/queueing-theory-for-llm-inference">https://dzone.com/articles/queueing-theory-for-llm-inference&lt;/a>&lt;/li>
&lt;li>GuideLLM · Evaluate LLM deployments for real-world inference (Red Hat Developer, jun. 2025) — &lt;a href="https://developers.redhat.com/articles/2025/06/20/guidellm-evaluate-llm-deployments-real-world-inference">https://developers.redhat.com/articles/2025/06/20/guidellm-evaluate-llm-deployments-real-world-inference&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Full TCO of an on-premise GPU cluster: from capex to the all-in €/GPU-hour and the break-even against cloud</title><link>https://blog.lo0.es/en/posts/full-tco-on-premise-gpu-cluster-capex-gpu-hour-break-even/</link><pubDate>Tue, 16 Jun 2026 06:00:00 +0200</pubDate><guid>https://blog.lo0.es/en/posts/full-tco-on-premise-gpu-cluster-capex-gpu-hour-break-even/</guid><description>&lt;blockquote>
&lt;p>Notation: amounts in &lt;strong>N €&lt;/strong> or &lt;strong>N USD&lt;/strong> (source denominated in dollars); decimal point; comma as thousands separator. The dollar sign is not used (it is the formula delimiter). Data centred on Europe/Spain. Generic example hardware: a cluster of N nodes, each with 4×H100 SXM5 80 GB.&lt;/p>
&lt;/blockquote>
&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>A 4×H100 SXM5 node costs between &lt;strong>150,000 USD and 200,000 USD&lt;/strong> in total capex (GPUs + server + network + storage + prorated rack). Amortised over 3 years with European opex (energy at ~0.116 €/kWh industrial, PUE 1.54 average or 1.2 with liquid, 0.3 FTE of staff), the &lt;strong>all-in&lt;/strong> cost ranges from &lt;strong>3.10 USD/GPU-hour&lt;/strong> (100 % utilisation) to &lt;strong>6.20 USD/GPU-hour&lt;/strong> (50 % utilisation). The break-even against AWS p5 on-demand (~6.88 USD/GPU-hour) is crossed at around &lt;strong>70 % utilisation&lt;/strong>; against a neocloud 3-year reserved (~1.49–2.10 USD/GPU-hour), on-prem never closes the gap in that scenario. Utilisation is the variable that decides the cost axis, not the price of the hardware.&lt;/p>
&lt;hr>
&lt;h2 id="the-model-declared-assumptions">The model: declared assumptions&lt;/h2>
&lt;p>Every calculation below starts from these assumptions. Changing any of them moves the conclusion; the sensitivity section quantifies by how much.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parameter&lt;/th>
&lt;th>Base value&lt;/th>
&lt;th>Sensitivity range&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Node&lt;/td>
&lt;td>4×H100 SXM5 80 GB (HGX baseboard)&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cluster&lt;/td>
&lt;td>N nodes (per-node model; scales linearly)&lt;/td>
&lt;td>1–32 nodes&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Capex amortisation&lt;/td>
&lt;td>3 years (straight line)&lt;/td>
&lt;td>3–5 years&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GPU utilisation&lt;/td>
&lt;td>70 %&lt;/td>
&lt;td>30 %–100 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Energy price&lt;/td>
&lt;td>0.116 €/kWh (industrial Spain, Sept. 2025)&lt;/td>
&lt;td>0.06–0.20 €/kWh&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PUE&lt;/td>
&lt;td>1.54 (global average, Uptime Institute 2025)&lt;/td>
&lt;td>1.15–1.80&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Exchange rate&lt;/td>
&lt;td>1 USD = 0.93 € (reference Jun. 2026)&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>Energy source: &lt;a href="https://www.globalpetrolprices.com/Spain/electricity_prices/">GlobalPetrolPrices · Spain Business Electricity, Sept. 2025&lt;/a>. PUE source: &lt;a href="https://datacenter.uptimeinstitute.com/rs/711-RIA-145/images/2025.Annual.Survey.Report.pdf">Uptime Institute Global Data Center Survey 2025&lt;/a> — the global average PUE has been stuck at 1.54 for the sixth consecutive year; hyperscalers 1.10–1.15; colocation/enterprise 1.58–1.80; facilities less than 5 years old, 1.48. PUE 1.2 is achievable with direct-to-chip liquid cooling.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="capex-breakdown-per-4h100-sxm5-node">Capex breakdown per 4×H100 SXM5 node&lt;/h2>
&lt;h3 id="gpus">GPUs&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Component&lt;/th>
&lt;th>Unit price (USD)&lt;/th>
&lt;th>Quantity&lt;/th>
&lt;th>Subtotal (USD)&lt;/th>
&lt;th>Source and date&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>H100 SXM5 80 GB (card)&lt;/td>
&lt;td>30,000–40,000&lt;/td>
&lt;td>4&lt;/td>
&lt;td>120,000–160,000&lt;/td>
&lt;td>&lt;a href="https://www.gmicloud.ai/en/blog/nvidia-h100-gpu-pricing-2026-rent-vs-buy-cost-analysis">GMI Cloud, Apr. 2026&lt;/a> · &lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">Introl, Apr. 2026&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The range reflects market variability and volume discounts (5–15 % for orders above 50 units). H100 SXM5 cards require NVIDIA&amp;rsquo;s &lt;strong>HGX baseboard&lt;/strong>; they are not sold loose for direct installation in standard servers.&lt;/p>
&lt;h3 id="server--hgx-baseboard">Server / HGX baseboard&lt;/h3>
&lt;p>A complete 4×H100 SXM node uses NVIDIA&amp;rsquo;s &lt;strong>HGX H100 4-GPU baseboard&lt;/strong> plus a compatible host server. Reference models: Supermicro SYS-421GU-TNXR (4U, dual Intel Xeon 4th Gen, HGX H100 4-GPU) and its Dell equivalent.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Component&lt;/th>
&lt;th>Estimated cost (USD)&lt;/th>
&lt;th>Note&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Server chassis + CPU (2× Xeon) + RAM (512 GB DDR5) + redundant PSU&lt;/td>
&lt;td>18,000–25,000&lt;/td>
&lt;td>Based on a Supermicro SYS-821GE bare without GPUs at ~24,806 USD (&lt;a href="https://www.xicomputer.com/Solutions/Data-Center-Servers/SYS-821GE-TNHR.asp">xicomputer.com&lt;/a>, Jun. 2026); scaled to the 4-GPU&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>HGX H100 4-GPU baseboard&lt;/td>
&lt;td>included in the GPU price&lt;/td>
&lt;td>NVIDIA HGX platform; no separate public price&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Inter-GPU NVLink (inside the node)&lt;/td>
&lt;td>included in the baseboard&lt;/td>
&lt;td>4 GPUs connected by NVLink 4.0 on the HGX baseboard&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>Marketing claim (no independent verification): Supermicro announces datacenter energy cost reductions of up to 40 % with liquid cooling in its HGX H100 servers (&lt;a href="https://www.supermicro.com/en/pressreleases/supermicro-launches-industrys-first-nvidia-hgx-h100-8-and-4-gpu-h100-servers-with-liquid-cooling">Supermicro press release&lt;/a>).&lt;/p>
&lt;/blockquote>
&lt;h3 id="infiniband-ndr-network">InfiniBand NDR network&lt;/h3>
&lt;p>For a multi-node cluster with tensor parallelism across nodes, the GPU-to-GPU network is critical. NDR InfiniBand (400 Gb/s per port) is the de facto standard for HGX clusters.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Component&lt;/th>
&lt;th>Estimated cost per node (USD)&lt;/th>
&lt;th>Source / Note&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>NVIDIA Quantum-2 NDR 400G switch (64 ports, prorated across N nodes)&lt;/td>
&lt;td>2,000–4,000&lt;/td>
&lt;td>Switch ~35,000 USD (&lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">Introl, Apr. 2026&lt;/a>); at 16 nodes, ~2,200 USD/node&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>InfiniBand NDR cables/transceivers (4 ports per node × ~1,000 USD/port)&lt;/td>
&lt;td>4,000&lt;/td>
&lt;td>Estimate based on ~1,000 USD per optical transceiver (&lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">Introl, Apr. 2026&lt;/a>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>InfiniBand network (prorated per 4-GPU node)&lt;/strong>&lt;/td>
&lt;td>&lt;strong>~6,000–8,000&lt;/strong>&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>For inference serving inside a single node (4 GPUs with NVLink), the inter-node network is less critical than for multi-node training. For disaggregated prefill-decode workloads spread across nodes, InfiniBand NDR is necessary.&lt;/p>
&lt;/blockquote>
&lt;h3 id="nvme-storage">NVMe storage&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Component&lt;/th>
&lt;th>Estimated cost (USD)&lt;/th>
&lt;th>Note&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Local NVMe (4 TB × 2 U.2/E1.S drives, working datasets and checkpoints)&lt;/td>
&lt;td>2,000–4,000&lt;/td>
&lt;td>~500–1,000 USD/TB enterprise NVMe, 2025&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Shared object storage (NAS/MinIO, prorated per node)&lt;/td>
&lt;td>2,000–5,000&lt;/td>
&lt;td>Varies with the total capacity of the cluster&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Total storage per node&lt;/strong>&lt;/td>
&lt;td>&lt;strong>~4,000–9,000&lt;/strong>&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>Introl models 50 TB per GPU for effective operation in training clusters (&lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">Introl, Apr. 2026&lt;/a>); for pure inference the requirement is significantly lower (model weights + logs).&lt;/p>
&lt;/blockquote>
&lt;h3 id="rack-pdu-and-datacenter-connectivity">Rack, PDU and datacenter connectivity&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Component&lt;/th>
&lt;th>Estimated cost per node (USD/year)&lt;/th>
&lt;th>Source&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Rack colocation (high density, 10–15 kW per node)&lt;/td>
&lt;td>5,000–12,000/year&lt;/td>
&lt;td>&lt;a href="https://encoradvisors.com/data-center-colocation-pricing/">Encoradvisors · Colocation Pricing 2026&lt;/a>: high density 3,000–6,000 USD/month per rack; at 2 nodes per rack, ~1,500–3,000 USD/month per node = 18,000–36,000 USD/year in tier-1; lower in Spain&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Rack PDU, electrical cabling (prorated)&lt;/td>
&lt;td>500–1,000 per node (amortised capex)&lt;/td>
&lt;td>Inside the colocation line item or in an own datacenter&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>Colocation in Spain/Europe is structurally cheaper than in US tier-1 markets (New York, Silicon Valley). For an own datacenter, replace it with the cost of your own space plus amortisation of the electrical and cooling infrastructure.&lt;/p>
&lt;/blockquote>
&lt;h3 id="capex-summary-per-4h100-sxm5-node">Capex summary per 4×H100 SXM5 node&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Line item&lt;/th>
&lt;th>Range (USD)&lt;/th>
&lt;th>Midpoint&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>GPUs (4× H100 SXM5)&lt;/td>
&lt;td>120,000–160,000&lt;/td>
&lt;td>140,000&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Server chassis + CPU/RAM/PSU&lt;/td>
&lt;td>18,000–25,000&lt;/td>
&lt;td>21,500&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>InfiniBand NDR network (prorated)&lt;/td>
&lt;td>6,000–8,000&lt;/td>
&lt;td>7,000&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>NVMe + object storage&lt;/td>
&lt;td>4,000–9,000&lt;/td>
&lt;td>6,500&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PDU/rack/other (capex)&lt;/td>
&lt;td>2,000–5,000&lt;/td>
&lt;td>3,500&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Total capex per node&lt;/strong>&lt;/td>
&lt;td>&lt;strong>150,000–207,000&lt;/strong>&lt;/td>
&lt;td>&lt;strong>178,500&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Sources: &lt;a href="https://www.gmicloud.ai/en/blog/nvidia-h100-gpu-pricing-2026-rent-vs-buy-cost-analysis">GMI Cloud (Apr. 2026)&lt;/a>, &lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">Introl (Apr. 2026)&lt;/a>, &lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">Spheron (Apr. 2026)&lt;/a>, &lt;a href="https://www.xicomputer.com/Solutions/Data-Center-Servers/SYS-821GE-TNHR.asp">xicomputer.com (Jun. 2026)&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="opex-breakdown-per-4h100-sxm5-node-annual">Opex breakdown per 4×H100 SXM5 node (annual)&lt;/h2>
&lt;h3 id="energy">Energy&lt;/h3>
&lt;p>A 4×H100 SXM5 node at full load draws approximately:&lt;/p>
$$P_{\text{node}} = 4 \times 700\,\text{W (TDP H100 SXM5)} + 800\,\text{W (server)} \approx 3.6\,\text{kW (IT)}$$
&lt;p>The total datacenter power includes the cooling overhead, expressed by the &lt;strong>PUE&lt;/strong>:&lt;/p>
$$P_{\text{total}} = P_{\text{IT}} \times \text{PUE}$$
$$\text{annual energy cost} = P_{\text{IT}} \times \text{PUE} \times 8{,}760\,\text{h} \times \text{kWh price}$$
&lt;p>With the base values (PUE 1.54; 0.116 €/kWh):&lt;/p>
$$\text{energy/year} = 3.6\,\text{kW} \times 1.54 \times 8{,}760\,\text{h} \times 0.116\,\text{EUR/kWh} \approx 5{,}475\,\text{EUR}$$
&lt;p>With a Spanish solar PPA (Q3 2025 reference price: ~34 €/MWh = 0.034 €/kWh according to &lt;a href="https://www.pv-tech.org/european-solar-ppa-prices-fall-below-35-mwh-q3-2025/">PV Tech, Oct. 2025&lt;/a>):&lt;/p>
$$\text{energy/year (solar PPA)} = 3.6 \times 1.54 \times 8{,}760 \times 0.034 \approx 1{,}604\,\text{EUR}$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Energy scenario&lt;/th>
&lt;th>Price (€/kWh)&lt;/th>
&lt;th>Energy cost/year per 4-GPU node&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Spanish solar PPA (Q3 2025)&lt;/td>
&lt;td>0.034&lt;/td>
&lt;td>~1,604 €&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Industrial Spain (Sept. 2025)&lt;/td>
&lt;td>0.116&lt;/td>
&lt;td>~5,475 €&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>European average (industrial tariff)&lt;/td>
&lt;td>0.160&lt;/td>
&lt;td>~7,550 €&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Worst case (no PPA, high tariff)&lt;/td>
&lt;td>0.200&lt;/td>
&lt;td>~9,437 €&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="staff--operations">Staff / operations&lt;/h3>
&lt;p>Staff cost is the most variable line item with cluster size. For a small cluster (2–8 nodes), the rule of thumb is &lt;strong>0.3–0.5 FTE per cluster&lt;/strong> of GPU infrastructure support (&lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">Spheron, Apr. 2026&lt;/a>).&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cluster size&lt;/th>
&lt;th>Estimated FTE&lt;/th>
&lt;th>FTE cost (€/year, Western Europe)&lt;/th>
&lt;th>Cost per 4-GPU node (€/year)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>2–4 nodes&lt;/td>
&lt;td>0.3 FTE&lt;/td>
&lt;td>~120,000&lt;/td>
&lt;td>36,000–18,000&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>8–16 nodes&lt;/td>
&lt;td>0.5 FTE&lt;/td>
&lt;td>~120,000&lt;/td>
&lt;td>7,500&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>32+ nodes&lt;/td>
&lt;td>1–2 FTE&lt;/td>
&lt;td>~120,000&lt;/td>
&lt;td>3,750–7,500&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>Indicative salary reference: a GPU infrastructure engineer with CUDA, InfiniBand and Kubernetes knowledge in Western Europe, ~90,000–140,000 €/year fully loaded. Introl&amp;rsquo;s figures (&lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">Apr. 2026&lt;/a>) in USD (~275,000 USD/year for the US) reflect the North American market, which is appreciably higher.&lt;/p>
&lt;/blockquote>
&lt;h3 id="maintenance-and-support">Maintenance and support&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Line item&lt;/th>
&lt;th>Annual cost (% of hardware capex)&lt;/th>
&lt;th>Per 4-GPU node (midpoint)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Vendor maintenance / support&lt;/td>
&lt;td>5–10 % of capex&lt;/td>
&lt;td>~7,000–14,000 USD → ~6,500–13,000 €&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GPU failure rate (~5 % annual) × replacement cost&lt;/td>
&lt;td>5 % × 4 GPUs × ~35,000 USD = ~7,000 USD expected&lt;/td>
&lt;td>~6,500 € (amortised as a provision)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Minor spares (cables, modules)&lt;/td>
&lt;td>~500–1,000 €&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>Introl quotes GPU failure rates of 2–3 % per year in small clusters; Google Research documented ~9 % annualised in Meta&amp;rsquo;s 16,384-GPU H100 cluster (&lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">Introl, Apr. 2026&lt;/a>). 5 % is used here as a conservative intermediate value.&lt;/p>
&lt;/blockquote>
&lt;h3 id="depreciation-for-accounting-purposes">Depreciation (for accounting purposes)&lt;/h3>
&lt;p>Straight-line depreciation turns capex into an annual flow comparable to the cost of committed cloud:&lt;/p>
$$\text{annual depreciation} = \frac{\text{node capex}}{\text{amortisation years}}$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Node capex (USD)&lt;/th>
&lt;th>3-year amortisation (USD/year)&lt;/th>
&lt;th>5-year amortisation (USD/year)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>150,000 (minimum)&lt;/td>
&lt;td>50,000&lt;/td>
&lt;td>30,000&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>178,500 (average)&lt;/td>
&lt;td>59,500&lt;/td>
&lt;td>35,700&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>207,000 (maximum)&lt;/td>
&lt;td>69,000&lt;/td>
&lt;td>41,400&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>H100 hardware depreciates fast: secondary-market analyses put the residual value at 20–40 % of the purchase price after 3 years (&lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">Introl, Apr. 2026&lt;/a>). The arrival of Blackwell GB200/GB300 accelerates the perceived obsolescence.&lt;/p>
&lt;/blockquote>
&lt;h3 id="annual-opex-summary-per-4h100-sxm5-node-base-scenario-8-node-cluster">Annual opex summary per 4×H100 SXM5 node (base scenario, 8-node cluster)&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Line item&lt;/th>
&lt;th>Base scenario (€/year)&lt;/th>
&lt;th>Range&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Energy (PUE 1.54; 0.116 €/kWh)&lt;/td>
&lt;td>5,475&lt;/td>
&lt;td>1,604–9,437&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Staff (0.5 FTE × 8 nodes, prorated)&lt;/td>
&lt;td>7,500&lt;/td>
&lt;td>3,750–36,000&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Maintenance / support / failures&lt;/td>
&lt;td>9,000&lt;/td>
&lt;td>5,000–15,000&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Rack colocation (Spain, high density)&lt;/td>
&lt;td>6,000&lt;/td>
&lt;td>3,000–15,000&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Total opex per node&lt;/strong>&lt;/td>
&lt;td>&lt;strong>~28,000&lt;/strong>&lt;/td>
&lt;td>&lt;strong>~13,000–75,000&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The extreme range reflects the difference between a well amortised own datacenter with a solar PPA and cheap energy (minimum opex) and tier-1 colocation with market tariffs and senior staff.&lt;/p>
&lt;hr>
&lt;h2 id="deriving-the-all-in-gpu-hour">Deriving the all-in €/GPU-hour&lt;/h2>
&lt;h3 id="formula">Formula&lt;/h3>
$$\text{EUR/GPU-hour all-in} = \frac{\frac{\text{node capex}}{\text{years}} + \text{node annual opex}}{4\,\text{GPUs} \times 8{,}760\,\text{h} \times u}$$
&lt;p>where \(u\) is the average annual utilisation (0 to 1).&lt;/p>
&lt;p>See the cost-per-token identity in &lt;a href="https://blog.lo0.es/en/posts/gpu-hour-to-cost-per-token-on-prem-vs-cloud/">cost per token and per request&lt;/a> for the connection with throughput.&lt;/p>
&lt;h3 id="gpu-hour-table-by-utilisation-and-scenario">€/GPU-hour table by utilisation and scenario&lt;/h3>
&lt;p>&lt;strong>Average capex (178,500 USD → ~166,000 €), 3-year amortisation → 55,300 €/year.&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Utilisation&lt;/th>
&lt;th>Opex/year (base, €)&lt;/th>
&lt;th>Total cost/year (€)&lt;/th>
&lt;th>Useful GPU-hours/year&lt;/th>
&lt;th>&lt;strong>€/GPU-hour&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>30 %&lt;/td>
&lt;td>28,000&lt;/td>
&lt;td>83,300&lt;/td>
&lt;td>10,512&lt;/td>
&lt;td>&lt;strong>7.93&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>50 %&lt;/td>
&lt;td>28,000&lt;/td>
&lt;td>83,300&lt;/td>
&lt;td>17,520&lt;/td>
&lt;td>&lt;strong>4.75&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>70 %&lt;/td>
&lt;td>28,000&lt;/td>
&lt;td>83,300&lt;/td>
&lt;td>24,528&lt;/td>
&lt;td>&lt;strong>3.39&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>80 %&lt;/td>
&lt;td>28,000&lt;/td>
&lt;td>83,300&lt;/td>
&lt;td>28,032&lt;/td>
&lt;td>&lt;strong>2.97&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100 %&lt;/td>
&lt;td>28,000&lt;/td>
&lt;td>83,300&lt;/td>
&lt;td>35,040&lt;/td>
&lt;td>&lt;strong>2.38&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Low-opex scenario&lt;/strong> (solar PPA, own datacenter, large cluster): opex/year ~13,000 €.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Utilisation&lt;/th>
&lt;th>Total cost/year (€)&lt;/th>
&lt;th>&lt;strong>€/GPU-hour&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>50 %&lt;/td>
&lt;td>68,300&lt;/td>
&lt;td>&lt;strong>3.90&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>70 %&lt;/td>
&lt;td>68,300&lt;/td>
&lt;td>&lt;strong>2.78&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>80 %&lt;/td>
&lt;td>68,300&lt;/td>
&lt;td>&lt;strong>2.43&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100 %&lt;/td>
&lt;td>68,300&lt;/td>
&lt;td>&lt;strong>1.95&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>High-opex scenario&lt;/strong> (market tariff, expensive colocation, small cluster): opex/year ~75,000 €.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Utilisation&lt;/th>
&lt;th>Total cost/year (€)&lt;/th>
&lt;th>&lt;strong>€/GPU-hour&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>50 %&lt;/td>
&lt;td>130,300&lt;/td>
&lt;td>&lt;strong>7.44&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>70 %&lt;/td>
&lt;td>130,300&lt;/td>
&lt;td>&lt;strong>5.31&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>80 %&lt;/td>
&lt;td>130,300&lt;/td>
&lt;td>&lt;strong>4.65&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100 %&lt;/td>
&lt;td>130,300&lt;/td>
&lt;td>&lt;strong>3.72&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="from-gpu-hour-to-1m-tokens">From €/GPU-hour to €/1M tokens&lt;/h2>
&lt;p>The cost-per-token identity connects the hardware cost with the inference cost:&lt;/p>
$$\text{EUR/1M tokens} = \frac{\text{EUR/GPU-hour} \times 10^6}{\text{throughput (tok/s)} \times 3{,}600}$$
&lt;p>For reference throughputs on H100 SXM5 with vLLM (see &lt;a href="https://blog.lo0.es/en/posts/capacity-planning-on-premise-llm-inference/">capacity planning for on-premise inference&lt;/a>):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Model&lt;/th>
&lt;th>Typical throughput (tok/s per GPU)&lt;/th>
&lt;th>Source&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Llama-3 70B FP8, high batch&lt;/td>
&lt;td>~2,800&lt;/td>
&lt;td>Series B benchmarks&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Llama-3 8B FP16, medium batch&lt;/td>
&lt;td>~9,000&lt;/td>
&lt;td>Series B benchmarks&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mixtral 8×7B, high batch&lt;/td>
&lt;td>~4,500&lt;/td>
&lt;td>Series B benchmarks&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>€/1M tokens table in the base scenario (€/GPU-hour 3.39 at 70 % utilisation):&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Model&lt;/th>
&lt;th>Throughput (tok/s)&lt;/th>
&lt;th>€/1M tokens&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Llama-3 70B FP8&lt;/td>
&lt;td>2,800&lt;/td>
&lt;td>&lt;strong>~0.336&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Llama-3 8B FP16&lt;/td>
&lt;td>9,000&lt;/td>
&lt;td>&lt;strong>~0.105&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mixtral 8×7B&lt;/td>
&lt;td>4,500&lt;/td>
&lt;td>&lt;strong>~0.209&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>At 50 % utilisation (€/GPU-hour 4.75):&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Model&lt;/th>
&lt;th>€/1M tokens&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Llama-3 70B FP8&lt;/td>
&lt;td>&lt;strong>~0.471&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Llama-3 8B FP16&lt;/td>
&lt;td>&lt;strong>~0.147&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Occupancy (batching) multiplies the effective throughput and lowers the €/1M tokens without changing the hardware; it is analysed in &lt;a href="https://blog.lo0.es/en/posts/gpu-idle-cost-not-on-any-invoice/">GPU utilisation as a FinOps lever&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="break-even-on-prem-vs-cloud">Break-even on-prem vs cloud&lt;/h2>
&lt;h3 id="the-break-even-formula">The break-even formula&lt;/h3>
&lt;p>Break-even happens when the total annual on-prem cost equals the annual cloud cost at the same utilisation:&lt;/p>
$$\text{annual cloud cost} = \text{cloud GPU-hour price} \times 4\,\text{GPUs} \times 8{,}760\,\text{h} \times u$$
$$\text{break-even}: \quad \frac{\text{capex/year} + \text{opex/year}}{4 \times 8{,}760 \times u} = \text{cloud GPU-hour price}$$
&lt;p>Solving for the break-even utilisation:&lt;/p>
$$u^* = \frac{\text{capex/year} + \text{opex/year}}{4 \times 8{,}760 \times \text{cloud GPU-hour price}}$$
&lt;h3 id="break-even-table-by-cloud-mode-and-on-prem-scenario">Break-even table by cloud mode and on-prem scenario&lt;/h3>
&lt;p>&lt;strong>Base on-prem scenario&lt;/strong> (capex/year 55,300 €, opex/year 28,000 €, total 83,300 €/year per 4-GPU node):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cloud reference (price/GPU-hour)&lt;/th>
&lt;th>USD equiv.&lt;/th>
&lt;th>Break-even utilisation \(u^*\)&lt;/th>
&lt;th>Note&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Neocloud on-demand (Lambda/Spheron ~2.90 USD)&lt;/td>
&lt;td>2.90 USD (~2.70 €)&lt;/td>
&lt;td>&lt;strong>&amp;gt;100 %&lt;/strong>, on-prem does not compete&lt;/td>
&lt;td>Neocloud on-demand is cheaper even at full utilisation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Neocloud 3-year reserved (CoreWeave ~1.49–2.10 USD)&lt;/td>
&lt;td>~1.80 USD (~1.67 €)&lt;/td>
&lt;td>&lt;strong>&amp;gt;100 %&lt;/strong>, impossible&lt;/td>
&lt;td>Neocloud reserved beats on-prem in every scenario of this model&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>AWS p5 on-demand (6.88 USD/GPU-hour)&lt;/td>
&lt;td>6.88 USD (~6.40 €)&lt;/td>
&lt;td>&lt;strong>~47 %&lt;/strong>&lt;/td>
&lt;td>Above 47 %, the average on-prem beats AWS on-demand&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>AWS p5 3-year reserved (~2.97 USD/GPU-hour)&lt;/td>
&lt;td>2.97 USD (~2.76 €)&lt;/td>
&lt;td>&lt;strong>&amp;gt;100 %&lt;/strong>&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GCP A3 on-demand (~10.98 USD/GPU-hour)&lt;/td>
&lt;td>10.98 USD (~10.21 €)&lt;/td>
&lt;td>&lt;strong>~29 %&lt;/strong>&lt;/td>
&lt;td>Above 29 %, on-prem beats GCP on-demand&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Azure ND H100 v5 on-demand (~12.29 USD/GPU-hour)&lt;/td>
&lt;td>12.29 USD (~11.43 €)&lt;/td>
&lt;td>&lt;strong>~26 %&lt;/strong>&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Low-opex scenario&lt;/strong> (total 68,300 €/year):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cloud reference&lt;/th>
&lt;th>Break-even utilisation&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>AWS p5 on-demand (6.88 USD ≈ 6.40 €)&lt;/td>
&lt;td>&lt;strong>~38 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Neocloud on-demand (2.90 USD ≈ 2.70 €)&lt;/td>
&lt;td>&lt;strong>~91 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Neocloud 3-yr reserved (1.80 USD ≈ 1.67 €)&lt;/td>
&lt;td>&lt;strong>&amp;gt;100 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>High-opex scenario&lt;/strong> (total 130,300 €/year):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cloud reference&lt;/th>
&lt;th>Break-even utilisation&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>AWS p5 on-demand (6.88 USD ≈ 6.40 €)&lt;/td>
&lt;td>&lt;strong>~72 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GCP A3 on-demand (~10.21 €)&lt;/td>
&lt;td>&lt;strong>~45 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Azure on-demand (~11.43 €)&lt;/td>
&lt;td>&lt;strong>~41 %&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="reading-the-break-even-table">Reading the break-even table&lt;/h3>
&lt;ul>
&lt;li>Against &lt;strong>neoclouds&lt;/strong> (on-demand or reserved), on-prem TCO &lt;strong>does not reach break-even&lt;/strong> in any scenario of the base model. Neocloud reserved beats on-prem even at 100 % utilisation, because its hourly price is below the all-in cost of your own hardware. This is consistent with the analysis in &lt;a href="https://blog.lo0.es/en/posts/cloud-gpu-on-demand-reserved-spot-neoclouds-2026-prices/">cloud GPU: on-demand, reserved and spot&lt;/a>.&lt;/li>
&lt;li>Against &lt;strong>on-demand hyperscalers&lt;/strong> (AWS, GCP, Azure), on-prem does have an achievable break-even: around &lt;strong>26–72 %&lt;/strong> utilisation depending on the scenario. At medium-high utilisation (&amp;gt;70 %), on-prem clearly beats AWS/GCP/Azure on-demand.&lt;/li>
&lt;li>The variable that moves the break-even most is &lt;strong>opex&lt;/strong> (staff above all), not hardware capex. A well sized cluster in cheap colocation with PPA energy can lower the threshold by 20 percentage points compared with the high scenario.&lt;/li>
&lt;li>For GDPR data, the break-even against US hyperscalers is skewed: the sovereignty axis rules out US hyperscalers before cost does (see &lt;a href="https://blog.lo0.es/en/posts/sovereign-on-premise-vs-hyperscalers-data/">sovereign on-premise vs hyperscalers&lt;/a>).&lt;/li>
&lt;/ul>
&lt;div class="diagram" style="max-width:760px;margin:1rem auto;">
&lt;svg viewBox="0 0 760 260" role="img" aria-label="Break-even on-prem vs cloud by utilisation: base on-prem crosses AWS on-demand at 47 per cent, GCP at 29 per cent and Azure at 26 per cent utilisation. Neoclouds have no feasible break-even." xmlns="http://www.w3.org/2000/svg">
&lt;style>.ax{fill:none;stroke:currentColor;stroke-width:1}.cv{fill:none;stroke:currentColor;stroke-width:1.8}.dsh{fill:none;stroke:currentColor;stroke-width:1.2;stroke-dasharray:5 3}.ts{font:11px sans-serif;fill:currentColor}.tl{font:600 11.5px sans-serif;fill:currentColor}&lt;/style>
&lt;line class="ax" x1="60" y1="30" x2="60" y2="210"/>
&lt;line class="ax" x1="60" y1="210" x2="730" y2="210"/>
&lt;text x="22" y="125" class="ts" transform="rotate(-90 22 125)">€/GPU-hour&lt;/text>
&lt;text x="350" y="235" class="ts">utilisation (%) →&lt;/text>
&lt;text x="65" y="226" class="ts">0&lt;/text>
&lt;text x="220" y="226" class="ts">30&lt;/text>
&lt;text x="375" y="226" class="ts">60&lt;/text>
&lt;text x="535" y="226" class="ts">90&lt;/text>
&lt;text x="700" y="226" class="ts">100&lt;/text>
&lt;line class="ax" x1="220" y1="207" x2="220" y2="213"/>
&lt;line class="ax" x1="375" y1="207" x2="375" y2="213"/>
&lt;line class="ax" x1="535" y1="207" x2="535" y2="213"/>
&lt;line class="ax" x1="700" y1="207" x2="700" y2="213"/>
&lt;path class="cv" d="M80,40 C150,65 250,110 375,148 C480,178 600,195 710,203"/>
&lt;text x="82" y="36" class="tl">on-prem (fixed capex)&lt;/text>
&lt;line class="cv" x1="60" y1="155" x2="730" y2="155"/>
&lt;text x="632" y="149" class="ts">AWS p5 OD (~6.40 €)&lt;/text>
&lt;line class="cv" x1="60" y1="190" x2="730" y2="190"/>
&lt;text x="620" y="186" class="ts">GCP OD (~10.21 €)&lt;/text>
&lt;line class="cv" x1="60" y1="200" x2="730" y2="200"/>
&lt;text x="620" y="198" class="ts">Azure OD (~11.43 €)&lt;/text>
&lt;line class="cv" x1="60" y1="95" x2="730" y2="95"/>
&lt;text x="632" y="91" class="ts">neocloud OD (~2.70 €)&lt;/text>
&lt;line class="dsh" x1="310" y1="30" x2="310" y2="210"/>
&lt;text x="272" y="48" class="tl">≈47 % (AWS)&lt;/text>
&lt;line class="dsh" x1="187" y1="30" x2="187" y2="210"/>
&lt;text x="148" y="48" class="ts">≈29 % (GCP)&lt;/text>
&lt;/svg>
&lt;/div>
&lt;hr>
&lt;h2 id="sensitivity-analysis">Sensitivity analysis&lt;/h2>
&lt;h3 id="tco-vs-utilisation">TCO vs utilisation&lt;/h3>
&lt;p>The all-in cost per GPU-hour varies inversely with utilisation because capex is fixed:&lt;/p>
$$\frac{d(\text{EUR/GPU-hour})}{du} = -\frac{\text{capex/year} + \text{opex/year}}{4 \times 8{,}760 \times u^2} &lt; 0$$
&lt;p>Going from 50 % to 80 % utilisation cuts the €/GPU-hour by \(\frac{4.75 - 2.97}{4.75} \approx 37\,\%\) in the base scenario. That 37 % reduction requires no hardware change, only more efficient scheduling (see &lt;a href="https://blog.lo0.es/en/posts/gpu-idle-cost-not-on-any-invoice/">GPU utilisation as a FinOps lever&lt;/a>).&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Utilisation&lt;/th>
&lt;th>€/GPU-hour (base scenario)&lt;/th>
&lt;th>Change vs 50 %&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>30 %&lt;/td>
&lt;td>7.93&lt;/td>
&lt;td>+67 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>50 %&lt;/td>
&lt;td>4.75&lt;/td>
&lt;td>reference&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>70 %&lt;/td>
&lt;td>3.39&lt;/td>
&lt;td>−29 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>80 %&lt;/td>
&lt;td>2.97&lt;/td>
&lt;td>−37 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100 %&lt;/td>
&lt;td>2.38&lt;/td>
&lt;td>−50 %&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="tco-vs-energy-price">TCO vs energy price&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Energy price (€/kWh)&lt;/th>
&lt;th>Energy opex/year&lt;/th>
&lt;th>€/GPU-hour (70 % util.)&lt;/th>
&lt;th>Change vs base&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>0.034 (solar PPA)&lt;/td>
&lt;td>1,604 €&lt;/td>
&lt;td>&lt;strong>3.00&lt;/strong>&lt;/td>
&lt;td>−12 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0.116 (industrial ES, base)&lt;/td>
&lt;td>5,475 €&lt;/td>
&lt;td>&lt;strong>3.39&lt;/strong>&lt;/td>
&lt;td>reference&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0.160 (European average)&lt;/td>
&lt;td>7,550 €&lt;/td>
&lt;td>&lt;strong>3.54&lt;/strong>&lt;/td>
&lt;td>+4 %&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0.200 (high tariff)&lt;/td>
&lt;td>9,437 €&lt;/td>
&lt;td>&lt;strong>3.67&lt;/strong>&lt;/td>
&lt;td>+8 %&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Energy has a &lt;strong>moderate&lt;/strong> impact on total TCO (8–12 % variation between the extremes), because hardware capex dominates. Over a very long amortisation (5 years) with a solar PPA, however, energy drops from 6 % to 1 % of total TCO and the differential is amplified. The price of energy matters more for the carbon footprint (CSRD) than for TCO when capex is dominant.&lt;/p>
&lt;h3 id="tco-vs-pue">TCO vs PUE&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>PUE&lt;/th>
&lt;th>Cooling overhead&lt;/th>
&lt;th>Energy/year (0.116 €/kWh)&lt;/th>
&lt;th>€/GPU-hour (70 % util.)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1.15 (liquid cooling, new facilities)&lt;/td>
&lt;td>+15 %&lt;/td>
&lt;td>2,166 €&lt;/td>
&lt;td>&lt;strong>3.21&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.20 (liquid, modern datacenter)&lt;/td>
&lt;td>+20 %&lt;/td>
&lt;td>2,259 €&lt;/td>
&lt;td>&lt;strong>3.23&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.48 (facilities &amp;lt;5 years, Uptime 2025)&lt;/td>
&lt;td>+48 %&lt;/td>
&lt;td>3,490 €&lt;/td>
&lt;td>&lt;strong>3.33&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.54 (global average, Uptime 2025)&lt;/td>
&lt;td>+54 %&lt;/td>
&lt;td>3,627 €&lt;/td>
&lt;td>&lt;strong>3.39&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.80 (legacy colocation)&lt;/td>
&lt;td>+80 %&lt;/td>
&lt;td>4,260 €&lt;/td>
&lt;td>&lt;strong>3.47&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The difference between PUE 1.15 (liquid) and 1.80 (legacy) is barely &lt;strong>~8 %&lt;/strong> of the €/GPU-hour at 70 % utilisation, because energy is only a fraction of TCO. PUE matters far more for the &lt;strong>absolute energy cost&lt;/strong> and for &lt;strong>CSRD reporting&lt;/strong> than for total TCO when hardware is the dominant component.&lt;/p>
&lt;h3 id="tco-vs-amortisation-years">TCO vs amortisation years&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Amortisation&lt;/th>
&lt;th>Capex/year (average node, USD)&lt;/th>
&lt;th>€/GPU-hour (70 % util., base opex scenario)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>3 years&lt;/td>
&lt;td>59,500 USD (~55,300 €)&lt;/td>
&lt;td>&lt;strong>3.39&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4 years&lt;/td>
&lt;td>44,625 USD (~41,500 €)&lt;/td>
&lt;td>&lt;strong>2.99&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5 years&lt;/td>
&lt;td>35,700 USD (~33,200 €)&lt;/td>
&lt;td>&lt;strong>2.72&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Stretching the amortisation from 3 to 5 years lowers the €/GPU-hour by ~&lt;strong>20 %&lt;/strong>, assuming the hardware remains competitive and the resale market supports the residual value. With the refresh cycle accelerated by Blackwell GB200/GB300, a 5-year amortisation carries a higher risk of technological obsolescence.&lt;/p>
&lt;h3 id="sensitivity-heat-map-gpu-hour-at-70--utilisation-base-scenario">Sensitivity heat map (€/GPU-hour at 70 % utilisation, base scenario)&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>PUE 1.15&lt;/th>
&lt;th>PUE 1.54&lt;/th>
&lt;th>PUE 1.80&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>3-yr amort., solar PPA (0.034 €)&lt;/strong>&lt;/td>
&lt;td>2.72&lt;/td>
&lt;td>2.74&lt;/td>
&lt;td>2.76&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>3-yr amort., industrial (0.116 €)&lt;/strong>&lt;/td>
&lt;td>3.21&lt;/td>
&lt;td>3.39&lt;/td>
&lt;td>3.47&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>5-yr amort., industrial (0.116 €)&lt;/strong>&lt;/td>
&lt;td>2.54&lt;/td>
&lt;td>2.72&lt;/td>
&lt;td>2.80&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>3-yr amort., high tariff (0.200 €)&lt;/strong>&lt;/td>
&lt;td>3.44&lt;/td>
&lt;td>3.67&lt;/td>
&lt;td>3.78&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="decision-table-costcontrolsovereignty-pareto">Decision table: cost/control/sovereignty Pareto&lt;/h2>
&lt;p>The table below crosses the four dimensions with no implicit hierarchy; the ordinal reading depends on each organisation&amp;rsquo;s constraints.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Option&lt;/th>
&lt;th>€/GPU-hour&lt;/th>
&lt;th>Initial capex&lt;/th>
&lt;th>Full stack control&lt;/th>
&lt;th>EU sovereignty&lt;/th>
&lt;th>Elasticity&lt;/th>
&lt;th>Operational risk&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>On-prem (util. &amp;gt;70 %, low opex)&lt;/strong>&lt;/td>
&lt;td>2.40–3.00&lt;/td>
&lt;td>high (150–207k USD/node)&lt;/td>
&lt;td>total&lt;/td>
&lt;td>total&lt;/td>
&lt;td>none&lt;/td>
&lt;td>hardware failure, idle&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>On-prem (util. &amp;lt;50 %, base opex)&lt;/strong>&lt;/td>
&lt;td>4.75–7.93&lt;/td>
&lt;td>high&lt;/td>
&lt;td>total&lt;/td>
&lt;td>total&lt;/td>
&lt;td>none&lt;/td>
&lt;td>capex with no return&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Neocloud 3-year reserved (CoreWeave, Lambda)&lt;/strong>&lt;/td>
&lt;td>1.49–2.10 USD&lt;/td>
&lt;td>none&lt;/td>
&lt;td>partial (API)&lt;/td>
&lt;td>depends on the provider&lt;/td>
&lt;td>rigid contract&lt;/td>
&lt;td>minimal interruption&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Neocloud on-demand (Lambda, Spheron)&lt;/strong>&lt;/td>
&lt;td>2.49–3.44 USD&lt;/td>
&lt;td>none&lt;/td>
&lt;td>partial&lt;/td>
&lt;td>depends&lt;/td>
&lt;td>total&lt;/td>
&lt;td>no interruption&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>AWS p5 on-demand&lt;/strong>&lt;/td>
&lt;td>6.88 USD&lt;/td>
&lt;td>none&lt;/td>
&lt;td>minimal&lt;/td>
&lt;td>NO (CLOUD Act)&lt;/td>
&lt;td>total&lt;/td>
&lt;td>no interruption&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>AWS p5 3-year reserved&lt;/strong>&lt;/td>
&lt;td>~2.97 USD&lt;/td>
&lt;td>financial commitment&lt;/td>
&lt;td>minimal&lt;/td>
&lt;td>NO (CLOUD Act)&lt;/td>
&lt;td>rigid&lt;/td>
&lt;td>no interruption&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Sovereign EU cloud (Scaleway, Nebius EU)&lt;/strong>&lt;/td>
&lt;td>2.15–3.85 USD&lt;/td>
&lt;td>none&lt;/td>
&lt;td>partial&lt;/td>
&lt;td>yes (EU)&lt;/td>
&lt;td>total&lt;/td>
&lt;td>no interruption&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Hybrid on-prem base + EU cloud peak&lt;/strong>&lt;/td>
&lt;td>2.00–3.50 (weighted)&lt;/td>
&lt;td>medium&lt;/td>
&lt;td>high&lt;/td>
&lt;td>yes (EU)&lt;/td>
&lt;td>elastic peak&lt;/td>
&lt;td>operational complexity&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&amp;ldquo;EU sovereignty&amp;rdquo; column: US hyperscalers (AWS, GCP, Azure) are subject to the US CLOUD Act regardless of the datacenter region. Nebius has a Dutch legal entity; CoreWeave is a US company. See the full analysis in &lt;a href="https://blog.lo0.es/en/posts/sovereign-on-premise-vs-hyperscalers-data/">sovereign on-premise vs hyperscalers&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>&amp;ldquo;Full stack control&amp;rdquo; column: on-prem lets you choose the driver version, the kernel, the NCCL configuration, MIG partitioning, and any system parameter. Cloud options offer control at container/pod level, with the hypervisor and firmware opaque.&lt;/p>
&lt;/blockquote>
&lt;p>The cost/sovereignty Pareto frontier for GDPR data excludes US hyperscalers, leaving: &lt;strong>on-prem&lt;/strong>, &lt;strong>sovereign EU cloud&lt;/strong>, and the &lt;strong>hybrid&lt;/strong>. Among those three, the deciding variable is sustained utilisation and the predictability of traffic (see &lt;a href="https://blog.lo0.es/en/posts/capacity-planning-on-premise-llm-inference/">capacity planning for on-premise LLM inference&lt;/a>).&lt;/p>
&lt;hr>
&lt;h2 id="integration-with-the-series-finops-model">Integration with the series FinOps model&lt;/h2>
&lt;p>The all-in €/GPU-hour of on-prem is the number that feeds the cost allocation pipeline of the series:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Cost-per-token identity&lt;/strong> (&lt;a href="https://blog.lo0.es/en/posts/gpu-hour-to-cost-per-token-on-prem-vs-cloud/">cost per token and per request&lt;/a>): engine throughput × €/GPU-hour → €/1M tokens.&lt;/li>
&lt;li>&lt;strong>Chargeback and showback&lt;/strong> (&lt;a href="https://blog.lo0.es/en/posts/opencost-gpu-cost-allocation-kubernetes/">chargeback and showback in GPU multitenancy&lt;/a>): the all-in €/GPU-hour is the internal price charged to each tenant of the multi-tenant cluster.&lt;/li>
&lt;li>&lt;strong>Utilisation as a lever&lt;/strong> (&lt;a href="https://blog.lo0.es/en/posts/gpu-idle-cost-not-on-any-invoice/">GPU utilisation as FinOps&lt;/a>): raising utilisation from 50 % to 80 % cuts the €/GPU-hour by 37 % without changing the hardware, the highest ROI in on-prem FinOps.&lt;/li>
&lt;li>&lt;strong>Capacity planning&lt;/strong> (&lt;a href="https://blog.lo0.es/en/posts/capacity-planning-on-premise-llm-inference/">capacity planning for on-premise LLM inference&lt;/a>): the number of nodes to buy depends on the percentile of base load you want to cover in iron.&lt;/li>
&lt;li>&lt;strong>Cloud comparison&lt;/strong> (&lt;a href="https://blog.lo0.es/en/posts/cloud-gpu-on-demand-reserved-spot-neoclouds-2026-prices/">cloud GPU: on-demand, reserved and spot&lt;/a>): the all-in €/GPU-hour goes head to head with the cloud price in table A7 to compute the break-even.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="sources">Sources&lt;/h2>
&lt;ul>
&lt;li>Spheron · LLM Inference On-Premise vs GPU Cloud: 2026 Cost and Break-Even Analysis (abr. 2026) — &lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/&lt;/a>&lt;/li>
&lt;li>Introl · GPU Infrastructure TCO Model: 5-Year Cost Analysis for Enterprise AI (abr. 2026) — &lt;a href="https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model">https://introl.com/blog/gpu-infrastructure-tco-5-year-cost-model&lt;/a>&lt;/li>
&lt;li>GMI Cloud · NVIDIA H100 GPU Pricing: 2026 Rent vs. Buy Cost Analysis (abr. 2026) — &lt;a href="https://www.gmicloud.ai/en/blog/nvidia-h100-gpu-pricing-2026-rent-vs-buy-cost-analysis">https://www.gmicloud.ai/en/blog/nvidia-h100-gpu-pricing-2026-rent-vs-buy-cost-analysis&lt;/a>&lt;/li>
&lt;li>Uptime Institute · Global Data Center Survey 2025 (PDF oficial) — &lt;a href="https://datacenter.uptimeinstitute.com/rs/711-RIA-145/images/2025.Annual.Survey.Report.pdf">https://datacenter.uptimeinstitute.com/rs/711-RIA-145/images/2025.Annual.Survey.Report.pdf&lt;/a>&lt;/li>
&lt;li>Uptime Institute · Global Data Center PUE Stalls at 1.54 (comunicado, oct. 2025) — &lt;a href="https://mgrid.org/2025/10/01/uptime-institute-data-center-pue-stagnation-2025-liquid-cooling/">https://mgrid.org/2025/10/01/uptime-institute-data-center-pue-stagnation-2025-liquid-cooling/&lt;/a>&lt;/li>
&lt;li>GlobalPetrolPrices · Spain Business Electricity Price (sept. 2025) — &lt;a href="https://www.globalpetrolprices.com/Spain/electricity_prices/">https://www.globalpetrolprices.com/Spain/electricity_prices/&lt;/a>&lt;/li>
&lt;li>PV Tech · European Solar PPA Prices Fall Below 35 €/MWh in Q3 2025 (oct. 2025) — &lt;a href="https://www.pv-tech.org/european-solar-ppa-prices-fall-below-35-mwh-q3-2025/">https://www.pv-tech.org/european-solar-ppa-prices-fall-below-35-mwh-q3-2025/&lt;/a>&lt;/li>
&lt;li>Xi Computers · Supermicro SYS-821GE-TNHR 8U GPU Server Pricing (jun. 2026) — &lt;a href="https://www.xicomputer.com/Solutions/Data-Center-Servers/SYS-821GE-TNHR.asp">https://www.xicomputer.com/Solutions/Data-Center-Servers/SYS-821GE-TNHR.asp&lt;/a>&lt;/li>
&lt;li>Encoradvisors · Data Center Colocation Pricing 2026 — &lt;a href="https://encoradvisors.com/data-center-colocation-pricing/">https://encoradvisors.com/data-center-colocation-pricing/&lt;/a>&lt;/li>
&lt;li>CloudZero · H100 GPU Cost In 2026: Buy, Rent, and Cloud Pricing Compared — &lt;a href="https://www.cloudzero.com/blog/h100-gpu-cost/">https://www.cloudzero.com/blog/h100-gpu-cost/&lt;/a>&lt;/li>
&lt;li>Spheron · AI Inference Power Consumption and GPU Electricity Costs: 2026 Guide — &lt;a href="https://www.spheron.network/blog/ai-inference-power-electricity-cost-2026/">https://www.spheron.network/blog/ai-inference-power-electricity-cost-2026/&lt;/a>&lt;/li>
&lt;li>NVIDIA · DGX SuperPOD H100 Electrical Specifications (documentación oficial) — &lt;a href="https://docs.nvidia.com/dgx-superpod/design-guides/dgx-superpod-data-center-design-h100/latest/electrical.html">https://docs.nvidia.com/dgx-superpod/design-guides/dgx-superpod-data-center-design-h100/latest/electrical.html&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Sovereign on-premise vs hyperscalers: the case with data (cost, energy, performance and sovereignty)</title><link>https://blog.lo0.es/en/posts/sovereign-on-premise-vs-hyperscalers-data/</link><pubDate>Sun, 14 Jun 2026 05:30:00 +0200</pubDate><guid>https://blog.lo0.es/en/posts/sovereign-on-premise-vs-hyperscalers-data/</guid><description>&lt;blockquote>
&lt;p>Notation: amounts in &lt;strong>euros (N €)&lt;/strong>, decimals with a point; when a source quotes dollars it is marked
&amp;ldquo;USD&amp;rdquo;. Data centred on Europe and Spain. The dollar symbol is not used (formula delimiter).&lt;/p>
&lt;/blockquote>
&lt;h2 id="what-this-article-covers">What this article covers&lt;/h2>
&lt;p>&lt;strong>Synthesis&lt;/strong> article of the series (S2), and the heart of the proposal: the case with data for
sovereign on-premise against the hyperscalers and the European cloud. Up to here, each track
measured its own axis, cost per token (FinOps), goodput (benchmarking), energy and carbon; here the
four are crossed, with a fourth dimension no US technical comparison puts up front: &lt;strong>data
sovereignty&lt;/strong>. The aim is to answer, with numbers and not with ideology, the question that underpins
any investment in an AI platform: &lt;strong>serve on your own iron, on a European cloud or on a
hyperscaler?&lt;/strong> And to do it honestly: on-prem &lt;strong>does not always win&lt;/strong>, and saying when it wins and
when it does not is what makes the recommendation credible.&lt;/p>
&lt;hr>
&lt;h2 id="the-framework-four-axes-not-one-number">The framework: four axes, not one number&lt;/h2>
&lt;p>The mistake in almost every comparison is reducing the decision to the hourly cost of a GPU. The real
decision crosses &lt;strong>four axes&lt;/strong>, and only by seeing them together do you decide well:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Axis&lt;/th>
&lt;th>Question&lt;/th>
&lt;th>Who measures it in the series&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Cost (TCO)&lt;/td>
&lt;td>how much does it cost to serve, all in?&lt;/td>
&lt;td>FinOps (A2–A8)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Performance&lt;/td>
&lt;td>does it meet the SLO, at what goodput?&lt;/td>
&lt;td>Benchmarking (B2–B8)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Energy and carbon&lt;/td>
&lt;td>how many watts and grams per token?&lt;/td>
&lt;td>Energy (C2–C8)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Sovereignty&lt;/td>
&lt;td>under which jurisdiction does the data live?&lt;/td>
&lt;td>GDPR / EU AI Act / CSRD&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The first three are quantifiable and meet in the cost per token; the fourth is a &lt;strong>constraint&lt;/strong>
that can rule out an option however cheap it is. The synthesis consists of scoring each option on all
four and deciding on the Pareto frontier, not on whichever axis happens to suit.&lt;/p>
&lt;hr>
&lt;h2 id="the-cost-axis-tco-and-break-even">The cost axis: TCO and break-even&lt;/h2>
&lt;p>The real on-premise cost is amortised capex plus opex, and its cost per effective hour depends on
&lt;strong>utilisation&lt;/strong>:&lt;/p>
$$\text{effective cost/GPU-hour (on-prem)} = \frac{\text{annual amortised capex} + \text{annual opex}}{8760 \times \text{utilisation}}$$
&lt;p>This formula is the key to the whole debate: &lt;strong>the cost per useful hour of on-prem rises as
utilisation falls&lt;/strong>, because capex is paid whether the GPU is working or idle. The 2026 data:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Data point&lt;/th>
&lt;th>Value&lt;/th>
&lt;th>Source&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>On-prem cost 8×H100 (floor, high util.)&lt;/td>
&lt;td>~2.83 USD/GPU-hour &lt;em>all-in&lt;/em>&lt;/td>
&lt;td>&lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">Spheron&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Annual on-prem cost (floor)&lt;/td>
&lt;td>~237,000 USD/year&lt;/td>
&lt;td>&lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">Spheron&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>AWS H100 (p5.48xlarge)&lt;/td>
&lt;td>4.10–6.88 USD/GPU-hour&lt;/td>
&lt;td>&lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">Spheron&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>AWS 8-GPU on-demand annual (100 % util)&lt;/td>
&lt;td>287,000–482,000 USD/year&lt;/td>
&lt;td>&lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">Spheron&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Sovereign European cloud (Lyceum/Scaleway)&lt;/td>
&lt;td>from 2–2.73 €/GPU-hour, zero-egress&lt;/td>
&lt;td>&lt;a href="https://lyceum.technology/magazine/eu-sovereign-inference-platform-comparison/">Lyceum&lt;/a>, &lt;a href="https://www.scaleway.com/en/h100/">Scaleway&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The &lt;strong>break-even&lt;/strong> against AWS on-demand falls around 50–83 % utilisation depending on region and
tariff; &lt;strong>below ~70 % utilisation, the cloud wins&lt;/strong> on TCO, and above it, on-prem
(&lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">Spheron&lt;/a>). For very
high-utilisation workloads, on-prem pays for itself in less than 4 months (&lt;a href="https://lenovopress.lenovo.com/lp2368-on-premise-vs-cloud-generative-ai-total-cost-of-ownership-2026-edition">Lenovo&lt;/a>).&lt;/p>
&lt;h3 id="three-year-tco-the-full-calculation-for-an-8h100-node">Three-year TCO: the full calculation for an 8×H100 node&lt;/h3>
&lt;p>Abstract numbers do not convince a committee; a three-year model with declared line items does. Take a
sovereign 8×H100 node in Spain and compare it, for the same work, with AWS and with a European
cloud. Declared assumptions: amortisation over 3 years, energy at a solar PPA of 32.5 €/MWh
(with grid backup), PUE 1.3, and two utilisation scenarios (50 % and 80 %).&lt;/p>
&lt;p>&lt;strong>On-premise (own node), annual line items:&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Line item&lt;/th>
&lt;th>Annual value&lt;/th>
&lt;th>Note&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Amortised capex (node ~270,000 € / 3 years)&lt;/td>
&lt;td>~90,000 €&lt;/td>
&lt;td>8×H100 server + network + storage&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Energy (≈10.4 kW × PUE 1.3 × 8760 h)&lt;/td>
&lt;td>~3,850 € (at 32.5 €/MWh)&lt;/td>
&lt;td>with solar PPA; at grid tariff, ~12–18 k €&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Operation, cooling, maintenance&lt;/td>
&lt;td>~25,000 €&lt;/td>
&lt;td>prorated staff, support, spares&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Datacenter space (rack, connectivity)&lt;/td>
&lt;td>~12,000 €&lt;/td>
&lt;td>colocation or own datacenter&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Annual total&lt;/td>
&lt;td>~131,000 €&lt;/td>
&lt;td>independent of utilisation&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>At a fixed 131,000 €/year, the cost per token depends only on how many tokens you generate,
that is, on utilisation:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Utilisation&lt;/th>
&lt;th>Useful GPU-hours/year&lt;/th>
&lt;th>Cost/1M tokens&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>50 %&lt;/td>
&lt;td>~35,000&lt;/td>
&lt;td>~2.9 €&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>65 %&lt;/td>
&lt;td>~45,500&lt;/td>
&lt;td>~2.2 €&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>80 %&lt;/td>
&lt;td>~56,000&lt;/td>
&lt;td>~1.8 € (with cheap grid, ~1.1 €)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Sovereign European cloud (Scaleway/Lyceum), pay per use:&lt;/strong> at ~2.2 €/GPU-hour with zero-egress, the
cost per token is &lt;strong>constant with utilisation&lt;/strong> (you only pay for what you use): ~1.5–2.2 €/1M tokens
depending on model and batching, with no capex and no idle risk.&lt;/p>
&lt;p>&lt;strong>Hyperscaler (AWS p5), on-demand:&lt;/strong> at 4.10–6.88 USD/GPU-hour (≈3.8–6.4 €), the cost per token works
out at ~2–3.5 €/1M tokens, and on top of that you have to add the egress, quite apart from the
fact that for GDPR data the sovereignty axis rules it out already.&lt;/p>
&lt;p>The reading of the model is the thesis of the whole of S2: &lt;strong>at 50 % utilisation, on-prem (~2.9 €) does
not beat the European cloud (~1.8 €); at 80 % with cheap energy (~1.1 €), it beats it comfortably&lt;/strong>. The
crossover sits, as the literature says, around 65–70 %. Investing in on-prem is, fundamentally, a
bet that you will sustain high utilisation, and that bet is won with scheduling, not with hardware.&lt;/p>
&lt;div class="diagram" style="max-width:780px;margin:1rem auto;">
&lt;svg viewBox="0 0 780 250" role="img" aria-label="Break-even on-prem vs cloud by utilisation: the cost per useful hour of on-prem falls with utilisation and crosses that of the cloud at around 65-70 per cent" xmlns="http://www.w3.org/2000/svg">
&lt;style>.ax{fill:none;stroke:currentColor;stroke-width:1}.cv{fill:none;stroke:currentColor;stroke-width:1.6}.dsh{fill:none;stroke:currentColor;stroke-width:1;stroke-dasharray:4 3}.tl{font:600 12px sans-serif;fill:currentColor}.ts{font:11px sans-serif;fill:currentColor}&lt;/style>
&lt;line class="ax" x1="60" y1="40" x2="60" y2="200"/>
&lt;line class="ax" x1="60" y1="200" x2="720" y2="200"/>
&lt;text x="20" y="130" class="ts" transform="rotate(-90 20 130)">cost/useful hour&lt;/text>
&lt;text x="330" y="228" class="ts">utilisation (%) →&lt;/text>
&lt;path class="cv" d="M90,55 C200,90 320,130 430,150 C540,165 640,172 700,175"/>
&lt;text x="95" y="50" class="ts">on-prem (fixed capex)&lt;/text>
&lt;line class="cv" x1="60" y1="150" x2="720" y2="150"/>
&lt;text x="600" y="143" class="ts">cloud (≈ flat)&lt;/text>
&lt;line class="dsh" x1="430" y1="40" x2="430" y2="200"/>
&lt;text x="392" y="56" class="tl">break-even ~65-70%&lt;/text>
&lt;text x="110" y="190" class="ts">low util.: cloud wins&lt;/text>
&lt;text x="520" y="190" class="ts">high util.: on-prem wins&lt;/text>
&lt;text x="60" y="245" class="ts">On-prem only wins to the right of the break-even; fixed capex penalises it at low utilisation.&lt;/text>
&lt;/svg>
&lt;/div>
&lt;hr>
&lt;h2 id="the-uncomfortable-reality-the-utilisation-almost-nobody-reaches">The uncomfortable reality: the utilisation almost nobody reaches&lt;/h2>
&lt;p>Here is the honest figure missing from the &amp;ldquo;on-prem is always cheaper&amp;rdquo; speeches: &lt;strong>most inference teams
in production operate at 40–65 % GPU utilisation&lt;/strong>, because of traffic variability and the limits of
batching; the 80–90 % assumption that makes on-prem attractive &lt;strong>is rarely reached outside batch-only
pipelines&lt;/strong> (&lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">Spheron&lt;/a>).&lt;/p>
&lt;p>This changes the naive conclusion: if your real utilisation is 50 %, on-prem &lt;strong>is not cheaper&lt;/strong> than
the cloud, because the capex you pay for the idle GPU eats you. That is why utilisation is not a
detail, it is &lt;strong>the variable that decides the cost axis&lt;/strong>, and it connects directly with the FinOps
track (the idle of A2, the chargeback of A5) and with scheduling: &lt;strong>raising utilisation is what makes
on-prem pay&lt;/strong>. A badly used cluster of your own is more expensive than the cloud; a well scheduled one
is far cheaper. The cost question is not &amp;ldquo;on-prem or cloud?&amp;rdquo;, it is &amp;ldquo;&lt;strong>can I sustain high
utilisation?&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="the-hidden-costs-of-the-cloud-egress">The hidden costs of the cloud: egress&lt;/h2>
&lt;p>The cloud has its own small print: &lt;strong>egress costs&lt;/strong> (taking data out of the provider). In the
hyperscalers, moving data out or between regions is billed, and in AI workloads with a lot of data
movement (datasets, checkpoints, embeddings) it can be a significant line item that does not appear in
the GPU-hour price. The advantage of the sovereign European cloud: most of them (Lyceum among
others) have adopted the zero-egress model, they do not charge for moving data out or between
regions (&lt;a href="https://lyceum.technology/magazine/eu-sovereign-inference-platform-comparison/">Lyceum&lt;/a>). When
comparing, the real hyperscaler cost is GPU-hour + egress + other charges, not just the GPU-hour;
ignoring it artificially inflates the hyperscaler&amp;rsquo;s competitiveness.&lt;/p>
&lt;p>An example of the order of magnitude: a platform moving 50 TB/month outbound (datasets,
checkpoints, responses served to systems outside the provider) at a typical egress tariff of
~0.08–0.09 €/GB pays ~4,000–4,500 €/month, that is ~50,000 €/year on egress alone, a line item
the size of a third of the cost of a node of your own, invisible in the GPU-hour price. On the European
cloud with zero-egress that line item is zero; on-prem, internal traffic is not billed either.
That is why a fair comparison must model egress according to the real data pattern: for workloads with
a lot of outbound movement, it can invert the ranking between hyperscaler and European cloud. The
cloud bill is not the GPU-hour; it is the GPU-hour plus everything you move.&lt;/p>
&lt;p>To this is added contract and lock-in risk: the hyperscaler&amp;rsquo;s on-demand GPU tariffs can change,
commitment discounts (reserved/savings plans) tie you for 1–3 years, and migrating out, because of
egress and coupling to proprietary services, has a real exit cost. On-prem and the European cloud with
standard APIs (Kubernetes, S3 compatible) reduce that coupling: the same manifest and the same vLLM run
on your cluster or on Scaleway without rewriting. Operational sovereignty, being able to move the
workload without rebuilding it, is a value that does not appear in the tariff but weighs on a
three-year decision.&lt;/p>
&lt;hr>
&lt;h2 id="the-performance-axis-the-provider-does-not-decide-goodput-does">The performance axis: the provider does not decide, goodput does&lt;/h2>
&lt;p>One point that simplifies the synthesis: &lt;strong>performance does not depend on the provider, it depends on
the hardware and the configuration&lt;/strong>. An H100 gives the same goodput on your cluster, on Scaleway or on
AWS, served with the same vLLM and the same config. What decides performance is the &lt;strong>goodput under
your SLO&lt;/strong> (track B), not who hosts the GPU. So, in a comparison at equal hardware, the performance
axis neutralises itself: what changes between options is cost, energy and sovereignty. The
exception: if a provider gives you access to newer hardware (B200, GB200) ahead of your on-prem buying
cycle, then the cloud can win on performance per GPU, a real argument in favour of the cloud for
staying at the hardware frontier without capex.&lt;/p>
&lt;hr>
&lt;h2 id="the-energy-axis-the-european-and-spanish-advantage">The energy axis: the European and Spanish advantage&lt;/h2>
&lt;p>Here on-prem (or cloud) in Spain or France has a structural advantage over a hyperscaler in a dirty
region. Recalling the data from the energy track:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Location&lt;/th>
&lt;th>Grid carbon (gCO₂/kWh)&lt;/th>
&lt;th>Price (indicative)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>France (nuclear)&lt;/td>
&lt;td>~20–60&lt;/td>
&lt;td>low and stable&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Spain (renewables + gas)&lt;/td>
&lt;td>~150–170&lt;/td>
&lt;td>low, volatile; solar PPA ~32.5 €/MWh&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Germany&lt;/td>
&lt;td>~363&lt;/td>
&lt;td>high&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hyperscaler (region depends on provider)&lt;/td>
&lt;td>depends; often not selectable&lt;/td>
&lt;td>provider tariff&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The same workload in &lt;strong>France emits ~9× less carbon per token than in Germany&lt;/strong>, and in Spain, with a
solar PPA at 32.5 €/MWh (an all-time low), the electricity cost, 30–50 % of the TCO, is low and,
under contract, predictable. A sovereign cluster in Spain or France controls where the energy is
consumed and with what carbon; a hyperscaler gives you the region it gives you, often with no choice of
grid intensity. For CSRD reporting, that selectability is a quantifiable advantage of on-prem and the
European cloud.&lt;/p>
&lt;p>In concrete numbers: the example 8×H100 node (~10.4 kW × PUE 1.3 ≈ 118,000 kWh/year) emits, depending
on the grid, ~2.4 t CO₂/year in France (~20 gCO₂/kWh) against ~43 t CO₂/year in Germany
(~363 gCO₂/kWh), the same machine, the same work, ~18× the difference in reportable footprint just
by choosing the location. That decision, which a hyperscaler in an imposed region does not let you
take, is exactly what on-prem and the sovereign European cloud put in your hands. The energy axis is
not an environmental detail: it is cost (the price of the kWh), compliance (CSRD) and sovereignty
(control of location) all at once.&lt;/p>
&lt;hr>
&lt;h2 id="the-sovereignty-axis-the-one-that-does-not-depend-on-utilisation">The sovereignty axis: the one that does not depend on utilisation&lt;/h2>
&lt;p>And here is the axis that invalidates the cheapest option if the data is sensitive. US hyperscalers
are subject to the &lt;strong>US CLOUD Act&lt;/strong>: US authorities can demand data held by a US company &lt;strong>even if it
sits in a European datacenter&lt;/strong>. For data subject to the &lt;strong>GDPR&lt;/strong>, that is a compliance risk. &lt;strong>Sovereign
European clouds&lt;/strong> operate under &lt;strong>EU/EFTA jurisdiction&lt;/strong>, providing data residency and GDPR compliance,
and are exempt from the US CLOUD Act
(&lt;a href="https://lyceum.technology/magazine/sovereign-cloud-providers-2026/">Lyceum · sovereign providers&lt;/a>).
On-prem of your own is the maximum degree of sovereignty: the data does not leave your cluster.&lt;/p>
&lt;p>The key difference from the other axes: sovereignty &lt;strong>does not depend on utilisation or on volume&lt;/strong>.
However much a hyperscaler cheapens the GPU-hour, for GDPR data &lt;strong>it is not an option&lt;/strong>, the
jurisdiction risk is not offset by price. It links with &lt;a href="https://blog.lo0.es/en/posts/technical-controls-ens-iso-42001-eu-ai-act-cross-mapping/">the ENS × ISO 42001 × EU AI Act controls&lt;/a>
and &lt;a href="https://blog.lo0.es/en/posts/eu-ai-act-technical-dossier-on-premise-llm-architecture/">the EU AI Act mapping&lt;/a>: compliance is a
hard constraint, not an axis to optimise.&lt;/p>
&lt;p>The four instruments that turn sovereignty into a concrete constraint rather than a slogan:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Instrument&lt;/th>
&lt;th>What it requires&lt;/th>
&lt;th>Implication for the architecture&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>US CLOUD Act&lt;/td>
&lt;td>gives the US access to data held by US companies, wherever it is&lt;/td>
&lt;td>a US hyperscaler does not guarantee jurisdictional residency even if the datacenter is in the EU&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GDPR&lt;/td>
&lt;td>residency and processing of personal data under EU law&lt;/td>
&lt;td>requires an EU/EFTA provider or your own iron for personal data&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>EU AI Act&lt;/td>
&lt;td>traceability, risk management and records for AI systems&lt;/td>
&lt;td>favours the full control of the stack (logs, datasets, models) that on-prem gives&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CSRD&lt;/td>
&lt;td>verifiable reporting of environmental footprint&lt;/td>
&lt;td>the selectable energy (clean grid, PPA) of on-prem and the European cloud is auditable&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The operational conclusion: for a European entity processing personal data or deploying high-risk AI,
&lt;strong>three of the four technical axes can favour the hyperscaler and it can still lose&lt;/strong>, because the
fourth axis, sovereignty, acts as a prior filter. That is why S2 orders the decision like this:
&lt;strong>first the sovereignty filter&lt;/strong> (which rules out the hyperscaler for GDPR data), &lt;strong>then the
optimisation of cost, performance and energy&lt;/strong> among the options that pass the filter (sovereign
on-prem and European cloud).&lt;/p>
&lt;hr>
&lt;h2 id="the-scorecard-the-three-options-scored">The scorecard: the three options scored&lt;/h2>
&lt;p>Crossing the four axes for the three realistic options of a European platform (order-of-magnitude,
illustrative figures):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Option&lt;/th>
&lt;th>Cost/1M tok&lt;/th>
&lt;th>Break-even&lt;/th>
&lt;th>Energy/carbon&lt;/th>
&lt;th>Sovereignty&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Sovereign on-prem (ES/FR)&lt;/td>
&lt;td>~1.1 € (high util.) / ~3 € (low)&lt;/td>
&lt;td>&amp;gt;65–70 % util.&lt;/td>
&lt;td>controllable (clean grid, PPA)&lt;/td>
&lt;td>total (EU)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Sovereign European cloud&lt;/td>
&lt;td>~1.5–2.2 €&lt;/td>
&lt;td>no capex, pay per use&lt;/td>
&lt;td>EU, zero-egress&lt;/td>
&lt;td>high (EU)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hyperscaler (US)&lt;/td>
&lt;td>~2–3.5 € + egress&lt;/td>
&lt;td>no capex&lt;/td>
&lt;td>imposed region&lt;/td>
&lt;td>not EU (CLOUD Act)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="diagram" style="max-width:780px;margin:1rem auto;">
&lt;svg viewBox="0 0 780 220" role="img" aria-label="Scorecard: sovereign on-prem, sovereign European cloud and hyperscaler scored on cost, energy and sovereignty; the hyperscaler loses on sovereignty" xmlns="http://www.w3.org/2000/svg">
&lt;style>.bx{fill:none;stroke:currentColor;stroke-width:1.3}.tl{font:600 12px sans-serif;fill:currentColor}.ts{font:11px sans-serif;fill:currentColor}&lt;/style>
&lt;rect class="bx" x="20" y="40" width="230" height="130" rx="6"/>
&lt;text x="32" y="62" class="tl">Sovereign on-prem (ES/FR)&lt;/text>
&lt;text x="32" y="84" class="ts">cost: lowest IF util. is high&lt;/text>
&lt;text x="32" y="104" class="ts">energy: controllable (PPA, grid)&lt;/text>
&lt;text x="32" y="124" class="ts">sovereignty: TOTAL&lt;/text>
&lt;text x="32" y="148" class="ts">risk: capex + utilisation&lt;/text>
&lt;rect class="bx" x="275" y="40" width="230" height="130" rx="6"/>
&lt;text x="287" y="62" class="tl">Sovereign European cloud&lt;/text>
&lt;text x="287" y="84" class="ts">cost: medium, no capex&lt;/text>
&lt;text x="287" y="104" class="ts">energy: EU, zero-egress&lt;/text>
&lt;text x="287" y="124" class="ts">sovereignty: HIGH (EU)&lt;/text>
&lt;text x="287" y="148" class="ts">risk: pay-per-use price&lt;/text>
&lt;rect class="bx" x="530" y="40" width="230" height="130" rx="6"/>
&lt;text x="542" y="62" class="tl">Hyperscaler (US)&lt;/text>
&lt;text x="542" y="84" class="ts">cost: medium + egress&lt;/text>
&lt;text x="542" y="104" class="ts">energy: imposed region&lt;/text>
&lt;text x="542" y="124" class="ts">sovereignty: NOT EU ✗&lt;/text>
&lt;text x="542" y="148" class="ts">ruled out for GDPR data&lt;/text>
&lt;text x="20" y="200" class="ts">For GDPR data the hyperscaler is out on sovereignty, however cheap. The real decision is on-prem vs European cloud.&lt;/text>
&lt;/svg>
&lt;/div>
&lt;p>The reading of the scorecard: for data subject to the GDPR, &lt;strong>the US hyperscaler is ruled out by the
sovereignty axis&lt;/strong>, however competitive its tariff. The real decision comes down to &lt;strong>sovereign on-prem
vs sovereign European cloud&lt;/strong>, and there it is decided by &lt;strong>utilisation&lt;/strong> and &lt;strong>volume&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="when-each-option-wins">When each option wins&lt;/h2>
&lt;p>The honest recommendation, by scenario:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Scenario&lt;/th>
&lt;th>Winning option&lt;/th>
&lt;th>Why&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>High, sustained volume (util. &amp;gt;65–70 %), GDPR data&lt;/td>
&lt;td>Sovereign on-prem&lt;/td>
&lt;td>lowest cost/token + total sovereignty&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Variable or growing volume, GDPR data&lt;/td>
&lt;td>Sovereign European cloud&lt;/td>
&lt;td>sovereignty without capex/idle risk&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Low volume or sporadic peak&lt;/td>
&lt;td>European cloud (per use)&lt;/td>
&lt;td>you do not amortise the capex&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>No sovereignty requirement, hardware frontier&lt;/td>
&lt;td>Hyperscaler&lt;/td>
&lt;td>access to new hardware without capex&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hybrid (base + peak)&lt;/td>
&lt;td>On-prem + European cloud (burst)&lt;/td>
&lt;td>cheap base of your own, sovereign elastic peak&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>On-prem makes sense when there is &lt;strong>very high, predictable utilisation (80 %+), strict sovereignty
requirements, or a hyperscaler contract that works out expensive&lt;/strong> (&lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">Spheron&lt;/a>).
For sovereign platforms with a sustained base load, the winning pattern is usually the &lt;strong>hybrid&lt;/strong>:
sovereign on-prem for the high-utilisation base (where the cost per token is unbeatable) and
sovereign European cloud for the peak and for growth (elastic, no capex, keeping EU jurisdiction).
The best of both without giving up sovereignty.&lt;/p>
&lt;h3 id="sizing-the-hybrid-how-much-on-iron-how-much-on-cloud">Sizing the hybrid: how much on iron, how much on cloud&lt;/h3>
&lt;p>The hybrid is not &amp;ldquo;a bit of each&amp;rdquo;; it is sized with one figure: the &lt;strong>base load percentile&lt;/strong>. The rule
is to put on on-prem the load that is almost always present (the load that keeps the GPU at
75–85 %) and to send to the European cloud only the peaks that, if covered with iron, would leave
GPUs idle most of the time. An example with a realistic traffic profile:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Load band&lt;/th>
&lt;th>% of the time&lt;/th>
&lt;th>Where to serve&lt;/th>
&lt;th>Why&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Base (p0–p70)&lt;/td>
&lt;td>always&lt;/td>
&lt;td>on-prem (1 node 8×H100 at ~80 %)&lt;/td>
&lt;td>minimum cost/token, high util. guaranteed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Middle (p70–p95)&lt;/td>
&lt;td>daily peak hours&lt;/td>
&lt;td>on-prem if it fits, otherwise European cloud&lt;/td>
&lt;td>elasticity without idle capex&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Peak (p95–p100)&lt;/td>
&lt;td>sporadic&lt;/td>
&lt;td>sovereign European cloud (burst)&lt;/td>
&lt;td>absurd to buy iron for a rare peak&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>With this split, the base amortises your own node at high utilisation (~1.1–1.8 €/1M tokens) and the
peak is paid per use with no idle penalty (~1.5–2.2 €/1M tokens), all under EU jurisdiction. The
expensive mistake is the opposite: sizing the on-prem for the peak, in which case the GPU spends
most of its time idle at 30–40 %, the cost per token shoots up above 3 € and the cloud would have been
cheaper. &lt;strong>You size the iron for the base, not for the peak&lt;/strong>; the peak is exactly what the cloud does
well. This principle connects with the capacity planning and the scheduling (Kueue/Volcano) of the
series: the hybrid only works if the scheduler fills your own node before overflowing to the cloud.&lt;/p>
&lt;hr>
&lt;h2 id="assumptions-and-sensitivity">Assumptions and sensitivity&lt;/h2>
&lt;p>The whole comparison hangs on assumptions that have to be declared, because moving them moves the
conclusion:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Assumption&lt;/th>
&lt;th>If it rises&lt;/th>
&lt;th>Effect&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Utilisation&lt;/td>
&lt;td>50 % → 80 %&lt;/td>
&lt;td>on-prem goes from losing to clearly winning&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Energy price&lt;/td>
&lt;td>expensive region → France/PPA&lt;/td>
&lt;td>lowers on-prem TCO and carbon&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Amortisation period&lt;/td>
&lt;td>24 → 36 months&lt;/td>
&lt;td>lowers the on-prem cost per hour&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Volume&lt;/td>
&lt;td>&amp;lt; 2M tok/day → much more&lt;/td>
&lt;td>crosses the break-even towards on-prem&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Egress (hyperscaler)&lt;/td>
&lt;td>low → high&lt;/td>
&lt;td>makes the hyperscaler dearer than the European cloud&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The rule: &lt;strong>no on-prem vs cloud comparison is valid without fixing these assumptions&lt;/strong>. One that says
&amp;ldquo;on-prem is 3× cheaper&amp;rdquo; without declaring the assumed utilisation is propaganda; one that fixes
utilisation, energy price, period and volume is a data point. The dossier must present the case with
explicit assumptions and a sensitivity analysis, which is what makes it defensible before a committee
that questions them.&lt;/p>
&lt;h2 id="decision-checklist">Decision checklist&lt;/h2>
&lt;p>To take S2 from theory to decision, the questions that order the choice, in order:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Is the data subject to the GDPR, or is the system high-risk under the EU AI Act?&lt;/strong> If so, the US
hyperscaler is &lt;strong>ruled out on sovereignty&lt;/strong>; you choose between on-prem and European cloud. If not,
the hyperscaler enters the cost comparison.&lt;/li>
&lt;li>&lt;strong>Can I sustain utilisation above 65–70 % on the base load?&lt;/strong> If so, on-prem wins on cost for that
base. If not, the European cloud avoids paying capex for idle GPUs.&lt;/li>
&lt;li>&lt;strong>Does the traffic profile have marked peaks?&lt;/strong> If so, &lt;strong>hybrid&lt;/strong>: base on iron, peak on European
cloud. Size the iron for the base, never for the peak.&lt;/li>
&lt;li>&lt;strong>How much data do I take out of the provider each month?&lt;/strong> Model the egress; with a lot of
movement, the zero-egress of the European cloud, or on-prem, win clearly.&lt;/li>
&lt;li>&lt;strong>Which electricity grid and at what price?&lt;/strong> France or Spain with a PPA lower TCO and carbon;
include it in the model and in the CSRD report.&lt;/li>
&lt;li>&lt;strong>Have I fixed utilisation, energy, period and volume in writing?&lt;/strong> Without those four declared
assumptions, the number is not defensible.&lt;/li>
&lt;/ol>
&lt;p>Whoever answers these six questions with data, not with intuition, has the case built. The series'
recommendation for a sovereign European platform with a sustained base load is stable: &lt;strong>sovereign
on-prem for the high-utilisation base plus sovereign European cloud for the peak&lt;/strong>, with the
hyperscaler reserved only for workloads with no sovereignty requirement where frontier hardware is
needed without capex.&lt;/p>
&lt;hr>
&lt;h2 id="limits-and-traps-data-driven">Limits and traps (data-driven)&lt;/h2>
&lt;ol>
&lt;li>&lt;strong>Unrealistic assumed utilisation.&lt;/strong> The 80–90 % that makes on-prem win rarely happens in production
(40–65 % typical). Model your real utilisation, not the ideal one.&lt;/li>
&lt;li>&lt;strong>Comparing only the GPU-hour.&lt;/strong> TCO includes energy, operation, cooling, egress (cloud) and capex
(on-prem). Compare totals with the same assumptions.&lt;/li>
&lt;li>&lt;strong>Ignoring sovereignty.&lt;/strong> For GDPR data, the sovereignty axis rules out the hyperscaler before cost
does; it is not negotiable with price.&lt;/li>
&lt;li>&lt;strong>Forgetting the hybrid.&lt;/strong> It is not &amp;ldquo;all on-prem or all cloud&amp;rdquo;; the base-plus-peak pattern usually
dominates.&lt;/li>
&lt;li>&lt;strong>Data in USD.&lt;/strong> US comparisons are in dollars and with dirty regions; convert them to euros and to
your region&amp;rsquo;s grid (Spain/France) for your case.&lt;/li>
&lt;/ol>
&lt;p>The synthesis of S2, in one sentence: &lt;strong>for sovereign European data, the decision is not on-prem vs
cloud in the abstract, but sovereign on-prem (high utilisation) plus sovereign European cloud (peak)
against a hyperscaler that the sovereignty axis rules out&lt;/strong>, and utilisation is the variable that
splits the base between the first two. The rest of the series gives the numbers for each axis; this one
crosses them into the recommendation. The next synthesis article (S3) sizes the investment; this one
decides the architecture.&lt;/p>
&lt;h2 id="see-also">See also&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://blog.lo0.es/en/posts/cloud-gpu-on-demand-reserved-spot-neoclouds-2026-prices/">Cloud GPU: price comparison, commitment and sovereign neoclouds&lt;/a> — the on-demand, spot and reserved prices of the European cloud providers that appear as an alternative in this analysis, with updated 2026 data.&lt;/li>
&lt;li>&lt;a href="https://blog.lo0.es/en/posts/full-tco-on-premise-gpu-cluster-capex-gpu-hour-break-even/">TCO of the on-premise GPU cluster: amortisation, energy and infrastructure&lt;/a> — the full breakdown of on-premise TCO: server CAPEX, amortisation, energy, network and staff, with the spreadsheet that gives the real €/GPU-hour.&lt;/li>
&lt;/ul>
&lt;h2 id="sources">Sources&lt;/h2>
&lt;ul>
&lt;li>Spheron · LLM Inference On-Premise vs GPU Cloud: 2026 Cost and Break-Even — &lt;a href="https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/">https://www.spheron.network/blog/llm-inference-on-premise-vs-cloud/&lt;/a>&lt;/li>
&lt;li>Lenovo Press · On-Premise vs Cloud: Generative AI TCO (2026) — &lt;a href="https://lenovopress.lenovo.com/lp2368-on-premise-vs-cloud-generative-ai-total-cost-of-ownership-2026-edition">https://lenovopress.lenovo.com/lp2368-on-premise-vs-cloud-generative-ai-total-cost-of-ownership-2026-edition&lt;/a>&lt;/li>
&lt;li>Lyceum · EU Sovereign Inference Platform Comparison (2026) — &lt;a href="https://lyceum.technology/magazine/eu-sovereign-inference-platform-comparison/">https://lyceum.technology/magazine/eu-sovereign-inference-platform-comparison/&lt;/a>&lt;/li>
&lt;li>Lyceum · Sovereign Cloud Providers 2026 — &lt;a href="https://lyceum.technology/magazine/sovereign-cloud-providers-2026/">https://lyceum.technology/magazine/sovereign-cloud-providers-2026/&lt;/a>&lt;/li>
&lt;li>Scaleway · H100 GPU instance (precio €, soberanía UE) — &lt;a href="https://www.scaleway.com/en/h100/">https://www.scaleway.com/en/h100/&lt;/a>&lt;/li>
&lt;li>Nerd Level Tech · GPU Cloud TCO 2026: hidden fees, egress costs — &lt;a href="https://nerdleveltech.com/gpu-cloud-comparison-2026-the-real-cost-of-ai-compute">https://nerdleveltech.com/gpu-cloud-comparison-2026-the-real-cost-of-ai-compute&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>