Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste tutorial, analisa o que está a impulsionar o gasto do seu modelo de fundação com o Unity AI Gateway. Atribuis custo por utilizador nos serviços modelo que governas, depois adicionas etiquetas para acompanhar o gasto por equipa, projeto ou caso de uso usando tabelas do sistema:
-
system.billing.usage: consumo do Azure Databricks em unidades Databricks (DBUs) dos modelos fornecidos pelo Azure Databricks. -
system.billing.list_prices: listar preços para converter DBUs em dólares. -
system.ai_gateway.usage: pedido e uso de tokens para cada pedido. -
system.ai_gateway.external_model_spend: custo estimado em USD para modelos de fornecedores externos.
Pré-requisitos
- Um ou mais serviços do modelo Unity AI Gateway com tráfego. Veja Criar e gerir APIs modelo (serviços modelo).
- A tabela de sistema de utilização faturável ativada para a sua conta. Consulte Ativar tabelas do sistema.
- Acesso às tabelas de sistema listadas acima, que requerem por defeito funções de administrador de conta e metastore. Ver Conceder acesso às tabelas do sistema.
Note
As estimativas em dólares neste tutorial baseiam-se no preço de lista. Excluem descontos negociados e créditos de faturação. Use-os para atribuição e análise de tendências, e o seu extrato de faturação para reconciliação.
Passo 1: Veja quais os utilizadores que estão a impulsionar a despesa
Sugestão
O Código Génio (modo Agente) pode fazer isto por ti. 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.
Vá a AI Gateway > Govern > Painel de utilização >Análise de custos, que detalha os gastos por modelo fornecido pela Databricks ou por fornecedor externo, endpoint e utilizador, sem ter de escrever SQL. O gráfico Top Users by Cost (USD) em Cost Breakdown classifica os maiores gastadores.
Alternativamente, consulta diretamente as tabelas do sistema para ver quem está a consumir mais e onde. A tabela que consultas depende do tipo de modelo:
Modelos fornecidos por Databricks
Consulta system.billing.usage e junta-te system.billing.list_prices para converter a utilização da DBU em dólares. O identity_metadata.run_by campo identifica o principal responsável que emitiu cada pedido:
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 pedidos encaminhados para fornecedores externos através de serviços de fornecedores-modelo, o Azure Databricks estima o custo em USD a partir do uso de tokens e dos preços publicados pelo fornecedor, capturados em system.ai_gateway.external_model_spend. Esta consulta devolve a mesma divisão que a consulta fornecida pelo Azure Databricks para serviços do fornecedor de modelos:
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 utilização e despesa por equipa ou projeto
Despesa por utilizador indica-lhe quem, mas não a que equipa ou projeto. Para atribuir o uso de tokens a uma equipa ou projeto, identifique o seu tráfego com base em como os seus serviços de modelo se mapeiam para equipas ou projetos:
- Etiquetas de serviço (endpoint): quando cada equipa ou projeto tem o seu próprio serviço modelo. A etiqueta aplica-se a todos os pedidos encaminhados através desse serviço modelo, por isso defines uma vez.
- Etiquetas de pedido: quando muitas equipas ou projetos partilham o mesmo modelo de serviço. O chamador define a etiqueta por pedido, por isso atribuis o uso dentro de um serviço partilhado.
Etiquetas de serviço
Adicione uma etiqueta como team ou project ao serviço modelo. Cada pedido encaminhado por lá herda a etiqueta.
- Na interface do espaço de trabalho, vai ao AI Gateway e abre o serviço de modelo.
- Na página de Visão Geral do serviço modelo, na secção Etiquetas , adicione uma etiqueta como
team=ml-platform.
As 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 gerir APIs de modelo (serviços modelo).
Solicitar etiquetas
Associe uma etiqueta, como project, a pedidos individuais com o cabeçalho HTTP Databricks-Ai-Gateway-Request-Tags, um objeto JSON que associa chaves de cadeias de caracteres a valores de cadeias de caracteres:
Databricks-Ai-Gateway-Request-Tags: {"project": "chatbot", "team": "ml-platform"}
Os identificadores do pedido aparecem no campo request_tags em system.ai_gateway.usage. Para exemplos que definem o cabeçalho com o SDK OpenAI, Anthropic SDK e API REST, veja Pedidos de etiquetas para rastreio de uso.
Note
Qual a etiqueta a usar para atribuição de custos depende do modelo:
-
modelos fornecidos pelo Azure Databricks: utilize etiquetas de serviço. Apenas as etiquetas de serviço propagam-se para
system.billing.usage. -
Modelos de fornecedores externos: utilizam etiquetas de serviço ou de pedido. Ambos são propagados para
system.ai_gateway.external_model_spend, que regista estimativas de custos dos modelos externos.
Passo 3: Analisar a utilização por equipa ou projeto
Sugestão
O Código Génio (modo Agente) pode fazer isto por ti. 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 etiquetas implementadas, agrega o uso em system.ai_gateway.usage, que captura métricas de pedidos e tokens para cada pedido encaminhado para modelos fornecidos pelo Azure Databricks e fornecedores externos. Agrupar por endpoint_tags['team'] para etiquetas de serviço, ou por request_tags['project'] para etiquetas de pedido:
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;
Solicitar etiquetas
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 uma das falhas sem SQL, utilize os filtros de etiquetas na página de análise de custos.
Passo 4: Analisar o investimento em dólares por equipa ou projeto
Sugestão
O Código Génio (modo Agente) pode fazer isto por ti. 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 implementadas, atribua o gasto em USD a uma equipa ou projeto. Para agrupar custos por etiqueta sem escrever SQL, vá a AI Gateway > Govern > Painel de Utilização >Análise de Custos e utilize a secção Análise de Custos por Etiqueta. Filtre por etiqueta de endpoint ou tag de pedido para ver Custo por Grupos de Etiquetas de Endpoint e Custo Estimado por Grupos de Etiquetas de Pedido.
Para atribuir despesa com SQL, a tabela que consultas depende do tipo de modelo:
Modelos fornecidos por Databricks
As etiquetas de serviço são propagadas para o campo custom_tags em system.billing.usage, pelo que podes atribuir a despesa a preço de tabela em USD a uma equipa da mesma forma que ordenaste os utilizadores no Passo 1. Junte-se a system.billing.list_prices para converter a utilização de DBU para 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á regista o custo estimado em USD e inclui tanto as tags de serviço como as tags de pedido em custom_tags, pelo que pode agrupar por custom_tags.request_tags para atribuir custos pelos vários serviços por projeto ou equipa:
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: Analisar o custo por token por equipa ou projeto
Sugestão
O Código Génio (modo Agente) pode fazer isto por ti. 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 mostra-lhe onde foi gasto o orçamento, mas não lhe diz se está a pagar um preço justo por isso. Monitorizar o custo da inferência como custo por 1 milhão de tokens permite-lhe comparar modelos de destino, detetar regressões após uma alteração de encaminhamento ou justificar mover tráfego para um modelo mais barato. Associe a tabela de custos a system.ai_gateway.usage com base no serviço do modelo, no modelo de destino e na equipa. Ambos os separadores agrupam por etiqueta de serviço team, por isso os resultados ficam alinhados com o Passo 3:
Modelos fornecidos por Databricks
Agrega o gasto de preço de lista e os tokens ao longo da janela completa, depois junta-te ao serviço modelo, modelo de destino e equipa. Junte-se a system.billing.list_prices para converter a utilização de DBU para 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
Agrega gastos e tokens ao longo da janela completa, depois junta-te ao serviço modelo de fornecedor, modelo de destino e equipa. Ambas as tabelas cobrem os mesmos pedidos, por isso um total ao nível do 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 estiveres a usar etiquetas de solicitação para atribuição à equipa, substitui custom_tags.endpoint_tags['team'] por custom_tags.request_tags['team'] e endpoint_tags['team'] por request_tags['team'] na agregação de tokens.
Note
O Unity AI Gateway não regista a utilização de tokens para respostas não streaming, não embedding, superiores a 1 MiB, por isso o custo por token pode ser elevado onde essas respostas são comuns. Compare as taxas dentro da mesma carga de trabalho, em vez de as comparar com as de outras cargas de trabalho não relacionadas.