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 fundação com o Unity 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

Genie Code 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 ingresse em 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 encaminhadas para provedores externos por meio de serviços de provedores modelo, o Azure Databricks estima o custo em USD a partir do uso de tokens e dos preços publicados pelo provedor, ajustados por qualquer multiplicador de preços configurado no serviço modelo de provedor. 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:

  • Marcações (ponto de extremidade) de serviço: quando cada equipe ou projeto tem seu próprio serviço de 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 como criar e configurar serviços de modelo, veja Criar um serviço de modelo personalizado .

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 Marcagem de Solicitações.

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. Os dois 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

Genie Code 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

Genie Code 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 marcações 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 list-price em USD da mesma forma que classificou os usuários na Etapa 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

Genie Code 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. Rastrear os gastos com inferência como custo por 1 milhão de tokens permite comparar modelos de destino, detectar regressões após uma alteração de roteamento ou justificar a migração do tráfego para um modelo mais barato. Ingresse a tabela de custos em 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 os tokens e o gasto list-price ao longo da janela completa, depois ingresse no serviço de modelo, no modelo de destino e na 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 tokens e o gasto ao longo da janela completa, depois ingresse no serviço de provedor de 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 marcações de solicitação para a 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 Gateway não registra o uso de tokens para respostas não streaming, sem 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