mlir-aie maintainer dashboard

Nightly checks of the kernels, the compiler and whole designs on Ryzen AI NPUs

Overview

How each area did on its latest run. Open one for what went wrong and how to reproduce it.

About this dashboard

One page, utils/kernel_checks/index.html, with no build step: the nightly workflows copy it to gh-pages:dashboard/ each time they publish, and it reads the data they publish beside it.

Where the data is

kernel-checks/<npu>/
the kernel checks, per NPU, written by nightlyKernelChecks.yml through publishKernelResults.yml
component-checks/<check>/
the performance and compiler checks, per check: sa-placer and sa-placer-hw, written by nightlyComponentChecks.yml; allocator and router, written by modelBasedTests.yml
ci-health/
status.json, the critical test workflows' figures, merge time and the scheduled workflows' recent runs, and history.json, a point a day of those figures; written every six hours by publishCiHealth.yml (utils/kernel_checks/ci_health.py)
code-health/
status.json, last night's coverage, sanitizer findings, code scanning alerts and clang-tidy findings, and history.json, a point a night; written by nightlyCodeHealth.yml (utils/kernel_checks/code_health.py)

Both are written by utils/kernel_checks/publish.py in one format: runs/<id>.json (one run's record), runs.json (a summary per run), latest.json (the newest record that published numbers; the kernel checks' pull-request report compares against it) and history/<metric>.json (every run's value of one metric per case). A kernel NPU also has catalogue.json, every kernel factory and how its cases fared. Runs older than 90 days thin to weekly. Files carry a schema number, and the page sets aside a newer one rather than misread it.

Lower is better, except where a metric says higher is better: rates such as tokens or images per second, and verified counts. A change is colored by whether it is worse, not by its sign, and each chart's axis says which way is better. A change counts once it passes the metric's threshold in utils/kernel_checks/thresholds.json, which the pull-request report reads too; a noisy timing also has to pass a multiple of its run-to-run spread. Runs started by hand are charted but never compared against.

Working on the page

python3 utils/kernel_checks/preview.py --fetch                 # the published data, this page
python3 utils/kernel_checks/snapshot.py --fetch                  # the same as one self-contained file, no server or mlir_aie
python3 -m pytest test/test_kernel_checks_page.py                # the page's code, under node; its own failure states, against recorded data

To add a section: publish its checks to component-checks/<check>/ from a nightly job (add the check to COMPONENTS in publish.py), then add the section to SECTIONS and its checks to BANDS in the page.