Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
f2af796
feat(config): add compact GLM-5.2 B300 AgentX recipes
RohitNagraj Sep 11, 2026
427c61d
chore(changelog): link PR #2993
RohitNagraj Sep 11, 2026
5f2b9e3
fix(changelog): correct PR #2993 link placement
RohitNagraj Sep 11, 2026
f4f27f8
fix(config): sync main and correct GLM-5.2 B300 recipe paths
RohitNagraj Sep 14, 2026
fe9a40e
fix(recipes): remove stale B300 node exclusions
RohitNagraj Sep 14, 2026
e571ea1
fix(recipes): use portable B300 CPU binding
RohitNagraj Sep 14, 2026
7e5ed31
fix(recipes): fall back to available B300 fabric devices
RohitNagraj Sep 15, 2026
10db1e8
chore: merge main and resolve configuration conflicts
RohitNagraj Sep 15, 2026
6bb8744
fix(recipes): extend GLM-5.2 B300 Slurm limit
RohitNagraj Sep 15, 2026
4022048
chore: merge main and resolve perf changelog
RohitNagraj Sep 15, 2026
0f4a194
fix(eval): co-locate GLM-5.2 lm-eval frontend
RohitNagraj Sep 15, 2026
e3f393c
Merge origin/main and resolve perf changelog
RohitNagraj Sep 15, 2026
a9d7b2a
fix(recipes): retry truncated Dynamo installs
RohitNagraj Sep 15, 2026
813d5ab
fix(recipes): allow c1 profiling to drain
RohitNagraj Sep 15, 2026
160e321
Merge origin/main and resolve perf changelog
RohitNagraj Sep 15, 2026
9ead89c
fix(recipes): use LIBFABRIC for GLM-5.2 KV transfer
RohitNagraj Sep 15, 2026
8d14b89
Merge origin/main and resolve perf changelog
RohitNagraj Sep 15, 2026
d714eb6
fix: stage EFA runtime for GLM-5.2 LIBFABRIC
RohitNagraj Sep 15, 2026
00d2b12
Merge origin/main and migrate GLM-5.2 recipes
RohitNagraj Sep 15, 2026
56f4ee9
chore: sync PR #2993 with main
RohitNagraj Sep 16, 2026
8407735
fix(glm52-agentx): inspect PMIx worker startup
RohitNagraj Sep 17, 2026
01c106f
fix(glm52-agentx): preserve MPI worker identity
RohitNagraj Sep 17, 2026
0c6e465
fix(glm52-agentx): allow time for the complete sweep
RohitNagraj Sep 17, 2026
ca83053
chore: merge main into GLM-5.2 B300 recipes
RohitNagraj Sep 18, 2026
921c7a6
fix(glm52): repair Dynamo install and KV transfer setup
RohitNagraj Sep 18, 2026
5b8bf97
chore: sync main with GLM-5.2 B300 configuration
RohitNagraj Sep 18, 2026
a91f7bb
fix: use standard CUDA KV allocations for GLM-5.2 B300
RohitNagraj Sep 18, 2026
9a903c1
fix(b300): preserve AgentX result identity and producer status
RohitNagraj Sep 18, 2026
33b43b0
chore: reconcile current model configuration additions
RohitNagraj Sep 18, 2026
618a054
chore: synchronize current model configuration entries
RohitNagraj Sep 18, 2026
1f92933
fix(glm52): serialize c20 prefill transfer posting
RohitNagraj Sep 20, 2026
e683a55
fix(glm52): harden B300 worker startup
RohitNagraj Sep 21, 2026
dbf9b73
feat(agentx): adopt native B300 SRT recipes
RohitNagraj Sep 28, 2026
1df41b9
chore(glm52-agentx): sync with current main
RohitNagraj Sep 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env bash

# Use only with exclusive node allocations. Anchor the cutoff to allocation
# start so a later frontend/worker setup cannot remove this job's segments.
clean_stale_shm() {
python3 -S - "$@" <<'PY'
import os
import socket
import stat
import sys
import time
from pathlib import Path

directory = Path(sys.argv[1])
job_start = int(sys.argv[2])
if job_start <= 600 or job_start > time.time():
raise ValueError("SLURM_JOB_START_TIME must be a valid allocation start timestamp")
cutoff = job_start - 600
prefixes = ("vader_segment.", "nccl-", "sem.", "psm3", "fe80::")
entries = list(directory.iterdir())
removed = 0
for entry in entries:
if not entry.name.startswith(prefixes):
continue
try:
info = entry.lstat()
if (info.st_uid != os.getuid() or not stat.S_ISREG(info.st_mode)
or info.st_mtime >= cutoff):
continue
entry.unlink()
removed += 1
except FileNotFoundError:
# Another rank may have already removed the same stale segment.
continue
print(f"[clean_stale_shm] {socket.gethostname()}: removed {removed} stale segments "
f"from {len(entries)} entries; cutoff={cutoff}")
PY
}

if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
source /infmax-workspace/benchmarks/benchmark_lib.sh --validation-only || exit 1
check_env_vars SLURM_JOB_START_TIME || exit 1
clean_stale_shm /dev/shm "$SLURM_JOB_START_TIME"
fi
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/usr/bin/env bash

bash "$(dirname "${BASH_SOURCE[0]}")/clean_stale_shm.sh" || exit 1

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.

any chance u can remove these files?


# Read launch metadata without initializing MPI or changing its configuration.
python3 -S - <<'PY'
import json
import os
import socket
import stat
from pathlib import Path

names = (
"SLURM_MPI_TYPE", "SLURM_JOB_ID", "SLURM_STEP_ID", "SLURM_JOB_UID",
"SLURM_PROCID", "SLURM_LOCALID", "PMIX_NAMESPACE", "PMIX_RANK",
"PMIX_SERVER_URI", "PMIX_SERVER_URI2", "PMIX_SERVER_URI21",
"PMIX_SERVER_URI3", "PMIX_SERVER_URI4", "PMIX_SERVER_URI41",
"PMIX_SERVER_TMPDIR", "PMIX_SYSTEM_TMPDIR", "PMIX_SECURITY_MODE",
"PMIX_PTL_MODULE", "PMIX_GDS_MODULE", "PMIX_MCA_psec",
"PMIX_MCA_ptl", "PMIX_MCA_gds",
)
environment = {name: os.environ[name] for name in names if name in os.environ}
paths = {environment[name] for name in ("PMIX_SERVER_TMPDIR", "PMIX_SYSTEM_TMPDIR")
if environment.get(name, "").startswith("/")}
for name, value in environment.items():
if name.startswith("PMIX_SERVER_URI"):
for component in value.split(";"):
if component.startswith("file:"):
component = component.removeprefix("file:")
if component.startswith("/"):
paths.add(component)
job = environment.get("SLURM_JOB_ID", "")
step = environment.get("SLURM_STEP_ID", "")
uid = environment.get("SLURM_JOB_UID", "")
if job.isdecimal() and step.isdecimal():
paths.update((f"/var/spool/slurmd/pmix.{job}.{step}",
f"/tmp/spmix_appdir_{job}.{step}"))
if uid.isdecimal():
paths.add(f"/tmp/spmix_appdir_{uid}_{job}.{step}")
metadata = {}
for name in sorted(paths):
try:
info = Path(name).stat()
metadata[name] = {"uid": info.st_uid, "gid": info.st_gid,
"mode": stat.filemode(info.st_mode)}
except OSError as error:
metadata[name] = {"errno": error.errno}
try:
uid_map = Path("/proc/self/uid_map").read_text().strip()
except OSError as error:
uid_map = f"unavailable: errno={error.errno}"
print("PMIx launch diagnostics: " + json.dumps({
"hostname": socket.gethostname(), "uid": os.getuid(), "gid": os.getgid(),
"uid_map": uid_map, "environment": environment, "paths": metadata,
}, sort_keys=True))
PY

if command -v ompi_info >/dev/null 2>&1; then
timeout 10s ompi_info --version || true
timeout 10s ompi_info --param pmix all || true
fi
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/env bash

# Source before the SRT installer so its lock and packages share a writable prefix.
source /infmax-workspace/benchmarks/benchmark_lib.sh --validation-only || return 1
check_env_vars SLURM_JOB_ID SLURM_STEP_ID || return 1

INFX_DYNAMO_VENV=$(python3 - <<'PY'
import fcntl
import os
import re
import venv
from pathlib import Path

job = os.environ["SLURM_JOB_ID"]
step = os.environ["SLURM_STEP_ID"]
if not re.fullmatch(r"[0-9]+", job) or not re.fullmatch(r"[0-9]+", step):
raise ValueError("Dynamo virtual environment requires numeric Slurm job and step IDs")
root = Path("/tmp") / f"infx-dynamo-{job}.{step}"
root.mkdir(mode=0o700, exist_ok=True)
environment = root / "venv"
with (root / "create.lock").open("w") as lock:
fcntl.flock(lock, fcntl.LOCK_EX)
if not (root / "complete").exists():
venv.EnvBuilder(system_site_packages=True, with_pip=True, symlinks=True).create(environment)
(root / "complete").touch()
print(environment)
PY
) || return 1
export VIRTUAL_ENV="$INFX_DYNAMO_VENV"
export PATH="$VIRTUAL_ENV/bin:$PATH"
unset INFX_DYNAMO_VENV

# Keep transient package download failures inside SRT's existing install lock.
# Other pip invocations retain their original behavior.
pip() {
if [[ $# -ne 7 || "$1" != install || "$2" != --break-system-packages ||
"$3" != --quiet || "$4" != --extra-index-url ||
"$5" != https://pypi.nvidia.com || "$6" != ai-dynamo-runtime==?* ||
"$7" != "ai-dynamo==${6#ai-dynamo-runtime==}" ]]; then
command pip "$@"
return $?
fi

local attempt install_status
for attempt in 1 2 3; do
if command pip "$@"; then
return 0
else
install_status=$?
fi
if [[ "$attempt" -lt 3 ]]; then
echo "Dynamo install attempt $attempt failed; retrying unchanged packages." >&2
sleep 5 || return $?
fi
done
return "$install_status"
}
Loading
Loading