Samouczek: Śledź wydatki na model fundamentów według użytkownika, zespołu lub projektu

W tym poradniku analizujesz, co napędza wydatki na Twój model fundamentów za pomocą Unity AI Gateway. Przypisujesz koszt według użytkownika w usługach modelowych, którymi zarządzasz, a następnie dodajesz tagi, aby śledzić wydatki według zespołu, projektu lub przypadku użycia, korzystając z tabel systemowych:

Prerequisites

Note

Szacunki w tym poradniku opierają się na cenie katalogowej. Nie obejmują negocjowanych rabatów ani kredytów rozliczeniowych. Wykorzystaj je do analizy atrybucji i trendów, a swoje zestawienie rozliczeniowe — do uzgadniania rozliczeń.

Krok 1: Sprawdź, którzy użytkownicy generują wydatki

Wskazówka

Kod Genie (tryb agenta) może to zrobić za Ciebie. Wypróbuj ten przykładowy monit:

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.

Przejdź do AI Gateway > Govern > Panel użycia >Analiza kosztów, która przedstawia zestawienie wydatków według modelu udostępnianego przez Databricks lub przez zewnętrznego dostawcę, punktu końcowego i użytkownika bez pisania zapytań SQL. Wykres Top Users by Cost (USD) w sekcji Cost Breakdown szereguje użytkowników generujących najwyższe koszty.

Alternatywnie, zapytaj bezpośrednio tabele systemowe, aby zobaczyć, kto konsumuje najwięcej i gdzie. Tabela, którą zapytasz, zależy od typu modelu:

Modele dostarczane przez Databricks

Wykonaj zapytanie system.billing.usage i połącz system.billing.list_prices, aby przeliczyć użycie DBU na dolary. Pole identity_metadata.run_by wskazuje podmiot, który wydał każde żądanie:

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;

Modele zewnętrzne

Dla żądań kierowanych do zewnętrznych dostawców za pośrednictwem usług modelowych Azure Databricks szacuje koszt w USD na podstawie zużycia tokenów oraz opublikowanych przez dostawców cen, zarejestrowanych w system.ai_gateway.external_model_spend. To zapytanie zwraca taki sam podział jak zapytanie udostępnione przez Azure Databricks dla usług dostawców modeli:

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: Ustaw monitorowanie zużycia i wydatków według zespołu lub projektu

Wydatki według użytkownika pokazują, kto, ale nie który zespół lub projekt. Aby przypisać użycie tokenów zespołowi lub projektowi, oznacz ruch na podstawie tego, jak usługi modelu mapują się na zespoły lub projekty:

  • Tagi usługi (endpoint): gdy każdy zespół lub projekt ma własną usługę modelową. Tag dotyczy każdego żądania kierowanego przez tę usługę modelową, więc ustawiasz go raz.
  • Tagi żądań: gdy wiele zespołów lub projektów korzysta z tej samej usługi modelowej. Dzwoniący ustawia tag dla każdego żądania, więc przypisujesz użycie w ramach usługi współdzielonej.

Tagi usługi

Dodaj tag, taki jak team lub project do usługi modelowej. Każde żądanie kierowane przez niego dziedziczy ten tag.

  1. W interfejsie obszaru roboczego przejdź do AI Gateway i otwórz usługę modelową.
  2. Na stronie przeglądu usługi modelowej, w sekcji Tagi , dodaj tag taki jak team = ml-platform.

Tagi serwisowe pojawiają się w polu endpoint_tags w system.ai_gateway.usage i są propagowane do pola custom_tags w system.billing.usage. Szczegóły dotyczące tworzenia i konfigurowania usług modelowych można znaleźć w artykule Tworzenie i zarządzanie API modelu (usługi modelowe).

Tagi żądań

Dołącz tag, taki jak project, do poszczególnych żądań za pomocą nagłówka HTTP Databricks-Ai-Gateway-Request-Tags, który jest obiektem JSON mapującym klucze tekstowe na wartości tekstowe:

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

Tagi żądań pojawiają się w request_tags polu w system.ai_gateway.usage. Przykłady ustawiające nagłówek za pomocą OpenAI SDK, Anthropic SDK i REST API znajdują się w artykule Tag requests for usage tracking.

Note

Jaki tag użyć do przypisywania kosztów zależy od modelu:

  • Modele dostarczane przez Azure Databricks: używaj tagów usług. Tylko tagi serwisowe propagują się do system.billing.usage.
  • Modele zewnętrznych dostawców: używaj tagów usług lub żądań. Obie wartości są przekazywane do system.ai_gateway.external_model_spend, gdzie przechwytywane są szacunki wydatków na modele zewnętrzne.

Krok 3: Przeanalizuj zużycie według zespołu lub projektu

Wskazówka

Kod Genie (tryb agenta) może to zrobić za Ciebie. Wypróbuj ten przykładowy monit:

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.

Po zastosowaniu tagów zagregowane dane użycia w system.ai_gateway.usage przechwytują metryki dotyczące żądań i tokenów dla każdego żądania kierowanego do modeli udostępnianych przez Azure Databricks oraz modeli dostawców zewnętrznych. Grupuj według endpoint_tags['team'] dla tagów usługi lub według request_tags['project'] dla tagów żądania:

Tagi usługi

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;

Tagi żądań

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;

Aby zbadać którykolwiek z tych podziałów bez SQL, użyj filtrów tagów na stronie analizy kosztów.

Krok 4: Przeanalizuj wydatki finansowe według zespołu lub projektu

Wskazówka

Kod Genie (tryb agenta) może to zrobić za Ciebie. Wypróbuj ten przykładowy monit:

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 dodaniu tagów przypisuj wydatki w USD do zespołu lub projektu. Aby grupować wydatki według tagów bez zapisywania SQL, przejdź do AI Gateway > Govern > Usage Dashboard >Cost Analysis i użyj sekcji Analiza kosztów oparta na tagach . Filtruj według tagu endpoint lub tagu żądania, aby zobaczyć koszt według grup tagów endpoint oraz szacowany koszt według grup tagów żądań.

Aby przypisać wydatki w SQL, tabela, którą zapytasz, zależy od typu modelu:

Modele dostarczane przez Databricks

Tagi usługi są propagowane do pola custom_tags w system.billing.usage, dzięki czemu możesz przypisać zespołowi wydatki według ceny katalogowej w USD w taki sam sposób, w jaki uszeregowałeś użytkowników w kroku 1. Dołącz do system.billing.list_prices, aby przeliczyć użycie 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;

Modele zewnętrzne

W przypadku modeli zewnętrznychsystem.ai_gateway.external_model_spend już zapisuje szacowany koszt w USD i uwzględnia zarówno tagi usług, jak i tagi żądań w custom_tags, więc można grupować według custom_tags.request_tags, aby przypisać koszty do usług według projektu lub zespołu:

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: Przeanalizuj koszt tokena według zespołu lub projektu

Wskazówka

Kod Genie (tryb agenta) może to zrobić za Ciebie. Wypróbuj ten przykładowy monit:

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.

Całkowite wydatki mówią, gdzie poszedł budżet, ale nie mówią, czy płacisz za to uczciwą stawkę. Śledzenie kosztów inferencji w przeliczeniu na 1 mln tokenów pozwala porównywać modele docelowe, wykrywać regresje po zmianie routowania lub uzasadnić przekierowanie ruchu do tańszego modelu. Połącz tabelę kosztów z system.ai_gateway.usage modelem usługi, modelem docelowym i zespołem. Obie karty grupują się według tagu team usługi, więc wyniki pokrywają się ze Krokiem 3:

Modele dostarczane przez Databricks

Zagreguj wydatki według cen listowych oraz tokeny w całym przedziale, a następnie połącz dane na podstawie usługi modelowej, modelu docelowego i zespołu. Dołącz do system.billing.list_prices, aby przeliczyć użycie 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;

Modele zewnętrzne

Zagreguj wydatki i tokeny w całym oknie czasowym, a następnie połącz je na podstawie usługi dostawcy modeli, modelu docelowego i zespołu. Obie tabele obejmują te same żądania, więc suma na poziomie okresu nie wymaga klucza czasowego w połączeniu:

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;

Jeśli używasz tagów zgłoszeń do przypisywania do zespołu, zastąp custom_tags.endpoint_tags['team'] elementem custom_tags.request_tags['team'], a endpoint_tags['team'] elementem request_tags['team'] w zestawieniu zbiorczym tokenów.

Note

Unity AI Gateway nie rejestruje użycia tokenów w przypadku odpowiedzi większych niż 1 MiB, które nie są strumieniowane ani nie stanowią osadzeń, więc koszt w przeliczeniu na token może wydawać się wysoki wszędzie tam, gdzie takie odpowiedzi są częste. Porównuj wskaźniki w ramach danego obciążenia, a nie między niepowiązanymi obciążeniami.

Następne kroki