Tutoriál: Sledujte výdaje na model základů podle uživatele, týmu nebo projektu

V tomto tutoriálu analyzujete, co stojí za vašimi výdaji na základní model pomocí Unity Gateway. Náklady přisuzujete uživateli napříč modelovými službami, které spravujete, a pak přidáváte štítky pro sledování výdajů podle týmu, projektu nebo případu použití pomocí systémových tabulek:

Prerequisites

Note

Odhady v dolarech v tomto kurzu vycházejí z katalogové ceny. Vylučují vyjednané slevy a kredity na fakturaci. Použijte je pro atribuci a analýzu trendů a fakturační výpis pro smíření.

Krok 1: Zjistěte, kteří uživatelé generují výdaje

Tip

Genie Code (režim agenta) to může udělat za vás. Vyzkoušejte tento příklad výzvy:

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.

Přejděte na AI Gateway > Govern > Usage Dashboard >Cost Analysis, kde se výdaje rozdělují podle modelu poskytovaného Databricks nebo externím poskytovatelem, koncového bodu a uživatele bez psaní SQL. Graf Top Users podle nákladů (USD) v rámci Cost Breakdown řadí největší utrácetele.

Alternativně se můžete dotazovat přímo do systémových tabulek, abyste zjistili, kdo spotřebovává nejvíce a kde. Tabulka, kterou dotazujete, závisí na typu modelu:

Modely poskytované Databricks

Dotazujte se na system.billing.usage a spojte jej s system.billing.list_prices, abyste převedli využití DBU na dolary. Pole identifikuje identity_metadata.run_by zmocněného, který vydal každou žádost:

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;

Externí modely

Pro požadavky směrované externím poskytovatelům prostřednictvím modelových služeb odhaduje Azure Databricks náklady v USD z využití tokenů a zveřejněných cen poskytovatele, upravených o jakýkoli násobitel ceny nastavený na službě modelového poskytovatele. Tento dotaz vrací stejné rozdělení jako dotaz poskytovaný Azure Databricks pro služby poskytovatele modelů:

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;

Krok 2: Nastavte sledování spotřeby a výdajů podle týmu nebo projektu

Útrata podle uživatele vám ukáže, kdo, ale ne který tým nebo projekt. Chcete-li přiřadit využití tokenů konkrétnímu týmu nebo projektu, označte svůj provoz štítky podle toho, jak jsou vaše modelové služby přiřazeny k týmům nebo projektům:

  • Štítky služby (koncového bodu): když má každý tým nebo projekt vlastní modelovou službu. Tag se vztahuje na každý požadavek směrovaný přes danou modelovou službu, takže ho nastavíte jednou.
  • Tagy požadavků: když mnoho týmů nebo projektů sdílí stejnou modelovou službu. Volající nastavuje tag pro každý požadavek, takže přisuzujete využití ve sdílené službě.

Značky služeb

Přidejte značku jako team nebo project do modelové služby. Každý požadavek směrovaný přes něj zdědí štítek.

  1. V rozhraní pracovního prostoru přejděte do AI Gateway a otevřete model service.
  2. Na stránce Přehledu modelové služby v sekci Štítky přidejte štítek například team = ml-platform.

Servisní štítky se zobrazují v poli endpoint_tags v system.ai_gateway.usage a přenášejí se do pole custom_tags v system.billing.usage. Pro podrobnosti o vytváření a konfiguraci modelových služeb viz Vytvořit vlastní modelovou službu .

Štítky požadavků

Připojte ke konkrétním požadavkům tag, například project, pomocí hlavičky HTTP Databricks-Ai-Gateway-Request-Tags, což je objekt JSON, který mapuje řetězcové klíče na řetězcové hodnoty:

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

Tagy požadavků se objevují v request_tags poli v .system.ai_gateway.usage Příklady, které nastavují hlavičku pomocí OpenAI SDK, Anthropic SDK a REST API, viz Tagování požadavků.

Note

Jaký tag použít pro atribuci nákladů závisí na modelu:

  • Modely poskytované Azure Databricks: používejte service tags. Pouze značky služby se přenášejí na system.billing.usage.
  • Modely od externích poskytovatelů: používejte značky služeb nebo značky požadavků. Oba se šíří do system.ai_gateway.external_model_spend, které zachycuje odhady externích modelových výdajů.

Krok 3: Analyzujte využití podle týmu nebo projektu

Tip

Genie Code (režim agenta) to může udělat za vás. Vyzkoušejte tento příklad výzvy:

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.

S tagy na místě agregujte využití v system.ai_gateway.usage, které zachycuje metriky požadavků a tokenů pro každý požadavek směrovaný do modelů poskytovaných Azure Databricks a externích poskytovatelů. Seskupit podle endpoint_tags['team'] pro značky služby nebo podle request_tags['project'] pro značky požadavků:

Značky služeb

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;

Štítky požadavků

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;

Pro prozkoumání kterékoli z těchto variant bez SQL použijte filtry tagů na stránce analýzy nákladů.

Krok 4: Analyzujte finanční výdaje podle týmu nebo projektu

Tip

Genie Code (režim agenta) to může udělat za vás. Vyzkoušejte tento příklad výzvy:

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.

Po nastavení tagů přiřaďte výdaje v USD týmu nebo projektu. Chcete-li seskupit výdaje podle tagů bez psaní SQL, přejděte na AI Gateway > Govern > Usage Dashboard >Cost Analysis a použijte sekci Tag-based Cost Analysis . Filtrujte podle tagu endpointu nebo tagu požadavku, abyste viděli náklady podle skupin tagů endpointů a odhadované náklady podle skupin tagů požadavků.

Pro atributování výdajů pomocí SQL závisí tabulka, kterou dotazujete, na typu modelu:

Modely poskytované Databricks

Štítky služeb se přenášejí do pole custom_tags v system.billing.usage, takže můžete týmu přiřadit výdaje v ceníkových cenách v USD stejným způsobem, jako jste v kroku 1 seřadili uživatele. Připojte se k system.billing.list_prices a převeďte využití DBU na dolary:

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;

Externí modely

U externích modelůsystem.ai_gateway.external_model_spend již zaznamenává odhadované náklady v USD a v custom_tags zahrnuje jak značky služeb, tak značky požadavků, takže můžete seskupovat podle custom_tags.request_tags a přiřazovat náklady napříč službami podle projektu nebo týmu:

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;

Krok 5: Analyzujte náklady na token podle týmu nebo projektu

Tip

Genie Code (režim agenta) to může udělat za vás. Vyzkoušejte tento příklad výzvy:

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.

Celkové výdaje vám řeknou, kam šel rozpočet, ale ne, jestli za něj platíte férovou sazbu. Sledování výdajů na inferenci jako náklad na 1 milion tokenů vám umožní porovnat modely destinací, rozpoznat regresie po změně směrování nebo ospravedlnit přesun provozu na levnější model. Připojte se k tabulce system.ai_gateway.usage nákladů k modelové službě, cílovému modelu a týmu. Obě záložky jsou seskupeny podle tagu služby team, takže výsledky jsou v souladu s krokem 3:

Modely poskytované Databricks

Sečtěte výdaje podle ceníkových cen a tokeny za celé časové okno, poté je spojte podle služby modelu, cílového modelu a týmu. Připojte se k system.billing.list_prices a převeďte využití DBU na dolary:

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;

Externí modely

Agregujte výdaje a tokeny během celého okna, pak se připojte na službu poskytovatele modelu, cílový model a tým. Obě tabulky pokrývají stejné požadavky, takže součet za celé období nepotřebuje v podmínce spojení časový klíč:

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;

Pokud používáte tagy požadavků pro přiřazení týmu, nahraďte custom_tags.endpoint_tags['team'] je v tokenovém rollupu za custom_tags.request_tags['team'], a endpoint_tags['team'] za .request_tags['team']

Note

Unity Gateway nezaznamenává použití tokenů u nestreamovaných a neembeddingových odpovědí větších než 1 MiB, takže cena za token může být vysoká tam, kde jsou tyto odpovědi běžné. Porovnejte rychlosti v rámci pracovní zátěže, nikoli mezi nesouvisejícími pracovními zátěžemi.

Další kroky