v2.2.0 release - #169
Conversation
There was a problem hiding this comment.
Pull request overview
Adds release notes for madengine v2.2.0 to the project changelog, documenting recent authentication, manifest, and GPU/tooling fixes in a Keep-a-Changelog format.
Changes:
- Added a new
2.2.0section dated2026-08-12under the changelog. - Documented key “Added” and “Fixed” items for the v2.2.0 release.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
|
||
| - **`multiple_results` preserved in local-image manifest** (#166): `MAD_CONTAINER_IMAGE` (local-image) mode built a synthetic manifest that omitted the model's `multiple_results` field from `models.json`. Without it, `ContainerRunner` never set `MAD_OUTPUT_CSV` or copied the perf CSV out of the container, instead falling back to scraping the run log for a `"performance: NUMBER METRIC"` line — reporting `FAILURE` even when the model produced valid perf-CSV results. `RunOrchestrator` now carries `multiple_results` through to the manifest it synthesizes for local-image runs. | ||
|
|
||
| - **GPU tool detection honors non-default ROCm install paths and PATH** (#168): `amd_smi_utils.py`, `rocm_smi_utils.py`, and `gpu_info_profiler.py` hardcoded `/opt/rocm`; they now honor `$ROCM_PATH` (falling back to `/opt/rocm`). `gpu_info_pre.sh` detects `nvidia-smi`/`rocm-smi`/`amd-smi` via `command -v` instead of a fixed binary path, and calls `rocminfo` only when it's available instead of failing the pre-script when it's absent. The rpd tracer's `LD_LIBRARY_PATH` is now ROCm-path-aware, and `rpd2tracing.py` failures fall back to saving the raw `trace.rpd` instead of losing the trace. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.
Suppressed comments (2)
CHANGELOG.md:14
- The changelog header uses the acronym “OAT” without expanding it; readers may not know it means “organization access token”. Consider expanding it on first mention (e.g., “organization access token (OAT)”) or removing the acronym from the heading.
- **Reuse existing `docker login` (OAT) instead of requiring `credential.json`** (#168): madengine previously required credentials to be duplicated into `credential.json`/env vars even when the machine already had a working `docker login` (e.g. an organization access token). `has_ambient_docker_auth()` (`core/auth.py`) now reads `${DOCKER_CONFIG:-~/.docker}/config.json` the same way the Docker CLI does — covering `auths`, `credHelpers`, and `credsStore` — so an existing login is reused and blank placeholder credentials (`{"username": "", "password": ""}`) never override or break it. `docker build --pull` now only logs in to the base image's registry when there's no existing login to reuse. Base-image pull failures also distinguish `insufficient_scope` (authorization — token needs wider repo scope) from `unauthorized`/`authentication required` (login problem), and `explain_registry_denial()` now names the actual failing registry (e.g. `ghcr.io`) in its `docker login`/`credential.json` suggestions instead of always assuming Docker Hub. Documented in `docs/configuration.md` under a new "Registry Authentication" section.
CHANGELOG.md:18
- This changelog has an explicit guideline to “Use present tense” (see “Guidelines for Changelog Updates” in the same file). This entry title is in past tense (“preserved”), which makes it inconsistent with the rest of the changelog style.
- **`multiple_results` preserved in local-image manifest** (#166): `MAD_CONTAINER_IMAGE` (local-image) mode built a synthetic manifest that omitted the model's `multiple_results` field from `models.json`. Without it, `ContainerRunner` never set `MAD_OUTPUT_CSV` or copied the perf CSV out of the container, instead falling back to scraping the run log for a `"performance: NUMBER METRIC"` line — reporting `FAILURE` even when the model produced valid perf-CSV results. `RunOrchestrator` now carries `multiple_results` through to the manifest it synthesizes for local-image runs.
Reflects fix(slurm): make the generated job script portable across clusters (c5b016f), which landed after the CHANGELOG's v2.2.0 section was first written.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.
Suppressed comments (1)
CHANGELOG.md:14
- The changelog entry title uses the acronym "OAT" without expanding it; elsewhere in the docs it’s introduced as “organization access token (OAT)”. Expanding it here improves clarity for readers unfamiliar with the term.
- **Reuse existing `docker login` (OAT) instead of requiring `credential.json`** (#168): madengine previously required credentials to be duplicated into `credential.json`/env vars even when the machine already had a working `docker login` (e.g. an organization access token). `has_ambient_docker_auth()` (`core/auth.py`) now reads `${DOCKER_CONFIG:-~/.docker}/config.json` the same way the Docker CLI does — covering `auths`, `credHelpers`, and `credsStore` — so an existing login is reused and blank placeholder credentials (`{"username": "", "password": ""}`) never override or break it. `docker build --pull` now only logs in to the base image's registry when there's no existing login to reuse. Base-image pull failures also distinguish `insufficient_scope` (authorization — token needs wider repo scope) from `unauthorized`/`authentication required` (login problem), and `explain_registry_denial()` now names the actual failing registry (e.g. `ghcr.io`) in its `docker login`/`credential.json` suggestions instead of always assuming Docker Hub. Documented in `docs/configuration.md` under a new "Registry Authentication" section.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.
Suppressed comments (1)
CHANGELOG.md:16
- The new docs entry is currently listed under
[Unreleased], but this PR is for the v2.2.0 release; leaving it in Unreleased makes the released 2.2.0 notes incomplete and implies the README rewrite is not part of 2.2.0. Move the### Docssubsection (and its bullet) into the## [2.2.0]section and leave[Unreleased]empty.
## [Unreleased]
### Docs
- **README rewritten as a concise landing page** (#161): Trimmed the root README from 707 to 258 lines by moving deep reference material (profiling tables, extended config/usage recipes, tips) into `docs/` and linking out. Replaced the stale ASCII architecture block and unreferenced `docs/img` PNGs with accurate inline Mermaid diagrams for the layered architecture, build→run→report pipeline, and deployment-target inference; added matching diagrams to `docs/deployment.md` and `docs/README.md`. Also corrects numerous stale references across docs: `--csv-file` → `--csv-file-path`/`--file`, missing `database` command flags (`--unique-key`/`-k`, `--batch-size`, `--no-upsert`, `--no-index`, `--dry-run`, `MONGO_AUTH_SOURCE`/`MONGO_TIMEOUT_MS`), wrong `run --output`/`--tools-config` defaults, `megatron` → `megatron-lm` launcher name, fabricated `timeout_multiplier`/`service_account` config keys, missing Kubernetes/SLURM `additional_context` keys, `DOCKER_CONFIG`/`MAD_SKIP_DOCKER_LOGIN` documentation, and corrected SGLang Disaggregated minimum node counts/split formula for SLURM vs. Kubernetes.
Docs update accordingly to v2.2.0