NVIDIA / NVIDIA/Personal-AI-Router
[Bug]: Node card header shows only the first GPU, so multi-GPU hosts are misreported as single-GPU
@ckelseynv đang làm issue này rồi.
Từ ngày 11/9/2026.
- Ngôn ngữ chính
- Go
- Star
- 1.4k
- Fork
- 250
- Merge trung bình
- 23 giờ 27 phút
- Pull request đã merge (30 ngày)
- 1
Mô tả
PAIR version or commit
0.1.1 (13b68115fa2c9c1d94f1ead1358f8d5a527cfecf), installed from NVPAIR-Setup-0.1.1-arm64.dmg and reproduced against a source build of the same commit.
Affected component
Desktop application
Environment
OS: macOS 26.6.2 (viewing node), Rocky Linux 9.8 (affected node)
Architecture: arm64 (viewer), x86_64 (affected node)
GPU and driver: affected node has TWO GPUs -
Tesla P100-PCIE-16GB + NVIDIA GeForce RTX 3060,
driver 580.159.04, CUDA 13.0
Engine and version: Ollama (PAIR-managed)
Model: qwen3:1.7b
Cluster size: 4 nodes
Steps to reproduce
- Run PAIR on a host with two or more GPUs.
- Pair it into a cluster and open the desktop application's Overview.
- Look at that node's card header.
- For comparison, read the same node's raw inventory:
curl http://<node>:14318/v1/node-info.
Expected behavior
The node card header identifies the host's GPUs. A machine with a P100 and a 3060 should not be indistinguishable from a machine with only a 3060.
Actual behavior
The header shows exactly one GPU name. The second card is absent, with no +1, no count, and no other indication that more GPUs exist — so a multi-GPU host is silently misreported as single-GPU in the summary view.
The data is correct at every other layer:
/v1/node-inforeturns both GPUs with correct VRAM totals.- The detailed performance view charts both, per its own comment: "The detailed performance view intentionally charts EVERY detected GPU."
inferenceHardwareIdsis absent from the payload, which by the contract insrc/ui/utils/gpu-inference.tsmeans "show every GPU" — so nothing is being filtered as un-ready.
Only the header label drops them.
Cause — desktop/src/ui/components/NodeList/NodeCardDetails.tsx:276 passes only the first element:
gpuLabel={gpuInfo.length > 0 ? gpuInfo[0].name : undefined}
NodeLabel accepts a single gpuLabel: string | undefined and pushes one gpu segment, so every GPU after the first is unrepresentable by construction.
Worth noting the fix is not simply joining the names into one string: NodeLabel applies wrapping, · separators and truncation per segment, so a joined string is a single segment that truncates after the first name on a narrow card — the same blind spot in a different form. One segment per GPU preserves the existing layout behavior.
This matters more on larger hosts: an 8-GPU server currently presents as a 1-GPU server in the node list.
Sanitized logs or screenshots
# /v1/node-info from the affected node - both GPUs present and correct.
# Host/cluster identifiers and addresses removed per the template.
{
"GPUs": [
{ "name": "Tesla P100-PCIE-16GB", "vram_bytes": 17179869184, "vram_used_bytes": 16077815808 },
{ "name": "NVIDIA GeForce RTX 3060", "vram_bytes": 12884901888, "vram_used_bytes": 12120489984 }
],
"cpu": { "name": "AMD Ryzen 5 5600X 6-Core Processor", "cores": 6, "utilization_percent": 1 },
"memory": { "total_bytes": 139586437120, "used_bytes": 14764740608 },
"telemetryValid": true
}
# Desktop node card header for that same node:
# <NODE> - <address> - NVIDIA GeForce RTX 3060
# The Tesla P100 does not appear.
Confirmations
- I searched existing issues for duplicates. The closest is #4 (local node's GPU/CPU/memory enrichment never refreshed), which concerns stale discovery data and explicitly notes the UI is unaffected; this is a rendering defect with fresh, correct data.
- This is not a security vulnerability.
- I agree to follow the Code of Conduct.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Đánh giá
Issue này chưa được đánh giá.