Detect-GPU is an HTTP server that calls go-nvml and provides an api to get
information about the NVIDIA GPU on a Linux server.
Because we may use macOS or Windows for development, but go-nvml needs Linux NVIDIA driver, so it will report error during development.
And we split it out as a standalone HTTP service so that we can compile and run the main application successfully even in an environment without NVIDIA drivers.
Downloading the binary executable from release. And run it.
$ ./detect-gpu-linux-amd64 2024/01/08 06:46:03 stat.go:60: [info] detect server start success, listen on 0.0.0.0:2376
2024/01/08 06:46:03 stat.go:61: [info] detect gpu timeout: 1000 ms
2024/01/08 06:46:03 stat.go:62: [info] ROUTES: 2024/01/08 06:46:03 stat.go:63: [info] GET --> /api/v1/detect/gpu
$ ./detect-gpu-linux-amd64 -h
Usage of ./detect-gpu-linux-amd64:
-a, --addr string Address of detect server, format: ip:port, default: 0.0.0.0:2376 (default "0.0.0.0:2376")
-p, --path string Path of detect server, default: /api/v1/detect/gpu (default "/api/v1/detect/gpu")
-t, --timeout duration Timeout of detect gpu, default: 1s (default 1s)
pflag: help requestedSend a GET request using cURL or any language.
$ curl 127.0.0.1:2376/api/v1/detect/gpu
[
{
"index": 0,
"uuid": "GPU-3d55828f-bc3b-41cb-452d-30189d49dbeb",
"name": "NVIDIA vGPU-48GB",
"memoryInfo": {
"Total": 51527024640,
"Free": 50875727872,
"Used": 651296768
},
"memoryInfoV2": {
"Version": 33554472,
"Total": 51527024640,
"Reserved": 651100160,
"Free": 50875727872,
"Used": 196608
},
"powerUsage": 94494,
"powerState": 0,
"powerManagementDefaultLimit": 450000,
"informImageVersion": "G002.0000.00.03",
"systemGetDriverVersion": "570.124.04",
"systemGetCudaDriverVersion": 12080,
"tGraphicsRunningProcesses": [],
"utilization": {
"Gpu": 0,
"Memory": 0
}
}
]Simultaneously, run nvidia-smi to compare both outputs.
nvidia-smi Fri Aug 8 17:54:21 2025 +-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.124.04 Driver Version: 570.124.04 CUDA Version: 12.8 ||-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |||| MIG M. ||=========================================+========================+======================|| 0 NVIDIA vGPU-48GB On | 00000000:C9:00.0 Off | Off || 46% 49C P0 94W / 450W | 1MiB / 49140MiB | 0% Default |||| N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: || GPU GI CI PID Type Process name GPU Memory || ID ID Usage ||=========================================================================================|| No running processes found |
+-----------------------------------------------------------------------------------------+$ git clone https://github.com/mayooot/detect-gpu
$ cd detect-gpu
$ make linux$ make testDetect-GPU is available using the standard go get command.
Install by running:
$ go get github.com/mayooot/detect-gpu/pkg/detect You can refer to the example for usage.
Like this:
package main
import (
"fmt""time""github.com/mayooot/detect-gpu/pkg/detect"
)
funcmain() {
timeOutDuration:=500*time.MillisecondtestClient:=detect.NewClient(detect.WithTimeout(timeOutDuration))
iferr:=testClient.Init(); err!=nil {
panic(err)
}
defertestClient.Close()
gpus, err:=testClient.DetectGpu()
iferr!=nil {
panic(err)
}
for_, gpu:=rangegpus {
fmt.Printf("%#+v\n", gpu)
}
}Feel free to open issues and pull requests. Any feedback is highly appreciated!