Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -642,10 +642,6 @@ jobs:
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: "3.12"
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
if: matrix.shard.suite == 'contracts'
with:
node-version: "22"
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: application-test-wheel-${{ matrix.arch }}
Expand All @@ -669,12 +665,14 @@ jobs:
python -m pip install pip-licenses==5.5.5
python -m uv pip install --system "${AISIMULATE_TEST_WHEEL}[dev]" -r scripts/fpm_accuracy/requirements.in
python -m pip check
python scripts/check_prediction_numerics.py --fetch-baseline-only
python scripts/check_application_test_inventory.py --output application-test-inventory.json
python -m pytest -q \
python/aisimulate/tests/unit/cli/test_aisimulate_compatibility.py \
python/aisimulate/tests/cross_package
aiconfigurator version
python -m pytest -q -c pytest.ini tests -n 4
python -m pytest -q -c pytest.ini tests -n 4 \
--ignore=tests/test_ci_workflow_contracts.py
- name: Run unit tests
if: matrix.shard.suite == 'unit'
run: >-
Expand Down Expand Up @@ -834,7 +832,9 @@ jobs:
-c python/aisimulate/pytest.ini
crates/core/parity_tests/perfmodel/test_compile_engine_parity.py
- name: Check native prediction numerical sentinels
run: python scripts/check_prediction_numerics.py --output numerical-sentinels.json
run: |
python scripts/check_prediction_numerics.py --fetch-baseline-only
python scripts/check_prediction_numerics.py --output numerical-sentinels.json
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
if: always()
with:
Expand Down Expand Up @@ -880,8 +880,8 @@ jobs:
release-smoke/bin/python -c
"import importlib.metadata as metadata;
import aisimulate, aisimulate_core, aiconfigurator, aiconfigurator_core;
assert aisimulate.__version__ == aisimulate_core.__version__ == '0.12.0';
assert metadata.version('aisimulate') == '0.12.0';
assert aisimulate.__version__ == aisimulate_core.__version__ == '0.13.0';
assert metadata.version('aisimulate') == '0.13.0';
installed = {dist.metadata['Name'].lower() for dist in metadata.distributions()};
forbidden = {'aisimulate-core', 'aiconfigurator', 'aiconfigurator-core'};
assert installed.isdisjoint(forbidden), installed & forbidden"
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/fast-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ jobs:
fi
- name: Check active workflow contracts
run: |
python scripts/check_prediction_numerics.py --fetch-baseline-only
python -m pytest -c /dev/null tests/test_ci_workflow_contracts.py tests/test_ci_qualification.py tests/test_release_fpe.py -q \
-p no:cacheprovider \
--override-ini="addopts=" \
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ exclude = ["crates/tests/public-api"]
resolver = "3"

[workspace.package]
version = "0.12.0"
version = "0.13.0"
edition = "2024"
description = "Backend-neutral inference simulation and deployment configuration search"
authors = ["NVIDIA Inc. <sw-dl-dynamo@nvidia.com>"]
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ contract.
## AIConfigurator compatibility CLI

The `aisimulate` wheel preserves the established `aiconfigurator` command for
workflows that have not yet moved to the unified CLI. AISimulate 0.12.0 keeps
workflows that have not yet moved to the unified CLI. AISimulate 0.13.0 keeps
this compatibility surface, while new prediction and search integrations
should start with `aisimulate predict` and `aisimulate recommend`.

Expand Down Expand Up @@ -231,7 +231,7 @@ development, releases, issues, and pull requests; open all new issues and pull
requests in this repository.

The `aiconfigurator` compatibility command remains available from the
`aisimulate` wheel in 0.12.0. It is targeted for removal in AISimulate 0.13.0,
`aisimulate` wheel through 0.13.0. It is targeted for removal in AISimulate 0.14.0,
after every remaining AIC workflow has a verified replacement in the unified
`aisimulate` CLI. Until then, use the compatibility command for the workflows
identified in the migration guide.
Expand Down
2 changes: 1 addition & 1 deletion crates/core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[package]
name = "aisimulate-core"
description = "Engine-neutral inference simulation, deterministic replay, and performance modeling"
version = "0.12.0"
version = "0.13.0"
edition.workspace = true
authors.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/core/perfmodel/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ crate's `embed-python` feature, which enables PyO3's `auto-initialize` support:

```toml
[dependencies]
aisimulate-core = { version = "0.12.0", features = ["embed-python"] }
aisimulate-core = { version = "0.13.0", features = ["embed-python"] }
```

Applications that embed Python in an existing host may initialize the
Expand Down
27 changes: 23 additions & 4 deletions crates/core/src/perfmodel/engine/runtime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1958,7 +1958,18 @@ mod tests {

/// Build an `Engine` from the hand-built op lists over the real fixture DB.
fn build_engine(nextn: Option<u32>) -> Engine {
let db = PerfDatabase::load(&systems_root(), "b200_sxm", "vllm", "0.24.0").unwrap();
// Match SILICON's shared-layer default and honor the declared reuse
// of graph-timed FP8-block GEMM measurements from vLLM 0.25.0.
let db = PerfDatabase::load_resolved(
&systems_root(),
"b200_sxm",
"vllm",
"0.24.0",
true,
false,
false,
)
.unwrap();
let spec = EngineSpec::new(
fixture_engine_config(nextn),
context_ops(),
Expand Down Expand Up @@ -2335,9 +2346,17 @@ mod tests {

for mode in [DatabaseMode::Silicon, DatabaseMode::Sol] {
let db = Arc::new(
PerfDatabase::load(&systems_root(), "b200_sxm", "vllm", "0.24.0")
.unwrap()
.with_mode(mode, TransferPolicy::default()),
PerfDatabase::load_resolved(
&systems_root(),
"b200_sxm",
"vllm",
"0.24.0",
mode == DatabaseMode::Silicon,
false,
false,
)
.unwrap()
.with_mode(mode, TransferPolicy::default()),
);
let mut config = fixture_engine_config(Some(3));
config.database_mode = mode;
Expand Down
18 changes: 13 additions & 5 deletions crates/core/src/perfmodel/fpm/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,10 +135,7 @@ fn fixture_engine_config() -> EngineConfig {
/// public `from_native` constructors compile via Python; `from_engine` lets
/// the pure-Rust tests build the native variant directly.
fn native_model(options: ForwardPassPerfOptions) -> ForwardPassPerfModel {
let db = PerfDatabase::load(&systems_root(), "b200_sxm", "vllm", "0.24.0").unwrap();
let spec = EngineSpec::new(fixture_engine_config(), context_ops(), generation_ops());
let engine = Engine::build(spec, Arc::new(db)).unwrap();
ForwardPassPerfModel::from_engine(Arc::new(engine), options)
ForwardPassPerfModel::from_engine(fixture_engine(), options)
}

fn regression_model(
Expand All @@ -149,7 +146,18 @@ fn regression_model(
}

fn fixture_engine() -> Arc<Engine> {
let db = PerfDatabase::load(&systems_root(), "b200_sxm", "vllm", "0.24.0").unwrap();
// Match SILICON's shared-layer default: 0.24.0 declares reuse of the
// corrected, graph-timed FP8-block GEMM measurements from 0.25.0.
let db = PerfDatabase::load_resolved(
&systems_root(),
"b200_sxm",
"vllm",
"0.24.0",
true,
false,
false,
)
.unwrap();
let spec = EngineSpec::new(fixture_engine_config(), context_ops(), generation_ops());
Arc::new(Engine::build(spec, Arc::new(db)).unwrap())
}
Expand Down
2 changes: 1 addition & 1 deletion crates/tests/public-api/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions docs/artifact-contract.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# AISimulate artifact contract

AISimulate 0.12.0 has one product version and exactly two release artifacts:
AISimulate 0.13.0 has one product version and exactly two release artifacts:

| Artifact | Build manifest | Public purpose |
| --- | --- | --- |
Expand All @@ -17,7 +17,7 @@ live inside the `aisimulate` wheel and therefore do not add artifacts.
builds and validates the output directory afterward. A release build fails if
an additional wheel, source distribution, or crate appears.

Both artifacts use version `0.12.0`. The wheel builds its native extension from
Both artifacts use version `0.13.0`. The wheel builds its native extension from
the same Rust source as the published crate; it does not install a second core
distribution.

Expand All @@ -36,8 +36,8 @@ fails CI if either packaging copy differs byte-for-byte from its root original,
and the release-artifact validator checks the bytes installed in the wheel.

Nightly builds stamp a dev suffix with `scripts/apply_dev_version.py` before
building: the wheel becomes `0.12.0.devYYYYMMDD` (PEP 440) and the crate
`0.12.0-dev.YYYYMMDD` (SemVer — cargo rejects the PEP 440 spelling, and the
building: the wheel becomes `0.13.0.devYYYYMMDD` (PEP 440) and the crate
Comment thread
jasonqinzhou marked this conversation as resolved.
`0.13.0-dev.YYYYMMDD` (SemVer — cargo rejects the PEP 440 spelling, and the
dotted date is a numeric identifier so pre-release versions order
numerically). The wheel form follows the ai-dynamo/dynamo nightly
convention. The release script accepts only this suffix pair and still
Expand Down
7 changes: 5 additions & 2 deletions docs/ci.md
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,10 @@ marked it N/A.
[Native numerical checks](../scripts/check_prediction_numerics.py) exercise
eight frozen queries: dense Qwen3-32B and MoE MiniMax-M2.5, prefill/decode, and
short/long sequences. The [manifest](../.github/prediction-numerical-sentinels.json)
records a full baseline commit that must resolve in the checkout. Tolerances
records a full baseline commit that must resolve in the checkout. CI runs
`scripts/check_prediction_numerics.py --fetch-baseline-only` before contract
tests and native qualification so historical PR commits remain available after
squash merges. This fetch preserves the recorded SHA and expected values. Tolerances
are 2% relative and 0.0001 ms absolute. Missing, duplicate, failed, nonfinite,
nonpositive, or out-of-tolerance results fail. Intentional modeling changes
need explained before/after evidence; do not refresh goldens merely to pass CI.
Expand Down Expand Up @@ -349,7 +352,7 @@ Main branch nightly CI builds the approved release surface: one `aisimulate` whe
architecture and one `aisimulate-core` Rust source crate. A changes guard compares
`main` with the last successful scheduled nightly. The build stamps a dev version using the original UTC run-creation date followed
by its zero-padded ten-digit workflow run number, for example
`0.12.0.dev202609170000001234`. Scheduled and manual runs have distinct versions;
`0.13.0.dev202609170000001234`. Scheduled and manual runs have distinct versions;
retries retain the same version, and later dates sort after earlier dates. Builds
use pinned tooling and record checksums and provenance.

Expand Down
4 changes: 2 additions & 2 deletions docs/cli/migrate-from-aiconfigurator.md
Original file line number Diff line number Diff line change
Expand Up @@ -1471,7 +1471,7 @@ aggregate-only SLA semantics, described in its feature guide.
### 6.2 Repository and release transition

AISimulate is the home for ongoing development, issues, and releases. The standalone
AIConfigurator repository is scheduled to archive after its final 0.12.0 release. AISimulate 0.12.0
keeps the AIC compatibility command; removal is targeted for 0.13.0 after all remaining workflows
AIConfigurator repository is scheduled to archive after its final 0.12.0 release. AISimulate 0.13.0
keeps the AIC compatibility command; removal is targeted for 0.14.0 after all remaining workflows
have verified unified-CLI replacements. See the [release transition policy](../../README.md#aiconfigurator-repository-transition)
and [repository history](../repository-history.md).
2 changes: 1 addition & 1 deletion docs/core-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ and unified native PyO3 extension. It does not depend on another core
distribution or on Dynamo. The crate owns the compiled engine, forward-pass
model, Replay runtime, KV-cache request/response types, and the embedded
Rust-to-Python construction path. The legacy `aiconfigurator_core` Python
namespace remains available during the AIC 0.12.0 compatibility window.
namespace remains available in AISimulate 0.13.0 for compatibility.

## Stable Python facade

Expand Down
7 changes: 7 additions & 0 deletions docs/data/pr244/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ and row count match. Rejection leaves the existing manifest unchanged.
All 85 tables have zero reported null cells, duplicate physical keys, and
nonfinite or nonpositive latency values.

The Collector backend-facts registry records 221 new vLLM 0.25.0 slices
from these tables (49 each for B300, GB200, and GB300; 37 each for H100 and
H200). Six direct vLLM 0.24.0 FP8-block GEMM facts are removed for the
corrected tables described below. Their replacements remain identified as
0.25.0 measurements. Existing backend/kernel mappings are unchanged; the
registry check still compares every fact against the collected labels.

Cases and rows are different units: a single MoE/GDN case can emit many rows.
Zero unattempted cases means every **retained** case reached a final checkpoint
outcome. It does not mean every possible shape succeeded or that capability
Expand Down
2 changes: 1 addition & 1 deletion docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ to the intended environment.
## Use an internal nightly

The [nightly workflow](../.github/workflows/nightly-ci.yml) produces a wheel
version such as `0.12.0.devYYYYMMDD`, then stages artifacts to access-controlled
version such as `0.13.0.devYYYYMMDD`, then stages artifacts to access-controlled
Artifactory through the protected release environment. The run subsequently
checks the downloaded wheel and qualifies its FPE support matrix. Use a
successful completed nightly: a successful build, staging step, or dev suffix
Expand Down
12 changes: 6 additions & 6 deletions docs/repository-history.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,20 @@ migration is tracked by

### API mapping

| AIC 0.11 surface | AISimulate 0.12 surface | Compatibility |
| AIC 0.11 surface | AISimulate 0.13 surface | Compatibility |
| --- | --- | --- |
| Python distribution `aiconfigurator` | `aisimulate` | The `aiconfigurator` command and import namespace ship inside `aisimulate` during the compatibility window |
| CLI `aiconfigurator ...` | `aisimulate predict` / `aisimulate recommend` for new simulation workflows; `aiconfigurator ...` for compatibility-only workflows | See the [AIC migration guide](cli/migrate-from-aiconfigurator.md); this is not a flag-compatible rename |
| Python distribution `aiconfigurator-core` | included in `aisimulate` | No separate core distribution is installed |
| `aiconfigurator_core` | `aiconfigurator_core` from the `aisimulate` wheel | Existing import remains available in 0.12.0 |
| `aiconfigurator_core.sdk` | `aisimulate_core.sdk` facade in the same wheel | Both import paths remain available in 0.12.0 |
| `aiconfigurator_core` | `aiconfigurator_core` from the `aisimulate` wheel | Existing import remains available in 0.13.0 |
| `aiconfigurator_core.sdk` | `aisimulate_core.sdk` facade in the same wheel | Both import paths remain available in 0.13.0 |
| Rust package/import `aiconfigurator-core` / `aiconfigurator_core` | `aisimulate-core` / `aisimulate_core` | Cargo consumers may temporarily alias the new package under the old dependency key |

Temporary Cargo alias:

```toml
[dependencies]
aiconfigurator-core = { package = "aisimulate-core", version = "0.12", features = ["python"] }
aiconfigurator-core = { package = "aisimulate-core", version = "0.13", features = ["python"] }
```

The former AIC crate-root types and builders remain available through this
Expand Down Expand Up @@ -175,8 +175,8 @@ will publish its final 0.12.0 `aiconfigurator` and `aiconfigurator-core`
artifacts and then be archived; ongoing development, releases, issues, and pull
requests move to AISimulate.

The compatibility command remains in the AISimulate 0.12.0 wheel and is
targeted for removal in AISimulate 0.13.0. Removal is gated on verified unified
The compatibility command remains in the AISimulate 0.13.0 wheel and is
targeted for removal in AISimulate 0.14.0. Removal is gated on verified unified
CLI replacements for every remaining workflow in the migration guide.

For features already implemented by the standalone Sweeper, see
Expand Down
5 changes: 3 additions & 2 deletions python/aisimulate/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ SPDX-License-Identifier: Apache-2.0
# AISimulate application (AIConfigurator compatibility source)

> This directory contains the complete AIConfigurator application migrated to
> the standalone AISimulate repository. It builds the `aisimulate` 0.12.0
> the standalone AISimulate repository. It builds the `aisimulate` 0.13.0
Comment thread
jasonqinzhou marked this conversation as resolved.
> wheel, not a separate `aiconfigurator` wheel. The legacy import namespace and
> `aiconfigurator` executable remain compatibility surfaces alongside the public
> `aisimulate` prediction CLI. The original AIC
> `aisimulate` prediction CLI. Command removal is targeted for AISimulate 0.14.0,
> after every remaining workflow has a verified unified-CLI replacement. The original AIC
> documentation below is retained so existing workflows remain discoverable
> during the CLI parity and deprecation window.

Expand Down
Loading
Loading