henrygd/beszel · warning

no valid GPU data found

Error message

no valid GPU data found

What it means

errNoValidData is the sentinel error of the GPU collectors: a collector (nvidia-smi/nvtop via start, rocm/amd, powermetrics, macmon pipe, intel_gpu_top) ran but its parser never saw a line it recognized as valid GPU data. It signals 'this collector yielded nothing usable' rather than a hard failure, so the manager can fall back to other collectors.

Source

Thrown at agent/gpu.go:85

	Name         string `json:"Card series"`
	Temperature  string `json:"Temperature (Sensor edge) (C)"`
	MemoryUsed   string `json:"VRAM Total Used Memory (B)"`
	MemoryTotal  string `json:"VRAM Total Memory (B)"`
	Usage        string `json:"GPU use (%)"`
	PowerPackage string `json:"Average Graphics Package Power (W)"`
	PowerSocket  string `json:"Current Socket Graphics Package Power (W)"`
}

// gpuCollector defines a collector for a specific GPU management utility (nvidia-smi or rocm-smi)
type gpuCollector struct {
	name    string
	cmdArgs []string
	parse   func([]byte) bool // returns true if valid data was found
	buf     []byte
	bufSize uint16
}

var errNoValidData = fmt.Errorf("no valid GPU data found") // Error for missing data

// collectorSource identifies a selectable GPU collector in GPU_COLLECTOR.
type collectorSource string

const (
	collectorSourceNVTop        collectorSource = collectorSource(nvtopCmd)
	collectorSourceNVML         collectorSource = "nvml"
	collectorSourceNvidiaSMI    collectorSource = collectorSource(nvidiaSmiCmd)
	collectorSourceIntelGpuTop  collectorSource = collectorSource(intelGpuStatsCmd)
	collectorSourceIntelSysfs   collectorSource = "intel_sysfs"
	collectorSourceAmdSysfs     collectorSource = "amd_sysfs"
	collectorSourceRocmSMI      collectorSource = collectorSource(rocmSmiCmd)
	collectorSourceMacmon       collectorSource = collectorSource(macmonCmd)
	collectorSourcePowermetrics collectorSource = collectorSource(powermetricsCmd)
	collectorGroupNvidia        string          = "nvidia"
	collectorGroupIntel         string          = "intel"
	collectorGroupAmd           string          = "amd"
	collectorGroupApple         string          = "apple"

View on GitHub (pinned to b38fb7dafa)

Solutions

  1. Verify the underlying tool works manually (nvidia-smi, intel_gpu_top, cat tegrastats output)
  2. Install the matching GPU tool/driver for the hardware present
  3. Fix permissions (run agent with access to perf counters or sudo for powermetrics)
  4. Set GPU_COLLECTOR to force the correct collector for your hardware
  5. Update beszel if a tool version changed its output format
Defensive patterns

Strategy: fallback

Validate before calling

// check the tool works before enabling its collector
if _, err := exec.LookPath("nvidia-smi"); err != nil {
    log.Info("nvidia-smi not installed; skipping nvidia collector")
}

Try / catch

if err := gm.collect(); err != nil {
    if errors.Is(err, errNoValidData) {
        log.Debug("no valid GPU data this cycle; trying next collector")
    } else {
        log.Error("gpu collect failed", "err", err)
    }
}

Prevention

When it happens

Trigger: A collector command runs to completion but its output never satisfies the parse function — GPU driver not present, nvidia-smi/intel_gpu_top not installed, permission denied producing empty output, or the parsing format changed between driver/tool versions.

Common situations: Missing intel_gpu_top permissions (needs perf access / root); nvidia-smi present but no NVIDIA GPU on the host; macOS powermetrics requiring sudo; updated amdgpu/nvtop output format no longer matching regexes; Jetson tegrastats absent.

Related errors


AI-assisted analysis of henrygd/beszel@b38fb7dafa (2026-08-31). Data as JSON: /api/errors/0f658cc35c9fbe23. Report an issue: GitHub.