diff --git a/.github/workflows/accuracy-regression-testing.yml b/.github/workflows/accuracy-regression-testing.yml index 73833911f..a68263735 100644 --- a/.github/workflows/accuracy-regression-testing.yml +++ b/.github/workflows/accuracy-regression-testing.yml @@ -61,9 +61,9 @@ jobs: OLD_VENV="${OLD_ROOT}/.venv" python -m venv "${OLD_VENV}" "${OLD_VENV}/bin/python" -m pip install --upgrade pip - # Split-era revisions need the payload-bearing Maturin core installed - # first. Newer revisions keep this path only as a compatibility - # metapackage, which must not be installed ahead of the root package. + # Split-era revisions need the historical payload-bearing Maturin core + # installed first. Current revisions have no separate Python core + # project, but regression tests still need to install old baselines. if grep -q 'build-backend = "maturin"' "${OLD_ROOT}/src/aiconfigurator-core/pyproject.toml" 2>/dev/null; then "${OLD_VENV}/bin/python" -m pip install -e "${OLD_ROOT}/src/aiconfigurator-core" fi diff --git a/README.md b/README.md index f6faef2ea..237796812 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,8 @@ pip3 install aiconfigurator ``` The `aiconfigurator` wheel is self-contained: it includes the CLI, SDK, model -and system data, Spica, and the native core extension. The -`aiconfigurator-core` distribution remains available as a payload-free -compatibility package that installs the matching `aiconfigurator` version. +and system data, Spica, and the native core extension. No separate Python core +distribution is required. ### Build and Install from Source @@ -66,7 +65,7 @@ pip3 install . ### Build with Docker ```bash -# This creates the self-contained AIC wheel and a compatibility metapackage wheel +# This creates the self-contained AIC wheel docker build -f docker/Dockerfile --no-cache --target build -t aiconfigurator:latest . docker create --name aic aiconfigurator:latest && docker cp aic:/workspace/dist dist/ && docker rm aic ``` diff --git a/docker/Dockerfile b/docker/Dockerfile index 66b9f66f2..ab8198b65 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -17,10 +17,9 @@ ENV MPLCONFIGDIR=/tmp/matplotlib FROM base AS build # The `aiconfigurator` wheel owns the Rust extension, SDK/data payload, CLI, -# generator, webapp, and Spica packages. The small `aiconfigurator-core` wheel -# built afterward is only a compatibility metapackage. Maturin needs the Rust -# crate sources, a C linker (gcc), and ca-certificates so cargo can fetch crates -# from crates.io over TLS. Rust itself is bootstrapped by maturin's build backend. +# generator, webapp, and Spica packages. Maturin needs the Rust crate sources, +# a C linker (gcc), and ca-certificates so cargo can fetch crates from crates.io +# over TLS. Rust itself is bootstrapped by maturin's build backend. RUN apt-get update && \ apt-get install -y --no-install-recommends ca-certificates gcc libc6-dev && \ rm -rf /var/lib/apt/lists/* @@ -39,12 +38,11 @@ RUN set -e; \ exit 1; \ fi RUN uv build --wheel --out-dir /workspace/dist && \ - cd src/aiconfigurator-core && uv build --wheel --out-dir /workspace/dist && \ - cd /workspace && python tools/verify_release_wheels.py /workspace/dist + python tools/verify_release_wheels.py /workspace/dist FROM base AS runtime COPY --from=build /workspace/dist /wheelhouse -RUN uv pip install /wheelhouse/*.whl && \ +RUN uv pip install /wheelhouse/aiconfigurator-*.whl && \ rm -rf /wheelhouse FROM runtime AS test diff --git a/docs/universe/index.html b/docs/universe/index.html index 34c07deb3..19012b5a0 100644 --- a/docs/universe/index.html +++ b/docs/universe/index.html @@ -308,7 +308,7 @@

AIConfigurator Universe

{name:'Sweepers · Orchestration', color:'#4cc9f0'}, {name:'Search Space', color:'#818cf8'}, {name:'Deployment Simulation · Dynamo + AIC', color:'#38bdf8'}, - {name:'AIC Core · Python Wheel + Rust Crate', color:'#c77dff'}, + {name:'AIC Core · AIC Wheel + Rust Crate', color:'#c77dff'}, {name:'Perf Model Variants · 4 Op Modes / Layerwise / FPM / FPM-tuned', color:'#ff9e64'}, {name:'Op Collector Solution · Model / Operations / PerfDatabase', color:'#2dd4bf'}, {name:'Op Data Points', color:'#14b8a6'}, @@ -435,11 +435,11 @@

AIConfigurator Universe

desc:'AIC’s per-forward-pass timing model. Mocker supplies the exact scheduled workload: mixed prefill+decode fields for an aggregated pass, prefill-only fields for a prefill worker, or decode-only fields for a decode worker. It predicts duration from the AIC modeling core and measured perf data; it does not own queues, routing, replica pools, KV allocation, or P→D handoff.', sym:['EnginePerfModelForwardPassPerfModel','estimate_forward_pass_time()','mixed · prefill · decode FPM workload kinds','native AIC model with regression fallback']}}, - // ---- L4 AIC Core · two distribution surfaces over one native implementation ---- - {id:'core_wheel', l:4, repo:'aic', label:'aiconfigurator-core · Python Wheel', sub:'EngineConfig · ForwardPassMetrics · RustForwardPassPerfModel estimator', - det:{file:['src/aiconfigurator-core/pyproject.toml','src/aiconfigurator_core/__init__.py','rust/aiconfigurator-core/src/py.rs'], - desc:'The Maturin-built Python distribution surface over the same Rust core. Python imports aiconfigurator_core, supplies EngineConfig and per-iteration ForwardPassMetrics, then calls RustForwardPassPerfModel for forward-pass latency. It exposes the four op-based database modes (SILICON, HYBRID, EMPIRICAL, SOL), pure-FPM regression, and FPM-calibrated native strategy; the layerwise strategy below is planned. The wheel also bundles the Python SDK, system data, and model configs.', - sym:['distribution aiconfigurator-core · import aiconfigurator_core','AicEngine','RustForwardPassPerfModel','Maturin abi3 wheel']}}, + // ---- L4 AIC Core · Python and Rust surfaces over one native implementation ---- + {id:'aic_wheel', l:4, repo:'aic', label:'aiconfigurator · Python Wheel', sub:'EngineConfig · ForwardPassMetrics · RustForwardPassPerfModel estimator', + det:{file:['aiconfigurator-main: pyproject.toml','aiconfigurator-main: src/aiconfigurator_core/__init__.py','aiconfigurator-main: rust/aiconfigurator-core/src/py.rs'], + desc:'The self-contained Maturin-built Python distribution. It bundles the CLI, SDK, system data, model configs, Spica, and the compiled aiconfigurator_core extension. Python supplies EngineConfig and per-iteration ForwardPassMetrics, then calls RustForwardPassPerfModel for forward-pass latency. The four op-based database modes (SILICON, HYBRID, EMPIRICAL, SOL), pure-FPM regression, and FPM-calibrated native strategy are available through this single wheel; the layerwise strategy below is planned.', + sym:['distribution aiconfigurator · import aiconfigurator_core','AicEngine','RustForwardPassPerfModel','Maturin abi3 wheel']}}, {id:'core_crate', l:4, repo:'aic', label:'aiconfigurator-core · Rust Crate', sub:'EngineConfig · ForwardPassMetrics · ForwardPassPerfModel estimator', det:{file:['rust/aiconfigurator-core/Cargo.toml','rust/aiconfigurator-core/src/lib.rs','rust/aiconfigurator-core/src/config.rs','rust/aiconfigurator-core/src/fpm/metrics.rs','rust/aiconfigurator-core/src/fpm/model.rs'], @@ -584,10 +584,10 @@

AIConfigurator Universe

// L3 composition — Replay calls the component models and AIC timing oracle. ['m_sched','m_estlat'], ['m_sched','m_router','alt'],['m_sched','m_planner','alt'],['m_sched','m_kvbm','alt'], - // AIC ForwardPassPerfModel → both aiconfigurator-core distribution surfaces. - ['m_estlat','core_wheel'],['m_estlat','core_crate'], + // AIC ForwardPassPerfModel → Python wheel and Rust crate surfaces. + ['m_estlat','aic_wheel'],['m_estlat','core_crate'], // The Python wheel is built from the Rust crate; group-level links expose both L5 families. - ['core_wheel','core_crate','bridge'], + ['aic_wheel','core_crate','bridge'], ['core_crate','pm_ops'], // Rust engine-step op path is SILICON-only today. // All four op modes share the L6 op graph; mode-specific behavior resolves in PerfDatabase. ['pm_ops','op_model'],['pm_ops','op_operations'],['pm_ops','op_perfdb'], @@ -612,8 +612,8 @@

AIConfigurator Universe

['profiler','space_dyn'], ['profiler','space_sched'], ['profiler','space_engine'], - ['core_wheel','models_op'], - ['core_wheel','models_fpm'], + ['aic_wheel','models_op'], + ['aic_wheel','models_fpm'], ['core_crate','models_fpm'], ]; @@ -633,9 +633,9 @@

AIConfigurator Universe

['Deployment simulation · Mocker Replay (agg + disagg)', 'm_sched'], ['Planner · KV Router · KVBM / KV Transfer', 'm_planner','m_router','m_kvbm'], ['AIC ForwardPassPerfModel · per-pass timing', 'm_estlat'], - ['aiconfigurator-core Python wheel', 'core_wheel'], + ['aiconfigurator Python wheel', 'aic_wheel'], ['aiconfigurator-core Rust crate', 'core_crate'], - ['EngineConfig · ForwardPassMetrics · ForwardPassPerfModel', 'core_wheel','core_crate'], + ['EngineConfig · ForwardPassMetrics · ForwardPassPerfModel', 'aic_wheel','core_crate'], ['7 L5 variants · 4 op modes · layerwise · pure FPM · FPM-tuned', 'pm_ops','pm_op_hybrid','pm_op_empirical','pm_op_sol','pm_layerwise','pm_fpm','pm_fpm_tuned'], ['Op model internals · Model → Operations → PerfDatabase', 'op_model','op_operations','op_perfdb'], ['Op data → collectors → GPUs / LLMs / frameworks / versions', 'op_data_points','op_collectors','collect_gpus','collect_llms','collect_frameworks','collect_versions'], @@ -780,7 +780,7 @@

AIConfigurator Universe

], // L4–L7 · AIC core and performance-model data - core_wheel: [ + aic_wheel: [ 'Expose the planned layerwise strategy through aiconfigurator_core once its estimator is stable.', ], core_crate: [ @@ -1238,6 +1238,7 @@

AIConfigurator Universe

const detail=document.getElementById('detail'), dhead=document.getElementById('dhead'), dbody=document.getElementById('dbody'); const SOURCE_REPOS={ aiconfigurator:{base:'https://github.com/ai-dynamo/aiconfigurator',ref:'ad0e3e5e31ee3b8ebcc69617f51b1bd5cfdd659a'}, + 'aiconfigurator-main':{base:'https://github.com/ai-dynamo/aiconfigurator',ref:'main'}, dynamo:{base:'https://github.com/ai-dynamo/dynamo',ref:'ec45adf2a3f7b719fcba5d5c7c2cf32747b4e030'}, }; function encodeSourcePath(path){ return path.split('/').filter(Boolean).map(encodeURIComponent).join('/'); } @@ -1324,7 +1325,7 @@

L1 orchestration · 4 components

The rest of the spine