aiservermanager 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,10 +14,17 @@ const inversify_1 = require("inversify");
14
14
  const ExecTools_1 = require("../../helpers/ExecTools");
15
15
  /**
16
16
  * Lightweight usage probe for AMD GPUs on Linux via `rocm-smi`.
17
- * Queries only temperature, usage%, and VRAM — skips product name and bus info.
17
+ * Queries only temperature, usage%, and VRAM — skips product name.
18
+ *
19
+ * rocm-smi JSON keys are its own card numbers ("card0", "card1", ...) which
20
+ * follow BDF order and are NOT related to the static GPU list order (kernel
21
+ * probe / HIP order can differ, e.g. buses 83/86/C3/C6 probe as C3/C6/83/86).
22
+ * So each card is resolved to its PCI bus via `--showbus` (cached once —
23
+ * static info) and matched to GPUs by pciBusId — never positionally.
18
24
  */
19
25
  let AmdLinuxUsageProbe = class AmdLinuxUsageProbe {
20
26
  availableCache = null;
27
+ cardBusesCache = null;
21
28
  constructor() {
22
29
  if (process.platform !== "linux") {
23
30
  this.availableCache = false;
@@ -34,6 +41,8 @@ let AmdLinuxUsageProbe = class AmdLinuxUsageProbe {
34
41
  return available;
35
42
  }
36
43
  async probe(gpus) {
44
+ if (gpus.length === 0)
45
+ return [];
37
46
  const results = await Promise.all([
38
47
  ExecTools_1.ExecTools.safeExec("rocm-smi -t --json", { timeout: 10000 }),
39
48
  ExecTools_1.ExecTools.safeExec("rocm-smi -u --json", { timeout: 10000 }),
@@ -42,11 +51,15 @@ let AmdLinuxUsageProbe = class AmdLinuxUsageProbe {
42
51
  const tempData = this.parseJson(results[0].stdout);
43
52
  const usageData = this.parseJson(results[1].stdout);
44
53
  const memData = this.parseJson(results[2].stdout);
45
- // Build card→key mapping from static GPU info
46
- const keyMap = this.buildKeyMap(gpus);
54
+ // Match cards to GPUs by PCI bus — rocm-smi card numbering is unrelated
55
+ // to the static list order
56
+ const cardBuses = await this.getCardBuses();
57
+ const knownBuses = new Set(gpus.map((g) => g.pciBusId));
47
58
  const usages = [];
48
- for (const [cardKey, matchKey] of keyMap) {
49
- usages.push(this.extractUsage(cardKey, matchKey, tempData, usageData, memData));
59
+ for (const [cardKey, pciBusId] of cardBuses) {
60
+ if (!knownBuses.has(pciBusId))
61
+ continue; // card outside the dashboard (iGPU, ...)
62
+ usages.push(this.extractUsage(cardKey, pciBusId, tempData, usageData, memData));
50
63
  }
51
64
  return usages;
52
65
  }
@@ -58,19 +71,25 @@ let AmdLinuxUsageProbe = class AmdLinuxUsageProbe {
58
71
  return null;
59
72
  }
60
73
  }
61
- /**
62
- * Build cardKey → matchKey mapping.
63
- * matchKey is the pciBusId from static info (or "AMD:index" fallback).
64
- */
65
- buildKeyMap(gpus) {
74
+ /** "cardN" → "BB:DD.F" (detector format), from `--showbus`. Cached — static info. */
75
+ async getCardBuses() {
76
+ if (this.cardBusesCache !== null && this.cardBusesCache.size > 0)
77
+ return this.cardBusesCache;
66
78
  const map = new Map();
67
- const cardKeys = [];
68
- for (let i = 0; i < gpus.length; i++) {
69
- const cardKey = `card${i}`;
70
- const gpu = gpus[i];
71
- const matchKey = gpu.pciBusId || `AMD:${i}`;
72
- map.set(cardKey, matchKey);
73
- cardKeys.push(cardKey);
79
+ const result = await ExecTools_1.ExecTools.safeExec("rocm-smi --showbus --json", { timeout: 10000 });
80
+ const data = this.parseJson(result.stdout);
81
+ if (data) {
82
+ for (const [cardKey, card] of Object.entries(data)) {
83
+ const pci = card?.["PCI Bus"];
84
+ if (typeof pci !== "string" || !pci.trim())
85
+ continue;
86
+ // "0000:83:00.0" → "83:00.0" to match detector / lspci format
87
+ map.set(cardKey, pci.trim().toUpperCase().replace(/^0+:/, ""));
88
+ }
89
+ }
90
+ // Don't cache a failed/empty lookup — retry on the next poll
91
+ if (map.size > 0) {
92
+ this.cardBusesCache = map;
74
93
  }
75
94
  return map;
76
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"amdLinuxUsageProbe.js","sourceRoot":"","sources":["../../../src/services/probes/amdLinuxUsageProbe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"amdLinuxUsageProbe.js","sourceRoot":"","sources":["../../../src/services/probes/amdLinuxUsageProbe.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiservermanager",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "description": "GPU server monitoring and AI service manager web dashboard",
5
5
  "main": "backend/dist/index.js",
6
6
  "bin": {