-
Notifications
You must be signed in to change notification settings - Fork 383
feat(rccl): enable multi-node MADEngine CI tests [AICOMRCCL-1332] #10396
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
amd-justchen
merged 19 commits into
develop
from
users/prasanna-amd/rccl-ci-madengine-multinode
Aug 29, 2026
Merged
Changes from all commits
Commits
Show all changes
19 commits
Select commit
Hold shift + click to select a range
ab59496
feat(rccl): integrate MADEngine workloads into CI [AICOMRCCL-1332]
09c6422
fix(rccl): harden MADEngine CI script for single-node SLURM runs
90dbeb6
fix(rccl): address MADEngine review — manifest, provenance, results
a8d30d9
fix(rccl): make perf_entry_super.json primary data source for MADEngi…
ffd7fb4
fix(rccl): unblock 2N multi-node MADEngine tests on Ruby
4b8309b
fix(rccl): drop enp49s0f0np0 from NCCL_SOCKET_IFNAME — compute nodes …
41b8292
fix: bind-mount host IB verbs libraries into container
4551c06
fix: correct docker_mounts key/value order for host IB libs
2d60192
fix: replace container rdma-core with host libs via bind mount
33220e0
fix: mount IB providers at host's compiled-in search path
b2d3772
fix: parse madengine perf_entry_super.json metric names correctly
8f1b069
fix: bind-mount CI-built RCCL when using --skip-overlay-build
874eee6
feat: add RCCL fingerprint verification for CI-built library
15f177f
fix: verify RCCL on all nodes, run in CI, and make failure non-overri…
737b4d8
fix: re-pin MAD to 63867e6a6e42
1ca5b90
fix: drop registry push from madengine workflow
8a97815
fix: drop packages:write from madengine job caller
09f7072
refactor: address workflow review feedback (hash, env vars, step split)
dd6224d
fix: use python3 -m pip on Ruby SLURM runners
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,176 @@ | ||
| name: TheRock Test MADEngine Workloads for rccl | ||
|
|
||
| on: | ||
| workflow_call: | ||
| inputs: | ||
| amdgpu_families: | ||
| type: string | ||
| artifact_group: | ||
| type: string | ||
| test_runs_on: | ||
| type: string | ||
| artifact_run_id: | ||
| type: string | ||
| workload: | ||
| type: string | ||
| default: 'llama-3.1-70b-training' | ||
| nodes: | ||
| type: string | ||
| default: '2' | ||
| notify_email: | ||
| type: string | ||
| default: '' | ||
| teams_webhook: | ||
| type: string | ||
| default: '' | ||
| workflow_dispatch: | ||
| inputs: | ||
| amdgpu_families: | ||
| type: string | ||
| artifact_group: | ||
| type: string | ||
| test_runs_on: | ||
| type: string | ||
| default: 'ruby-linux-slurm-scale-runner' | ||
| artifact_run_id: | ||
| description: 'Reuse artifacts from a previous build run ID' | ||
| type: string | ||
| workload: | ||
| description: 'MADEngine workload to run' | ||
| type: string | ||
| default: 'llama-3.1-70b-training' | ||
| nodes: | ||
| description: 'Number of SLURM nodes to allocate' | ||
| type: string | ||
| default: '2' | ||
| notify_email: | ||
| description: 'Email address to send test summary report' | ||
| type: string | ||
| default: '' | ||
| teams_webhook: | ||
| description: 'Teams webhook URL for notifications' | ||
| type: string | ||
| default: '' | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| test_madengine: | ||
| name: 'Test MADEngine ${{ inputs.workload }} (${{ inputs.nodes }}N)' | ||
| runs-on: ${{ inputs.test_runs_on }} | ||
| defaults: | ||
| run: | ||
| shell: bash | ||
| env: | ||
| ARTIFACT_RUN_ID: "${{ inputs.artifact_run_id }}" | ||
| RESULTS_DIR: "/apps/rccl-ci/perf" | ||
| WORK_DIR: "/apps/rccl-ci/workdir/${{ github.run_id }}" | ||
| OUTPUT_ARTIFACTS_DIR: "/apps/cvs_tests/dist_new/dist/rocm" | ||
| AWS_SHARED_CREDENTIALS_FILE: "/apps/cvs_tests/awsconfig/credentials.ini" | ||
| CLUSTER: "ruby" | ||
| steps: | ||
| - name: Checkout TheRock repository | ||
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||
| with: | ||
| repository: "ROCm/TheRock" | ||
| ref: a30607adeaf0306b8d8edcbf4f1f1bc8299d3e1e # 2026-08-24 | ||
|
|
||
| - name: Checkout rocm-systems scripts | ||
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||
| with: | ||
| sparse-checkout: projects/rccl/ci/scripts | ||
| path: rocm-systems | ||
|
|
||
| - name: Validate arch | ||
| run: | | ||
| if [ "${{ inputs.amdgpu_families }}" != "gfx950-dcgpu" ]; then | ||
| echo "Unsupported arch for MADEngine: ${{ inputs.amdgpu_families }}" | ||
| exit 1 | ||
| fi | ||
|
|
||
| - name: Install TheRock dependencies | ||
| run: python3 -m pip install -r requirements.txt | ||
|
|
||
| - name: Resolve TheRock artifact run | ||
| if: ${{ inputs.artifact_run_id == '' }} | ||
| env: | ||
| GH_TOKEN: ${{ github.token }} | ||
| GITHUB_TOKEN: ${{ github.token }} | ||
|
prasanna-amd marked this conversation as resolved.
|
||
| run: | | ||
| run_id="$(python3 -c " | ||
| import sys, contextlib | ||
| sys.path.insert(0, 'build_tools') | ||
| from find_latest_artifacts import find_latest_artifacts | ||
| with contextlib.redirect_stdout(sys.stderr): | ||
| results = find_latest_artifacts( | ||
| artifact_groups=['${{ inputs.artifact_group }}'], | ||
| verbose=True, | ||
| ) | ||
| if not results: | ||
| print('No artifacts found for ${{ inputs.artifact_group }}', file=sys.stderr) | ||
| sys.exit(1) | ||
| print(results[0].workflow_run_id) | ||
| ")" | ||
| echo "Resolved TheRock run_id=${run_id}" | ||
| echo "ARTIFACT_RUN_ID=${run_id}" >> $GITHUB_ENV | ||
|
|
||
| - name: Fetch RCCL artifacts | ||
| run: | | ||
| python3 build_tools/install_rocm_from_artifacts.py \ | ||
| --run-id="${ARTIFACT_RUN_ID}" \ | ||
|
prasanna-amd marked this conversation as resolved.
|
||
| --artifact-group="${{ inputs.artifact_group }}" \ | ||
| --output-dir="${OUTPUT_ARTIFACTS_DIR}" \ | ||
| --rccl | ||
|
|
||
| - name: Setup Python environment | ||
| run: | | ||
| mkdir -p "${WORK_DIR}" | ||
| python3 -m venv "${WORK_DIR}/venv" | ||
| source "${WORK_DIR}/venv/bin/activate" | ||
| pip install --upgrade pip | ||
|
|
||
| - name: Run MADEngine workload | ||
| timeout-minutes: 210 | ||
| env: | ||
| NCCL_DEBUG: WARN | ||
| MAD_SECRETS_HFTOKEN: ${{ secrets.HF_TOKEN || '' }} | ||
| run: | | ||
| source "${WORK_DIR}/venv/bin/activate" | ||
| export PYTHONPATH="rocm-systems/projects/rccl/ci/scripts:${PYTHONPATH}" | ||
|
|
||
| NOTIFY_ARGS="" | ||
| if [ -n "${{ inputs.notify_email }}" ]; then | ||
| NOTIFY_ARGS="$NOTIFY_ARGS --notify-email ${{ inputs.notify_email }}" | ||
| fi | ||
| if [ -n "${{ inputs.teams_webhook }}" ]; then | ||
| NOTIFY_ARGS="$NOTIFY_ARGS --teams-webhook ${{ inputs.teams_webhook }}" | ||
| fi | ||
|
i-kosarev marked this conversation as resolved.
|
||
|
|
||
| python3 rocm-systems/projects/rccl/ci/scripts/test_madengine.py \ | ||
| --artifact-dir "${OUTPUT_ARTIFACTS_DIR}" \ | ||
| --workload "${{ inputs.workload }}" \ | ||
| --cluster "${CLUSTER}" \ | ||
| --nodes "${{ inputs.nodes }}" \ | ||
| --results-dir "${RESULTS_DIR}" \ | ||
| --work-dir "${WORK_DIR}" \ | ||
| $NOTIFY_ARGS | ||
|
|
||
| - name: Upload results | ||
| if: always() | ||
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | ||
| with: | ||
| name: madengine-results-${{ inputs.workload }}-${{ inputs.nodes }}N-${{ inputs.amdgpu_families }} | ||
| path: | | ||
| ${{ env.WORK_DIR }}/perf.csv | ||
| ${{ env.WORK_DIR }}/perf_entry_super.csv | ||
| ${{ env.WORK_DIR }}/perf_entry_super.json | ||
| ${{ env.WORK_DIR }}/perf_super.csv | ||
| ${{ env.WORK_DIR }}/madengine_summary.txt | ||
| ${{ env.WORK_DIR }}/manifest.json | ||
| retention-days: 30 | ||
|
|
||
| - name: Cleanup work directory | ||
| if: always() | ||
| run: | | ||
| rm -rf "${WORK_DIR}/madengine" "${WORK_DIR}/MAD" "${WORK_DIR}/venv" "${WORK_DIR}/rccl_libs" | ||
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
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.