Skip to content

Commit 1f46800

Browse files
committed
Merge origin/main into cgomes/pao_with_bf16_params
Resolve the conflict in DistributedOptimizer.__init__ by keeping both the fp8_param_gather resolution assert and main's full-iteration CUDA graph grad copy setup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: CarlosGomes98 <cgomes@nvidia.com>
2 parents b873bf1 + 74c9420 commit 1f46800

1,140 files changed

Lines changed: 71920 additions & 182517 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/copy-pr-bot.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
enabled: true
22
auto_sync_draft: false
33
auto_sync_ready: true
4-
trustees_override: ["AAnoosheh", "ArEsKay3", "Autumn1998", "BestJuly", "BoxiangW", "CarlosGomes98", "ChenhanYu", "Connor-XY", "DanialTaheri", "FDecaYed", "HaochenYuan", "ISEEKYAN", "JF-D", "JRD971000", "Leili", "Mellonta", "Phlip79", "QiZhangNV", "RPrenger", "ShriyaRishab", "WanZzzzzz", "Wohox", "XiaodaNV", "YangFei1990", "ZhiyuLi-Nvidia", "abhinav-khattar", "adistomar", "ahmadki", "alokpathy", "ananthsub", "anlthms", "aroshanghias-nvd", "ashehper", "asolergi-nv", "athitten", "balasaajay", "buptzyb", "chtruong814", "cjld", "cspades", "cuichenx", "deepakn94", "desh2608", "dimapihtar", "dingqingy-nv", "duncanriach", "ehosseiniasl", "erhoo82", "ericharper", "fanshiqing", "faradawn", "fitsumreda", "freewym", "frsun-nvda", "gautham-kollu", "gdengk", "goelarushi", "guihong-nv", "guyueh1", "hexinw-nvidia", "huvunvidia", "hxbai", "ilml", "jalbericiola", "janEbert", "jaredcasper", "jiaji-huang", "jiemingz", "jingqiny-99", "jkamalu", "jon-barker", "jstjohn", "jupiterepoch", "kajalj22", "kamran-nvidia", "kevalmorabia97", "kevjshih", "kingformatty", "ko3n1g", "ksivaman", "kunlunl", "kvareddy", "kwangjunahn", "kwyss-nvidia", "lauradang", "layalir", "lhb8125", "liding-nv", "lmcafee-nvidia", "maanug-nv", "macandro96", "mathemakitten", "matthieule", "mchrzanowski", "mehraakash", "minitu", "mkhona-nvidia", "nanz-nv", "nathan-nvidia", "niyunsheng", "ntajbakhsh", "nvcsathe", "nvegesna-netizen", "parthmannan", "philipcmonk", "prajwal1210", "pthombre", "rapatel", "rhewett-nv", "rogerwaleffe", "sajadn", "sancha", "santhnm2", "sbak5", "shanmugamr1992", "sharathts", "sheliang-nv", "shengf-nv", "shifangx", "shjwudp", "sidsingh-nvidia", "skyw", "sraman-rgb", "sudhakarsingh27", "svcnvidia-nemo-ci", "tdene", "theothermike", "tomlifu", "trintamaki", "tylerpoon", "vasunvidia", "wanyingw", "wdykas", "wujingyue", "xiaoyao0115", "xuantengh", "xuwchen", "yaox12", "yaoyu-33", "yashaswikarnati", "yeyu-nvidia", "yobibyte", "youngeunkwon0405", "yqwangustc", "yueshen2016", "yuzhongw-nvidia", "zhehuaichen", "zhongbozhu"]
4+
trustees_override: ["AAnoosheh", "ArEsKay3", "Autumn1998", "BestJuly", "BoxiangW", "CarlosGomes98", "ChenhanYu", "Connor-XY", "DanialTaheri", "FDecaYed", "HaochenYuan", "ISEEKYAN", "JF-D", "JRD971000", "Leili", "Mellonta", "Phlip79", "QiZhangNV", "RPrenger", "ShriyaRishab", "WanZzzzzz", "Wohox", "XiaodaNV", "YangFei1990", "YigongQin", "ZhiyuLi-Nvidia", "abhinav-khattar", "adistomar", "ahmadki", "alokpathy", "ananthsub", "anlthms", "aroshanghias-nvd", "ashehper", "asolergi-nv", "athitten", "balasaajay", "buptzyb", "chtruong814", "cjld", "cspades", "cuichenx", "deepakn94", "desh2608", "dimapihtar", "dingqingy-nv", "duncanriach", "ehosseiniasl", "erhoo82", "ericharper", "fanshiqing", "faradawn", "fitsumreda", "freewym", "frsun-nvda", "gautham-kollu", "gdengk", "goelarushi", "guihong-nv", "guyueh1", "hexinw-nvidia", "huvunvidia", "hxbai", "ilml", "jalbericiola", "janEbert", "jaredcasper", "jiaji-huang", "jiemingz", "jingqiny-99", "jkamalu", "jon-barker", "jstjohn", "jupiterepoch", "kajalj22", "kamran-nvidia", "kevalmorabia97", "kevjshih", "kingformatty", "ko3n1g", "ksivaman", "kunlunl", "kvareddy", "kwangjunahn", "kwyss-nvidia", "lauradang", "layalir", "lhb8125", "liding-nv", "lmcafee-nvidia", "maanug-nv", "macandro96", "mathemakitten", "matthieule", "mchrzanowski", "mehraakash", "minitu", "mkhona-nvidia", "nanz-nv", "nathan-nvidia", "niyunsheng", "ntajbakhsh", "nvcsathe", "nvegesna-netizen", "parthmannan", "philipcmonk", "prajwal1210", "pthombre", "rapatel", "rhewett-nv", "rogerwaleffe", "sajadn", "sancha", "santhnm2", "santiagoakle", "sbak5", "shanmugamr1992", "sharathts", "sheliang-nv", "shengf-nv", "shifangx", "shjwudp", "sidsingh-nvidia", "skyw", "sraman-rgb", "sudhakarsingh27", "svcnvidia-nemo-ci", "tdene", "theothermike", "tomlifu", "trintamaki", "tylerpoon", "vasunvidia", "wanyingw", "wdykas", "wujingyue", "xiaoyao0115", "xrennvidia", "xuantengh", "xuwchen", "yaox12", "yaoyu-33", "yashaswikarnati", "yeyu-nvidia", "yobibyte", "youngeunkwon0405", "yqwangustc", "yueshen2016", "yuzhongw-nvidia", "zhehuaichen", "zhongbozhu"]

‎.github/oncall_schedule.json‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
[
2-
{
3-
"user": "guihong-nv",
4-
"date": "2026-10-07"
5-
},
62
{
73
"user": "ilml",
84
"date": "2026-10-14"
@@ -46,5 +42,9 @@
4642
{
4743
"user": "guihong-nv",
4844
"date": "2026-12-23"
45+
},
46+
{
47+
"user": "ilml",
48+
"date": "2026-12-30"
4949
}
5050
]

‎.github/workflows/_build_ci_container.yml‎

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ on:
3030
required: false
3131
default: nvidia-ci-aws-gpu-x8
3232
type: string
33+
selected-runner-gcp-h100:
34+
description: Runner label for an additional Singapore GCP H100 build
35+
required: false
36+
default: nvidia-ci-gcp-cpu-h100
37+
type: string
3338
selected-runner-gb200:
3439
description: Runner label for the GB200 build
3540
required: false
@@ -41,6 +46,22 @@ on:
4146
# Keep registry defaults aligned with the image registries in cicd-main.yml.
4247
default: 766267172432.dkr.ecr.us-east-1.amazonaws.com
4348
type: string
49+
registry-gcp-h100:
50+
description: Registry for H100 images and caches built on Singapore GCP runners
51+
required: false
52+
# GAR paths include the repository unlike ECR registry roots.
53+
default: asia-southeast1-docker.pkg.dev/nv-nemoautomati-20260505210812/megatron-lm
54+
type: string
55+
use-gcp-h100:
56+
description: Build and publish the H100 image on the Singapore GCP CPU runner
57+
required: false
58+
default: false
59+
type: boolean
60+
include-gcp-h100:
61+
description: Also build and publish the Singapore GCP H100 image alongside the selected H100 build
62+
required: false
63+
default: false
64+
type: boolean
4465
registry-gb200:
4566
description: Registry for GB200 images and caches
4667
required: false
@@ -83,19 +104,35 @@ jobs:
83104
IS_MAINTAINER: ${{ inputs.is-maintainer }}
84105
ENABLE_GB_TESTING: ${{ vars.ENABLE_GB200_TESTING }}
85106
SELECTED_RUNNER: ${{ inputs.selected-runner }}
107+
SELECTED_RUNNER_GCP_H100: ${{ inputs.selected-runner-gcp-h100 }}
86108
SELECTED_RUNNER_GB_GPU: ${{ inputs.selected-runner-gb200 }}
87109
REGISTRY_AWS: ${{ inputs.registry-aws }}
110+
REGISTRY_GCP_H100: ${{ inputs.registry-gcp-h100 }}
111+
USE_GCP_H100: ${{ inputs.use-gcp-h100 }}
112+
INCLUDE_GCP_H100: ${{ inputs.include-gcp-h100 }}
88113
REGISTRY_GB_GPU: ${{ inputs.registry-gb200 }}
89114
run: |
90-
AWS_H100=$(jq -nc --arg registry "$REGISTRY_AWS" --arg runner "$SELECTED_RUNNER" \
91-
'{"cloud": "aws-h100", "registry": $registry, "runner": $runner}')
115+
if [ "$IS_MAINTAINER" = "true" ] && [ "$USE_GCP_H100" = "true" ]; then
116+
GCP_H100=$(jq -nc --arg registry "$REGISTRY_GCP_H100" --arg runner "$SELECTED_RUNNER" \
117+
'{"cloud": "gcp-h100", "registry": $registry, "runner": $runner}')
118+
H100_MATRIX=$(jq -nc --argjson gcp "$GCP_H100" '[$gcp]')
119+
else
120+
AWS_H100=$(jq -nc --arg registry "$REGISTRY_AWS" --arg runner "$SELECTED_RUNNER" \
121+
'{"cloud": "aws-h100", "registry": $registry, "runner": $runner}')
122+
H100_MATRIX=$(jq -nc --argjson aws "$AWS_H100" '[$aws]')
123+
if [ "$IS_MAINTAINER" = "true" ] && [ "$INCLUDE_GCP_H100" = "true" ]; then
124+
GCP_H100=$(jq -nc --arg registry "$REGISTRY_GCP_H100" --arg runner "$SELECTED_RUNNER_GCP_H100" \
125+
'{"cloud": "gcp-h100", "registry": $registry, "runner": $runner}')
126+
H100_MATRIX=$(jq -nc --argjson h100 "$H100_MATRIX" --argjson gcp "$GCP_H100" '($h100 + [$gcp])')
127+
fi
128+
fi
92129
if [ "$IS_MAINTAINER" = "true" ] && [ "$ENABLE_GB_TESTING" = "true" ]; then
93130
GB_GPU=$(jq -nc --arg registry "$REGISTRY_GB_GPU" --arg runner "$SELECTED_RUNNER_GB_GPU" \
94131
'{"cloud": "gb-gpu", "registry": $registry, "runner": $runner}')
95-
MATRIX=$(jq -nc --argjson aws "$AWS_H100" --argjson gb_gpu "$GB_GPU" \
96-
'{"include": [$aws, $gb_gpu]}')
132+
MATRIX=$(jq -nc --argjson h100 "$H100_MATRIX" --argjson gb_gpu "$GB_GPU" \
133+
'{"include": ($h100 + [$gb_gpu])}')
97134
else
98-
MATRIX=$(jq -nc --argjson aws "$AWS_H100" '{"include": [$aws]}')
135+
MATRIX=$(jq -nc --argjson h100 "$H100_MATRIX" '{"include": $h100}')
99136
fi
100137
echo "matrix=$MATRIX" | tee -a "$GITHUB_OUTPUT"
101138
@@ -314,8 +351,19 @@ jobs:
314351
echo "target-build-hash=$TARGET_BUILD_HASH_KEY" | tee -a "$GITHUB_OUTPUT"
315352
echo "pr-build-hash=$PR_BUILD_HASH_KEY" | tee -a "$GITHUB_OUTPUT"
316353
354+
- name: Configure GAR Docker authentication
355+
if: inputs.is-maintainer && matrix.cloud == 'gcp-h100' && startsWith(matrix.registry, 'asia-southeast1-docker.pkg.dev/')
356+
shell: bash
357+
env:
358+
REGISTRY: ${{ matrix.registry }}
359+
run: |
360+
GAR_HOST="${REGISTRY%%/*}"
361+
command -v docker-credential-gcr
362+
docker-credential-gcr configure-docker --registries="$GAR_HOST"
363+
docker-credential-gcr get <<< "https://$GAR_HOST" >/dev/null
364+
317365
- name: Login to ECR
318-
if: inputs.is-maintainer && (matrix.cloud == 'aws-h100' || matrix.cloud == 'gb-gpu')
366+
if: inputs.is-maintainer && (matrix.cloud == 'gb-gpu' || (matrix.cloud == 'aws-h100' && !startsWith(matrix.registry, 'asia-southeast1-docker.pkg.dev/')))
319367
uses: aws-actions/amazon-ecr-login@03f1aad4c6c7ffd436567f42f9384779290529bd # v2.1.7
320368
env:
321369
AWS_REGION: ${{ matrix.cloud == 'gb-gpu' && 'us-east-2' || 'us-east-1' }}

‎.github/workflows/cicd-approve-test-queue.yml‎

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ jobs:
114114
"X-GitHub-Api-Version": "2022-11-28",
115115
}
116116
117-
def make_request(endpoint, method="GET", data=None, max_retries=5):
117+
def make_request(endpoint, method="GET", data=None, max_retries=5, return_response=False):
118118
"""Make a request to the GitHub API with retry on transient errors."""
119119
url = f"{API_BASE}/{endpoint}"
120120
for attempt in range(max_retries):
@@ -134,7 +134,7 @@ jobs:
134134
time.sleep(delay)
135135
continue
136136
response.raise_for_status()
137-
return response.json()
137+
return response if return_response else response.json()
138138
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e:
139139
delay = 2 ** attempt
140140
print(f"Transient error on {endpoint}: {e}, retrying in {delay}s (attempt {attempt + 1}/{max_retries})")
@@ -147,6 +147,24 @@ jobs:
147147
print(f"Max retries ({max_retries}) exceeded for {endpoint}")
148148
return None
149149
150+
def get_workflow_runs(status):
151+
"""Fetch every page before filtering runs or making approval decisions."""
152+
runs = {}
153+
page = 1
154+
while True:
155+
response = make_request(
156+
f"actions/runs?status={status}&per_page=100&page={page}",
157+
return_response=True,
158+
)
159+
if response is None:
160+
return None
161+
# Runs can move between pages while the queue is changing.
162+
for run in response.json()["workflow_runs"]:
163+
runs[run["id"]] = run
164+
if "next" not in response.links:
165+
return {"workflow_runs": list(runs.values())}
166+
page += 1
167+
150168
def is_internal_contributor(pr_info):
151169
"""Return True for internal service accounts or NVIDIA organization members."""
152170
login = pr_info.get("user", {}).get("login", "")
@@ -225,12 +243,12 @@ jobs:
225243
226244
# Get current running and queued workflows
227245
print("Fetching workflow runs...")
228-
queued_resp = make_request("actions/runs?status=queued")
246+
queued_resp = get_workflow_runs("queued")
229247
if queued_resp is None:
230248
print("Failed to fetch queued workflow runs after retries, exiting")
231249
exit(1)
232250
queued_workflow_runs = queued_resp.get("workflow_runs", [])
233-
in_progress_resp = make_request("actions/runs?status=in_progress")
251+
in_progress_resp = get_workflow_runs("in_progress")
234252
if in_progress_resp is None:
235253
print("Failed to fetch in-progress workflow runs after retries, exiting")
236254
exit(1)
@@ -272,7 +290,7 @@ jobs:
272290
273291
# Get waiting CI workflows for test environment
274292
print("Fetching deployments...")
275-
waiting_resp = make_request("actions/runs?status=waiting")
293+
waiting_resp = get_workflow_runs("waiting")
276294
if waiting_resp is None:
277295
print("Failed to fetch waiting workflow runs after retries, exiting")
278296
exit(1)

0 commit comments

Comments
 (0)