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
|
|
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
|
-
//
|
|
46
|
-
|
|
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,
|
|
49
|
-
|
|
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
|
-
|
|
63
|
-
|
|
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
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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":";;;;;;;;;;;;AAAA,yCAAuC;AAEvC,uDAAoD;AAGpD
|
|
1
|
+
{"version":3,"file":"amdLinuxUsageProbe.js","sourceRoot":"","sources":["../../../src/services/probes/amdLinuxUsageProbe.ts"],"names":[],"mappings":"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"}
|