Repository navigation
Conversation
…s through hipDNN Adds hipkernel:Gfx950ConvFwd, a kernel-ingestor engine that serves rocKE's implicit-GEMM forward convolution from a build-time kpack archive. hipDNN matches a graph against the compiled catalog and launches the chosen kernel; the installed runtime loads the archive without Python. Contract: plain 2D forward cross-correlation, groups=1, dense channels-last FP16/BF16 storage, FP32 accumulation, symmetric padding. Grouped, 3D, fused and channels-first convolutions are rejected, not silently mishandled. The catalog ships 122 compiled variants for 61 requests: every request carries both tile_k arms, so the engine's benchmarked selection has a real choice on all of them rather than only on the verification shapes. Descriptors are generated from configs/gfx950_conv_fwd_wide.yaml; the narrow single-arm config is retained alongside it. benchmark_conv_integration.py gains the ability to run a packaged request in auto and reuse modes, so a first run can rank every candidate and record a winner, and a second process can serve that winner without re-searching. Previously only its built-in smoke graph could do this. Verified on (gfx950): 11/11 installed integration cases, 61/61 requests completing the tune-then-reuse cycle with the recorded winner preserved across processes, and independent PyTorch correctness on both the hipDNN and direct rocKE paths for every case.
…ent develop The integration was authored against an ancestor of the ingestor tooling and did not build once that tooling landed. Four changes, no behaviour change: - Drop the retired 'delegates_to_existing_plan' key and declare the 'specialization' block the packer now requires. The builder's spec consumes all 27 metadata fields, so every one is bound and none are matcher-only. Regenerating adds provenance.specialization_contract; all 122 descriptor identities are retained. - Port the native pack to the current IngestorKernelCode: a module belongs to the device it loaded on, so resolve the kernel per launch stream, set launch geometry on the code itself, and declare the kernel ABI the loader verifies. - Follow rocKE's move of conv_implicit_gemm from rocke.instances.common to kernels.common, in the builder and in the benchmark probe. Verified on MI350X (gfx950): 11/11 engine-pinned integration cases, 61/61 requests completing the tune-then-reuse cycle, and independent PyTorch correctness on both the hipDNN and direct rocKE paths for all 122 processes. Build note, not fixed here: on a host with a distro hip-dev package installed, hipcc searches /usr/include before ROCm's include directory, so /usr/include/hip shadows /opt/rocm/include/hip and every HIP kernel hkp_pack compiles fails with "use of undeclared identifier '__AMDGCN_WAVEFRONT_SIZE'". This affects the provider's own test descriptors, not this integration's rocKE kernels, which are compiled through comgr. Adding -I/opt/rocm/include does NOT help: it resolves to the same realpath as an entry already in the search list, so clang deduplicates it and keeps the later position. Point HKP_HIPCC at a wrapper that passes -I to a directory containing only a 'hip' symlink, which is a distinct path clang will not fold away.
✅ All Checks Passed — Ready for Review
📖 Need help? See the Policy FAQ for details on every check and how to fix failures. |
|
🎉 All checks passed! This PR is ready for review. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #12476 +/- ##
========================================
Coverage 70.24% 70.24%
========================================
Files 2933 2933
Lines 482116 482116
Branches 69508 69508
========================================
Hits 338628 338628
Misses 119199 119199
Partials 24289 24289
*This pull request uses carry forward flags. Click here to find out more. 🚀 New features to boost your workflow:
|
Contributor
Author
|
Closing - moved to #12780 |
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.
ISSUE ID: AICK-2048
Motivation
Adds hipkernel:Gfx950ConvFwd, a kernel-ingestor engine that serves rocKE's implicit-GEMM forward convolution from a build-time kpack archive. hipDNN matches a graph against the compiled catalog and launches the chosen kernel; the installed runtime loads the archive without Python.
Technical Details
Contract: plain 2D forward cross-correlation, groups=1, dense channels-last FP16/BF16 storage, FP32 accumulation, symmetric padding. Grouped, 3D, fused and channels-first convolutions are rejected, not silently mishandled.
The catalog ships 122 compiled variants for 61 requests: every request carries both tile_k arms, so the engine's benchmarked selection has a real choice on all of them rather than only on the verification shapes. Descriptors are generated from configs/gfx950_conv_fwd_wide.yaml; the narrow single-arm config is retained alongside it.
benchmark_conv_integration.py gains the ability to run a packaged request in auto and reuse modes, so a first run can rank every candidate and record a winner, and a second process can serve that winner without re-searching. Previously only its built-in smoke graph could do this.
Test Plan and results
Verified on (gfx950): 11/11 installed integration cases, 61/61 requests completing the tune-then-reuse cycle with the recorded winner preserved across processes, and independent PyTorch correctness on both the hipDNN and direct rocKE paths for every case.
Building Note
Build note, not fixed here: on a host with a distro hip-dev package installed,
hipcc searches /usr/include before ROCm's include directory, so /usr/include/hip
shadows /opt/rocm/include/hip and every HIP kernel hkp_pack compiles fails with
"use of undeclared identifier '__AMDGCN_WAVEFRONT_SIZE'". This affects the
provider's own test descriptors, not this integration's rocKE kernels, which are
compiled through comgr. Adding -I/opt/rocm/include does NOT help: it resolves to
the same realpath as an entry already in the search list, so clang deduplicates
it and keeps the later position. Point HKP_HIPCC at a wrapper that passes -I to
a directory containing only a 'hip' symlink, which is a distinct path clang will
not fold away.
Submission Checklist