Skip to content

Commit adc94d4

Browse files
committed
Fix redundant NPU validation reruns
1 parent 35758a6 commit adc94d4

2 files changed

Lines changed: 103 additions & 10 deletions

File tree

test/npu_validation/scripts/run_remote_npu_validation.sh

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ set -euo pipefail
1212
STAGE="${STAGE:-run}" # build|run
1313
RUN_MODE="${RUN_MODE:-npu}" # npu|sim
1414
SOC_VERSION="${SOC_VERSION:-Ascend910}"
15-
GOLDEN_MODE="${GOLDEN_MODE:-npu}" # sim|npu|skip
15+
GOLDEN_MODE="${GOLDEN_MODE:-npu}" # sim|npu|npu_consistency|skip
1616
PTO_ISA_REPO="${PTO_ISA_REPO:-https://gitcode.com/cann/pto-isa.git}"
1717
PTO_ISA_COMMIT="${PTO_ISA_COMMIT:-}"
1818
DEVICE_ID="${DEVICE_ID:-0}"
@@ -307,6 +307,33 @@ while IFS= read -r -d '' cpp; do
307307
done
308308
}
309309

310+
ensure_golden_outputs_present() {
311+
local missing=0
312+
if [[ -f "./outputs.txt" ]]; then
313+
while IFS= read -r name; do
314+
[[ -n "${name}" ]] || continue
315+
if [[ ! -f "./golden_${name}.bin" ]]; then
316+
log "ERROR: missing golden output ./golden_${name}.bin"
317+
missing=1
318+
fi
319+
done < "./outputs.txt"
320+
if [[ ${missing} -ne 0 ]]; then
321+
log "ERROR: GOLDEN_MODE=npu expects golden.py/custom assets to prepare golden_*.bin"
322+
log "ERROR: use GOLDEN_MODE=npu_consistency for run-to-run NPU consistency checks"
323+
return 1
324+
fi
325+
return 0
326+
fi
327+
328+
if compgen -G "./golden_*.bin" > /dev/null; then
329+
return 0
330+
fi
331+
332+
log "ERROR: no golden_*.bin found for GOLDEN_MODE=npu"
333+
log "ERROR: use GOLDEN_MODE=npu_consistency for run-to-run NPU consistency checks"
334+
return 1
335+
}
336+
310337
case "${GOLDEN_MODE}" in
311338
sim)
312339
python3 ./golden.py
@@ -325,12 +352,26 @@ while IFS= read -r -d '' cpp; do
325352
exit 2
326353
fi
327354
python3 ./golden.py
355+
ensure_golden_outputs_present
356+
if [[ "${CUSTOM_GOLDEN}" == "1" ]]; then
357+
log "Using custom golden for ${testcase}"
358+
fi
328359
LD_LIBRARY_PATH="${LD_LIBRARY_PATH_NPU}" ./build/${testcase}
329-
if [[ "${CUSTOM_GOLDEN}" != "1" ]]; then
330-
copy_outputs_as_golden
331-
python3 ./golden.py
332-
LD_LIBRARY_PATH="${LD_LIBRARY_PATH_NPU}" ./build/${testcase}
360+
COMPARE_STRICT=1 python3 ./compare.py
361+
;;
362+
npu_consistency)
363+
if [[ "${RUN_MODE}" != "npu" ]]; then
364+
log "ERROR: GOLDEN_MODE=npu_consistency requires RUN_MODE=npu"
365+
exit 2
366+
fi
367+
python3 ./golden.py
368+
LD_LIBRARY_PATH="${LD_LIBRARY_PATH_NPU}" ./build/${testcase}
369+
if [[ "${CUSTOM_GOLDEN}" == "1" ]]; then
370+
log "Ignoring custom golden for ${testcase}; using first NPU run as determinism baseline"
333371
fi
372+
copy_outputs_as_golden
373+
python3 ./golden.py
374+
LD_LIBRARY_PATH="${LD_LIBRARY_PATH_NPU}" ./build/${testcase}
334375
COMPARE_STRICT=1 python3 ./compare.py
335376
;;
336377
skip)
@@ -341,7 +382,7 @@ while IFS= read -r -d '' cpp; do
341382
log "WARN: compare skipped (GOLDEN_MODE=skip)"
342383
;;
343384
*)
344-
log "ERROR: unknown GOLDEN_MODE=${GOLDEN_MODE} (expected: sim|npu|skip)"
385+
log "ERROR: unknown GOLDEN_MODE=${GOLDEN_MODE} (expected: sim|npu|npu_consistency|skip)"
345386
exit 2
346387
;;
347388
esac

test/npu_validation/templates/run_sh_template.sh

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,19 @@ set -euo pipefail
1111

1212
RUN_MODE="@RUN_MODE@"
1313
SOC_VERSION="@SOC_VERSION@"
14-
GOLDEN_MODE="${GOLDEN_MODE:-npu}" # sim|npu|skip
14+
GOLDEN_MODE="${GOLDEN_MODE:-npu}" # sim|npu|npu_consistency|skip
1515
BUILD_DIR="${BUILD_DIR:-build}"
1616

1717
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
1818

1919
cd "${ROOT_DIR}"
20-
python3 "${ROOT_DIR}/golden.py"
20+
21+
CUSTOM_GOLDEN=0
22+
CUSTOM_COMPARE=0
23+
if [[ -f "${ROOT_DIR}/validation_meta.env" ]]; then
24+
# shellcheck disable=SC1091
25+
source "${ROOT_DIR}/validation_meta.env"
26+
fi
2127

2228
# Best-effort resolve PTO_ISA_ROOT for generated CMakeLists.txt.
2329
if [[ -z "${PTO_ISA_ROOT:-}" ]]; then
@@ -110,10 +116,40 @@ copy_outputs_as_golden() {
110116
done
111117
}
112118

119+
ensure_golden_outputs_present() {
120+
local missing=0
121+
if [[ -f "${ROOT_DIR}/outputs.txt" ]]; then
122+
while IFS= read -r name; do
123+
[[ -n "${name}" ]] || continue
124+
if [[ ! -f "${ROOT_DIR}/golden_${name}.bin" ]]; then
125+
echo "[ERROR] Missing golden output: ${ROOT_DIR}/golden_${name}.bin" >&2
126+
missing=1
127+
fi
128+
done < "${ROOT_DIR}/outputs.txt"
129+
if [[ ${missing} -ne 0 ]]; then
130+
echo "[ERROR] GOLDEN_MODE=npu expects golden.py/custom assets to prepare golden_*.bin" >&2
131+
echo "[ERROR] Use GOLDEN_MODE=npu_consistency for run-to-run NPU consistency checks" >&2
132+
return 1
133+
fi
134+
return 0
135+
fi
136+
137+
if compgen -G "${ROOT_DIR}/golden_*.bin" > /dev/null; then
138+
return 0
139+
fi
140+
141+
echo "[ERROR] No golden_*.bin found for GOLDEN_MODE=npu" >&2
142+
echo "[ERROR] Use GOLDEN_MODE=npu_consistency for run-to-run NPU consistency checks" >&2
143+
return 1
144+
}
145+
113146
case "${GOLDEN_MODE}" in
114147
sim)
148+
python3 "${ROOT_DIR}/golden.py"
115149
LD_LIBRARY_PATH="${LD_LIBRARY_PATH_SIM}" "${ROOT_DIR}/${BUILD_DIR}/@EXECUTABLE@_sim"
116-
copy_outputs_as_golden
150+
if [[ "${CUSTOM_GOLDEN}" != "1" ]]; then
151+
copy_outputs_as_golden
152+
fi
117153
if [[ "${RUN_MODE}" == "npu" ]]; then
118154
LD_LIBRARY_PATH="${LD_LIBRARY_PATH_NPU}" "${ROOT_DIR}/${BUILD_DIR}/@EXECUTABLE@"
119155
fi
@@ -125,7 +161,23 @@ case "${GOLDEN_MODE}" in
125161
exit 2
126162
fi
127163
python3 "${ROOT_DIR}/golden.py"
164+
ensure_golden_outputs_present
165+
if [[ "${CUSTOM_GOLDEN}" == "1" ]]; then
166+
echo "[INFO] Using custom golden for @EXECUTABLE@"
167+
fi
128168
LD_LIBRARY_PATH="${LD_LIBRARY_PATH_NPU}" "${ROOT_DIR}/${BUILD_DIR}/@EXECUTABLE@"
169+
COMPARE_STRICT=1 python3 "${ROOT_DIR}/compare.py"
170+
;;
171+
npu_consistency)
172+
if [[ "${RUN_MODE}" != "npu" ]]; then
173+
echo "[ERROR] GOLDEN_MODE=npu_consistency requires RUN_MODE=npu" >&2
174+
exit 2
175+
fi
176+
python3 "${ROOT_DIR}/golden.py"
177+
LD_LIBRARY_PATH="${LD_LIBRARY_PATH_NPU}" "${ROOT_DIR}/${BUILD_DIR}/@EXECUTABLE@"
178+
if [[ "${CUSTOM_GOLDEN}" == "1" ]]; then
179+
echo "[INFO] Ignoring custom golden for @EXECUTABLE@; using first NPU run as determinism baseline"
180+
fi
129181
copy_outputs_as_golden
130182
python3 "${ROOT_DIR}/golden.py"
131183
LD_LIBRARY_PATH="${LD_LIBRARY_PATH_NPU}" "${ROOT_DIR}/${BUILD_DIR}/@EXECUTABLE@"
@@ -139,7 +191,7 @@ case "${GOLDEN_MODE}" in
139191
echo "[WARN] compare skipped (GOLDEN_MODE=skip)"
140192
;;
141193
*)
142-
echo "[ERROR] Unknown GOLDEN_MODE=${GOLDEN_MODE} (expected: sim|npu|skip)" >&2
194+
echo "[ERROR] Unknown GOLDEN_MODE=${GOLDEN_MODE} (expected: sim|npu|npu_consistency|skip)" >&2
143195
exit 2
144196
;;
145197
esac

0 commit comments

Comments
 (0)