Prerequisites

RequirementNotes
Kubernetes cluster with GPU nodesNVIDIA (nvidia.com/gpu) or AMD (amd.com/gpu)
kubectl + Helm 3.xCluster-admin (or equivalent) for a dedicated namespace
Application CRD kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/application/v0.8.3/config/crd/bases/app.k8s.io_applications.yaml
GPU metrics exporterNVIDIA: DCGM exporter · AMD: device metrics exporter (Service name containing metrics-exporter)
Host GPU toolsNVIDIA: nvidia-smi · AMD: amd-smi (on the node OS)
Hugging Face tokenYour account token must have access to the same model you have deployed (gated models/tokenizers). The profiler Job uses this token to download tokenizer/model metadata for vllm bench.
Workload opt-inProfiling runs only for workloads with sonar.pebble.io/probe-opt-in: "true" on the controller pod template (not a live Pod). Discovery still works without it.

Put the annotation on the vLLM Deployment / StatefulSet / Job template, then roll out so pods pick it up:

spec:
  template:
    metadata:
      annotations:
        sonar.pebble.io/probe-opt-in: "true"
kubectl -n <workload-ns> rollout restart deploy/<name>

One profiler Job runs at a time; a run can take hours.

Installed from Google Cloud Marketplace? Skip the Helm commands in Steps 1–2 — the listing deploys the chart and asks for an application name (<APP_NAME>) and a namespace (<NAMESPACE>). Use those in Step 3. Your application name is the prefix on resource names (for example <APP_NAME>-adminer instead of sonar-v1-adminer).

Step 1 · AMD overlay

values-amd.yaml

Chart defaults are NVIDIA (DCGM scrape, NVIDIA Prometheus labels). No extra values file is required on NVIDIA clusters. On GKE NVIDIA, set --set loadSaturate.nvidiaSmiGkeHostMap=true.

On AMD clusters, pass values-amd.yaml (turns DCGM off, enables AMD DME scrape, sets gpu_health / gpu_id):

helm upgrade --install sonar-v1 \
  oci://us-docker.pkg.dev/pebble-infra/sonar/sonar-v1 \
  --namespace pebble-sonar-v1 --create-namespace \
  --version 1.0.0 \
  -f https://raw.githubusercontent.com/Pebble-Inc/pebble-docs/main/sonar/chart/sonar-v1/values-amd.yaml \
  --set powerProfiler.huggingface.token=hf_xxxxxxxx

Or from a clone of this repo: -f sonar/chart/sonar-v1/values-amd.yaml.

Step 2 · Install

Helm install

Pass your Hugging Face token with --set. The token must belong to an account that already has access to the model you deployed (accept the model license on Hugging Face if it is gated). Without that access, profiler Jobs fail when downloading tokenizer/model files.

NVIDIA cluster (default)

helm upgrade --install sonar-v1 \
  oci://us-docker.pkg.dev/pebble-infra/sonar/sonar-v1 \
  --namespace pebble-sonar-v1 --create-namespace \
  --version 1.0.0 \
  --set powerProfiler.huggingface.token=hf_xxxxxxxx \
  --set loadSaturate.nvidiaSmiGkeHostMap=true

From this repo:

helm upgrade --install sonar-v1 ./sonar/chart/sonar-v1 \
  --namespace pebble-sonar-v1 --create-namespace \
  --set powerProfiler.huggingface.token=hf_xxxxxxxx \
  --set loadSaturate.nvidiaSmiGkeHostMap=true

The Job receives HF_TOKEN for huggingface_hub / vllm. Helm stores the --set value in the release (helm get values). To use an existing Secret instead: --set powerProfiler.huggingface.existingSecret=sonar-hf-token (Secret key HF_TOKEN).

Pin image digests after publish (replace with values from Artifact Registry):

--set image.repository=us-docker.pkg.dev/pebble-infra/sonar/sonar-v1 \
--set image.tag=sha256:<digest>
Step 3 · After install

Helm NOTES & health checks

Helm prints NOTES when helm upgrade --install finishes. Re-print anytime:

helm get notes sonar-v1 -n pebble-sonar-v1

Confirm pods. Marketplace installs use the application name and namespace you entered in the console; that application name prefixes resource names.

Helm CLI
kubectl -n pebble-sonar-v1 get pods
kubectl -n pebble-sonar-v1 logs -l app.kubernetes.io/component=watcher -c sonar-v1 -f
Installed from GCP Marketplace
kubectl -n <NAMESPACE> get pods
kubectl -n <NAMESPACE> logs -l app.kubernetes.io/component=watcher -c sonar-v1 -f

You should see the watcher Running and log lines for discovered GPU workloads.

Adminer:

Helm CLI
kubectl port-forward -n pebble-sonar-v1 svc/sonar-v1-adminer 8085:8085
Installed from GCP Marketplace
kubectl port-forward -n <NAMESPACE> svc/<APP_NAME>-adminer 8085:8085

Open http://127.0.0.1:8085 — System=SQLite 3, Server=/data/db/sonar.db, Username empty, Password=sonar-admin (change via adminer.uiPassword). Power-profiler viewer: http://127.0.0.1:8085/power_profiler/

The SQLite PVC is retained on helm uninstall. Delete it manually if you want a clean removal.

Support

See the support page. For image tags, chart version, or listing issues, contact your Pebble representative. Share cluster GPU vendor (NVIDIA / AMD) and whether metrics exporters are already installed.

Deploy from Marketplace?

Use the Google Cloud console listing for Terraform-based deploys, or run the Helm commands above from your workstation.