Check the shipped device code covers the GPUs a wheel claims - #21567
Open
shoumikhin wants to merge 19 commits into
Open
Check the shipped device code covers the GPUs a wheel claims#21567shoumikhin wants to merge 19 commits into
shoumikhin wants to merge 19 commits into
Conversation
Contributor
Author
🔗 Helpful Links🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/21567
Note: Links to docs will display an error until the docs builds have been completed. ❌ 29 New Failures, 168 Pending, 2 Unrelated FailuresAs of commit 6adc652 with merge base 6bbb75a ( NEW FAILURES - The following jobs have failed:
FLAKY - The following jobs failed but were likely due to flakiness present on trunk:
This comment was automatically generated by Dr. CI and updates every 15 minutes. |
This was referenced Aug 4, 2026
shoumikhin
added a commit
that referenced
this pull request
Aug 4, 2026
A CUDA wheel can install cleanly, load its libraries, and still fail the moment a
model runs, because GPU device code is compiled per architecture. If a wheel was
built for one GPU generation, it is fine on that generation and broken everywhere
else the release row promised, and the failure looks like a model problem rather
than a packaging one.
Add a check that reads the architectures the build asked for and confirms each one
is present in the shipped accelerator libraries:
✓ device code covers every claimed GPU architecture: [80, 90, 100, 120]
The check skips with a stated reason when a build named no architectures, so the
CPU wheels are unaffected, and when the inspection tool is unavailable.
ghstack-source-id: 2efc906
ghstack-comment-id: 5174656934
Pull-Request: #21567
shoumikhin
changed the base branch from
gh/shoumikhin/84/head
to
gh/shoumikhin/86/head
August 4, 2026 05:23
shoumikhin
added a commit
that referenced
this pull request
Aug 4, 2026
A CUDA wheel can install cleanly, load its libraries, and still fail the moment a
model runs, because GPU device code is compiled per architecture. If a wheel was
built for one GPU generation, it is fine on that generation and broken everywhere
else the release row promised, and the failure looks like a model problem rather
than a packaging one.
Add a check that reads the architectures the build asked for and confirms each one
is present in the shipped accelerator libraries:
✓ device code covers every claimed GPU architecture: [80, 90, 100, 120]
The check skips with a stated reason when a build named no architectures, so the
CPU wheels are unaffected, and when the inspection tool is unavailable.
ghstack-source-id: 2efc906
ghstack-comment-id: 5174656934
Pull-Request: #21567
shoumikhin
added a commit
that referenced
this pull request
Aug 4, 2026
A CUDA wheel can install cleanly, load its libraries, and still fail the moment a
model runs, because GPU device code is compiled per architecture. If a wheel was
built for one GPU generation, it is fine on that generation and broken everywhere
else the release row promised, and the failure looks like a model problem rather
than a packaging one.
Add a check that reads the architectures the build asked for and confirms each one
is present in the shipped accelerator libraries:
✓ device code covers every claimed GPU architecture: [80, 90, 100, 120]
The check skips with a stated reason when a build named no architectures, so the
CPU wheels are unaffected, and when the inspection tool is unavailable.
ghstack-source-id: 2efc906
ghstack-comment-id: 5174656934
Pull-Request: #21567
shoumikhin
changed the base branch from
gh/shoumikhin/86/head
to
gh/shoumikhin/87/head
August 4, 2026 06:35
shoumikhin
added a commit
that referenced
this pull request
Aug 4, 2026
A CUDA wheel can install cleanly, load its libraries, and still fail the moment a
model runs, because GPU device code is compiled per architecture. If a wheel was
built for one GPU generation, it is fine on that generation and broken everywhere
else the release row promised, and the failure looks like a model problem rather
than a packaging one.
Add a check that reads the architectures the build asked for and confirms each one
is present in the shipped accelerator libraries:
✓ device code covers every claimed GPU architecture: [80, 90, 100, 120]
The check skips with a stated reason when a build named no architectures, so the
CPU wheels are unaffected, and when the inspection tool is unavailable.
ghstack-source-id: b2f2a6b
ghstack-comment-id: 5174656934
Pull-Request: #21567
shoumikhin
added a commit
that referenced
this pull request
Aug 4, 2026
A CUDA wheel can install cleanly, load its libraries, and still fail the moment a
model runs, because GPU device code is compiled per architecture. If a wheel was
built for one GPU generation, it is fine on that generation and broken everywhere
else the release row promised, and the failure looks like a model problem rather
than a packaging one.
Add a check that reads the architectures the build asked for and confirms each one
is present in the shipped accelerator libraries:
✓ device code covers every claimed GPU architecture: [80, 90, 100, 120]
The check skips with a stated reason when a build named no architectures, so the
CPU wheels are unaffected, and when the inspection tool is unavailable.
ghstack-source-id: 0719085
ghstack-comment-id: 5174656934
Pull-Request: #21567
shoumikhin
added a commit
that referenced
this pull request
Aug 4, 2026
A CUDA wheel can install cleanly, load its libraries, and still fail the moment a
model runs, because GPU device code is compiled per architecture. If a wheel was
built for one GPU generation, it is fine on that generation and broken everywhere
else the release row promised, and the failure looks like a model problem rather
than a packaging one.
Add a check that reads the architectures the build asked for and confirms each one
is present in the shipped accelerator libraries:
✓ device code covers every claimed GPU architecture: [80, 90, 100, 120]
The check skips with a stated reason when a build named no architectures, so the
CPU wheels are unaffected, and when the inspection tool is unavailable.
ghstack-source-id: 87c80af
ghstack-comment-id: 5174656934
Pull-Request: #21567
shoumikhin
added a commit
that referenced
this pull request
Aug 4, 2026
A CUDA wheel can install cleanly, load its libraries, and still fail the moment a
model runs, because GPU device code is compiled per architecture. If a wheel was
built for one GPU generation, it is fine on that generation and broken everywhere
else the release row promised, and the failure looks like a model problem rather
than a packaging one.
Add a check that reads the architectures the build asked for and confirms each one
is present in the shipped accelerator libraries:
✓ device code covers every claimed GPU architecture: [80, 90, 100, 120]
The check skips with a stated reason when a build named no architectures, so the
CPU wheels are unaffected, and when the inspection tool is unavailable.
ghstack-source-id: 0047dfe
ghstack-comment-id: 5174656934
Pull-Request: #21567
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.
A GPU wheel can install cleanly, load all its libraries, and still fail
the moment a model runs. GPU code is compiled per hardware generation, so a wheel built for one
generation works there and is broken everywhere else the release promised. The failure surfaces
late and looks like a model problem rather than a packaging one.
Nothing checks for this today. This adds a release check that compares what the wheel claims
against what it actually contains:
And when it does not:
It fails closed on a GPU wheel
Every reason the check cannot do its job is a reason to stop, not to pass: no architecture list
reached the build, the inspection tool is missing, no library is present, or an inspection
failed. Each of those leaves the shipped GPU code unverified. A CPU wheel says so and moves on.
Each library is inspected separately, so one library's GPU code cannot stand in for another's
that is missing.
Tested
Ran against real GPU wheels on Linux x86_64 and on two Jetson devices covering different GPU
generations. Confirmed it passes when the wheel matches its claim, and blocks in each failure
case above, including the one where the architecture list never reached the build.