Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
-
system.billing.usage: consumo do Azure Databricks em Unidades do Databricks (DBUs) para modelos fornecidos pelo Azure Databricks. -
system.billing.list_prices: preços listados para converter DBUs em dólares. -
system.ai_gateway.usage: uso de solicitações e de tokens para cada solicitação. -
system.ai_gateway.external_model_spend: custo estimado em USD para modelos de provedores externos.
Prerequisites
- Um ou mais serviços de modelo do Unity Gateway com tráfego. Veja Criar um serviço de modelo personalizado .
- A tabela do sistema de uso faturável está habilitada para sua conta. Consulte Habilitar as tabelas do sistema.
- Acesso às tabelas do sistema listadas acima, que requerem por padrão papéis de administrador de conta e metastore. Veja Conceder acesso às tabelas do sistema.
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.
- Na interface do workspace, vá para AI Gateway e abra o serviço de modelos.
- 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.