Pro Features

LLM и GPU метрики

Детальные LLM-метрики — перцентили ITL/TPOT, оценка стоимости — и расширенный GPU-коллектор nvidia-smi-pro

Обзор

OSS-движок в шаге std/llm@v1 уже измеряет TTFT, tokens/sec и количество токенов на запрос, а секция gpu: снимает состояние GPU хоста во время прогона. Платные агенты добавляют детальный слой поверх тех же потоков:

  • Перцентили ITL/TPOT — inter-token latency (avg/p50/p95/p99) и время на выходной токен для каждого стримингового запроса, вливаются в объект metrics шага как тренды pro_llm_* — попадают в сводку прогона и в пороги наравне со встроенными метриками;
  • Оценка стоимости — стоимость запроса в USD по вашему прайс-листу (агент не содержит встроенных таблиц цен);
  • Агрегаты за прогон — распределения TTFT/total/ITL и суммарная стоимость в разрезе (endpoint, model);
  • GPU-источник nvidia-smi-pro — всё, что снимает OSS-источник nvidia-smi, плюс частоты SM/памяти, причины троттлинга и агрегаты по compute-процессам.
vus: 10
duration: 5m

gpu:
  enabled: true
  source: nvidia-smi-pro   # расширенный pro-коллектор
  interval_ms: 1000

steps:
  - name: chat completions
    use: std/llm@v1
    with:
      url: http://localhost:11434/v1/chat/completions
      model: llama3.1
      prompt: Summarize the plot of Hamlet in three sentences.
      max_tokens: 256

thresholds:
  pro_llm_itl_p95_ms: p95 < 100   # гейт по inter-token latency

На OSS-сборке метрики pro_llm_* просто не появляются, а gpu.source: nvidia-smi-pro один раз предупреждает о неизвестном источнике — сам прогон работает без изменений.

Метрики шага

Каждый успешный запрос std/llm@v1 добавляет в свой объект metrics:

КлючВидЗначение
pro_llm_itl_avg_msтрендСредняя inter-token latency (дельты между чанками; TTFT-интервал исключён)
pro_llm_itl_p50_ms / pro_llm_itl_p95_ms / pro_llm_itl_p99_msтрендПерцентили ITL по чанкам запроса
pro_llm_tpot_msтрендВремя на выходной токен: (total − ttft) / (completion_tokens − 1)
pro_llm_cost_usdсчётчикСтоимость запроса по настроенным ценам

ITL-метрики появляются только у стриминговых запросов с ≥2 чанками; TPOT требует TTFT и ≥2 выходных токенов; стоимость — только когда для модели задана цена. Упавшие запросы метрик не несут, но учитываются в счётчике ошибок агрегатов прогона.

Так как это обычные тренды/счётчики, они работают везде, где работают встроенные llm_*: финальная сводка, --summary-export JSON и гейты thresholds:.

Настройка стоимости

Цены задаёте вы — за 1 млн входных/выходных токенов, в USD; жёстко зашитых таблиц нет. Агент читает их (в порядке приоритета):

  1. PERFSCALE_LLM_PRICES — инлайн-JSON:

    {
      "gpt-4o-mini": { "input_per_1m": 0.15, "output_per_1m": 0.6 },
      "*":           { "input_per_1m": 1.0,  "output_per_1m": 3.0 }
    }
    
  2. PERFSCALE_LLM_PRICES_FILE — путь к файлу с тем же JSON.

"*" — запасная цена для моделей без точной записи. Модель без подходящей цены просто не получает метрику pro_llm_cost_usd; некорректная конфигурация пишет одно предупреждение и отключает метрики стоимости — прогон это не роняет.

Стоимость одного запроса: prompt_tokens / 1M × input_per_1m + completion_tokens / 1M × output_per_1m.

GPU: nvidia-smi-pro

Pro-коллектор снимает стандартные поля (utilization, VRAM, температура, мощность — сводка прогона не меняется) плюс, «плоско» в каждый сэмпл таймсерии:

КлючЗначение
pro_gpu_clocks_sm_mhz / pro_gpu_clocks_mem_mhzТекущие частоты SM / памяти
pro_gpu_throttle_reasonsБитовая маска clocks_event_reasons.active (0 = троттлинга нет)
pro_gpu_process_count / pro_gpu_process_memory_mibCompute-процессы на устройстве (количество / суммарная VRAM, MiB)

Просадка частот рядом с ненулевой маской троттлинга во время фазы нагрузки — прямое свидетельство теплового/энергетического троттлинга локального LLM-сервера, а агрегаты по процессам сразу показывают, не делит ли кто-то ещё GPU с тестируемым сервером.

Запрос compute-процессов (nvidia-smi --query-compute-apps) выполняется на условии best-effort: если он падает (старые драйверы, WSL), строки GPU всё равно приходят — без полей pro_gpu_process_*. Попроцессная utilization через nvidia-smi недоступна (для этого нужен NVML). Встроенный источник nvidia-smi не меняется — nvidia-smi-pro включается только явно.