-
Notifications
You must be signed in to change notification settings - Fork 90
docs(user): document the machine type each accelerator criterion targets #2380
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
base: main
Are you sure you want to change the base?
Changes from 7 commits
4f78a6c
f9a5d90
25b0c7a
a7486d8
7d12eff
e42e972
d48a78f
3f0ee2e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -466,6 +466,13 @@ Generate recipes using direct system parameters: | |
| | `--data` | | string | External data directory to overlay on embedded data (see [External Data](#external-data-directory)) | | ||
| | `--criteria-strict` | | bool | Reject criteria values not in the embedded OSS catalog; ignores values registered from `--data`. Also honored via `AICR_CRITERIA_STRICT=1` or `spec.recipe.criteriaStrict: true` in `--config`. Intended for OSS CI gates. | | ||
|
|
||
| **Accelerator values name a GPU model, not a machine type.** A provider | ||
| usually offers several machine types for the same GPU, and the machine type — | ||
| not the GPU — determines the fabric, the NIC count, and which components a | ||
| recipe can use. `--accelerator h100` therefore does not, on its own, say which | ||
| node shape the resolved recipe targets. See | ||
| [Qualified machine types](#qualified-machine-types) below. | ||
|
|
||
| > **Service / Accelerator / OS / Intent / Platform value listings above are the OSS-embedded set.** When `--data` registers additional values (e.g., undisclosed providers, proprietary platforms), the CLI admits them at runtime through the criteria registry — see [Data Extension](../integrator/data-extension.md). `--criteria-strict` restores the OSS-only set regardless of what `--data` contributes. | ||
|
|
||
| **Examples:** | ||
|
|
@@ -510,6 +517,56 @@ proceeds for compatibility. Use a current snapshot before deployment when you | |
| need conflict detection. See | ||
| [Conflict detection requires snapshot evidence](slinky-slurm-accounting.md#conflict-detection-requires-snapshot-evidence). | ||
|
|
||
| #### Qualified machine types | ||
|
|
||
| Each recipe is qualified against a specific node shape. Criteria resolution | ||
| does not reject another machine type of the same GPU model — there is no axis | ||
| to reject it on — so a recipe always resolves. What differs by family is what | ||
| happens afterwards: on some, deployment validation fails; on others it succeeds | ||
| and only the performance gates are affected. | ||
|
|
||
| | Accelerator | Service / intent | Qualified machine type | On other shapes of the same GPU | | ||
| |---|---|---|---| | ||
| | `h100` | `gke`, `training` | `a3-megagpu-8g` | **Components do not schedule.** The GPUDirect-TCPXO DaemonSets pin node affinity to `cloud.google.com/gke-accelerator: nvidia-h100-mega-80gb`, so on `a3-highgpu-*` / `a3-edgegpu-8g` nothing rolls out and the deployment health check fails. AICR ships no GPUDirect-TCPX component for the shapes that need one — tracked in [#2290](https://github.com/NVIDIA/aicr/issues/2290). | | ||
| | `h100` | `gke`, `inference` | `a3-megagpu-8g` | Deploys. The inference lineage carries no `gke-nccl-tcpxo` component, so the hard failure above does not apply. Plain `inference` declares no performance gates at all; the `dynamo` variant adds floors calibrated on the 8-GPU node, so smaller shapes such as `a3-highgpu-1g/2g/4g` can false-fail there. | | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔵 Nitpick — "Qualified = a3-megagpu-8g" is over-precise for the plain GKE H100 inference row For the plain Fix: Optional: annotate the value as
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agreed — fixed in 3f0ee2e. The plain |
||
| | `h100` | `eks` | `p5.48xlarge` (8× H100 SXM, 32× EFA) | Deploys, but performance floors are calibrated on the full node; smaller shapes such as `p5.4xlarge` can false-fail a healthy run. | | ||
| | `h100` | `aks` | `Standard_ND96isr_H100_v5` (8× H100 SXM) | Deploys, but as above; `Standard_NC80adis_H100_v5` (2 GPUs) and `Standard_NC40ads_H100_v5` (1 GPU) can false-fail performance gates. | | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟠 Major — AKS H100 training hard-fails deployment on the NCads shapes, not a perf soft-fail This row says
The EKS row by contrast is genuinely correct (aws-efa has no Blast radius: A user on a 1-/2-GPU NCads H100 AKS cluster is told deployment will succeed and only a perf gate might false-fail; in reality Fix: State that the non-IB NCads shapes hard-fail the deployment RDMA-fabric readiness gate (network-operator NicClusterPolicy +
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Confirmed and fixed — this was a real defect in the table, and I traced the chain before changing it:
NCads are PCIe H100 with no InfiniBand, so no node carries the Mellanox label, the cohort is empty, and deployment fails before any performance gate runs. Fixed in 3f0ee2e: the AKS row now states the deployment RDMA-fabric gate and names the Worth recording why this was missed: an earlier review pass did check the AKS path, but only the Chainsaw health check — which indeed has no |
||
| | `gb200` | `eks` | `p6e-gb200.36xlarge` (4 GPUs per K8s node) | Deploys; floors are sized for this shape and are themselves provisional pending production NVL72 data. | | ||
| | `a100` | `gke` | the whole `a2` family (`a2-highgpu-*`, `a2-ultragpu-*`) | Family-level by construction, not per-shape: GPUDirect-TCPXO targets H100 `a3-megagpu-8g`, so the `gke-nccl-tcpxo` component is inapplicable to every `a2` shape and is intentionally omitted. No shape in the family carries a machine-type-bound component. | | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔵 Nitpick — The Fix: Optional: lowercase
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Made both lowercase in 3f0ee2e. Since the column names machine-type families rather than marketing series, the lowercase identifier form ( |
||
| | `b200` | `gke` | the `A4` family — **specific machine type not recorded** | No separate NCCL plugin installer; multi-node NCCL comes from GPU Operator `gdrcopy` plus GKE A4's GCP-managed multi-NIC, so nothing here is machine-type-bound. The overlay records a production reference cluster but no machine type, so this row cannot name one. | | ||
|
|
||
| A row that names no intent applies to every intent for that accelerator and | ||
| service. Where a row names a family rather than a machine type, the entry is a | ||
| family-level statement — either because no component in that family binds to a | ||
| machine type, or because the specific shape is not recorded in-repo. The row | ||
| says which. | ||
|
coderabbitai[bot] marked this conversation as resolved.
|
||
|
|
||
| Two distinct failure modes are worth separating: | ||
|
|
||
| - **Component-level (hard).** Only the GKE H100 **training** lineage pins | ||
| artifacts to a machine type today — `h100-gke-cos-training` and the leaves | ||
| that inherit from it. On a non-matching shape the DaemonSets have nowhere to | ||
| land and deployment validation fails loudly rather than degrading. No other | ||
| family, and no inference recipe, carries a machine-type-bound component. | ||
| - **Performance-gate (soft).** Elsewhere the recipe deploys normally, but the | ||
| NCCL and inference floors are fixed absolute values calibrated on full, | ||
| high-bandwidth nodes. They are not normalized for GPU count or fabric class, | ||
| so a smaller shape can fail a gate while being perfectly healthy. See | ||
| [Validation › Node-shape assumption](./validation.md). Normalizing these | ||
| floors per GPU or per fabric class was considered and declined | ||
| ([#1256](https://github.com/NVIDIA/aicr/issues/1256), | ||
| [#1254](https://github.com/NVIDIA/aicr/issues/1254), both closed as not | ||
| planned) — the floors are deliberately fixed absolute full-node values, so | ||
| running a qualified shape is the supported way to pass them. | ||
|
|
||
| The table lists the accelerator/service pairs that have a qualified shape; | ||
| a pair or a shape absent from it is **undocumented rather than known-broken**. | ||
| It has not been qualified, and the criteria model has no axis that would | ||
| distinguish it from one that has. | ||
| Whether AICR should gain one — finer-grained accelerator values, a machine-type | ||
| axis, or a fabric class — is tracked in | ||
| [#2377](https://github.com/NVIDIA/aicr/issues/2377). | ||
|
|
||
| #### Snapshot Mode | ||
|
|
||
| Generate recipes from captured snapshots: | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -44,8 +44,10 @@ spec: | |
| # enabled, combined with GKE A4's native multi-NIC infrastructure | ||
| # managed by GCP. The `gke-nccl-tcpxo` component is intentionally | ||
| # omitted because its DaemonSets pin to `cloud.google.com/gke- | ||
| # accelerator: nvidia-h100-mega-80gb` (a3-megagpu / H100) and a | ||
| # different transport (TCPX), so they would not run on A4 nodes. | ||
| # accelerator: nvidia-h100-mega-80gb` (a3-megagpu / H100) and carry a | ||
| # transport A4 does not use (GPUDirect-TCPXO), so they would not run on A4 | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔵 Nitpick — The prior-round P4 fix lowercased the doc table to Fix: Optional. Defensible as-is (uppercase A4 = series name in prose; lowercase a4 = machine-type family in code font). Align only if doc↔overlay parity is the goal. |
||
| # nodes. (TCPXO is the a3-megagpu transport; TCPX is the separate | ||
| # a3-highgpu/edge one. Neither applies here.) | ||
| - name: gpu-operator | ||
| type: Helm | ||
| dependencyRefs: | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔵 Nitpick — Heading capitalization diverges from immediate siblings
#### Qualified machine typesis sentence case while its two peers under### aicr recipeare Title Case (#### Query Mode,#### Snapshot Mode). The file mixes both and CLAUDE.md doesn't mandate Title Case, so this is defensible. The anchor stays#qualified-machine-typesunder GitHub's lowercasing either way, so the intra-page link is unaffected.Fix: Optional:
#### Qualified Machine Typesfor local consistency.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changed to
#### Qualified Machine Typesin 3f0ee2e to match its#### Query Mode/#### Snapshot Modesiblings. As you note the anchor is unaffected — GitHub lowercases either way — so the intra-page link needed no change, and I verified it still points at#qualified-machine-types.