← home
RESEARCH · GOVERNANCE

Multi-cloud AI cost allocation.

10 July 2026

By the LLM CFO team

No team is single-provider anymore. Bedrock holds Claude + regional data gravity. Azure OpenAI holds GPT-4 + procurement lock-in. Vertex holds Gemini + BigQuery integration. A self-hosted GPU cluster runs the cheapest open-weight models for high-volume, low-latency workloads. The problem: a single feature may route across three of these, costs are embedded in separate billing systems, and your CFO's dashboard shows "AI spend" as an opaque number because you've never reconciled what "one inference call" costs across all four providers.

The reconciliation problem

AWS bills Bedrock in tokens. Azure reports OpenAI spend in actual API calls. Vertex uses "1K predictions" as the unit. A self-hosted GPU cluster has no per-request cost at all—only monthly amortization over utilization. Reconciling one month's routing means querying four different dashboards, normalizing to a common currency (usually cost or token equivalents), and explaining variance to your exec team.

The friction is highest when:

How to normalize costs across providers

ProviderCost unitNormalization strategy
BedrockTokens (input/output)Direct ; use Bedrock's reported token counts.
Azure OpenAIAPI calls + token tiersPull from usage logs, apply per-token rates from billing portal.
Vertex"1K predictions"Convert to approximate token count via model card ; accept ~10% error.
Self-hosted GPUGPU-hours (amortized)Cost = (GPU $/hour) × hours ; allocate to requests by throughput.

The fastest path: ingest raw spend from each provider monthly, map each transaction to a model + token volume, compute effective $/1M input tokens and $/1M output tokens for each, store in a central fact table keyed by (provider, model, month). Then your routing logic can compare `Bedrock Claude 3.5: $3.00 / 1M input` to `Azure GPT-4: $2.80 / 1M input` and pick the cheaper path for non-sensitive workloads.

Tagging strategy for multi-cloud

Your routing gateway (LiteLLM, OpenRouter, or custom) must emit telemetry that captures three things:

Optional tags that unlock deeper analysis: `batch_mode` (on-demand vs batch vs flex), `latency_slo` (milliseconds), `fallback_attempts` (how many times did routing retry), `cost_bucket` (cheap vs premium). If you omit these, you can still do showback ; if you include them, you can measure whether batch routing actually saved money or just moved cost to a different line item.

Reconciliation and variance analysis

Every month, your telemetry should predict an AI bill within 5–10%. If it's off, investigate before the bill arrives. Common culprits:

Build a monthly reconciliation checklist: (1) Export raw usage from each provider. (2) Normalize to common schema. (3) Compare to telemetry forecast. (4) Investigate >5% variance. (5) Publish corrected forecast for next month. This usually takes 4–8 hours if your tagging is clean, or 2–3 days if it isn't.

Avoiding the "one true price" trap

Don't create a single exchange rate (e.g., "1 Vertex prediction = 1.2 Bedrock tokens"). Vendors will change rates, features drift, and your mental model breaks. Instead, track three things separately: tokens (for routing logic), cost (for showback), and utilization (for optimization). Reconcile monthly. The three numbers should track, but they're not the same number.

Related

← Back to llmcfo.com