henrygd/beszel · warning
no GPU found - see https://beszel.dev/guide/gpu
Error message
no GPU found - see https://beszel.dev/guide/gpu
What it means
The beszel agent's GPU manager returns this error when no GPU collector could be configured or started. It is thrown from NewGPUManager when the system exposes no GPU capabilities the agent can use, and the message points to the beszel GPU setup guide because resolution almost always requires installing drivers or setting GPU_COLLECTOR.
Source
Thrown at agent/gpu.go:778
gm.GpuDataMap = make(map[string]*system.GPUData)
// Jetson devices should always use tegrastats (ignore GPU_COLLECTOR).
if caps.hasTegrastats {
gm.startTegraStatsCollector("3700")
return &gm, nil
}
// Respect explicit collector selection before capability auto-detection.
if collectorConfig, ok := utils.GetEnv("GPU_COLLECTOR"); ok && strings.TrimSpace(collectorConfig) != "" {
priorities := parseCollectorPriority(collectorConfig)
if gm.startCollectorsByPriority(priorities, caps) == 0 {
return nil, fmt.Errorf("no configured GPU collectors are available")
}
return &gm, nil
}
if !hasAnyGpuCollector(caps) {
return nil, fmt.Errorf(noGPUFoundMsg)
}
// auto-detect and start collectors when GPU_COLLECTOR is unset.
if gm.startCollectorsByPriority(gm.resolveLegacyCollectorPriority(caps), caps) == 0 {
return nil, fmt.Errorf(noGPUFoundMsg)
}
return &gm, nil
}
View on GitHub (pinned to b38fb7dafa)
Solutions
- Install vendor drivers so a collector is detectable (NVIDIA driver/NVML, Intel i915/xe sysfs, AMD).
- Set GPU_COLLECTOR env var explicitly to a supported collector (e.g. nvml) to bypass auto-detection.
- Verify the GPU is visible to the container/VM (device passthrough, /sys/class/drm mounted).
- If the host genuinely has no GPU, remove GPU monitoring expectations or ignore the error; agent runs without GPU stats.
- Consult https://beszel.dev/guide/gpu for supported collectors and setup.
Example fix
// before (docker run without device access) docker run beszel/agent // after docker run --gpus all beszel/agent
Defensive patterns
Strategy: fallback
Validate before calling
// on the host, before relying on GPU stats: which nvidia-smi || ls /sys/class/drm/card0/device # confirm GPU visible GPU_COLLECTOR=nvml beszel-agent # force a collector explicitly
Try / catch
gm, err := NewGPUManager(...)
if err != nil && strings.Contains(err.Error(), "no GPU found") {
slog.Warn("GPU monitoring disabled; continuing without GPU stats")
gm = nil
} Prevention
- Install vendor GPU drivers before enabling GPU monitoring in beszel
- Pass GPU devices into containers (--gpus all, /dev/dri) at deploy time
- Set GPU_COLLECTOR explicitly instead of relying on auto-detection
- Check the agent runs without GPU stats as an expected state on GPU-less hosts
When it happens
Trigger: Called via NewGPUManager when hasAnyGpuCollector(caps) is false (no collector is usable on this host), or when GPU_COLLECTOR is unset and the auto-detection path startCollectorsByPriority(resolveLegacyCollectorPriority(caps), caps) starts 0 collectors.
Common situations: Running the agent on a machine with no GPU (VMs, containers without /dev/dri, cloud instances without GPU passthrough); NVIDIA drivers or NVML library missing so NVML collector can't load; missing intel-gpu-tools/sysfs access; GPUs hidden by cgroup device restrictions in Docker.
Related errors
- no configured GPU collectors are available
- HUB_URL environment variable not set
- must set TOKEN or TOKEN_FILE
- data directory not found
- SSH disabled
AI-assisted analysis of henrygd/beszel@b38fb7dafa (2026-08-31).
Data as JSON: /api/errors/4dd9ed63b6d30f8e.
Report an issue: GitHub.