Tutorial: Verfolgen Sie die Ausgaben des Foundation-Modells nach Nutzer, Team oder Projekt

In diesem Tutorial analysieren Sie, was Ihre Ausgaben für das Basismodell mit Unity AI Gateway antreibt. Sie weisen die Kosten nach Benutzer auf die von Ihnen gesteuerten Modellservices zu und fügen dann Tags hinzu, um die Ausgaben nach Team, Projekt oder Anwendungsfall anhand von Systemtabellen zu verfolgen:

Voraussetzungen

Note

Die Dollar-Schätzungen in diesem Tutorial basieren auf dem Listenpreis. Sie schließen ausgehandelte Rabatte und Abrechnungsgutschriften aus. Verwenden Sie sie für Attribution und Trendanalysen sowie Ihre Abrechnung für den Abgleich.

Schritt 1: Sehen Sie, welche Nutzer die Ausgaben antreiben

Tip

Genie Code (Agent-Modus) kann dies für Sie tun. Probieren Sie diese Beispielaufforderung aus:

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.

Gehen Sie zu AI Gateway > Govern > Usage Dashboard >Kostenanalyse, das die Ausgaben nach von Databricks bereitgestelltem oder externem Anbietermodell, Endpunkt und Benutzer aufschlüsselt, ohne SQL schreiben zu müssen. Das Chart der Top-Nutzer nach Kosten (USD) unter der Kostenaufschlüsselung listet die größten Spender auf.

Alternativ können Sie die Systemtabellen direkt abfragen, um zu sehen, wer am meisten verbraucht und wo. Die Tabelle, die Sie abfragen, hängt vom Modelltyp ab:

Databricks-bereitgestellte Modelle

Fragen Sie system.billing.usage ab und verknüpfen Sie system.billing.list_prices, um die DBU-Nutzung in Dollarbeträge umzurechnen. Das Feld identity_metadata.run_by identifiziert den Hauptverantwortlichen, der jede Anfrage gestellt hat:

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;

Externe Modelle

Für Anfragen, die an externe Anbieter über Modellanbieterdienste weitergeleitet werden, schätzt Azure Databricks die Kosten in USD aus der Tokennutzung und den vom Anbieter veröffentlichten Preisen, erfasst in system.ai_gateway.external_model_spend. Diese Abfrage liefert dieselbe Aufschlüsselung wie die von Azure Databricks bereitgestellte Abfrage für Modellanbieterdienste:

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;

Schritt 2: Setze das Verbrauchs- und Ausgabentracking nach Team oder Projekt ein

Die Ausgabe pro Nutzer sagt dir, wer, aber nicht welches Team oder Projekt. Um die Token-Nutzung einem Team oder Projekt zuzuordnen, taggen Sie Ihren Traffic basierend darauf, wie Ihre Modelldienste Teams oder Projekte zugeordnet sind:

  • Service-(Endpunkt-)Tags: wenn jedes Team oder Projekt seinen eigenen Modellservice hat. Das Tag gilt für jede Anfrage, die über diesen Modellservice weitergeleitet wird, daher müssen Sie es nur einmal festlegen.
  • Anfrage-Tags: Wenn viele Teams oder Projekte dasselbe Modell-Service nutzen. Der Aufrufer setzt das Tag für jede Anfrage, sodass Sie die Nutzung innerhalb eines gemeinsam genutzten Dienstes zuordnen.

Diensttags

Fügen Sie dem Modellservice ein Tag wie team oder project hinzu. Jede Anfrage, die durch ihn geleitet wird, erbt das Tag.

  1. Gehe im Arbeitsbereich-UI zu AI Gateway und öffne den Modellservice.
  2. Auf der Übersichtsseite des Modelldienstes , unter dem Abschnitt Tags , fügen Sie ein Tag wie team = ml-platform. hinzu.

Servicetags erscheinen im endpoint_tags Feld in system.ai_gateway.usage und breiten sich auf das custom_tags Feld in system.billing.usageaus. Details zur Erstellung und Konfiguration von Modelldiensten finden Sie unter Erstellen und verwalten von Modell-APIs (Modelldienste).

Anfrage-Tags

Fügen Sie einzelnen Anfragen mit dem HTTP-Header project ein Tag wie Databricks-Ai-Gateway-Request-Tags hinzu, ein JSON-Objekt, das String-Schlüssel String-Werten zuordnet:

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

Anfrage-Tags erscheinen im request_tags Feld in system.ai_gateway.usage. Beispiele, die den Header mit dem OpenAI SDK, dem Anthropic SDK und der REST API setzen, finden Sie unter Tag-Anfragen zur Nutzungsverfolgung.

Note

Welcher Tag für die Kostenattribution verwendet wird, hängt vom Modell ab:

  • Azure Databricks-bereitgestellte Modelle: Verwende Service-Tags. Nur Service-Tags propagieren auf system.billing.usage.
  • Modelle externer Anbieter: Verwenden Sie Service- oder Anfrage-Tags. Beide propagieren nach system.ai_gateway.external_model_spend, was externe Ausgabenschätzungen des Modells erfasst.

Schritt 3: Analysieren Sie die Nutzung nach Team oder Projekt

Tip

Genie Code (Agent-Modus) kann dies für Sie tun. Probieren Sie diese Beispielaufforderung aus:

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.

Wenn Tags vorhanden sind, wird die Nutzung in system.ai_gateway.usage aggregiert, das Anfrage- und Tokenmetriken für jede an von Azure Databricks bereitgestellte und von externen Anbietern stammende Modelle weitergeleitete Anfrage erfasst. Gruppieren Sie sich nach endpoint_tags['team'] Service-Tags oder nach request_tags['project'] Anfrage-Tags:

Diensttags

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;

Anfrage-Tags

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;

Um beide Aufschlüsselungen ohne SQL zu untersuchen, verwenden Sie die Tag-Filter auf der Kostenanalyse-Seite.

Schritt 4: Analysieren Sie den Geldaufwand nach Team oder Projekt

Tip

Genie Code (Agent-Modus) kann dies für Sie tun. Probieren Sie diese Beispielaufforderung aus:

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.

Mit Tags kann man die Ausgaben in USD einem Team oder Projekt zuweisen. Um Ausgaben nach Tag zu gruppieren, ohne SQL zu schreiben, gehen Sie zu AI Gateway > Govern > Usage Dashboard >Cost Analysis und verwenden Sie den Tag-basierten Abschnitt Kostenanalyse . Filtern Sie nach Endpunkt-Tag oder Anfrage-Tag, um Kosten nach Endpunkt-Tag-Gruppen und geschätzte Kosten nach Anfrage-Tag-Gruppen zu sehen.

Um Ausgaben mit SQL zu attributieren, hängt die Tabelle, die du absuchst, vom Modelltyp ab:

Databricks-bereitgestellte Modelle

Service-Tags werden in das Feld custom_tags in system.billing.usage übernommen, sodass Sie Ausgaben zum Listenpreis in USD einem Team genauso zuordnen können, wie Sie die Nutzer in Schritt 1 eingestuft haben. Nehmen Sie an system.billing.list_prices teil, um die DBU-Nutzung in Dollar umzurechnen:

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;

Externe Modelle

Für externe Modelle erfasst system.ai_gateway.external_model_spend bereits die geschätzten Kosten in USD und führt sowohl Service-Tags als auch Request-Tags in custom_tags auf, sodass Sie nach custom_tags.request_tags gruppieren können, um Ausgaben dienstübergreifend nach Projekt oder Team zuzuordnen:

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;

Schritt 5: Analysieren Sie die Kosten pro Token nach Team oder Projekt

Tip

Genie Code (Agent-Modus) kann dies für Sie tun. Probieren Sie diese Beispielaufforderung aus:

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.

Die Gesamtausgaben zeigen dir, wohin das Budget gegangen ist, aber nicht, ob du dafür einen fairen Preis zahlst. Die Erfassung von Inferenzkosten als Kosten pro 1 Mio. Token ermöglicht es Ihnen, Zielmodelle zu vergleichen, Regressionen nach einer Routingänderung zu erkennen oder die Verlagerung von Datenverkehr auf ein günstigeres Modell zu rechtfertigen. Verknüpfen Sie die Kostentabelle mit system.ai_gateway.usage über den Modelldienst, das Zielmodell und das Team. Beide Tabs gruppieren sich nach dem team Service-Tag, sodass die Ergebnisse mit Schritt 3 übereinstimmen:

Databricks-bereitgestellte Modelle

Aggregiere Listenpreisausgaben und Token über das gesamte Fenster und tritt dann dem Modellservice, Zielmodell und Team bei. Nehmen Sie an system.billing.list_prices teil, um die DBU-Nutzung in Dollar umzurechnen:

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;

Externe Modelle

Ausgaben und Tokens über das gesamte Fenster aggregieren und dann dem Modell-Provider-Service, Zielmodell und Team beitreten. Beide Tabellen decken dieselben Abfragen ab, sodass eine Summe auf Periodenebene im Join keinen Zeitschlüssel benötigt:

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;

Wenn du Anfrage-Tags für die Teamzuordnung verwendest, ersetze im Token-Rollup custom_tags.endpoint_tags['team'] durch custom_tags.request_tags['team'] und endpoint_tags['team'] durch request_tags['team'].

Note

Das Unity AI Gateway erfasst keine Token-Nutzung für nicht-streamende, nicht einbettende Antworten, die größer als 1 MiB sind, sodass die Kosten pro Token dort hoch ausfallen können, wo diese Antworten häufig vorkommen. Vergleichen Sie die Tarife innerhalb einer Arbeitslast statt zwischen unterschiedlichen Tätigkeiten.

Nächste Schritte