Skip to main content
The Standalone Agent is in beta. Metric names and labels may change.
The Standalone Agent collects GPU metrics (via DCGM Exporter), host metrics (via psutil), per-process GPU metrics (via NVML), and application-level service metrics (via the built-in OTLP receiver). All metrics are viewable on the Dashboard > Services page at app.usechamber.io/dashboard?tab=services.

GPU Metrics

These metrics are scraped from DCGM Exporter every 30 seconds.

Core GPU Metrics

GPU Usage (Composite Metric)

Standard GPU utilization (chamber_gpu_utilization_percent) can be misleading — a single-threaded kernel running on 1 of 132 streaming multiprocessors (SMs) still reports 100% utilization. GPU Usage provides a more accurate picture. How it’s calculated:
Power gate: If the GPU’s power draw is below 10% of its power limit, GPU Usage is reported as 0 regardless of the profiling metrics. This filters out noise from idle GPUs. Why it matters: GPU Usage tells you whether your workload is actually keeping the GPU busy. A training job might show 100% standard utilization but only 30% GPU Usage, meaning most SMs are idle and you could optimize kernel launch, batch size, or parallelism.
GPU Usage requires DCGM profiling metrics to be enabled. See Ensuring DCGM Profiling Metrics below.

Profiling Metrics

These are the raw profiling metrics behind the GPU Usage composite. They are useful for advanced debugging.

Host Metrics

Collected via psutil every 30 seconds.

Per-Process GPU Metrics

Collected via NVML for each process using a GPU. These are attributed to discovered workloads in the dashboard.

Service-Level Metrics

In addition to infrastructure metrics, the Standalone Agent tracks services — applications running on your GPU hosts that are identified by the service_name label. This is what powers the Services tab on the dashboard, giving you a per-service view of resource consumption and application health.

How Services Are Identified

The agent associates a service_name with metrics through three mechanisms, in priority order:
  1. OTEL_SERVICE_NAME environment variable — If your GPU process has OTEL_SERVICE_NAME set, the agent reads it directly and uses it to tag all GPU and per-process metrics for that workload. This is the most reliable method. For Docker containers where the process environment may not be directly readable, the agent automatically falls back to querying the Docker Engine API via /var/run/docker.sock to read container environment variables — no configuration needed beyond ensuring the agent user has Docker socket access (the installer handles this by default).
  2. OTLP service.name resource attribute — If your application exports OpenTelemetry metrics to the agent’s OTLP receiver (port 4317), the service.name resource attribute is extracted and attached to every metric in that export. When exactly one service is actively sending OTLP metrics, the agent also uses it to label GPU infrastructure metrics for the running workload.
  3. Workload discovery — The agent classifies GPU processes by inspecting command lines and environment variables to identify ML frameworks (PyTorch, TensorFlow, vLLM, etc.) and launchers (torchrun, deepspeed, accelerate). This provides job_name and workload_type labels even without OTEL_SERVICE_NAME.

Application Metrics via OTLP

Any metrics your application exports over OpenTelemetry are forwarded to the Chamber dashboard with the service_name label. These appear alongside GPU and host metrics on the Services tab, letting you correlate application behavior with infrastructure state. Common examples of application metrics you can send:
These are examples — you can send any metric your application produces. See OTLP Integration for setup instructions.

What You See on the Services Dashboard

The Services tab (app.usechamber.io/dashboard?tab=services) groups metrics by service_name, giving you a unified view per service:
  • GPU utilization and GPU Usage attributed to each service — see which services are efficiently using their GPUs and which are underutilizing
  • GPU memory per service — identify which service is consuming the most VRAM and whether it’s at risk of OOM
  • Per-process breakdowns — drill into individual worker processes within a service (e.g., each rank in a distributed training job)
  • Application metrics — any custom OTLP metrics your service exports, displayed alongside the infrastructure data
  • Host CPU and memory — spot cases where a service is bottlenecked on CPU or host memory rather than GPU
This per-service view makes it straightforward to answer questions like: “Is my training job actually using the GPUs I allocated?” or “Why did inference latency spike at 2 PM?” — without having to cross-reference multiple monitoring systems.
For the best experience on the Services dashboard, set OTEL_SERVICE_NAME on every GPU process. This ensures GPU metrics are correctly attributed even when multiple services share a host.

Workload Discovery

The agent automatically discovers GPU-using processes and classifies them by framework:
  • PyTorch (including torchrun, torch.distributed)
  • DeepSpeed
  • vLLM
  • Other GPU processes
Discovered workloads appear in the dashboard with:
  • Process name and command line
  • Framework type
  • GPU memory usage per process
  • Lifecycle state (running, terminated)
  • Duration
For distributed training (e.g., torchrun --nproc_per_node=4), the agent groups worker processes under a single workload entry.
You can enrich workload metadata with environment variables. See Workload Labels.

Ensuring DCGM Profiling Metrics Are Collected

The GPU Usage metric and profiling metrics (gpu_sm_active, gpu_tensor_active, gpu_dram_active) require DCGM Exporter to expose profiling-level fields. The installer sets this up automatically, but if you are running DCGM Exporter manually or troubleshooting missing metrics, verify the following:

1. DCGM Exporter Must Be Running

You should see Prometheus-formatted metrics including lines starting with DCGM_FI_. If this returns nothing, DCGM Exporter is not running or not reachable.

2. Profiling Fields Must Be Enabled

DCGM Exporter is configured by a CSV file that lists which fields to export. The profiling fields required are: Verify these fields are in the DCGM Exporter counters file (commonly /etc/dcgm-exporter/default-counters.csv or passed via the -f flag):
If these entries are missing, add them:
Then restart DCGM Exporter.

3. Profiling Must Be Supported by Your GPU

DCGM profiling metrics require:
  • NVIDIA driver 450+ (most modern drivers)
  • A GPU that supports profiling (Volta, Turing, Ampere, Hopper, Blackwell — i.e., V100, T4, A100, H100, B200, etc.)
  • No other profiling tool (e.g., Nsight Systems) actively holding a profiling session
If profiling metrics are unavailable, the core GPU metrics (utilization, memory, temperature, power) still collect normally. Only the GPU Usage composite metric will be missing.

4. Verify Profiling Metrics Are Flowing

You should see lines like:
If these lines are absent or all values are 0 while a workload is running, check the troubleshooting steps above.

Metric Labels

All metrics include these standard labels: GPU metrics additionally include: Process and service metrics additionally include:

What to Look For on the Dashboard

The Services tab (app.usechamber.io/dashboard?tab=services) gives you a per-host and per-GPU breakdown. Here are common patterns to watch for:

Next Steps

OTLP Integration

Send your own application metrics to Chamber

Configuration

Tune collection intervals and other settings