Repository navigation
Conversation
Answers the five questions asked for a MAD status update in one place: current public model support, the oncoming model plan, what QA covers and what it does not, the ROCm support matrix, and the architectures with CI. - tools/dashboard/collect.py derives everything the repo already knows: models via madengine's DiscoverModels (static and get_models_json.py), GPU products from skip_gpu_arch or the Primus config directory, base images and ROCm versions from the Dockerfiles. - dashboard/status.yaml holds the facts the repo cannot know: CI matrix, QA statements, public-safe roadmap, ROCm versions not in an image tag. An optional gitignored roadmap.internal.yaml is merged only by build.py --internal, never in CI. - tools/dashboard/build.py renders the live page plus one page per frozen release (dashboard/releases/<version>.json, written by --freeze) with changes since the previous release. - .github/workflows/dashboard.yml runs the unit tests and builds on PRs, and deploys to Pages from develop on ROCm/MAD. Co-Authored-By: Claude <noreply@anthropic.com>
…m.ai The site is now multi-page: a browse/search home, one recipe page per model, and the versioned status report under status/. - tools/dashboard/recipes.py generates, per model and GPU product, the madengine command and the equivalent plain commands: docker build with the model's Dockerfile and context, and docker run with madengine's device/security options, MAD_* environment and run-directory steps. SLURM multi-node cards build and push the image and submit their launcher with sbatch, as the framework READMEs document. - Recipe pages group a model's precisions/transports as variants and merge per-GPU Primus configs, with hardware / variant / method pickers. - Model families ignore precision suffixes and punctuation, so Llama-3.3-70B-Instruct, -FP8-KV and -MXFP4-Preview share one page. - nodes_of reads the card's slurm block; status.yaml frameworks link their READMEs from the recipe pages. Co-Authored-By: Claude <noreply@anthropic.com>
- Top navigation: Overview (home), Models, ROCm, QA, CI, Roadmap, Releases, plus a version switcher and a frozen-release banner. - Models is the single model catalog: one row per recipe page with per-GPU support (every variant / some variants / none), a framework summary, table and card views, filters kept in the URL, and a config-level models.csv export. Recipe pages gain a breadcrumb and a variant x GPU support table. - Each frozen release renders the whole site under /<version>/ and its recipes check out the release commit; the switcher keeps the current page when it exists in the other version. - build.py renders one tree per version, derives relative roots from the output path, and fails the build on any broken internal link. Co-Authored-By: Claude <noreply@anthropic.com>
Roadmap: - Open issues labeled new-model are the plan; the PRs that close them, or PRs carrying the label on their own, set the status (planned / in progress / in review / blocked). Merged work drops off and appears under Models. Items whose model is already on develop are listed separately as landed but still open. - New madengine tags per item come from the PR's own diff against its merge base, so moved entries and models already on develop don't count. - Add a "Model onboarding" issue form that applies the label, and a read-only `build.py --roadmap-report` for maintainers. - No token or API errors fall back to the status.yaml roadmap with a warning. Hosting: - build.py --repo-root/--source-repo describe another checkout (e.g. ROCm/MAD develop from a fork); recipe clone URLs and GitHub links follow the source repo. --offline skips GitHub. - The workflow runs every 3 hours as well as on push, can check out vars.DASHBOARD_SOURCE_REPO, and deploys when vars.DASHBOARD_PAGES is true instead of only on ROCm/MAD. Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
coketaste
requested review from
Cemberk,
amathews-amd,
gargrahul,
itej89,
lcskrishna and
leconcio
as code owners
October 30, 2026 14:59
- Model pages and lists show the provider's logo, matched from the Hugging Face org or, for Primus/JAX configs without one, from the model name. Logos are the Hugging Face org avatars that recipes.vllm.ai shows, fetched once by tools/dashboard/fetch_logos.py and vendored under dashboard/logos/, so the site loads no third-party images. - Frameworks get a mark where one exists (vLLM, PyTorch via Simple Icons, CC0) and a generated monogram otherwise; section pages get line glyphs; recipe pages mark the Docker and madengine methods. - Each page ships one inline SVG sprite with only the marks it uses. - dashboard/icons.yaml is the single place to add or change a logo, and `logos: neutral` (or --logos neutral) swaps every brand mark for a neutral monogram. A trademark notice is added to the footer and dashboard/logos/NOTICE.md records the sources. - Fix the roadmap template for PR-sourced items without a Hugging Face id. Co-Authored-By: Claude <noreply@anthropic.com>
Models catalog:
- A Scale column shows nodes per run and the scheduler it needs
("1 node", "2 nodes · SLURM", "1–4 nodes · SLURM", "2+ nodes · SLURM"),
with chips for a manual Kubernetes path, opt-in configs, and single-node
models that run multi-node under another framework (↗ multi-node).
- The "Multi-node only" checkbox becomes a Scale filter: single node,
multi-node, single and multi-node, SLURM, Kubernetes (?multinode=1 links
still work). The CSV gains scheduler, k8s and discovery columns.
Recipe pages:
- A Scale row links the same model across frameworks, e.g. vLLM
Llama-3.3-70B <-> vLLM / SGLang disaggregated P/D on 2 nodes.
- Nodes becomes a real choice for node-count sweeps, and a Cluster choice
(single node / SLURM / Kubernetes) strikes through what a card cannot
do, with the reason (e.g. slurm_multi is SLURM-only in madengine).
- Fix the madengine recipe for slurm_multi cards: madengine sizes the
allocation from slurm.nodes and hands -N/-n in args to the script, so
the old recipe ran on one node. The build context now sets nodes.
- Disaggregated P/D cards get an "Other topologies" step (xP prefill + yD
decode nodes) for madengine and sbatch.
- KV cache transfer gets its README's per-node run as the Kubernetes /
bare-metal recipe (status.yaml `k8s: manual`).
- The multi-node-only JAX MaxText configs (grok1, Llama 3.1 405B,
Mixtral 8x22B), hidden unless JAX_MAXTEXT_INCLUDE_MULTINODE=1, are
listed as opt-in with an experimental recipe on madengine's primus
launcher over SLURM.
- Large EP and KV cache microbenchmarks become one page each
(status.yaml `one_page`), their cards variants of it.
QA and Overview: multi-node, Kubernetes and opt-in coverage are derived
from the registry (replacing the hand-written MaxText entry); the
Overview gets a Multi-node tile. Snapshot schema 2 adds row deployment
fields; older frozen snapshots are back-filled when rendered.
Co-Authored-By: Claude <noreply@anthropic.com>
MAD is an AMD open-source project; brand the site the way AMD's ROCm documentation (rocm-docs-core) does: - Header: the AMD logo first, linked to amd.com, then a divider and "MAD / Recipes". The artwork is AMD's own (rocm-docs-core amd-header-logo.svg), shapes unchanged, filled with the text color so it shows as the black or white one-color logo with the theme. The red bar that imitated a brand accent next to "MAD" is removed. - Favicon: the AMD Arrow alone, as amd.com uses it, cut from the same artwork; black or white by the browser's color scheme. - Footer: (c) Advanced Micro Devices, Inc., Terms and Conditions, Privacy and Trademarks (amd.com/en/corporate, as on rocm.docs.amd.com), the repo license, and AMD's trademark attribution ahead of the third-party logo notice. - Assets are vendored under dashboard/logos/amd/ by fetch_logos.py and recorded in sources.json and NOTICE.md, so the site still loads no third-party images. `logos: neutral` shows the word AMD and no favicon. - The top bar collapses at 1200px (was 1100px) for the wider brand, and drops the divider and "/ Recipes" on phones. Co-Authored-By: Claude <noreply@anthropic.com>
The header now reads AMD logo, divider, "MAD". Drop the "/ Recipes" suffix and the .sep styling, and the phone rule that hid it, since the divider and brand are no longer collapsed separately. Co-Authored-By: Claude <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The Large-EP recipe sets the wrong image variable, causing jobs to run the card’s existing Docker image instead of the image the recipe builds and pushes.
6 open issues
Large-EP launcher uses the old Docker image variable · New Build token lacks permissions to query issues and pull requests · New Hidden cards remain visible because display rules override [hidden] · New GPU and precision filters can match different configurations · New GPU links can resolve to an incompatible default variant · New Onboarding is marked landed without matching framework and precision · New
Review effort: Balanced
- Large-EP SLURM recipe: export the built image as DOCKER_IMAGE too, and stop re-exporting the card's pinned image. - dashboard.yml: grant issues/pull-requests read for the roadmap queries. - Add a global [hidden] rule so filtered cards and node pills hide. - Models filter: match the selected GPU and precision against the same card. - Recipe page: a ?sku= link without ?v= picks a variant that supports it. - Roadmap: mark an item landed only when family, precision and framework match. Co-Authored-By: Claude <noreply@anthropic.com>
Both registries came in with the new models on develop but were not in status.yaml, so they showed under their directory names. Name them, link their READMEs, and list their images under rocm_overrides until the ROCm versions are filled in. Co-Authored-By: Claude <noreply@anthropic.com>
The "This release" grid used auto-fill with a 250px minimum, which put four tiles in the first row and left two in the second on desktop. Use a fixed three-column grid that drops to two columns at 960px and one at 620px, so the six tiles always fill complete rows. Co-Authored-By: Claude <noreply@anthropic.com>
Most "unknown" entries in the ROCm column were images whose tag does not encode a version and whose rocm_overrides entry was never filled in. The version is in the image's registry metadata, so read the image config (a few KB, no pull) and take it from, in order: a ROCm label (com.amd.rocm.version, vllm.rocm_base.dependency.rocm), the THE_ROCK_VERSION / ROCM_SDK_VERSION / ROCM_VERSION build arg as a RUN step used it (ARG defaults are placeholders), or the +rocm version of the installed wheels. Precedence is status.yaml override, image tag, registry; an override the registry contradicts is flagged. --offline skips the lookup. Unpinned images now show "latest" instead of "floating", including tags like vllm-latest that were previously reported as unknown, and the ROCm page notes the version the tag resolved to at build time. Drop the overrides the registry now resolves; keep pyt_xdit (built from TheRock artifacts, no version in its metadata) and pytorch_train (private registry). Co-Authored-By: Claude <noreply@anthropic.com>
Drop the QA coverage and CI coverage pages, their Overview tiles and navigation links, and the data behind them: the qa/ci sections of status.yaml, derived_qa(), the view() helper, the qa_list macro and the shield/server icons. status.yaml now rejects qa/ci keys. The Overview grid goes from three tiles per row to two for the remaining four. Co-Authored-By: Claude <noreply@anthropic.com>
Skip configs that name a product the dashboard does not track (the MI455X LoRA proxies); skus_for() would otherwise list them as running on every tracked GPU. Add a label_prefix option to the frameworks entries in status.yaml and use it to name the WorldMirror configs HunyuanWorld-Mirror-stage*-posttrain, which also picks up the Tencent logo. Co-Authored-By: Claude <noreply@anthropic.com>
Primus v26.9 and MAD's own docs support MI455X, so show it instead of hiding its configs. Models with no product tag still claim only the four older products; MI455X is claimed only by configs that name it. Recipes pin MAD_SYSTEM_GPU_ARCHITECTURE=gfx1250, GPU ranges are computed from neighbouring products, and the CSV columns and the new-model issue form follow the product list. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Summary
Adds MAD Recipes, a static site generated from this repository, in response to the request for a versioned MAD status update (current model support, oncoming models, QA coverage, ROCm support matrix, CI architectures).
madenginecommand, or plaindocker build/docker run(sbatchfor multi-node models) with no madengine./<version>/.Everything the repo already knows is derived from it (
scripts/*/models.json,get_models_json.py,docker/), using madengine's ownDiscoverModels, so adding a model adds its recipe page. The rest (QA scope, CI matrix, ROCm versions not in an image tag) lives indashboard/status.yaml, which is public.Oncoming models
The Roadmap is read from GitHub: open issues labeled
new-modelare the plan, and the PRs that close them (Closes #n) or carry the label themselves set the status (planned / in progress / in review / blocked). Merged work leaves the Roadmap and appears under Models. An open item whose model is already on develop is listed as "landed but still open"..github/ISSUE_TEMPLATE/new_model.yml: a "Model onboarding" issue form that applies the label.python3 tools/dashboard/build.py --roadmap-report: read-only report of model PRs missing the label and issues that already landed (for example Onboard command-r7b to MAD (vLLM extended tier) #229 and Onboard command-a-plus to MAD (vLLM default tier, MoE VLM) #230, whose models are on develop).What a maintainer needs to do (I could not, as a non-admin)
new-modelandblocked.DASHBOARD_PAGES=true.Until
DASHBOARD_PAGESistruethe workflow only builds (on PRs and pushes) and does nothing on its schedule. Once it is set,developis published on every push and every 3 hours, which picks up issue and PR changes that cannot trigger a workflow.DASHBOARD_SOURCE_REPOis optional and lets a fork publish another repo'sdevelop.Notes for review
pyyamlandjinja2for the generator; the roadmap usesurlliband the workflow's read-onlyGITHUB_TOKEN..gitignoreentries (_site/,dashboard/roadmap.internal.yaml, and an exception sodashboard/releases/*.jsoncan be committed)..gitignorealready excludes*.jsonand*.html, hence the templates use.html.j2.dashboard/roadmap.internal.yamlis gitignored and only used bybuild.py --internal.dashboard/status.yamlhas TODOs for owners: the GPU CI matrix and ROCm versions for six images whose tag does not encode one.Test plan
python3 -m pytest tools/dashboard: 49 tests (derivation helpers, recipe generation, PR-diff and roadmap logic with fixtures, and a render test that builds a two-version site and fails on any broken link).python3 tools/dashboard/build.py --out _siteagainst this tree: 229 recipe pages, 586 configurations, no broken internal links. Also built from a fresh clone ofdevelopwith--repo-root.--roadmap-reportagainst this repo's open issues and PRs.workflow_dispatchrun, then check the deployed site.docker build/docker runoptions but have not been run on a GPU yet.🤖 Generated with Claude Code