From dd26e03b2dd52c94e7bbf25628e198238e29a0f4 Mon Sep 17 00:00:00 2001 From: Michael Chus Date: Wed, 8 Apr 2026 00:25:12 +0300 Subject: [PATCH] Add multi-GPU selector option for system-level tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a "Multi-GPU tests — use all GPUs" checkbox to the NVIDIA GPU selector (checked by default). When enabled, PSU Pulse, NCCL, and NVBandwidth tests run on every GPU in the system regardless of the per-GPU selection above — which is required for correct PSU stress testing (synchronous pulses across all GPUs create worst-case transients). When unchecked, only the manually selected GPUs are used. The same logic applies both to Run All (expandSATTarget) and to the individual Run button on each multi-GPU test card. Co-Authored-By: Claude Sonnet 4.6 --- audit/internal/webui/pages.go | 44 ++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/audit/internal/webui/pages.go b/audit/internal/webui/pages.go index 51b5602..7c9467a 100644 --- a/audit/internal/webui/pages.go +++ b/audit/internal/webui/pages.go @@ -1085,6 +1085,12 @@ func renderValidate(opts HandlerOptions) string {

Loading NVIDIA GPUs...

Select at least one NVIDIA GPU to enable NVIDIA validate tasks.

+
+ +
@@ -1203,6 +1209,10 @@ function satSelectedGPUIndices() { .filter(function(v) { return !Number.isNaN(v); }) .sort(function(a, b) { return a - b; }); } +function satMultiGPUAll() { + const cb = document.getElementById('sat-multi-gpu-all'); + return cb ? cb.checked : true; +} function satUpdateGPUSelectionNote() { const note = document.getElementById('sat-gpu-selection-note'); if (!note) return; @@ -1211,7 +1221,8 @@ function satUpdateGPUSelectionNote() { note.textContent = 'Select at least one NVIDIA GPU to enable NVIDIA validate tasks.'; return; } - note.textContent = 'Selected NVIDIA GPUs: ' + selected.join(', ') + '.'; + const multiAll = satMultiGPUAll(); + note.textContent = 'Selected GPUs: ' + selected.join(', ') + '. Multi-GPU tests: ' + (multiAll ? 'all GPUs in system' : 'selected GPUs only') + '.'; } function satRenderGPUList(gpus) { const root = document.getElementById('sat-gpu-list'); @@ -1324,14 +1335,23 @@ function runSATWithOverrides(target, overrides) { const nvidiaPerGPUTargets = ['nvidia', 'nvidia-targeted-stress', 'nvidia-targeted-power']; // pulse_test and fabric tests run on all selected GPUs simultaneously const nvidiaAllGPUTargets = ['nvidia-pulse', 'nvidia-interconnect', 'nvidia-bandwidth']; +function satAllGPUIndicesForMulti() { + // If "Multi-GPU tests — all GPUs" is checked, return all detected GPUs. + // Otherwise fall back to the per-GPU selection. + if (satMultiGPUAll()) { + return loadSatNvidiaGPUs().then(function(gpus) { + return gpus.map(function(g) { return Number(g.index); }); + }); + } + const sel = satSelectedGPUIndices(); + return Promise.resolve(sel); +} function expandSATTarget(target) { if (nvidiaAllGPUTargets.indexOf(target) >= 0) { - const selected = satSelectedGPUIndices(); - if (!selected.length) return Promise.reject(new Error('Select at least one NVIDIA GPU.')); - return Promise.resolve([{ - target: target, - overrides: {gpu_indices: selected, display_name: satLabels()[target] || target} - }]); + return satAllGPUIndicesForMulti().then(function(indices) { + if (!indices.length) return Promise.reject(new Error('No NVIDIA GPUs available.')); + return [{target: target, overrides: {gpu_indices: indices, display_name: satLabels()[target] || target}}]; + }); } if (nvidiaPerGPUTargets.indexOf(target) < 0) { return Promise.resolve([{target: target}]); @@ -1350,12 +1370,10 @@ function expandSATTarget(target) { }))); } function runNvidiaFabricValidate(target) { - const selected = satSelectedGPUIndices(); - if (!selected.length) { - alert('Select at least one NVIDIA GPU.'); - return; - } - return runSATWithOverrides(target, {gpu_indices: selected, display_name: satLabels()[target] || target}); + satAllGPUIndicesForMulti().then(function(indices) { + if (!indices.length) { alert('No NVIDIA GPUs available.'); return; } + runSATWithOverrides(target, {gpu_indices: indices, display_name: satLabels()[target] || target}); + }); } function runNvidiaValidateSet(target) { return loadSatNvidiaGPUs().then(gpus => {