Skip to content

fix(container): update GLM-5.2 SGLang runtime dependencies - #15549

Closed
ynpandey-nv wants to merge 2 commits into
release/1.3.0-glm-5.2-dev.2from
ypandey/glm-5.2-vex
Closed

ynpandey-nv wants to merge 2 commits into
release/1.3.0-glm-5.2-dev.2from
ypandey/glm-5.2-vex

Conversation

@ynpandey-nv

@ynpandey-nv ynpandey-nv commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Overview:

Updates the SGLang runtime dependencies used by release/1.3.0-glm-5.2-dev.2.

Details:

  • Upgrade NATS from v2.10.28 to v2.12.15 (Go 1.25.12, golang.org/x/crypto v0.55.0).
  • Upgrade etcd from v3.5.30 to v3.5.34 (Go 1.26.8, golang.org/x/crypto v0.55.0).
  • Pin AnyIO to 4.14.2, replacing 4.14.1 from the base image.
  • Remove the unused amd64 Nsight Compute nic_sampler binary, built with Go 1.23.4. The runtime only links nsys.

Where should the reviewer start?

  • container/context.yaml
  • container/deps/requirements.sglang.txt
  • container/templates/sglang_runtime.Dockerfile

Related Issues

🚫 This PR is NOT linked to an issue:

  • Confirmed — no related issue

Test plan

  • Rebuild the SGLang runtime for amd64 and arm64 from release/1.3.0-glm-5.2-dev.2 after merge.
  • Confirm NATS reports Go 1.25.12 and golang.org/x/crypto v0.55.0.
  • Confirm etcd, etcdctl, and etcdutl report Go 1.26.8 and golang.org/x/crypto v0.55.0.
  • Confirm AnyIO metadata reports 4.14.2.
  • Confirm no nic_sampler path remains and nsys is still linked.
  • Smoke-test NATS, etcd, and the GLM aggregated and disaggregated recipes.

Upgrade NATS and etcd, pin AnyIO 4.14.2, and remove the unused Nsight nic_sampler binary so a dev.2 rebuild can clear the dev.1 Critical findings.

Signed-off-by: Yogendra Pandey <ypandey@nvidia.com>
@ynpandey-nv
ynpandey-nv requested review from a team as code owners October 2, 2026 04:52
@copy-pr-bot

copy-pr-bot Bot commented Oct 2, 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.

@ynpandey-nv

Copy link
Copy Markdown
Contributor Author

/ok to test 1c1361e

@devin-ai-integration

Copy link
Copy Markdown
Contributor

❌ Dynamo PR CI failed — run 36966577025 (attempt 1) on 1c1361e98b

Gate checks: ❌ backend-status-check · ✅ deploy-status-check · ❌ dynamo-status-check

Framework Build 1-GPU amd64 Multi-GPU amd64
vLLM ✅ 4 ❌ 1 ❌ 1
SGLang ❌ 1 ✅ 2 ➖ ➖
TRT-LLM ✅ 4 ❌ 1 ❌ 1
Other Jobs
dynamo-runtime ⏹️ 1
planner ❌ 2 ✅ 3

Failure details

7 jobs failed with 3 distinct signatures: the 4 vLLM/TRT-LLM test jobs abort before running tests because the local action .github/actions/pytest-local is missing from the checkout; both planner CPU jobs hit a collection error (transformers cannot import ResolvedRevision from huggingface_hub); and the SGLang build's Compliance extract fails building NIXL after sccache could not load its S3 credentials. The cancelled dynamo-runtime build hit its 30-minute job timeout (not a fail-fast or manual cancel).

❌ vllm-runtime / Test cuda13.0, amd64: missing local action .github/actions/pytest-local

Job: vllm-runtime / Test cuda13.0, amd64 · Failed step: Run CPU-only tests (parallelized) · Logs: gh run view --job 110720163503 -R ai-dynamo/dynamo --log-failed

✅ Sanity check passed
##[error]Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/_work/dynamo/dynamo/.github/actions/pytest-local'. Did you forget to run actions/checkout before running your local action?

The test step references the local composite action .github/actions/pytest-local, which does not exist in the checked-out tree, so no tests ran. The same error fails the other three framework test jobs below.

❌ vllm-runtime / Multi-GPU Test cuda13.0, amd64: missing local action .github/actions/pytest-local

Job: vllm-runtime / Multi-GPU Test cuda13.0, amd64 · Failed step: Run GPU tests (sequential) · Logs: gh run view --job 110720163490 -R ai-dynamo/dynamo --log-failed

##[error]Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/_work/dynamo/dynamo/.github/actions/pytest-local'. Did you forget to run actions/checkout before running your local action?

Same as above: the GPU test step cannot resolve .github/actions/pytest-local, so no tests ran.

❌ trtllm-runtime / Test cuda13.1, amd64: missing local action .github/actions/pytest-local

Job: trtllm-runtime / Test cuda13.1, amd64 · Failed step: Run CPU-only tests (parallelized) · Logs: gh run view --job 110721340281 -R ai-dynamo/dynamo --log-failed

✅ Sanity check passed
##[error]Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/_work/dynamo/dynamo/.github/actions/pytest-local'. Did you forget to run actions/checkout before running your local action?

Same missing .github/actions/pytest-local action; no tests ran.

❌ trtllm-runtime / Multi-GPU Test cuda13.1, amd64: missing local action .github/actions/pytest-local

Job: trtllm-runtime / Multi-GPU Test cuda13.1, amd64 · Failed step: Run GPU tests (sequential) · Logs: gh run view --job 110721340246 -R ai-dynamo/dynamo --log-failed

##[error]Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/_work/dynamo/dynamo/.github/actions/pytest-local'. Did you forget to run actions/checkout before running your local action?

Same missing .github/actions/pytest-local action; no tests ran.

❌ planner / CPU Test cpu, amd64: ImportError ResolvedRevision from huggingface_hub

Job: planner / CPU Test cpu, amd64 · Failed step: Run CPU-only tests (parallelized) · Logs: gh run view --job 110719693022 -R ai-dynamo/dynamo --log-failed

_ ERROR collecting components/src/dynamo/planner/tests/offline/test_replay_adapter_fpm.py _
components/src/dynamo/planner/tests/offline/test_replay_adapter_fpm.py:34: in <module>
    from dynamo.replay.main import _engine_caps
/opt/dynamo/venv/lib/python3.12/site-packages/dynamo/mocker/utils/kv_cache.py:7: in <module>
    from transformers import AutoConfig
/opt/dynamo/venv/lib/python3.12/site-packages/transformers/utils/hub.py:29: in <module>
    from huggingface_hub import (
E   ImportError: cannot import name 'ResolvedRevision' from 'huggingface_hub' (/opt/dynamo/venv/lib/python3.12/site-packages/huggingface_hub/__init__.py)
ERROR components/src/dynamo/planner/tests/offline/test_replay_adapter_fpm.py - ImportError while importing test module
================== 894 passed, 15 skipped, 1 error in 23.49s ===================

All tests pass except a collection error in tests/offline/test_replay_adapter_fpm.py: the installed transformers imports ResolvedRevision from huggingface_hub, which the installed huggingface_hub does not provide (incompatible versions in the image's venv).

❌ planner / CPU Test cpu, arm64: ImportError ResolvedRevision from huggingface_hub

Job: planner / CPU Test cpu, arm64 · Failed step: Run CPU-only tests (parallelized) · Logs: gh run view --job 110719692874 -R ai-dynamo/dynamo --log-failed

E   ImportError: cannot import name 'ResolvedRevision' from 'huggingface_hub' (/opt/dynamo/venv/lib/python3.12/site-packages/huggingface_hub/__init__.py)
ERROR components/src/dynamo/planner/tests/offline/test_replay_adapter_fpm.py - ImportError while importing test module
================== 893 passed, 16 skipped, 1 error in 31.41s ===================

Same transformers/huggingface_hub version mismatch on arm64, breaking collection of test_replay_adapter_fpm.py.

❌ sglang-runtime / Build multi-arch cuda13.0: NIXL meson "sccache nvcc cannot compile programs"

Job: sglang-runtime / Build multi-arch cuda13.0 · Failed step: Compliance extract · Logs: gh run view --job 110711612886 -R ai-dynamo/dynamo --log-failed

#145 0.176 sccache: error: Server startup failed: cache storage failed to read: Unexpected (temporary) at read => loading credential to sign http request
#145 0.176    called: reqsign::LoadCredential
#145 0.176    service: s3
#143 0.222 WARNING: sccache server failed to start, building without cache
#143 0.226 Cloning into 'nixl'...
#143 8.717 meson.build:194:4: ERROR: Compiler /usr/local/bin/sccache nvcc cannot compile programs.
ERROR: failed to build: failed to solve: process "/bin/sh -c export AWS_WEB_IDENTITY_TOKEN_FILE=/run/secrets/aws-token && ... meson setup build/ ... ninja && ninja install ..." did not complete successfully: exit code: 1
##[error]Process completed with exit code 1.

The image build itself succeeded; the Compliance extract step's Docker build failed in the wheel_builder NIXL stage. sccache could not start because it failed to load S3 credentials (reqsign::LoadCredential, "temporary"), and meson's nvcc check through the sccache nvcc wrapper then failed. This looks like an infrastructure (sccache/AWS credential) issue; a rerun of failed jobs is likely enough.

⏹️ dynamo-runtime / image / Build multi-arch cuda13.0: cancelled

Job: dynamo-runtime / image / Build multi-arch cuda13.0 · Not analyzed. Cancelled in Build and Push Image by the job timeout ("The job has exceeded the maximum execution time of 30m0s"), not a fail-fast or manual cancel.

For agents
{"pr": 15549, "run_id": 36966577025, "run_attempt": 1, "head_sha": "1c1361e98b3914f8301af8e026a93430519bf584",
 "failures": [
  {"job": "sglang-runtime / Build multi-arch cuda13.0", "job_id": 110711612886, "failed_step": "Compliance extract", "signature": "NIXL meson: sccache nvcc cannot compile programs (sccache S3 credential load failed)", "tests": [], "log_cmd": "gh run view --job 110711612886 -R ai-dynamo/dynamo --log-failed"},
  {"job": "planner / CPU Test cpu, arm64", "job_id": 110719692874, "failed_step": "Run CPU-only tests (parallelized)", "signature": "ImportError: cannot import name 'ResolvedRevision' from 'huggingface_hub'", "tests": ["components/src/dynamo/planner/tests/offline/test_replay_adapter_fpm.py"], "log_cmd": "gh run view --job 110719692874 -R ai-dynamo/dynamo --log-failed"},
  {"job": "planner / CPU Test cpu, amd64", "job_id": 110719693022, "failed_step": "Run CPU-only tests (parallelized)", "signature": "ImportError: cannot import name 'ResolvedRevision' from 'huggingface_hub'", "tests": ["components/src/dynamo/planner/tests/offline/test_replay_adapter_fpm.py"], "log_cmd": "gh run view --job 110719693022 -R ai-dynamo/dynamo --log-failed"},
  {"job": "vllm-runtime / Multi-GPU Test cuda13.0, amd64", "job_id": 110720163490, "failed_step": "Run GPU tests (sequential)", "signature": "Can't find action.yml under .github/actions/pytest-local", "tests": [], "log_cmd": "gh run view --job 110720163490 -R ai-dynamo/dynamo --log-failed"},
  {"job": "vllm-runtime / Test cuda13.0, amd64", "job_id": 110720163503, "failed_step": "Run CPU-only tests (parallelized)", "signature": "Can't find action.yml under .github/actions/pytest-local", "tests": [], "log_cmd": "gh run view --job 110720163503 -R ai-dynamo/dynamo --log-failed"},
  {"job": "trtllm-runtime / Multi-GPU Test cuda13.1, amd64", "job_id": 110721340246, "failed_step": "Run GPU tests (sequential)", "signature": "Can't find action.yml under .github/actions/pytest-local", "tests": [], "log_cmd": "gh run view --job 110721340246 -R ai-dynamo/dynamo --log-failed"},
  {"job": "trtllm-runtime / Test cuda13.1, amd64", "job_id": 110721340281, "failed_step": "Run CPU-only tests (parallelized)", "signature": "Can't find action.yml under .github/actions/pytest-local", "tests": [], "log_cmd": "gh run view --job 110721340281 -R ai-dynamo/dynamo --log-failed"}
 ]}

Posted automatically by Devin for run 36966577025. Updated on every full-CI run of this PR.

@dmitry-tokarev-nv dmitry-tokarev-nv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approve at 1c1361e98b. One P2 is inline. One P3 and one open item are below.

  • [P3] NATS 2.12 is end of life. The docs.nats.io support table lists v2.12.15 (2026-08-12) as the final 2.12 release. main pins v2.14.7, which ships go1.26.8 and x/crypto v0.57.0. The base client passes the same probes on it. Please consider v2.14.7, so that a later flagged Go or x/crypto version in NATS can still get a fix.
  • Open: this review does not test the claim that the PR clears the 34 amd64 and 31 arm64 Critical rows. The rescan in the test plan is the test for it.
What I measured at 1c1361e.
  • Archives: I fetched the NATS and etcd archives from the URLs in dynamo_base.Dockerfile. All 8 match the release SHA256SUMS, and a changed copy fails.
  • go version -m, on amd64 and arm64: nats-server v2.12.15 has go1.25.12 and x/crypto v0.55.0. etcd, etcdctl and etcdutl v3.5.34 have go1.26.8 and x/crypto v0.55.0. The .deb still installs only /usr/bin/nats-server.
  • The shipped sglang-runtime:1.3.0-glm-5.2-dev.1 (amd64) holds the v2.10.28 and v3.5.30 release binaries, byte for byte. Its first 27 layers are lmsysorg/sglang:v0.5.14-cu130-runtime.
  • NATS server: two base dynamo-runtime tests pass against nats:2.12.15, nats:2.10.28 and nats:2.14.7. They cover the object store and a stream with pull consumers. A throwaway KV probe through NATSStore also passes. With no server, all 3 fail.
  • Strict mode: 2.12.15 and 2.14.7 reject an unknown JetStream field, and 2.10.28 accepts it. So the client sent only known fields. The nats:2.12.15 binary is the release binary, byte for byte.
  • Kubernetes: the platform chart still runs nats:2.10.21-alpine. This PR changes only the binary inside the images.
  • AnyIO: the CI build of this head logs Found existing installation: anyio 4.14.1 and Successfully installed anyio-4.14.2 on both arches. The base image has no pip constraint.
  • PyPI: the trusted publisher agronholm/anyio (publish.yml) uploaded the 4.14.2 wheel on 2026-07-12. Its sha256 is 9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494. Its dependencies match 4.14.1.
  • Six installed packages require AnyIO: anthropic, httpcore (only with its asyncio extra), httpx, openai, starlette and watchfiles. All six accept 4.14.2.
  • nic_sampler: the image has one regular file, at /opt/nvidia/nsight-compute/2025.3.1/host/target-linux-x64/plugins/efa_metrics/nic_sampler. It is amd64 only and built with go1.23.4.
  • The new RUN, run as written in the dev.1 image, deletes it and keeps nsys. The guard alone fails on the untouched image.
  • Only nsys-plugin.yaml refers to it, as the executable of the efa_metrics plugin (nsys profile --enable=efa_metrics, AWS EFA counters). Nothing in this branch calls that plugin.
  • Scope: context.yaml feeds dynamo_base in every image. So the bump also changes the vLLM, TRT-LLM and Dynamo runtime images.
  • CI built the SGLang image for both arches at this head. No SGLang test job ran, so no CI test used this image.

Comment thread container/context.yaml
Comment on lines +33 to +35
nats_version: v2.12.15
# v3.5.34 ships Go 1.26.8 and golang.org/x/crypto v0.55.0.
etcd_version: v3.5.34

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P2] The /legal files of the SGLang, vLLM and TRT-LLM runtime images still name NATS v2.10.28 and etcd v3.5.30. container/compliance/native_packages.yaml:128 and :143. Please set line 128 to v3.5.34 and line 143 to v2.12.15 in this PR, as main does in each NATS or etcd bump.

Measured at 1c1361e, with controls.
Source nats-server etcd
context.yaml at this head v2.12.15 v3.5.34
CI artifact vllm-runtime, amd64 and arm64 v2.10.28 v3.5.30
CI artifact sglang-runtime-efa, amd64 and arm64 v2.10.28 v3.5.30
CI artifact sglang-runtime, arm64 v2.10.28 v3.5.30
Native generator, head YAML, --native-image sglang-runtime v2.10.28 v3.5.30
Same generator, the two lines bumped v2.12.15 v3.5.34
Same generator, a made-up image name no rows no rows

The CI artifacts come from run 36966577025 on this head. The CSV rows and the CycloneDX purls agree, for example pkg:generic/nats-server@v2.10.28. The same run downloads nats-server-v2.12.15-*.deb and etcd-v3.5.34-*.tar.gz. The Compliance audit jobs pass because audit_image_sbom.py matches names only. On main at a88ef6df4c, #12917, #13016 and #14919 change both files together.

The change I ran through the generator:

   - name: etcd
-    version: v3.5.30
+    version: v3.5.34
@@
   - name: nats-server
-    version: v2.10.28
+    version: v2.12.15

@dmitry-tokarev-nv
dmitry-tokarev-nv dismissed their stale review October 5, 2026 16:54

Withdrawing my approval because new commits landed after it. I will review the new commits before I approve again.

Describe the NATS, etcd, AnyIO, and nic_sampler updates by version and package role only.

Signed-off-by: Yogendra Pandey <ypandey@nvidia.com>
@ynpandey-nv ynpandey-nv changed the title fix(container): clear Critical CVEs in the GLM-5.2 SGLang runtime fix(container): update GLM-5.2 SGLang runtime dependencies Oct 7, 2026
@ynpandey-nv ynpandey-nv closed this Oct 7, 2026
@ynpandey-nv
ynpandey-nv deleted the ypandey/glm-5.2-vex branch October 7, 2026 00:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants