Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом уроке вы анализируете, что определяет расходы вашей базовой модели с помощью Unity Gateway. Вы приписываете стоимость по пользователям в модельных сервисах, которыми управляете, затем добавляете теги для отслеживания расходов по командам, проектам или сценариям использования с помощью системных таблиц:
-
system.billing.usage: Azure Databricks потребление в единицах Databricks (DBU) для моделей, предоставленных Azure Databricks. -
system.billing.list_prices: прейскурантные цены для перевода DBU в доллары. -
system.ai_gateway.usage: запрос и использование токена для каждого запроса. -
system.ai_gateway.external_model_spend: оценочная стоимость в долларах США для моделей внешних поставщиков.
Prerequisites
- Одна или несколько сервисов модели Unity Gateway с трафиком. См. Создание сервиса пользовательской модели .
- Системная таблица платного использования, включенная для вашей учетной записи. См. Включите системные таблицы.
- Доступ к системным таблицам, перечисленным выше, где по умолчанию требуется как аккаунт, так и администратор метамагазина. См . раздел "Предоставление доступа к системным таблицам".
Note
Оценки в долларах в этом руководстве основаны на цене по прейскуранту. Они исключают согласованные скидки и кредиты по счетам. Используйте их для атрибуции и анализа тенденций, а выписку по счету — для сверки.
Шаг 1: Посмотрите, какие пользователи формируют расходы
Tip
Код Genie (режим агента) может сделать это для вас. Попробуйте следующий пример запроса:
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.
Перейдите в AI Gateway > Govern > Панель мониторинга использования >Анализ затрат, где затраты распределяются по моделям, предоставляемым Databricks или внешними поставщиками, конечным точкам и пользователям без необходимости писать SQL-запросы. Диаграмма «Лучшие пользователи по стоимости (USD)» в разделе «Разбивка затрат» показывает рейтинг пользователей с наибольшими расходами.
Или же напрямую запросите системные таблицы, чтобы узнать, кто потребляет больше и где. Таблица, которую вы запрашиваете, зависит от типа модели:
Модели, предоставленные Databricks
Запросите system.billing.usage и объединитесь system.billing.list_prices , чтобы преобразовать использование DBU в доллары. Поле identity_metadata.run_by определяет принципала, который сделал каждый запрос:
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;
Внешние модели
Для запросов, направляемых к внешним провайдерам через сервисы поставщиков моделей, Azure Databricks оценивает стоимость в долларах США на основе использования токена и опубликованных цен провайдера, скорректированных любым множителем цен, настроенным на сервисе модельного провайдера. Этот запрос возвращает ту же разбивку, что и запрос, предоставленный Azure Databricks для сервисов провайдера моделей:
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;
Шаг 2: Настройте отслеживание использования и расходов по командам или проектам
Расходы по пользователям показывают, кто, но не к какой команде или проекту. Чтобы приписать использование токенов команде или проекту, маркируйте трафик в зависимости от того, как ваши сервисы модели соотносятся с командами или проектами:
- Сервисные (endpoint) теги: когда у каждой команды или проекта есть собственная модельная служба. Тег применяется к каждому запросу, направленному через эту модельную службу, поэтому вы устанавливаете его один раз.
- Запросные теги: когда многие команды или проекты используют одну и ту же модельную службу. Вызывающая сторона задаёт тег в каждом запросе, поэтому вы относите использование в рамках общего сервиса.
Теги сервиса
Добавьте тег, например team или project в сервис модели. Каждый запрос, направленный через него, наследует тег.
- В интерфейсе рабочего пространства зайдите в AI Gateway и откройте сервис модели.
- На странице сервиса модели Обзор в разделе Теги добавьте такой тег, как
team=ml-platform.
Сервисные метки появляются в поле endpoint_tags в system.ai_gateway.usage и передаются в поле custom_tags в system.billing.usage. Для подробностей о создании и настройке сервисов моделей см. раздел «Создание пользовательского сервиса модели ».
Теги запросов
Прикрепите тег, например project , к отдельным запросам с Databricks-Ai-Gateway-Request-Tags HTTP-заголовком, JSON-объект, сопоставляющий строковые ключи с строковыми значениями:
Databricks-Ai-Gateway-Request-Tags: {"project": "chatbot", "team": "ml-platform"}
Теги запросов request_tags появляются в поле в system.ai_gateway.usage. Для примеров, которые устанавливают заголовок с помощью OpenAI SDK, Anthropic SDK и REST API, см. раздел Request tagging.
Note
Какой тег использовать для атрибуции стоимости зависит от модели:
-
Модели, предоставляемые Azure Databricks: используйте теги службы. Только сервисные теги распространяются в
system.billing.usage. -
Модели внешних провайдеров: используйте сервисные или запросные теги. Оба распространяются до
system.ai_gateway.external_model_spend, что фиксирует оценки расходов внешней модели.
Шаг 3: Проанализируйте использование по команде или проектам
Tip
Код Genie (режим агента) может сделать это для вас. Попробуйте следующий пример запроса:
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.
При наличии тегов в system.ai_gateway.usage собираются сводные данные об использовании, включая метрики запросов и использования токенов для каждого запроса, направляемого к моделям, предоставляемым Azure Databricks, и моделям внешних поставщиков. Группируйте по endpoint_tags['team'] для сервисных тегов или по request_tags['project'] по тегам запроса:
Теги сервиса
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;
Теги запросов
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;
Чтобы изучить любую из разбивок без SQL, используйте фильтры тегов на странице анализа стоимости.
Шаг 4: Проанализируйте потраченные деньги по командам или проектам
Tip
Код Genie (режим агента) может сделать это для вас. Попробуйте следующий пример запроса:
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.
С помощью тегов относите расходы в USD к команде или проекту. Чтобы сгруппировать расходы по тегам, не используя SQL, перейдите в AI Gateway > Govern > Usage Dashboard >Cost Analysis и используйте раздел Анализ затрат по тегам. Отфильтруйте по тегу endpoint или запросу, чтобы увидеть стоимость по группам тегов endpoint и оценочную стоимость по группам запросов.
Чтобы атрибутировать затраты с помощью SQL, какую таблицу запрашивать, зависит от типа модели:
Модели, предоставленные Databricks
Сервисные теги передаются в поле custom_tags в system.billing.usage, поэтому вы можете отнести затраты по прейскурантной цене в долларах США на команду так же, как вы ранжировали пользователей на шаге 1. Присоединяйтесь к system.billing.list_prices, чтобы перевести использование DBU в доллары:
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;
Внешние модели
Для внешних моделейsystem.ai_gateway.external_model_spend уже фиксирует оценочную стоимость в USD и включает как сервисные теги, так и теги запросов в custom_tags, так что можно группировать по custom_tags.request_tags, чтобы распределить расходы между сервисами по проектам или командам:
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;
Шаг 5: Проанализируйте стоимость токена по командам или проектам
Tip
Код Genie (режим агента) может сделать это для вас. Попробуйте следующий пример запроса:
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.
Общие расходы указывают, куда ушел бюджет, но не указывают, платите ли вы за это справедливую цену. Отслеживание затрат на инференс как стоимости 1 млн токенов позволяет сравнивать целевые модели, выявлять регрессии после изменения маршрутизации или обосновать перенос трафика на более дешёвую модель. Присоединяйте таблицу затрат к system.ai_gateway.usage модельному сервису, модели назначения и команде. Обе вкладки группируются по team сервисному тегу, поэтому результаты совпадают с шагом 3:
Модели, предоставленные Databricks
Агрегируйте расходы по списковой цене и токены за всё окно, затем присоединяйтесь к сервису модели, модели назначения и команде. Присоединяйтесь к system.billing.list_prices, чтобы перевести использование DBU в доллары:
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;
Внешние модели
Агрегировать расходы и токены за всё окно, затем присоединиться к сервису поставщика модели, модели назначения и команде. Обе таблицы охватывают одни и те же запросы, поэтому для общего итога на уровне периода не нужен временной ключ в операции JOIN:
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;
Если вы используете теги запроса для отнесения к команде, замените custom_tags.endpoint_tags['team'] на custom_tags.request_tags['team'], а endpoint_tags['team'] на request_tags['team'] в сводке по токенам.
Note
Unity Gateway не учитывает использование токенов для нестриминговых ответов, не относящихся к эмбеддингам, размером более 1 МиБ, поэтому стоимость за токен может отображаться как завышенная там, где такие ответы встречаются часто. Сравнивайте показатели в рамках одной рабочей нагрузки, а не между несвязанными рабочими нагрузками.