Tutorial: Monitorare la spesa del modello di base per utente, team o progetto

In questo tutorial, analizzi cosa sta guidando la spesa del tuo modello di base con Unity AI Gateway. Attribuisci il costo per utente nei servizi modello che gestisci, poi aggiungi tag per tracciare la spesa per team, progetto o caso d'uso usando tabelle di sistema:

Prerequisites

Annotazioni

Le stime in dollari in questo tutorial si basano sul prezzo di listino. Escludono sconti negoziati e crediti di fatturazione. Usali per l'attribuzione e l'analisi delle tendenze, e il tuo estratto conto di fatturazione per la riconciliazione.

Passo 1: Scopri quali utenti determinano la spesa

Tip

Genie Code (modalità agente) può farlo per te. Provare questo prompt di esempio:

Query system.billing.usage for MODEL_SERVING records from the past 30 days where usage_metadata.ai_gateway.endpoint_name is set. Convert DBUs to list-price USD using system.billing.list_prices at the price effective for each record, break down by model service, destination model, and requesting user, and sort by cost.

Vai a AI Gateway > Govern > Usage Dashboard >Cost Analysis, che suddivide i costi in base al modello fornito da Databricks o da un fornitore esterno, all'endpoint e all'utente, senza dover scrivere query SQL. Il grafico Top Users by Cost (USD) nella sezione Cost Breakdown classifica gli utenti con la spesa più elevata.

In alternativa, consulta direttamente le tabelle di sistema per vedere chi consuma di più e dove. La tabella che interroghi dipende dal tipo di modello:

Modelli forniti dai Databricks

Consulta system.billing.usage e unisci system.billing.list_prices per convertire l'uso della DBU in dollari. Il identity_metadata.run_by campo identifica il principale che ha emesso ogni richiesta:

SELECT
 u.usage_metadata.ai_gateway.endpoint_name AS model_service_name,
 u.usage_metadata.ai_gateway.destination_model AS destination_model,
 u.identity_metadata.run_by AS run_by,
 SUM(u.usage_quantity * lp.pricing.effective_list.default) AS list_cost_usd
FROM system.billing.usage u
JOIN system.billing.list_prices lp
 ON  u.sku_name  = lp.sku_name
 AND u.cloud     = lp.cloud
 AND u.usage_unit = lp.usage_unit
 AND u.usage_end_time >= lp.price_start_time
 AND (lp.price_end_time IS NULL OR u.usage_end_time < lp.price_end_time)
WHERE u.billing_origin_product = 'MODEL_SERVING'
 AND u.usage_metadata.ai_gateway.endpoint_name IS NOT NULL
 AND u.identity_metadata.run_by IS NOT NULL
 AND u.usage_unit = 'DBU'
 AND lp.currency_code = 'USD'
 AND u.usage_date >= current_date() - INTERVAL 30 DAYS
GROUP BY model_service_name, destination_model, run_by
ORDER BY list_cost_usd DESC;

Modelli esterni

Per le richieste instradate a fornitori esterni tramite servizi di fornitori modello, Azure Databricks stima il costo in USD dall'uso dei token e dai prezzi pubblicati dal provider, raccolti in system.ai_gateway.external_model_spend. Questa query restituisce la stessa ripartizione della query fornita da Azure Databricks per i servizi dei fornitori di modelli:

SELECT
  usage_metadata.endpoint_name AS model_provider_service_name,
  identity_metadata.run_by AS run_by,
  SUM(usage_quantity) AS estimated_provider_cost_usd
FROM system.ai_gateway.external_model_spend
WHERE identity_metadata.run_by IS NOT NULL
  AND usage_start_time >= current_timestamp() - INTERVAL 30 DAYS
GROUP BY run_by, model_provider_service_name
ORDER BY estimated_provider_cost_usd DESC;

Passo 2: Impostare il monitoraggio dell'utilizzo e delle spese per team o progetto

La spesa per utente ti dice chi, ma non quale team o progetto. Per attribuire l'utilizzo dei token a un team o a un progetto, etichetta il traffico in base a come i tuoi servizi di modello sono associati a team o progetti:

  • Tag di servizio (endpoint): quando ogni team o progetto ha il proprio modello di servizio. Il tag si applica a ogni richiesta instradata attraverso quel servizio modello, quindi lo imposti una volta.
  • Request tag: quando molti team o progetti condividono lo stesso modello di servizio. Il chiamante imposta il tag per richiesta, quindi attribuisci l'utilizzo all'interno di un servizio condiviso.

Etichette di servizio

Aggiungi un tag come team o project al servizio modello. Ogni richiesta instradata attraverso di essa eredita il tag.

  1. Nell'interfaccia dello spazio di lavoro, vai su AI Gateway e apri il servizio modello.
  2. Nella pagina Panoramica del servizio modello, nella sezione Tag , aggiungi un tag come team = ml-platform.

I tag di servizio appaiono nel endpoint_tags campo in system.ai_gateway.usage e si propagano al custom_tags campo in system.billing.usage. Per dettagli sulla creazione e configurazione dei servizi modello, vedi Crea e gestisci API modello (servizi modello).

Etichette della richiesta

Associa un tag come project a singole richieste con l'intestazione HTTP Databricks-Ai-Gateway-Request-Tags, un oggetto JSON che associa chiavi stringa a valori stringa:

Databricks-Ai-Gateway-Request-Tags: {"project": "chatbot", "team": "ml-platform"}

I tag di richiesta appaiono nel request_tags campo in system.ai_gateway.usage. Per esempi che impostano l'intestazione con l'SDK OpenAI, l'SDK Anthropic e l'API REST, vedi Richieste di tag per il tracciamento dell'uso.

Annotazioni

Quale tag utilizzare per l'attribuzione dei costi dipende dal modello:

  • Modelli forniti da Azure Databricks: usano tag di servizio. Solo i tag di servizio si propagano verso system.billing.usage.
  • Modelli di fornitori esterni: utilizzare tag di servizio o richiesta. Entrambi confluiscono in system.ai_gateway.external_model_spend, che registra le stime di spesa dei modelli esterni.

Passo 3: Analizzare l'utilizzo da parte del team o del progetto

Tip

Genie Code (modalità agente) può farlo per te. Provare questo prompt di esempio:

Query system.ai_gateway.usage for the past 30 days to show request count and total tokens by the 'team' service tag in endpoint_tags, model service, and destination model. Sort by total tokens, highest first.

Una volta applicati i tag, aggrega l'utilizzo in system.ai_gateway.usage, che acquisisce le metriche relative a richieste e token per ogni richiesta instradata verso i modelli forniti da Azure Databricks e dai provider esterni. Raggruppa per endpoint_tags['team'] i tag di servizio o per request_tags['project'] i tag di richiesta:

Etichette di servizio

SELECT
  endpoint_tags['team'] AS team,
  endpoint_name,
  destination_model,
  COUNT(*) AS request_count,
  SUM(total_tokens) AS total_tokens
FROM system.ai_gateway.usage
WHERE endpoint_tags['team'] IS NOT NULL
GROUP BY endpoint_tags['team'], endpoint_name, destination_model
ORDER BY total_tokens DESC;

Etichette della richiesta

SELECT
  request_tags['project'] AS project,
  endpoint_name,
  destination_model,
  COUNT(*) AS request_count,
  SUM(total_tokens) AS total_tokens
FROM system.ai_gateway.usage
WHERE request_tags['project'] IS NOT NULL
GROUP BY request_tags['project'], endpoint_name, destination_model
ORDER BY total_tokens DESC;

Per esplorare entrambi i breakdown senza SQL, usa i filtri dei tag nella pagina di analisi dei costi.

Passo 4: Analizza la spesa in dollari per team o progetto

Tip

Genie Code (modalità agente) può farlo per te. Provare questo prompt di esempio:

Query system.billing.usage for MODEL_SERVING records from the past 30 days where usage_metadata.ai_gateway.endpoint_name is set. Convert DBUs to list-price USD using system.billing.list_prices at the price effective for each record, group by the 'team' service tag in custom_tags, and sort by cost.

Una volta applicati i tag, puoi attribuire la spesa in USD a un team o a un progetto. Per raggruppare la spesa per tag senza scrivere SQL, vai su AI Gateway > Govern > Usage > Analisi dei Costi e usa la sezione Analisi dei Costi basata su Tag. Filtra per tag endpoint o tag richiesta per vedere Costo per gruppi di tag endpoint e costo stimato per gruppi di tag richieste.

Per attribuire la spesa con SQL, la tabella che si interroga dipende dal tipo di modello:

Modelli forniti dai Databricks

I tag di servizio si propagano al custom_tags campo in system.billing.usage, quindi puoi attribuire la spesa a prezzo di listino in USD a un team nello stesso modo in cui hai classificato gli utenti nello Step 1. Iscriviti system.billing.list_prices per convertire l'uso delle DBU in dollari:

SELECT
  u.custom_tags['team'] AS team,
  SUM(u.usage_quantity * lp.pricing.effective_list.default) AS list_cost_usd
FROM system.billing.usage u
JOIN system.billing.list_prices lp
  ON  u.sku_name   = lp.sku_name
  AND u.cloud      = lp.cloud
  AND u.usage_unit = lp.usage_unit
  AND u.usage_end_time >= lp.price_start_time
  AND (lp.price_end_time IS NULL OR u.usage_end_time < lp.price_end_time)
WHERE u.billing_origin_product = 'MODEL_SERVING'
  AND u.usage_metadata.ai_gateway.endpoint_name IS NOT NULL
  AND u.custom_tags['team'] IS NOT NULL
  AND u.usage_unit = 'DBU'
  AND lp.currency_code = 'USD'
  AND u.usage_date >= current_date() - INTERVAL 30 DAYS
GROUP BY team
ORDER BY list_cost_usd DESC;

Modelli esterni

Per i modelli esterni, system.ai_gateway.external_model_spend registra già il costo stimato in USD e include sia i tag di servizio che i tag di richiesta in custom_tags, così puoi raggruppare per custom_tags.request_tags attribuire la spesa tra i servizi per progetto o team:

SELECT
  custom_tags.request_tags['team'] AS team,
  SUM(usage_quantity) AS estimated_provider_cost_usd
FROM system.ai_gateway.external_model_spend
WHERE custom_tags.request_tags['team'] IS NOT NULL
  AND usage_date >= current_date() - INTERVAL 30 DAYS
GROUP BY team
ORDER BY estimated_provider_cost_usd DESC;

Passo 5: Analizza il costo per token per team o progetto

Tip

Genie Code (modalità agente) può farlo per te. Provare questo prompt di esempio:

Query system.billing.usage and system.ai_gateway.usage for the past 30 days to show list-price USD per million tokens by model service, destination model, and the 'team' service tag. Convert DBUs to dollars using system.billing.list_prices at the price effective for each record, and join the two tables on usage date.

La spesa totale ti dice dove è andato il budget, ma non se stai pagando una tariffa equa per esso. Tracciare la spesa per inferenza come costo per token da 1 milione permette di confrontare i modelli di destinazione, individuare regressioni dopo un cambio di routing o giustificare lo spostamento del traffico su un modello più economico. Collega la tabella dei costi a system.ai_gateway.usage in base al servizio del modello, al modello di destinazione e al team. Entrambe le schede raggruppano per tag team di servizio, così i risultati corrispondono al Passo 3:

Modelli forniti dai Databricks

Aggregare la spesa e i token a prezzo di lista sull'intera finestra, poi unirsi al servizio modello, al modello di destinazione e al team. Iscriviti system.billing.list_prices per convertire l'uso delle DBU in dollari:

WITH cost AS (
  SELECT
    u.usage_metadata.ai_gateway.endpoint_name AS endpoint_name,
    u.usage_metadata.ai_gateway.destination_model AS destination_model,
    u.custom_tags['team'] AS team,
    SUM(u.usage_quantity * lp.pricing.effective_list.default) AS list_cost_usd
  FROM system.billing.usage u
  JOIN system.billing.list_prices lp
    ON  u.sku_name   = lp.sku_name
    AND u.cloud      = lp.cloud
    AND u.usage_unit = lp.usage_unit
    AND u.usage_end_time >= lp.price_start_time
    AND (lp.price_end_time IS NULL OR u.usage_end_time < lp.price_end_time)
  WHERE u.billing_origin_product = 'MODEL_SERVING'
    AND u.usage_metadata.ai_gateway.endpoint_name IS NOT NULL
    AND u.custom_tags['team'] IS NOT NULL
    AND u.usage_unit = 'DBU'
    AND lp.currency_code = 'USD'
    AND u.usage_date >= current_date() - INTERVAL 30 DAYS
  GROUP BY ALL
),
tokens AS (
  SELECT
    endpoint_name,
    destination_model,
    endpoint_tags['team'] AS team,
    SUM(total_tokens) AS total_tokens
  FROM system.ai_gateway.usage
  WHERE endpoint_tags['team'] IS NOT NULL
    AND endpoint_name IS NOT NULL
    AND event_time >= current_timestamp() - INTERVAL 30 DAYS
  GROUP BY ALL
)
SELECT
  c.endpoint_name,
  c.destination_model,
  c.team,
  c.list_cost_usd,
  t.total_tokens,
  1000000 * c.list_cost_usd / NULLIF(t.total_tokens, 0) AS list_cost_usd_per_1m_tokens
FROM cost c
JOIN tokens t
  ON  c.endpoint_name     = t.endpoint_name
  AND c.destination_model = t.destination_model
  AND c.team              = t.team
ORDER BY list_cost_usd_per_1m_tokens DESC;

Modelli esterni

Aggrega spese e token sull'intera finestra, poi unisciti al servizio del fornitore modello, al modello di destinazione e al team. Entrambe le tabelle coprono le stesse richieste, quindi un totale a livello di periodo non ha bisogno di una chiave temporale nella join:

WITH spend AS (
  SELECT
    usage_metadata.endpoint_name AS endpoint_name,
    usage_metadata.model AS destination_model,
    custom_tags.endpoint_tags['team'] AS team,
    SUM(usage_quantity) AS estimated_provider_cost_usd
  FROM system.ai_gateway.external_model_spend
  WHERE custom_tags.endpoint_tags['team'] IS NOT NULL
    AND usage_date >= current_date() - INTERVAL 30 DAYS
  GROUP BY ALL
),
tokens AS (
  SELECT
    endpoint_name,
    destination_model,
    endpoint_tags['team'] AS team,
    SUM(total_tokens) AS total_tokens
  FROM system.ai_gateway.usage
  WHERE endpoint_tags['team'] IS NOT NULL
    AND destination_model IS NOT NULL
    AND event_time >= current_timestamp() - INTERVAL 30 DAYS
  GROUP BY ALL
)
SELECT
  s.endpoint_name,
  s.destination_model,
  s.team,
  s.estimated_provider_cost_usd,
  t.total_tokens,
  1000000 * s.estimated_provider_cost_usd / NULLIF(t.total_tokens, 0) AS estimated_cost_usd_per_1m_tokens
FROM spend s
JOIN tokens t
  ON  s.endpoint_name     = t.endpoint_name
  AND s.destination_model = t.destination_model
  AND s.team              = t.team
ORDER BY estimated_cost_usd_per_1m_tokens DESC;

Se usi i tag request per l'attribuzione della squadra, sostituisci custom_tags.endpoint_tags['team'] con custom_tags.request_tags['team'], e endpoint_tags['team'] con request_tags['team'] nel rollup dei token.

Annotazioni

Unity AI Gateway non registra l'utilizzo dei token per risposte non streaming e non embedding superiori a 1 MiB, quindi il costo per token può essere alto dove queste risposte sono comuni. Confronta le tariffe all'interno di un carico di lavoro piuttosto che tra quelle non correlate.

Passaggi successivi