AI FinOps: модели, GPU и расходы

Раздел AI FinOps в SaaS связывает расходы текстовых API-моделей и выделенных физических GPU с командами, продуктами и запросами. Общий облачный биллинг остаётся отдельным источником.

Подключение по шагам

  1. Откройте AI FinOps → Подключения и создайте источник для приложения, команды и продукта. Настройки доступны начиная с роли operator.
  2. Сохраните выданный токен в серверном хранилище секретов. Он отправляет данные только своего подключения и не даёт доступа к отчётам.
  3. Во вкладке Модели зарегистрируйте фактический model ID. Укажите валюту и тариф API либо существующее GPU-размещение.
  4. Подключите отправку usage из серверного приложения. Модель продолжает вызываться вашим приложением; ключ провайдера Oopps.ai не нужен.
  5. Проверьте последнее событие в Запросах, наличие тарифа и расходы за выбранный период.

Текстовые API-модели

Стоимость считается по входным, кэшированным и выходным токенам и тарифу, действующему на момент начала запроса. Входные токены включают кэшированные: кэш вычитается из обычного входа, чтобы избежать двойного начисления. Валюты показываются отдельно.

Один факт — одна фактическая попытка вызова. Повторная доставка того же события с тем же event_key безопасна; другое тело с прежним ключом возвращает 409. Не отправляйте один запрос одновременно из gateway и приложения. Непрозрачные повторы SDK нужно учитывать отдельно.

Неизвестная стоимость

При отсутствии тарифа usage принимается, но стоимость остаётся неизвестной. Отсутствующие токены и неполные события нельзя заменять нулями. Для streaming нужен финальный chunk с usage.

Python-клиент и очередь

Скачайте клиент как oopps_ai_client.py. Он использует стандартную библиотеку Python и сохраняет в SQLite только метаданные usage, без текстов промптов и ответов. Сеть вызывается через отдельный flush, вне критического пути inference.

from datetime import datetime, timezone
from oopps_ai_client import Client
import os

meter = Client("https://app.oopps.ai", os.environ["OOPPS_AI_TOKEN"], "usage.sqlite3")
started = datetime.now(timezone.utc)
# completion = ваш_клиент.chat.completions.create(...)
meter.record_chat(completion, started_at=started, operation_id="document-123")
# meter.flush() запускайте отдельной фоновой задачей.

Очередь храните на постоянном диске, одну очередь используйте для одного подключения. Контролируйте ошибки записи и возраст очереди. При 429 пакет остаётся в ней. Лимит приёма — 500 событий / 2 MiB за запрос и 120 пакетов в минуту на подключение.

Формат событий, команды сборщика и обработка ошибок: полная инструкция интеграции.

Выделенные GPU

Во вкладке GPU-размещения укажите владельца мощности, ставку GPU в час, сопутствующую стоимость в час, валюту и профиль распределения. Стоимость интервала определяется фактическими UUID GPU и длительностью. Для нового тарифа, железа или профиля создайте новое размещение; прошлые данные сохраняются.

Стоимость делится на запросы, долю готовности и неизвестный остаток. Для распределения по запросам доверенный runtime-сборщик должен подтвердить полноту usage за окно. Сборщик nvidia-smi видит только железо и отправляет usage_complete=false: стоимость пула доступна, стоимость отдельного запроса не считается подтверждённой.

Распределение по весам токенов и пересечению временных окон — оценка, а не измеренное эксклюзивное GPU-время запроса. Профиль требует проверки на вашей нагрузке. Не прибавляйте стоимость GPU из AI-раздела повторно к облачному счёту.

Бюджеты и сверка со счётом

Бюджеты относятся к текущему календарному месяцу UTC и показывают превышение в интерфейсе. Они не блокируют inference и не отправляют внешние уведомления автоматически. Для выгрузки по командам, продуктам и валютам доступен CSV.

Сверьте оценку API с фактическим счётом провайдера. В подключении добавьте финансовую корректировку на разницу, указав документ, дату, валюту и причину. Не добавляйте весь счёт поверх уже учтённого usage.

Если данные не появились

СитуацияЧто проверить
Нет событийОтправку usage, запуск flush, доступность SaaS и активность подключения.
422 для моделиСоответствие фактического model ID записи в каталоге; события остаются в очереди до настройки.
Неизвестная ценаВалюту, тариф и дату его действия.
Нет стоимости GPU-запросаПолноту окна, события serving и подтверждение runtime-сборщика. Не выставляйте полноту без фактического основания.

Границы текущей версии

Поддерживаются текстовые Chat-usage и выделенные физические GPU. MIG, time-slicing, мультимодальные единицы оплаты, автоматический импорт счетов, автодискавери внешним cluster agent и управление масштабированием не входят в этот сценарий. Проверка с реальным GPU и serving выполняется в контуре клиента. Доступность AI FinOps в Self-Hosted Edition уточняйте отдельно.