Install the agent
The Denpex agent is a single Python file. It wraps your training command, heartbeats every 2 minutes, and ships the last 500 log lines on a non-zero exit. Stdlib only, no dependencies, no kernel module, no root.
Install & verify
Python 3.8+. No third-party packages, no kernel module, no root, no daemon. The agent never modifies the training process and never installs anything. It's a single readable file — verify the checksum, read the source, then run it.
Preview exactly what leaves your cluster (before you trust it)
You don't have to take our word for it. DENPEX_DRY_RUN=1 prints the exact, already-masked payload that would be sent and transmits nothing. DENPEX_PRIVACY=strict ships only anonymized failure signatures (raw logs never leave), and DENPEX_LOCAL=1 runs the whole engine on-host with zero egress.
Wrap a training command
Environment variables
Kubernetes
Run the agent as a sidecar container. The agent shares the pod's filesystem and lifecycle with your training container; no extra scheduling is needed.
Self-hosted / air-gapped (Helm)
For data centers that can't let telemetry leave their network, run the whole platform on your own hardware with one command. The agent diagnoses failures on-host and serves fleet health as Prometheus metrics — your own Prometheus + Grafana watch the cluster, with zero egress and no per-request cost. Ships as a DaemonSet (one pod per GPU node) from the Denpex on-prem kit.
The chart ships a pinned, scripts-baked-in container image — no repo checkout, no manual ConfigMap. A runnable starter stack (Prometheus + VictoriaMetrics + Grafana + the agent, pre-wired) and the full architecture + zero-egress verification live in the on-prem kit under deploy/onprem/. Air-gapped crash diagnoses are saved to a local incident log (DENPEX_INCIDENT_DIR), never transmitted. Fully-disconnected clusters mirror the image into their own registry.
SLURM & Ray
The agent is launched as a wrapper around your command, so it works under any scheduler with no per-scheduler setup. It auto-captures the scheduler's environment (SLURM job/node/proc id, Ray job/node id, K8s pod/namespace) so the dashboard shows exactly which job, node, and rank failed.
Proactive monitoring — live, GPU telemetry, schedulers
Beyond wrapping a command, the agent bundle ships three drop-in tools that catch problems earlier and remove the manual paste entirely. Each is a single stdlib-only file.
The telemetry collector is read-only and low-overhead; most clusters already run DCGM-Exporter as part of the NVIDIA GPU Operator, so you can point Denpex at the metrics endpoint you already expose. Findings are diagnosed and routed to your alert channels — see the integrations guide for the live monitor and experiment-tracker connectors.
Privacy & data minimization
Masking runs client-side, before any byte leaves your cluster. Set the mode with DENPEX_PRIVACY:
- mask (default) — emails, IPs, MACs, SSNs, API keys, tokens, JWTs, credentials, and home/Windows paths are redacted before egress. Error text, stack traces, and Xid/CUDA/NCCL signatures are preserved (that's the diagnostic signal; it carries no PII).
- strict — raw logs never leave. The agent extracts only anonymized failure signatures (e.g. Xid 79, CUDA out of memory, RuntimeError) and ships those. Recommended for regulated / PHI workloads.
- off — send raw logs unchanged (opt-in).
Air-gapped / in-VPC (zero egress)
With DENPEX_LOCAL=1, the agent diagnoses failures entirely on the hostusing a bundled copy of the engine — the regex pattern tier, the Xid → node-action router, cross-rank cascade localization, and the full 3500+-class encyclopedia matched by IDF-weighted similarity + error-signature anchoring. Nothing leaves the cluster: no logs, no signatures, no heartbeats, no API key. The LLM fallback is cloud-only and is simply unavailable offline; the deterministic engine (which covers the large majority of real failures) runs locally.
What gets shipped
- Heartbeat (job name, hostname, status, timestamp) every 30 seconds.
- On non-zero exit: the last 500 log lines, after client-side masking, with the failure type inferred from exit code.
- For hangs (no heartbeat for 3+ minutes): the agent exits with code 137, and the orchestration stack records the failure.
- Nothing else. We do not read source code, model weights, datasets, environment variables, or any other files.