Tutorial: Acompanhe o uso do modelo de fundação por usuário, equipe ou projeto

Neste tutorial, você analisa o que está impulsionando o gasto do seu modelo de base com o Unity AI Gateway. Você atribui custo por usuário nos serviços modelo que você administra, depois adiciona tags para acompanhar gastos por equipe, projeto ou caso de uso usando tabelas do sistema:

Prerequisites

Note

As estimativas em dólares neste tutorial são baseadas no preço de listagem. Eles excluem descontos negociados e créditos de cobrança. Use-os para atribuição e análise de tendências, e sua fatura para reconciliação.

Passo 1: Veja quais usuários estão impulsionando o gasto

Dica

O Código do Gênio (modo agente) pode fazer isso por você. Experimente este prompt de exemplo:

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.

Acesse AI Gateway > Govern > Painel de uso >Análise de custos, que detalha os gastos por modelo fornecido pela Databricks ou por um provedor externo, endpoint e usuário, sem escrever SQL. O gráfico de Principais Usuários por Custo (USD) na seção Cost Breakdown classifica os maiores gastadores.

Alternativamente, consulte diretamente as tabelas do sistema para ver quem está consumindo mais e onde. A tabela que você consulta depende do tipo de modelo:

Modelos fornecidos por Databricks

Consulte system.billing.usage e faça junção com system.billing.list_prices para converter o uso de DBU em dólares. O identity_metadata.run_by campo identifica o principal que emitiu cada solicitação:

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;

Modelos externos

Para requisições roteadas a provedores externos por meio de serviços modelo de provedores, o Azure Databricks estima o custo em USD a partir do uso de tokens e os preços publicados pelo provedor, capturados em system.ai_gateway.external_model_spend. Esta consulta retorna a mesma divisão da consulta fornecida pelo Azure Databricks para serviços de provedores de modelo:

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: Configurar o acompanhamento de uso e gastos por equipe ou projeto

O Spend by User diz quem, mas não qual equipe ou projeto. Para atribuir o uso de tokens a uma equipe ou projeto, etiquete seu tráfego de acordo com a forma como seus serviços de modelos se mapeiam para equipes ou projetos:

  • Tags de serviço (endpoint): quando cada equipe ou projeto tem seu próprio serviço modelo. A tag se aplica a toda requisição roteada por esse serviço modelo, então você a define uma vez.
  • Tags de solicitação: quando muitas equipes ou projetos compartilham o mesmo modelo de serviço. O chamador define a tag por requisição, então você atribui o uso dentro de um serviço compartilhado.

Etiquetas de serviço

Adicione uma tag como team ou project ao serviço modelo. Cada requisição encaminhada por ela herda a tag.

  1. Na interface do workspace, vá para AI Gateway e abra o serviço de modelos.
  2. Na página de Visão Geral do serviço modelo, na seção Tags , adicione uma tag como team = ml-platform.

Etiquetas de serviço aparecem no endpoint_tags campo em system.ai_gateway.usage e propagam-se para o custom_tags campo em system.billing.usage. Para detalhes sobre a criação e configuração de serviços modelo, veja Criar e gerenciar APIs modelo (serviços modelo).

Etiquetas da solicitação

Anexe uma tag, como project, a solicitações individuais com o cabeçalho HTTP Databricks-Ai-Gateway-Request-Tags: um objeto JSON que mapeia chaves de texto para valores de texto.

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

As tags de solicitação aparecem no request_tags campo em system.ai_gateway.usage. Para exemplos que definem o cabeçalho com o SDK OpenAI, Anthropic SDK e API REST, veja Requests de Tag para rastreamento de uso.

Note

Qual tag usar para atribuição de custos depende do modelo:

  • Modelos fornecidos pelo Azure Databricks: use marcas de serviço. Apenas as etiquetas de serviço propagam-se para system.billing.usage.
  • Modelos de provedores externos: utilize tags de serviço ou solicitação. Ambos são propagados para system.ai_gateway.external_model_spend, que captura estimativas externas de custos com modelos.

Passo 3: Analisar o uso por equipe ou projeto

Dica

O Código do Gênio (modo agente) pode fazer isso por você. Experimente este prompt de exemplo:

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.

Com as tags definidas, o uso agregado está em system.ai_gateway.usage, que captura métricas de solicitações e tokens para cada solicitação roteada para modelos fornecidos pelo Azure Databricks e por provedores externos. Agrupe por endpoint_tags['team'] tags de serviço, ou por request_tags['project'] tags de solicitação:

Etiquetas de serviço

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;

Etiquetas da solicitação

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;

Para explorar qualquer um dos detalhamentos sem SQL, use os filtros de tags na página Análise de custos.

Passo 4: Analise o gasto em dólares por equipe ou projeto

Dica

O Código do Gênio (modo agente) pode fazer isso por você. Experimente este prompt de exemplo:

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.

Com as tags definidas, atribua os gastos em USD a uma equipe ou a um projeto. Para agrupar gastos por tag sem escrever SQL, acesse AI Gateway > Govern >> Cost Analysis e use a seção Análise de Custos Baseada em Tags. Filtre por tag de endpoint ou tag de solicitação para ver Custo por Grupos de Tags de Endpoint e Custo Estimado por Grupos de Tags de Solicitação.

Para atribuir gasto com SQL, a tabela que você consulta depende do tipo de modelo:

Modelos fornecidos por Databricks

As tags de serviço são propagadas para o campo custom_tags em system.billing.usage, para que você possa atribuir a uma equipe o gasto com preço de tabela em USD da mesma forma que classificou os usuários no Passo 1. Participe de system.billing.list_prices para converter o uso de DBU em dólares:

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;

Modelos externos

Para modelos externos, system.ai_gateway.external_model_spend já registra o custo estimado em USD e inclui tanto as tags de serviço quanto as tags de requisição em custom_tags, então você pode agrupar por custom_tags.request_tags para atribuir os gastos entre serviços por projeto ou equipe:

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: Analise o custo por token por equipe ou projeto

Dica

O Código do Gênio (modo agente) pode fazer isso por você. Experimente este prompt de exemplo:

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.

O gasto total indica para onde foi o orçamento, mas não se você está pagando uma taxa justa por ele. Acompanhar os gastos com inferência como custo por 1 milhão de tokens permite comparar modelos de destino, detectar regressões após uma mudança de roteamento ou justificar a migração do tráfego para um modelo mais barato. Associe a tabela de custos a system.ai_gateway.usage com base no serviço de modelo, no modelo de destino e na equipe. Ambas as abas se agrupam pela team tag de serviço, então os resultados coincidem com o Passo 3:

Modelos fornecidos por Databricks

Agregue o gasto e tokens com preço de lista ao longo da janela completa, depois junte-se ao serviço modelo, modelo de destino e equipe. Participe de system.billing.list_prices para converter o uso de DBU em dólares:

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;

Modelos externos

Agregue os gastos e os tokens ao longo de toda a janela e, em seguida, faça a junção com base no serviço do provedor do modelo, no modelo de destino e na equipe. Ambas as tabelas cobrem os mesmos pedidos, então um total em nível de período não precisa de uma chave de tempo na junção:

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 você estiver usando tags de solicitação para atribuição de equipe, substitua custom_tags.endpoint_tags['team'] por custom_tags.request_tags['team'], e endpoint_tags['team'] por request_tags['team'] no rollup de tokens.

Note

O Unity AI Gateway não registra o uso de tokens para respostas não streaming e não embedding maiores que 1 MiB, então o custo por token pode ser alto onde essas respostas são comuns. Compare as taxas dentro de uma carga de trabalho, em vez de entre cargas de trabalho não relacionadas.

Próximas Etapas