perf(ep): add MI350X IntraNode/IntraNodeLL tuning configs for EP2/4/8#464
Open
kudomcho wants to merge 1 commit into
Open
perf(ep): add MI350X IntraNode/IntraNodeLL tuning configs for EP2/4/8#464kudomcho wants to merge 1 commit into
kudomcho wants to merge 1 commit into
Conversation
Add tuned dispatch+combine configs for MI350X (gfx950, 256 CUs) and fix detect_gpu_model() fallback for devices with empty name string. Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
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.
Motivation
MI350X (gfx950, 256 CUs) had no IntraNode EP tuning configs.
detect_gpu_model()returnedNonebecausetorch.cuda.get_device_properties(0).nameis empty on MI350X, so the tuning config manager could not locate any configs at runtime.The shipped MI355X configs (tuned for 304 CUs) are suboptimal on MI350X — the different CU count changes occupancy sweet spots for
block_numandwarp_per_block. In some cases, MI355X configs hit performance cliffs on MI350X where BW drops 3-6x compared to nearby configs.Technical Details
Code changes
python/mori/ops/tuning_config.py— Added_ARCH_CU_TO_MODELfallback table todetect_gpu_model(). When the device name string is empty, falls back to(gcnArchName, multi_processor_count)lookup:(gfx950, 256) → "mi350x".tests/python/ops/bench_dispatch_combine.py— Added--kernel-typeCLI arg (IntraNode|IntraNodeLL) to support tuning both kernel types. Threads through toEpDispatchCombineConfigand JSON config save.Tuning configs (10 new JSON files)
gfx950_mi350x_IntraNode_ep{2,4,8}_{dispatch,combine}.json— 6 filesgfx950_mi350x_IntraNodeLL_ep8_{dispatch,combine}.json— 2 files (combine is new, MI355X never shipped it)Sweep: full scope, 35
block_num× 9warp_per_block= 315 configs per shape.Dtype coverage:
Performance Results
All numbers measured on MI350X hardware. Baseline = MI355X shipped bn/wpb configs run on MI350X.
IntraNodeLL EP8 — largest gains
MI355X's
wpb=9is suboptimal on MI350X. Tuned configs usewpb=10orwpb=16.IntraNode — performance cliff fixes
MI355X's
bn=256hits severe performance cliffs on MI350X at specific shapes. Tuned configs avoid them:IntraNode — general tuning improvements
P2P vs non-P2P decision boundary
Documentation
5 result docs under
docs/:ep{2,4,8}_mi350x_tuning_results.md— recommended configs, before/after BW tables, P2P/nP2P analysisep8_mi350x_IntraNodeLL_tuning_results.md— LL-specific resultsmi350x_profiler_analysis.md— static occupancy analysis, shared mem pressureReproducer
Hardware: 8x MI350X (gfx950, 256 CUs, 288 GB HBM3e)
Test Plan
--kernel-type IntraNodeLLbench run verifiedpytest tests/python/ops/test_dispatch_combine_intranode.pySubmission Checklist
🤖 Generated with Claude Code