Skip to content

fix(ci): fall back to g6e.4xlarge when AWS has no g6.4xlarge capacity - #1906

Merged
zhenshanx-nv merged 1 commit into
NVIDIA:ci/developerfrom
zhenshanx-nv:ci/gpu-type-fallback
Oct 30, 2026
Merged

zhenshanx-nv merged 1 commit into
NVIDIA:ci/developerfrom
zhenshanx-nv:ci/gpu-type-fallback

Conversation

@zhenshanx-nv

Copy link
Copy Markdown
Collaborator

Background

Per the 2026-10-29 team discussion on Community GPU CI reliability: 30+ failures in the last two weeks were "no available L40" catalog errors -- Brev's catalog search for the standard g6.4xlarge (AWS L4) qualification type comes back empty or duplicated. #1895 already retries that search (PREFLIGHT_ATTEMPTS = 4, up to ~6 minutes), but gives up if the type never regains capacity. This PR adds one same-provider fallback: g6e.4xlarge, which is not a new/unverified SKU -- it's already the manual GPU_PROFILE: large qualification type used today (workflow_dispatch only).

Exit Criteria

  • After the primary type's preflight retries are exhausted with a capacity-shaped failure (empty/duplicated catalog), retry once against g6e.4xlarge before giving up.
  • A deterministic rejection (bad disk, wrong provider, credential failure) is never retried -- only "no capacity" shapes fall back.
  • The two-phase --prepare-only / --from-intent allocation flow stays consistent: whichever type the prepare phase actually selects is the type the reserve phase requests.
  • Out of scope: Nebius fallback, OOM mitigation for large models (separate issue raised in the same discussion).

Implementation

  • tools/brev_exec.py: INSTANCE_TYPE_FALLBACKS = {"aws": {DEFAULT_INSTANCE_TYPE: "g6e.4xlarge"}}. New _select_instance_with_fallback() wraps the existing _select_instance/_preflight call; on PreflightUnavailable/InventoryError it retries once against the fallback type with host_ram_gib=None (matching how the existing manual large-profile lane already bypasses the single-GPU host-RAM check). provision() now reassigns instance_type to whichever type won and persists it as lease["sku"].
  • .github/workflows/community-ci.yml: the prepare step reads back the lease's resolved sku via jq after --prepare-only and sets qualification_type=g6e.4xlarge when a fallback occurred, reusing the existing reserve-step case logic that already handles that exact type.
  • tools/tests/test_community_gpu_ci.py: 3 new tests -- fallback succeeds after persistent primary-type outage, fallback is not attempted for a non-AWS provider, and a deterministic disk-mismatch rejection is never retried.

Validation

Commands and Results

  • python -m pytest tools/tests/test_community_gpu_ci.py tools/tests/test_community_ci.py tools/tests/test_community_gpu_lease.py: 1248 passed, 1 skipped.
  • ruff check / ruff format --check on the changed Python files: clean.
  • git diff --check: clean.
  • Workflow YAML re-parsed with PyYAML: valid.

Hardware, Environment, and Revisions

Base ci/developer at a4405a42. Python 3.12, CPU only, no GPU used.

Not Run / Remaining Gaps

  • No live Brev run against the real catalog.
  • test_architecture.py, test_public_source_hygiene.py show unrelated failures in this environment (git grep: failed to create thread: Resource temporarily unavailable) -- confirmed present on the unmodified branch too via a baseline run, so not caused by this change.

Contributor Self-Review

  • I have completed a self-review of this change.

Change categories

  • Model or runtime behavior
  • Public API
  • ABI
  • Bundle or artifact format
  • Dependencies
  • Documentation only
  • CI or developer tooling

Risk level

  • Low
  • Medium
  • High

Risk rationale: the fallback only fires after the primary type's existing retries are exhausted on a capacity-shaped error, reuses an already-validated instance type, and never retries a deterministic rejection.

@coderabbitai

coderabbitai Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration

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

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

Community GPU CI has seen 30+ failures in two weeks from Brev catalog
searches returning empty or duplicated results for the standard
g6.4xlarge type. The existing preflight retries (NVIDIA#1895) give up if
capacity never returns. Retry once against g6e.4xlarge, the same type
already used by the manual GPU_PROFILE=large qualification lane, after
the primary type's retries are exhausted on a capacity-shaped failure.
A deterministic rejection (bad disk, wrong provider, credentials) is
never retried.

Signed-off-by: Zhenshan Xie <zhenshanx@nvidia.com>
@zhenshanx-nv
zhenshanx-nv merged commit 2b07875 into NVIDIA:ci/developer Oct 30, 2026
2 checks passed
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.

1 participant