Skip to content

feat: add AWS B300 EFA support - #558

Open
ViriLain wants to merge 3 commits into
NVIDIA:mainfrom
ViriLain:jharp/aws-b300-ready-20261023
Open

ViriLain wants to merge 3 commits into
NVIDIA:mainfrom
ViriLain:jharp/aws-b300-ready-20261023

Conversation

@ViriLain

@ViriLain ViriLain commented Oct 23, 2026 •

Copy link
Copy Markdown

Summary

Add AWS p6-b300.48xlarge support for NCCL communication and MPI/torch/exec WorkloadRuns. B300 currently matches the H100 fallback, requesting 32 EFA devices on nodes that expose 16 and selecting an image below AWS's B300 software requirements.

  • Add explicit AWS+B300 overrides for all-reduce, all-gather, all-to-all, EFA loopback, and NVSwitch loopback. Request 16 EFA devices and use the CUDA 13 NCCL image with native sm_103 code.
  • Add matching WorkloadRun EFA resource and transport settings while preserving caller-selected images, environment values, and the eight-GPU default.
  • Cover resolved Jobs/TrainingRuntimes, pull-secret propagation, offline mock-node rendering, Kind/KWOK acceptance tests, and platform documentation.

Closes #557

Validation

  • Full KUBECONFIG=/dev/null make ci passed against upstream 7951cad5, including 242 integration cases. All 14 make test-uat cases passed.
  • Render comparisons preserve AWS H100/GB200/GB300, on-prem B300, and Akamai RTX PRO 6000 behavior. B300 fixtures verify effective GPU/EFA resources, MPI forwarding, caller environment values, and image pull secrets.
  • Live validation on two P6-B300 workers (16 GPUs total) passed all five NCCL categories, three repeated passes through 8 GiB, and MPI/torch/exec checks. Accepted runs verified OFI/EFA GPU-direct traffic with zero NCCL correctness errors or warnings.
  • After integrating upstream 2184b914, the rebuilt controller repeated all five NCCL categories at 128 MiB and two-node MPI successfully. The latest 7951cad5 refresh passed local CI/UAT and renders the same B300 workloads; that newer controller binary was not rerun on AWS hardware.

Measured NCCL bus bandwidth at 8 GiB across three passes:

Category GB/s
All-reduce 866.64–867.44
All-gather 754.46–754.65
All-to-all 179.71–179.72
EFA loopback, per worker 95.07–96.28
NVSwitch loopback, per worker 840.78–841.45

These are observed measurements, not performance acceptance thresholds.

Scope

Nemotron training is outside this change. No controller, API, dependency, or Helm changes are included.

WorkloadRun images must provide a compatible EFA plugin. NGC PyTorch 26.04-py3 required caller setting NCCL_NET_PLUGIN=ofi; the initial socket run was rejected and the EFA rerun passed. This requirement is documented.

@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai

coderabbitai Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

⛔ Files ignored due to path filters: 61
  • cmd/integration/testdata/reconcile/certification-aws-b300-nccl/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/certification-aws-b300-nccl/input_client_objects.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/certification-aws-b300-nccl/input_config.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-exec-aws-b300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-exec-aws-b300/input_client_objects.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-exec-aws-b300/input_config.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-kai-default-queue/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-kai-labels/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-no-workload-metadata/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-runai-default-queue/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-runai-explicit-queue/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-intra-node/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mixed-arch-majority/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-aws-b300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-aws-b300/input_client_objects.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-aws-b300/input_config.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-aws-gb300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-volumes/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-onprem-b300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-torch-aws-b300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-torch-aws-b300/input_client_objects.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-torch-aws-b300/input_config.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-torch/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-unknown-arch-fallback-event/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-unpinned/expected.json is excluded by !**/testdata/**
  • pkg/certification/testdata/certification-render-annotations/aws-l20-nccl/expected.json is excluded by !**/testdata/**
  • pkg/certification/testdata/certification-render-image-pull-secrets/aws-b300-communication/expected.json is excluded by !**/testdata/**
  • pkg/certification/testdata/certification-render-image-pull-secrets/aws-b300-communication/input.yaml is excluded by !**/testdata/**
  • pkg/certification/testdata/certification-render-image-pull-secrets/aws-b300-communication/input_certification.yaml is excluded by !**/testdata/**
  • pkg/gpu/testdata/parse-product/nvidia-b300/expected.json is excluded by !**/testdata/**
  • pkg/gpu/testdata/parse-product/nvidia-b300/input.yaml is excluded by !**/testdata/**
  • pkg/platform/testdata/override-mpi-args/mpi-framework/expected.json is excluded by !**/testdata/**
  • pkg/platform/testdata/sshd-worker-invariants/catalog/expected.json is excluded by !**/testdata/**
  • pkg/platform/testdata/sshd-worker-invariants/overrides-mpi/expected.json is excluded by !**/testdata/**
  • pkg/platform/testdata/sshd-worker-invariants/overrides-torch/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/list-available/default/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/render-errors/bad-platform-gpu/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/render-errors/no-flags/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/render/embedded-aws-b300/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/render/embedded-aws-b300/input_config.yaml is excluded by !**/testdata/**
  • pkg/render/testdata/render/embedded-aws-b300/input_workflow.yaml is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/apply-platform-mpi-args/aws-b300-mpi-gets-efa-env/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/apply-platform-mpi-args/aws-b300-mpi-gets-efa-env/input.yaml is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/apply-platform-mpi-args/aws-b300-torch-is-untouched/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/apply-platform-mpi-args/aws-b300-torch-is-untouched/input.yaml is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/gang-scheduler-custom-queue-label-key/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/gang-scheduler-propagates/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/inline-config-adds-volume-and-configmap/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/intra-node-runs-one-node-per-job/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-forwards-env-to-ranks/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-keeps-spec-env/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-keeps-spec-volumes-and-config/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-mnnvl-enable/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-nscale-spec-env-wins/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/thresholds-enable-validation/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/torch-keeps-spec-env/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/torch-run-renders-the-default-workflow/expected.json is excluded by !**/testdata/**
  • test/uat/testdata/aws/b300/nccl/expected_certification.yaml is excluded by !**/testdata/**
  • test/uat/testdata/aws/b300/nccl/expected_pods.yaml is excluded by !**/testdata/**
  • test/uat/testdata/aws/b300/nodes.yaml is excluded by !**/testdata/**
⚙️ Run configuration
📥 Commits

Reviewing files that changed from the base of the PR and between 0b3a75a and 247945c.

⛔ Files ignored due to path filters: 61
  • cmd/integration/testdata/reconcile/certification-aws-b300-nccl/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/certification-aws-b300-nccl/input_client_objects.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/certification-aws-b300-nccl/input_config.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-exec-aws-b300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-exec-aws-b300/input_client_objects.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-exec-aws-b300/input_config.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-kai-default-queue/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-kai-labels/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-no-workload-metadata/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-runai-default-queue/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-gangscheduler-runai-explicit-queue/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-intra-node/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mixed-arch-majority/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-aws-b300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-aws-b300/input_client_objects.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-aws-b300/input_config.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-aws-gb300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi-volumes/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-mpi/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-onprem-b300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-torch-aws-b300/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-torch-aws-b300/input_client_objects.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-torch-aws-b300/input_config.yaml is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-torch/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-unknown-arch-fallback-event/expected.json is excluded by !**/testdata/**
  • cmd/integration/testdata/reconcile/workloadrun-unpinned/expected.json is excluded by !**/testdata/**
  • pkg/certification/testdata/certification-render-annotations/aws-l20-nccl/expected.json is excluded by !**/testdata/**
  • pkg/certification/testdata/certification-render-image-pull-secrets/aws-b300-communication/expected.json is excluded by !**/testdata/**
  • pkg/certification/testdata/certification-render-image-pull-secrets/aws-b300-communication/input.yaml is excluded by !**/testdata/**
  • pkg/certification/testdata/certification-render-image-pull-secrets/aws-b300-communication/input_certification.yaml is excluded by !**/testdata/**
  • pkg/gpu/testdata/parse-product/nvidia-b300/expected.json is excluded by !**/testdata/**
  • pkg/gpu/testdata/parse-product/nvidia-b300/input.yaml is excluded by !**/testdata/**
  • pkg/platform/testdata/override-mpi-args/mpi-framework/expected.json is excluded by !**/testdata/**
  • pkg/platform/testdata/sshd-worker-invariants/catalog/expected.json is excluded by !**/testdata/**
  • pkg/platform/testdata/sshd-worker-invariants/overrides-mpi/expected.json is excluded by !**/testdata/**
  • pkg/platform/testdata/sshd-worker-invariants/overrides-torch/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/list-available/default/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/render-errors/bad-platform-gpu/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/render-errors/no-flags/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/render/embedded-aws-b300/expected.json is excluded by !**/testdata/**
  • pkg/render/testdata/render/embedded-aws-b300/input_config.yaml is excluded by !**/testdata/**
  • pkg/render/testdata/render/embedded-aws-b300/input_workflow.yaml is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/apply-platform-mpi-args/aws-b300-mpi-gets-efa-env/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/apply-platform-mpi-args/aws-b300-mpi-gets-efa-env/input.yaml is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/apply-platform-mpi-args/aws-b300-torch-is-untouched/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/apply-platform-mpi-args/aws-b300-torch-is-untouched/input.yaml is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/gang-scheduler-custom-queue-label-key/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/gang-scheduler-propagates/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/inline-config-adds-volume-and-configmap/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/intra-node-runs-one-node-per-job/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-forwards-env-to-ranks/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-keeps-spec-env/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-keeps-spec-volumes-and-config/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-mnnvl-enable/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/mpi-nscale-spec-env-wins/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/thresholds-enable-validation/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/torch-keeps-spec-env/expected.json is excluded by !**/testdata/**
  • pkg/workloadrun/testdata/build-workflow-spec/torch-run-renders-the-default-workflow/expected.json is excluded by !**/testdata/**
  • test/uat/testdata/aws/b300/nccl/expected_certification.yaml is excluded by !**/testdata/**
  • test/uat/testdata/aws/b300/nccl/expected_pods.yaml is excluded by !**/testdata/**
  • test/uat/testdata/aws/b300/nodes.yaml is excluded by !**/testdata/**

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
📥 Commits

Reviewing files that changed from the base of the PR and between 56dfd7a and 7839e46.

📒 Files selected for processing: 3
  • docs/concepts/platform-detection.md
  • docs/operations/faq.md
  • pkg/catalog/entries/_lib/nccl/aws-efa-transport-env.yaml
🚧 Files skipped from review as they are similar to previous changes: 1
  • docs/concepts/platform-detection.md

Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 11 remain after this review.

📝 Walkthrough

Adds AWS B300-specific overrides for five NCCL entries. These overrides request 16 EFA devices and use CUDA 13 NCCL test images. AWS B300 WorkloadRuns receive EFA runtime and transport settings. The change also adds a mock node, an NCCL UAT test, and documentation about image compatibility and EFA validation. The documentation states that Nemotron 5 has no AWS B300 training override.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Feature · Severity of issue fixed: Medium

Merge Risk: ⚪ Minimal · up to 7839e

The B300 catalog and WorkloadRun paths match the documented contracts and are ready for normal checks.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files. (3 skipped: 3 … Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title clearly and concisely identifies the main change: adding AWS B300 EFA support.
Description check Passed The description directly explains the AWS B300 support changes, affected workloads, validation results, and scope.
Linked Issues check Passed Directly linked issue #557 requires AWS p6-b300.48xlarge NCCL entries to request 16 EFA devices, not 32, and to use a B300-compatible image. It also requires AWS+B300 WorkloadRun overrides with 16 EFA…
Out of Scope Changes check Passed Changes map to #557 or support it. Catalog overrides, the B300 EFA runtime patch, and WorkloadRun overrides implement the B300 behavior. The aws-b300 mock node and TestAWSB300NCCL support rendering an…
Full details: Linked Issues check

Explanation

Directly linked issue #557 requires AWS p6-b300.48xlarge NCCL entries to request 16 EFA devices, not 32, and to use a B300-compatible image. It also requires AWS+B300 WorkloadRun overrides with 16 EFA devices, retained caller images, and the eight-GPU default. Whole-PR summary evidence: nccl-all-reduce, nccl-all-gather, nccl-alltoall, nccl-loopback, and nccl-loopback-nvswitch each add an AWS+b300 override that uses the B300 EFA runtime patch (vpc.amazonaws.com/efa limits and requests of 16) and a CUDA 13.0.2 EFA NCCL-tests image. The H100 EFA overrides now exclude b300. Head file pkg/platform/overrides/workloadrun.yaml confirms a B300 TrainingRuntime dependency requesting 16 EFA, with IPC_LOCK, and SYS_CHROOT for MPI. It also confirms B300 EFA transport env through mpiArgs (MPI) and trainer.env (non-MPI). These overrides add resources and env only, so caller images are retained. Automated coverage: test/uat/aws_b300_nccl_test.go (TestAWSB300NCCL). Limits: the sm_103 native-code claim comes from the PR description and was not checked against a Dockerfile or image manifest. Integration and render fixtures in testdata were not inspected; the PR reports them passing. The incremental diff from 56dfd7a to 7839e46 could not be read because changed blobs are missing from the checkout, so the head state was assessed directly. Nemotron training is excluded by the issue and is not required. Hardware reruns and maintainer acknowledgment are non-coding and not assessed.

Full details: Out of Scope Changes check

Explanation

Changes map to #557 or support it. Catalog overrides, the B300 EFA runtime patch, and WorkloadRun overrides implement the B300 behavior. The aws-b300 mock node and TestAWSB300NCCL support rendering and acceptance coverage. CHANGELOG, platform-detection, certify-a-cluster, run-workloadrun, and FAQ docs describe the B300 behavior. The earlier question about narrowing the AWS GB300 plugin-removal and MPI forwarding entries is resolved. Comparing base and head pkg/platform/overrides/workloadrun.yaml shows those blocks were already scoped to gb300 at the merge base. This PR does not change H100 or GB200 WorkloadRun behavior in that file. The only additions in that file are the AWS+B300 blocks. No unrelated change is demonstrated. No controller, API, CRD, dependency, or Helm change is reported. The incremental diff since the previous reviewed head could not be read, so that range is not independently checked.

Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files. (3 skipped: 3 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@kaynetu kaynetu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

The B300 overrides look right to me: each one matches its H100 block except for the EFA count, the dependency and the image, and the WorkloadRun entries follow the GB200/H100 pattern. Two doc points, one inline.

Some places outside the diff still list only "H100 and GB200" for the nccl-tests image. B300 now lands there too:

  • docs/operations/faq.md:54, the <Warning> about setting image on AWS: B300 should be listed. On B300 a replacement image also needs a CUDA 13 build with sm_103 code, not just the aws-ofi-nccl plugin, so that requirement should go in the warning too.
  • docs/operations/faq.md:59, "AWS H100 and GB200: the catalog already lands the workers on the nccl-tests image": B300 belongs in this bullet as well.
  • pkg/catalog/entries/_lib/nccl/aws-efa-transport-env.yaml:5: the header says the fragment is shared "across H100 and GB200". The B300 WorkloadRun overrides now use it too.

Comment thread docs/concepts/platform-detection.md Outdated
ndipebot
ndipebot previously approved these changes Oct 23, 2026

@ndipebot ndipebot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I diffed each of the five new AWS + B300 blocks against its AWS + H100 sibling with the image, the dep fragment path and the arch selector normalised out. All five come back empty, so the arg order, the -d uint8 on nccl-alltoall, the timeout 3600 mpirun wrapper and the loopback NCCL_SHM_DISABLE/NCCL_P2P_DISABLE all carry over intact. deps/aws-b300-efa-runtime-patch-comm.yaml is a field-for-field parallel of deps/aws-efa-runtime-patch-comm.yaml with 32 to 16 and the CUDA 13 image.

git grep "notIn: \[gb200" returns exactly the five entries you edit, all now carrying b300, and no other when: in those entries matches aws plus b300, so the new block is the only one that fires. nemotron5-8b.yaml's AWS block is equals: h100, so training really does fall through to the base entry.

The golden churn is all accounted for: the +92/+69 hunks are the two new override entries growing the embedded list, build-workflow-spec/* is overrideCount 23 to 25 plus appliedOverrides.index shifts, sshd-worker-invariants/catalog is containersScanned 358 to 368, and test/uat/testdata/aws/b300/nccl/expected_pods.yaml is line-for-line congruent with the H100 golden at the same offsets. The new integration cases pin the right things: USER_SETTING survives on the runtime, FI_* lands on the trainer, SYS_CHROOT only on the MPI path.

Approving. kaynetu's three doc points are the only things I would still change at 56dfd7a4, and I agree with all three. The faq.md one in particular: aws-b300-efa-runtime-patch-comm.yaml puts a third AWS configuration on the nccl-tests image, so "Two AWS configurations need no override at all" at docs/operations/faq.md:57 is now wrong, and the <Warning> at line 54 should name B300 along with its CUDA 13 / sm_103 requirement.

One merge-order note inline.

Comment thread pkg/catalog/entries/communication/nccl-all-reduce.yaml
@ViriLain

Copy link
Copy Markdown
Author

Thanks for the review, Kayne. Updated the FAQ and shared EFA comment to include B300 and clarified the replacement-image requirements. Also removed the TCP fallback claim—we haven’t validated Nemotron training on B300, so the docs now state that it’s unsupported

@kaynetu

kaynetu commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator

@ViriLain Can you please look into the CI failure? Thanks

@ViriLain

Copy link
Copy Markdown
Author

@kaynetu CI is fixed

@ViriLain
ViriLain requested review from kaynetu and ndipebot October 23, 2026 19:24

@kaynetu kaynetu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM. The docs now describe Nemotron on AWS B300 as unsupported rather than falling back to TCP. The FAQ warning, the "no override needed" list, and the aws-efa-transport-env.yaml header all include B300 and its CUDA 13 / sm_103 image requirement. The aws-l20-nccl render-annotation golden from #532 picks up the widened notIn [gb200,gb300,b300] selector.

Heads-up on merge order: #552 also edits the AWS H100 notIn selector, so whichever of the two lands second needs the union [gb200, gb300, b300, rtxpro6000] in all five NCCL entries and in this golden.

AWS p6-b300.48xlarge resolves to b300 but currently matches the H100
NCCL fallback, which requests 32 EFA devices and cannot schedule on a
node advertising 16. The fallback image also predates B300 support.

Add explicit AWS B300 overrides for all five NCCL communication
entries, requesting 16 EFA devices and selecting the CUDA 13 image
with native sm_103 code. Apply matching EFA resource and transport
settings to MPI, torch and exec WorkloadRuns while preserving caller
environment variables and the eight-GPU default.

Add offline B300 node rendering, resolved-workload integration
fixtures, pull-secret coverage and a Kind/KWOK acceptance case.
Keep Nemotron training outside this change pending a compatible image
and separate hardware validation.

The B300 workload manifests match the configuration validated on two
AWS B300 nodes with EFA GPU-direct traffic. The latest upstream
controller changes are covered by local CI and simulated cluster
validation; that newer controller was not rerun on AWS hardware.

Signed-off-by: Joe Harp <jharp@nvidia.com>
Signed-off-by: Joe Harp <jharp@nvidia.com>
Signed-off-by: Joe Harp <jharp@nvidia.com>
@ViriLain
ViriLain force-pushed the jharp/aws-b300-ready-20261023 branch from 0b3a75a to 247945c Compare October 23, 2026 20:00
@copy-pr-bot

copy-pr-bot Bot commented Oct 23, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@ndipebot ndipebot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

All four doc points landed, and I checked each against the catalog rather than the prose.

faq.md:54 now names B300 alongside H100 and GB200, and the new paragraph at :56 adds the CUDA 13 and sm_103 requirement. nccl-all-reduce.yaml:287 does pin public.ecr.aws/hpc-cloud/nccl-tests:cuda13.0.2-efa1.48.0-ofiv1.19.0-ncclv2.30.4-1-testsv2.18.3 for the AWS + b300 block, so the image and CUDA 13 claims are backed by code. Dropping the count word at :59 instead of bumping it to three is better than what I suggested, since GB300 is its own bullet. The aws-efa-transport-env.yaml header is true and not aspirational: git grep aws-efa-transport-env returns six call sites in pkg/platform/overrides/workloadrun.yaml, and :168 and :182 sit under the aws + b300 blocks.

On platform-detection.md:129-132, I enumerated every when: block in nemotron5-8b.yaml and nemotron5-56b.yaml: the only b300 selectors are onprem + [b200, b300] and nscale + [b200, gb300], so there is no AWS + B300 training override and the base entry is what renders. The "not supported, not validated" wording holds.

247945cd is one line in aws-l20-nccl/expected.json, notIn [gb200,gb300] to notIn [gb200,gb300,b300]. L20 still matches the AWS H100 block, and the workflow name, both detected-* annotations and the patches summary are untouched. I reverted the five notIn lines in a worktree with the golden kept and TestCertificationRenderAnnotations failed on exactly that string, so the snapshot is load-bearing. go test ./pkg/certification/ ./pkg/catalog/... ./pkg/platform/ ./pkg/render/ ./pkg/workloadrun/ ./test/docspolicy/ is green at the head.

One thing the faq.md fix missed: docs/api-reference/certification.md:138 still reads "on AWS EFA platforms (H100, GB200) the platform overrides land the workers on an nccl-tests image". That is the same sentence kaynetu flagged, and after this PR B300 is a third AWS EFA platform with the same footgun on image. The file is hand-maintained, not generated. Could you widen the parenthetical to (H100, GB200, B300) and mirror the CUDA 13 / sm_103 note from faq.md:56? The same phrasing in ADR-077 and ADR-093 is historical and should stay.

The merge-order note with #552 is now wider than when I raised it. git merge-tree --write-tree pr/558 pr/552 at 5ccec790 conflicts on twelve paths. The five NCCL entries are still the core of it: [gb200, gb300, b300] here against [gb200, gb300, rtxpro6000] there, both from [gb200, gb300] on main, so the union is the only safe resolution. New since last time, #552 also rewrites aws-l20-nccl/expected.json, so that golden conflicts directly and the merged value has to be notIn [gb200,gb300,b300,rtxpro6000]. The three sshd-worker-invariants goldens, both render-errors goldens and two build-workflow-spec goldens conflict too. Whichever lands second should regenerate those on the merge result rather than keeping either branch's copy.

I could not check the sm_103 claim from here, since it is about the contents of an external image this repo does not build. It reads plausibly for a CUDA 13 nccl-tests build. If you are touching faq.md:56 anyway, naming the tag would save a reader a trip to nccl-all-reduce.yaml.

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.

[Bug]: AWS B300 NCCL requests 32 EFA devices instead of 16

3 participants