NVIDIA / NVIDIA/Personal-AI-Router

[Bug]: Node card header shows only the first GPU, so multi-GPU hosts are misreported as single-GPU

Ouverte
#33 1 commentaire 0 réactions 1 personne assignée Voir sur GitHub

@ckelseynv y travaille déjà.

Depuis le 11/9/2026.

Langage dominant
Go
Étoiles
1.4k
Forks
250
Merge moyen
23 h 27 min
PR mergées (30 j)
1

Description

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
  1. Run PAIR on a host with two or more GPUs.
  2. Pair it into a cluster and open the desktop application's Overview.
  3. Look at that node's card header.
  4. 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-info returns 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."
  • inferenceHardwareIds is absent from the payload, which by the contract in src/ui/utils/gpu-inference.ts means "show every GPU" — so nothing is being filtered as un-ready.

Only the header label drops them.

Causedesktop/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.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.