Skip to content

[plan docs] WebGPU EP extraction plans - #32213

Open
Edward Chen (edgchen1) wants to merge 13 commits into
mainfrom
edgchen1/webgpu_ep_extraction_plan
Open

[plan docs] WebGPU EP extraction plans#32213
Edward Chen (edgchen1) wants to merge 13 commits into
mainfrom
edgchen1/webgpu_ep_extraction_plan

Conversation

@edgchen1

@edgchen1 Edward Chen (edgchen1) commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Description

Add plans for extracting the WebGPU EP code into its own repo.

Starting point is the overview doc: docs/design/webgpu_ep_extraction/webgpu_ep_extraction.md.

There are several distinct workstreams with their own docs too.

Motivation and Context

Decouple WebGPU EP development from the ORT repo.

Edward Chen (edgchen1) and others added 7 commits August 17, 2026 12:20
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: df9d994f-d4ed-4e61-8104-57abb42ae205
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: df9d994f-d4ed-4e61-8104-57abb42ae205
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: df9d994f-d4ed-4e61-8104-57abb42ae205
Scope browser test relocation to provider behavior and keep ORT Web module assembly, packaging, and static registration tests in ORT. Record that browser-hosted provider tests are an exception to the no-source-checkout build contract, and that some web lanes are currently non-blocking or build-only. Drop the duplicated test classification in favor of the test-conformance doc, and exclude the deprecated JSEP TypeScript path from scope.

Add a minimum-version validation work package so the declared MIN_ONNXRUNTIME_VERSION floor is verified rather than claimed, and correct the packaging migration scope to the pipeline definitions still outside the staging root.

Align the four workstream docs: consistent section ordering, rename 'Parallel work packages' to 'Work packages' with explicit sequencing, flatten the plugin-boundary Scope wrapper, and separate provider-isolation versioning content from its open questions.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
State the critical path explicitly. Static plugin registration is a prerequisite for removing the adapter, not merely an enabler, so it gates code isolation. Reflect this in the overview, the dependency diagram, Stage 2, and the provider-isolation sequencing list. Replace the misaligned ASCII diagram with Mermaid.

Restructure provider-isolation work packages from nine to seven. Add a mechanical staging-root move that is off the critical path, since relocating files does not change which base classes the provider uses. Merge code isolation with the standalone build, because the provider is not independently buildable until the kernel-authoring foundation is replaced. Dissolve the dependency-ownership and packaging-migration packages into the packages that do the work: WebGPU owns Dawn and WGSL outright, and the packaging and CI pipelines must be rewired atomically with the build switch to avoid a broken window.

Correct terminology and inaccuracies: distinguish the plugin EP API from ORT package build inputs, scope the JSEP exclusion to the WebGPU compute path so it does not imply WebNN removal, fix the WebGpuExecutionProvider name casing and show registration name and EP name as independent, replace a stale version in the conformance kit example, and cross-reference the result semantics rather than restating them.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Adds a cross-repository version policy that resolves the two-way pin between ORT and the WebGPU repository, distinguishing the build-against ORT version from the runtime floor and keeping both blocking lanes on immutable released artifacts. Adds a Related work section stating independence from the JSEP migration, and a terminology table.

Renames the extraction launch matrix to consumer dispositions and moves the non-consumer row to prose. Ties the size and inference latency gates to the Stage 1 baselines, removes the undefined startup metric, and adds a latency criterion to the plugin-boundary workstream.

Records user-facing documentation ownership and post-cutover issue and pull request handling as part of the repository migration. Corrects a stale claim that onnxruntime-webgpu still ships from the non-plugin static build.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…on plan

Splits the provider's non-public-API dependencies into three groups, adding plugin EP implementation utilities under include/onnxruntime/ep/. Those headers are offered for plugin EP implementations but are not shipped in the released package, so they are copied rather than consumed. Scopes the section to what the compiler and linker see, and moves the build-input inventory to the standalone build contract.

Replaces the single disposition for CI lanes with three: lanes that build the provider statically into ORT are retired, onnxruntime-web keeps static linkage against the pinned external source, and provider-owned lanes move to the WebGPU repository. Records that ORT-root packaging scripts reference WebGPU independently of the plugin packages, and that the plugin-ep-webgpu/rel-* branch prefix disappears once release branches no longer share the ORT repository.

Adds the browser-test lane to the cross-repository version policy, which the standalone build contract already pointed at it for.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings August 22, 2026 00:18

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Defines the plan to extract WebGPU EP development into an independent repository.

Changes:

  • Defines extraction stages, ownership boundaries, and release strategy.
  • Specifies plugin integration, provider isolation, testing, and Node migration workstreams.
  • Proposes a reusable EP conformance suite.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
webgpu_ep_extraction.md Overall extraction plan
test_ownership_and_conformance_workstream.md Test ownership and migration
ep_operator_conformance_design.md Portable conformance-suite design
provider_isolation_and_repository_migration_workstream.md Repository and build isolation
plugin_boundary_and_web_integration_workstream.md Plugin and Web/Wasm boundary
node_plugin_migration_workstream.md Node package migration

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Scopes CPU-fallback disabling to non-CPU targets. The conformance design required running cases against CPU as a reference while unconditionally disabling CPU fallback, which ORT rejects whenever nodes are assigned to the CPU EP.

Makes the static-runner SDK conditional in the design section, Phase 3, and the MVP deliverables, since whether a native static-linkage runner is needed at all is still an open question.

Qualifies the isolation milestone: every build input is either inside the staging root or a declared external dependency. The previous wording forbade any input resolving outside the root, which the standalone build contract's own ORT package and pinned third-party dependencies could not satisfy.

Reframes the cross-repository version policy around avoiding a circular dependency rather than claiming neither side can be blocked, and names the wait for an ORT release as a scheduling cost rather than a deadlock.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Remove the static plugin EP registration design doc and its work log, which belong to an in-progress branch, along with the references they added to the overview and the plugin-boundary workstream.

Give each fact, gate, and open question a single owner. The overview drops the delivery stages, the cutover list, and the cross-workstream open-questions list; those steps and questions now live in the workstream that owns them. Conformance terminology moves to the test-conformance workstream, and the cross-repository version policy is promoted to a top-level section in provider-isolation.

Add a size and latency baselines work package to plugin-boundary, whose completion criteria referenced baselines that no work package established. Split the conformance dataset open question into versioning, deduplication, and distribution.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Replace 'package-time' with 'install-time' in the compatibility diagnostics criterion. No other doc in the set uses 'package-time', and the failure point it meant is a package manager refusing an incompatible ORT and plugin combination at install. The three points are now ordered as a user reaches them: build, install, register.

Correct the convergence points list, which claimed its items were not on the critical path. One of them restated the code-isolation to source-transfer edge, which is the critical path; that now sits in the preceding paragraph. Each remaining bullet states what it actually gates.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Simplify conformance result semantics to PASS, FAIL, and SKIP with a documented reason. A crash, a hang, or the absence of a compatible device ends the run instead of producing per-case results, so 'exactly one result per case' now holds for every result the runner can actually write.

Let the conformance design doc own the runner, schemas, and result semantics. The test-conformance workstream now states only what the extraction requires from the suite, instead of restating the contract. Cases carry their own expected outputs, so a CPU reference run is not an extraction requirement; the design doc records that CPU runs exist to validate the cases themselves.

Note that workflow files stay under the repository-root .github/workflows, since GitHub discovers them only there, and only the scripts, actions, and templates they call move to the staging root.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants