User Guide
This guide walks through the workflows that make up day-to-day work in Metrum Insights. Each section is task-oriented (e.g. "how do I run a benchmark", "how do I evaluate quality with KYAI") and links to the Feature Reference for parameter-level detail.
If you haven't run anything yet, do the Quickstart first. It gets you to a completed benchmark in 15 minutes. This guide assumes you've made it that far.
Sections:
- Running benchmarks
- Reading results on the Benchmarks page
- Understanding key metrics
- KYAI - qualitative evaluation
- ASR benchmarking
- VLM benchmarking
- Bring Your Own Endpoint or Workload
- Server management
- Pre- and post-run validation
- Email notifications
- Telemetry
- Leaderboard
Running benchmarks
The core unit of work is a project containing one or more workloads. A workload describes what to benchmark (model + framework + scenario matrix); the project organizes them and produces runs when executed.
Single-workload runs (the Quickstart path)
The simplest path is a project with one workload, executed against one server. The Quickstart covers this end-to-end. The shorthand:
- Projects -> New Project.
- Fill in project name + visibility (the form default in the live UI is
Organization). - Configure one workload card (Model, Framework, Version, Concurrency chips, ISL chips, OSL chips, Requests per scenario, Streaming).
- Pick a server.
- Save and Execute.
Save and Execute is only available when there's exactly one workload and a server is selected. Multi-workload projects save as drafts via Save Project and execute via a separate flow ~ see below.
Multi-workload projects
Use multi-workload projects when you want to compare several related configurations as a single deliverable (e.g. "Llama 70B on vLLM, SGLang, and TRT-LLM, at three concurrencies each").
- Projects -> New Project.
- Add the first workload card.
- Click Add Workload to add more cards. Each card has its own model, framework, scenario matrix, and (optionally) server. Each card also offers Add Benchmark and Add KYAI Run buttons for adding additional benchmark or quality-evaluation steps.
- Click Save Project (not "Save and Execute"). The project is saved as a draft.
- From the project detail page, trigger runs per workload.
Multi-workload projects are useful for keeping related work together ~ every run from the project lands under the same Runs tab, and the Benchmarks page can filter to "this project" for cross-workload comparison.
Scenario matrices
Within a workload, concurrency, ISL, and OSL chips multiply out:
| Concurrency | ISL | OSL | Scenarios |
|---|---|---|---|
1 | 512 | 256 | 1 |
1, 8, 32 | 512 | 256 | 3 |
1, 8, 32 | 512, 2048 | 256 | 6 |
1, 8, 32 | 512, 2048 | 256, 512 | 12 |
Each scenario becomes one job in the run, named c<concurrency>-isl<isl>-osl<osl>. A 12-scenario run produces 12 rows in the Jobs table, run sequentially on the selected server. Start small ~ running a 24-scenario run on a 70B model can take an hour.
Available chip values in the workload card today are: concurrency 1, 4, 8, 16, 32, 64, 128; ISL 128, 256, 512, 1024, 2048; OSL 64, 128, 256, 512.
Picking a framework
| Framework | Best for |
|---|---|
vllm | General-purpose; widest model coverage; most portable |
sglang | High-throughput serving with structured output |
trt-llm | NVIDIA-only; highest peak throughput on H100/H200/B200 |
Defaults: start with vLLM. Add SGLang and TRT-LLM when comparing peak performance. Other framework codes (tgi, llama-cpp, ollama, dynamo, openai) are also registered in the catalog ~ see Feature Reference - Other registered frameworks for the support level of each.
Picking a quantization
| Quantization | Quality impact | Throughput / memory impact | Typical use |
|---|---|---|---|
fp16 | Baseline | Baseline | Reference baseline |
bf16 | ~identical to fp16 | Same | When hardware prefers bf16 |
fp8 | Small | ~1.7x throughput, ~0.5x memory | Production default on H100+ |
int8 | Noticeable | ~2x throughput, ~0.5x memory | Cost-optimized deployments |
awq/gptq | Small to moderate | ~3x throughput, ~0.25x memory | Memory-constrained scenarios |
If quality matters as much as throughput, pair quantization comparison with a KYAI evaluation on the same endpoints to catch quality regressions.
Engine arguments (advanced)
Most users don't touch these ~ defaults are sane. When you do need to, the most common changes:
max_num_batched_tokens~ if you see throughput plateau early on vLLM, raising this from the default usually helps. SeeFeature Reference -> vLLMfor full parameters.gpu_memory_utilization~ lower it (e.g.0.85) if the server is shared with other workloads.enforce_eager~ settrueonly for debugging; it disables CUDA graphs and tanks throughput.
Reusable engine-args templates are managed via the planned Settings -> Engine args templates Admin panel (not yet exposed in the live UI; managed via API today).
Reading results on the Benchmarks page
The Benchmarks page (/benchmarks) is the unified results explorer. The page subtitle reads "Full results across all benchmark runs. Filter, compare, and analyse performance." (The marketing name "Pulse" appears in some legacy docs; the live UI surface is named Benchmarks.)
The filter bar
Above the results table. The live UI exposes a Filters dropdown panel and a My runs toggle pill. The panel surfaces the standard slicing dimensions:
- Status: completed ~ exclude in-progress and failed jobs.
- My runs ~ toggle on when you just want yours.
- Model + Framework ~ for cross-comparison studies.
- Date range ~ recent only, or a specific period.
Filter state is preserved as you navigate; deep-link to a filtered view via the URL.
The results table
Paginated, sortable. Click any row to expand its detailed metrics.
Columns you'll use most:
- Job name ~ your scenario identifier (e.g.
c8-isl512-osl256). - Model + Framework + Quant ~ the workload config.
- Throughput ~ tokens/sec.
- TTFT P50 / P99 ~ Time To First Token, median and tail.
- TPOT ~ Time Per Output Token, steady-state generation speed.
- Status ~ completed, failed, etc.
The chart panel
Below the table. The live chart sub-tabs are Model, Framework, Quantization, Concurrency, Cost, and Hardware:
- Model ~ same framework, vary model. Useful for picking a model for a use case.
- Framework ~ same model, vary framework. Useful for picking a backend.
- Quantization ~ same model + framework, vary quantization. Useful for quality-vs-throughput tradeoffs.
- Concurrency ~ throughput and latency as concurrency rises. Finds the saturation point.
- Cost ~ tokens per dollar and tokens per hour, when cost data is available.
- Hardware ~ GPU power, util, memory, CPU, RAM. Diagnoses underutilized hardware.
Exporting
CSV export of the filtered view is planned ~ the explicit Export -> CSV button is not yet exposed in v4.0. Use the API to pull the filtered set today (see the API Reference).
Pagination notes
The Benchmarks page uses range-based pagination ~ page jumps stay fast even on large result sets. The page indicator shows "X-Y of Z" where Z is the total filtered count.
Understanding key metrics
Four metrics carry most of the signal. The rest are usually breakdowns or telemetry.
Throughput (tokens/sec)
Total output tokens generated per second across all concurrent requests. Headline number for benchmarking.
- Scales up with concurrency until the GPU saturates, then plateaus.
- Scales up with smaller models or aggressive quantization.
- Scales down with longer OSL (more steady-state generation), and slightly down with longer ISL (more prefill work).
TTFT (Time To First Token)
Wall-clock from request arrival to the first output token returned. Captures prefill + queueing latency.
- TTFT P50 ~ typical user experience.
- TTFT P99 ~ tail latency. Often more important than P50 for SLAs.
Grows with concurrency (queueing) and ISL (prefill work).
TPOT (Time Per Output Token)
Average time between consecutive output tokens, after the first one. Captures steady-state generation speed.
- Grows mildly with concurrency until saturation.
- Roughly model-size-bound ~ a 70B model has higher TPOT than a 7B model on the same hardware.
A user-perceived "tokens per second per request" is roughly 1 / TPOT (in seconds).
Latency percentiles
The Benchmarks page reports P50, P90, and P99 for both TTFT and TPOT. The shape across percentiles tells you about tail behavior:
- P50 ~ P99 ~ healthy, well-batched.
- P99 >> P50 ~ queueing or jitter; raise capacity or lower concurrency.
GPU utilization
From telemetry. Healthy benchmarks push utilization above 80% at the higher concurrency levels. Persistent <50% utilization at high concurrency usually means the workload is CPU-bound, network-bound, or memory-bandwidth-bound ~ the Benchmarks page Hardware chart tab will tell you which.
KYAI
KYAI ("Know Your AI") evaluates inference quality, distinct from performance which is what the rest of the platform measures.
UI status in v4.0: KYAI execution is wired through the Add KYAI Run action on each project workload card and the underlying RPCs. The dedicated
KYAI -> ...navigation surface (Endpoints & Judges, Prompt Sets, Results, Leaderboard) referenced below is being staged and is not yet exposed in the live sidebar ~ those panels are managed via the API today and will land in subsequent releases.
Concepts
Three objects:
- Candidate endpoint ~ what you're evaluating. Either a deployed inference server registered in Metrum, or a BYOE endpoint.
- Judge config ~ the LLM that scores candidate outputs, plus the scoring method.
- Prompt set ~ instructions + (optional) ground truths. Built-in or user-uploaded.
A KYAI run pairs one candidate x one judge x one prompt set and produces a row per (instruction, response, score, reasoning).
Running an evaluation
- From a project workload card, click Add KYAI Run to attach a quality-evaluation step to the workload. (The standalone
KYAI -> Overview -> New Evaluationflow is planned but not yet exposed in the live UI.) - Provide the candidate endpoint, judge config, and prompt set ~ either pick from existing API-managed records or create new ones via the API. Field reference is in Feature Reference - KYAI.
- Submit. The run progresses through generation (Phase 1) and judging (Phase 2).
Reading results
The KYAI Results Explorer (planned KYAI -> Results, API only in v4.0) supports the following filters:
- Job IDs ~ narrow to one or a few evaluations.
- Score range ~ find the worst (e.g.
score <= 3) or best (e.g.score >= 9) outputs. - Candidate endpoint ~ across all evaluations of one endpoint.
- Judge config ~ to compare how different judges rate the same outputs.
Each row shows the instruction, the candidate's actual response, the ground truth (if any), the score, the judge's reasoning, and the configuration that produced it. Until the dedicated UI lands, query v_kyai_outputs directly via the API.
What to look for
- Mean score ~ overall quality. Compare across candidate endpoints.
- Score distribution ~ a candidate with mean 7 but bimodal at 4 and 10 is unreliable.
- Low-score reasoning ~ read the judge's explanations on the worst outputs. Patterns often emerge (refuses to answer, ignores instructions, hallucinates facts).
- Disagreement across judges ~ running the same candidate through two judges with different scoring methods checks judge robustness.
Cost note
Judges are LLMs ~ they consume tokens. A KYAI run on a 1,000-prompt set with a 70B judge can run hundreds of thousands of judge tokens. Metering tracks this; quotas can cap it. Start with smaller prompt sets when calibrating.
Leaderboard
v_kyai_leaderboard ranks runs by mean score, filtered by visibility. Public runs appear platform-wide; Organization runs in your workspace; Private to you only. The dedicated KYAI leaderboard surface is planned and not yet exposed in the live UI.
ASR benchmarking
Speech-to-text models. Same scenario-matrix model as LLM, with the ISL axis replaced by audio duration buckets.
UI status in v4.0: ASR execution is wired through the API. The dedicated ASR launch surface in the workload card (audio dataset picker, audio-duration bucket controls, sample-length controls) is being staged and not yet exposed in the live UI; submit ASR runs via the API today.
Configuring a workload
- Projects -> New Project -> Add Workload.
- Pick an ASR model (e.g.
whisper-large-v3). - Pick a framework that supports it (vLLM or SGLang where available ~ see Hardware Compatibility - ASR).
- Set audio duration buckets ~
xs,s,m,l,xl. Bucket -> typical duration range in the Feature Reference. - Pick an ASR dataset snapshot. Built-in: LibriSpeech, AMI, etc. Custom: see BYOW.
- Run as normal.
ASR-specific metrics
- RTF (Real-Time Factor) ~ wall-clock seconds per audio second.
RTF < 1means faster than real-time. - WER (Word Error Rate) ~ quality, vs. ground truth if the dataset has transcripts.
- TTFT ~ time to first transcribed word.
WER is reported when the dataset includes ground truth; absent otherwise.
VLM benchmarking
Image-to-text (vision-language) models. Same scenario-matrix model as LLM, with image-related parameters added.
UI status in v4.0: VLM execution is wired through the API. The dedicated VLM launch surface in the workload card (image dataset picker,
image_resolutionselector,images_per_requestcontrol) is being staged and not yet exposed in the live UI; submit VLM runs via the API today.
Configuring a workload
- Projects -> New Project -> Add Workload.
- Pick a VLM (e.g.
llava-1.6-mistral-7b,qwen2-vl-7b). - Set ISL (text portion of prompt), OSL, concurrency as normal.
- Set image resolution (
low,medium,high) and images per request (typically 1). - Run as normal.
VLM-specific metrics
- Image preprocessing time ~ included in TTFT. CPU-bound on most paths.
The Benchmarks page Hardware chart tab (CPU view) breaks out the preprocessing contribution. If CPU utilization is high while GPU is low, you're preprocessing-bound, not inference-bound ~ try a server with a higher core count or pipeline preprocessing.
Bring Your Own
Two related capabilities.
BYOE - Bring Your Own Endpoint
Point Metrum at any OpenAI-compatible inference endpoint ~ your own deployment, a third-party API, a model served from anywhere.
- Register the endpoint via the API today (the dedicated
KYAI -> Endpoints & Judges -> Add Candidate Endpointpanel is planned and not yet exposed in the live UI), or Projects -> New Project and set the workload target to BYOE. - Provide endpoint URL, model name, optional auth, max concurrent requests, and retry settings.
- Submit benchmark or KYAI runs against it.
Caveats:
- No telemetry. GPU power, utilization, and memory will be empty ~ Metrum can't see your endpoint's hardware.
- TTFT timeout. Default 60 seconds; configurable per endpoint up to 600s for cold-start testing.
- Network is in the path. TTFT and TPOT include network round-trip time. This is realistic for production, but worth noting if you're comparing BYOE to a local benchmark.
BYOW - Bring Your Own Workload
Supply your own prompt dataset.
For benchmarking: upload a CSV or JSONL file with one prompt per row via the planned Settings -> Prompt libraries panel (API only in v4.0). Optional expected_output_tokens column overrides the workload's OSL per-prompt. Reference the library from a workload via its prompt_library_code.
For KYAI: upload via the planned KYAI -> Prompt Sets -> Upload panel (API only in v4.0). Same format, plus an optional ground_truth column used by the judge.
When to use BYOW:
- Production traffic shape matters and the built-in datasets don't match it.
- You're benchmarking a domain-specific model on its domain (medical, legal, code).
- You're validating that a deployment handles your exact prompts before going live.
Server management
Adding a server
If you have hardware access:
- Hardware -> Add Server.
- In the modal, pick a Server Configuration preset (e.g.
local-dummy), then fill in Hostname, optional IP Address, optional Bootstrap Script Filename (defaultagent-bootstrap.sh), and a Bootstrap Comment. - Click Generate Bootstrap Script.
- Run the displayed bootstrap script on the GPU host as a sudoer.
The server appears in the Hardware table within ~30 seconds.
Hosted v4.0 note: some hosted Metrum deployments return
404 PGRST202fromPOSThttps://<your-control-plane>/api/rpc/create_server_config_instancewhen Generate Bootstrap Script runs. If your deployment shows this error, register servers via the API or via the bootstrap helper described in the Admin Guide.
For the full operational walkthrough (including troubleshooting agent connectivity) see Admin Guide - Registering a server.
Server states
| State | Meaning |
|---|---|
online | Agent has reported a heartbeat within the last 2 minutes |
stale | No heartbeat in 2-10 minutes |
offline | No heartbeat in 10+ minutes |
requires_reonboarding | Registered under v3.x; needs the v4 bootstrap run |
Jobs queued for a stale or offline server remain queued until it returns. Use the planned Monitoring -> Cancel Stale Jobs action (currently API only) if you need to clear them.
Cloud-provisioned servers
If your workspace has cloud credentials configured (see Admin Guide - Cloud provisioning), you can target cloud SKUs directly in a workload ~ Metrum provisions an instance on demand, runs the job, and tears the instance down after the idle timeout.
Pre- and post-run validation
Every run passes through a validator before the first job starts (pre-run) and after the last completes (post-run).
Pre-run failures
If pre-run validation fails, the run never starts and you see a structured error on the Run Detail page. The validator gives you a specific suggestion ~ not just "validation failed" but, for example, "model requires 140 GB at fp16; selected server has 80 GB; try quantization_code=fp8 or a server with >= 160 GB GPU memory."
Common pre-run failures:
- Insufficient GPU memory ~ use a smaller quantization or a different server.
- Framework version not supported on selected hardware ~ pick a different version from the dropdown.
- HF token missing ~ for gated models. Add via the planned Profile -> HF tokens panel (API only in v4.0).
- Server offline ~ pick a different server or wait for heartbeat to resume.
Post-run warnings
Post-run validation flags suspect data but doesn't block the run:
- All-zero latencies ~ usually means the framework didn't actually serve requests.
- Implausible output token counts ~ way under or over the configured OSL.
- Missing telemetry ~ the agent didn't capture metrics for one or more jobs.
A "results may be unreliable" badge appears on the Run Detail page if any post-run check fails. The data is still on the Benchmarks page ~ just treat it with extra skepticism.
Strict vs. warn mode
Admins can configure validation severity per-workspace. Default is strict (fail-fast on pre-run issues). See Feature Reference - Pre/Post-run validation.
Email notifications
Per-user notification preferences are planned via a Profile -> Notifications panel (not yet exposed in the live UI in v4.0). The intended defaults are:
| Notification | Default | Notes |
|---|---|---|
| Run completed | On | One email per run, regardless of job count |
| Run failed | On | Includes a link to the Run Detail page |
| Weekly summary | Off | Aggregate of your activity over the past week |
| Quota approaching | Admin only | Sent to workspace admins at 80% and 95% of quota |
Notifications are user-scoped ~ even if a teammate triggers a run, only people who opted in get the email.
Telemetry
Hardware telemetry - what was happening on the GPU server while a job ran.
Accessing
Telemetry in the sidebar. The left panel is a job selector; the main panel renders charts for the selected job.
What's captured
| Metric | Source |
|---|---|
| GPU power (W) | NVIDIA NVML / ROCm SMI / TPU runtime |
| GPU utilization (%) | Same |
| GPU memory (%) | Same |
| CPU utilization (%) | OS-level |
| System RAM (%) | OS-level |
| Per-GPU breakdown | When multiple GPUs per server |
TPU jobs use a parallel TPU-specific telemetry path; surfaced via v_tpu_telemetry_job_summary.
What to look for
- GPU power flat at TDP ~ fully utilizing the hardware. Good for benchmark runs.
- GPU power oscillating ~ likely batching dynamics; usually fine.
- GPU utilization
< 50%at high concurrency ~ workload is bottlenecked elsewhere (CPU preprocessing, network, memory bandwidth). - High CPU during VLM jobs ~ image preprocessing path. Try a higher-core-count server.
Telemetry summary card
For a quick at-a-glance, the right side of the panel summarizes mean / peak / min for each metric over the job's duration. Useful when you want the headline number without scrubbing a chart.
Leaderboard
Ranked LLM throughput across all visible benchmark runs.
Accessing
Leaderboard in the sidebar.
What it shows
The live /leaderboard view exposes a tab strip for Throughput, Cost Efficiency, Quality, and Sustainability, plus a hero card for the current top performer and a paginated ranked list. Use the filter controls to slice by model, framework, hardware, and quantization.
Visibility
Leaderboard rows are subject to the same visibility rules as the underlying runs:
- Public runs appear platform-wide.
- Organization runs appear within your workspace's view.
- Private runs appear only to the owner.
KYAI leaderboard
The KYAI leaderboard surfaces are planned (KYAI -> Leaderboard and the Quality tab on /leaderboard); they rank by mean quality score rather than throughput. Underlying data is available today via v_kyai_leaderboard through the API.
See also
- Quickstart ~ get your first benchmark running in under 15 minutes.
- Feature Reference ~ per-feature parameter detail.
- API Reference ~ programmatic access.
- Sizer Usage Guide ~ get a hardware recommendation before deploying.
- Hardware Compatibility ~ what's supported where.
- Admin Guide ~ for platform admins and operators.