Skip to content

[wip] Ray 2.56 nightly + Dynamo 1.3.0 + vLLM 0.22 (cu129)#2064

Draft
praateekmahajan wants to merge 13 commits into
NVIDIA-NeMo:mainfrom
praateekmahajan:praateek/all-extras-cu129
Draft

[wip] Ray 2.56 nightly + Dynamo 1.3.0 + vLLM 0.22 (cu129)#2064
praateekmahajan wants to merge 13 commits into
NVIDIA-NeMo:mainfrom
praateekmahajan:praateek/all-extras-cu129

Conversation

@praateekmahajan

Copy link
Copy Markdown
Contributor

What

Enables the Ray 3.0 nightly + ai-dynamo nightly + vLLM 0.22 (CUDA 12.9) inference stack while keeping the full Curator dependency set resolvable and buildable — validated with uv sync --all-extras --all-groups (full container builds + every extra imports together: torch/vllm/cv2/cudf/cuml/nixl/dynamo/nemo_curator).

Changes

pyproject.toml

  • ray tracks the 3.0.0.dev0 nightly wheel (rolling /latest/ URL).
  • ai-dynamo and ai-dynamo-runtime >=1.3.0.dev0, both first-party so prerelease="if-necessary-or-explicit" enables the newest nightly without blanket prereleases. (ai-dynamo-runtime is a transitive with stable releases, so without an explicit marker uv backtracks to an older dynamo dev.)
  • prerelease = "if-necessary-or-explicit" (was a blanket allow).
  • vLLM pinned 0.22.0+cu129 via a dedicated cu129 wheel index + tool.uv.sources — the default vLLM wheel is now cu130 (VLLM_MAIN_CUDA_VERSION=13.0), so torch/vllm are kept on CUDA 12.9.
  • Drop nixl-cu13: ray[llm]/nixl hard-pin the CUDA-13 NIXL backend, whose eager import nixl_ep dlopens the absent libcudart.so.13 on a cu12.9 image; the nixl meta + nixl-cu12 backend remain.
  • opencv-pythonopencv-python-headless (no libGL/GPL GUI/FFmpeg bundling; matches what vllm/mistral_common/albumentations already request).
  • Bump torch/torchvision/torchaudio/torchcodec to the 2.11 cu129 line.

nemo_curator/core/serve/dynamo/vllm.py — the Dynamo actor venv is built by Ray's uv runtime_env via a bare uv pip install ai-dynamo[vllm] that ignores pyproject. Force cu129 the way uv/vLLM document: --torch-backend cu129, unsafe-best-match (required for nixl's split-index resolution), and a per-version cu129 vLLM index derived from ai-dynamo's own pin (so the actor honors dynamo's vLLM version as cu129); the --override file pins ray==<head> and drops nixl-cu13.

Notes

  • Nightly is intentionally not pinned. To refresh: uv lock --refresh-package … --upgrade-package … for ray/ai-dynamo/ai-dynamo-runtime before building.
  • Full-extras build needs a raised fd limit: docker build --ulimit nofile=1048576:1048576 (rapids file count, unrelated to these deps).
  • Draft: tracks the nightly stack; not necessarily intended to merge as-is.

🤖 Generated with Claude Code

@copy-pr-bot

copy-pr-bot Bot commented Jun 10, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@praateekmahajan praateekmahajan force-pushed the praateek/all-extras-cu129 branch from dc21302 to aaa42ad Compare June 10, 2026 22:04
@praateekmahajan

Copy link
Copy Markdown
Contributor Author

/ok to test aaa42ad

/claude review

@greptileai review

Comment thread nemo_curator/core/serve/dynamo/vllm.py
@greptile-apps

greptile-apps Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This draft PR threads the Ray 3.0 nightly + ai-dynamo nightly + vLLM 0.22.0+cu129 (CUDA 12.9) stack through both pyproject.toml and the Dynamo actor venv, while also switching to opencv-python-headless and bumping the torch/torchvision/torchaudio/torchcodec ecosystem to 2.11.

  • pyproject.toml: Ray core dependency is now a direct-URL nightly wheel gated to python_version == '3.13' and platform_machine == 'x86_64'; vLLM is pinned to 0.22.0+cu129 via a dedicated index; ai-dynamo and ai-dynamo-runtime switch to >=1.3.0.dev0 nightlies; nixl-cu13 is excluded at the override level; prerelease = \"if-necessary-or-explicit\" replaces the previous blanket allow.
  • vllm.py: A new _vllm_cu129_index_url() function reads ai-dynamo's installed metadata to derive the per-version vLLM cu129 index URL at import time, and _ACTOR_VENV_UV_OPTIONS passes --torch-backend cu129, --index-strategy unsafe-best-match, the nvidia index, and that cu129 index to the Ray actor venv install; the override file is extended to also exclude nixl-cu13.

Confidence Score: 3/5

Not safe to merge as-is: the ray nightly wheel entry in core dependencies is restricted to Python 3.13 only, silently dropping ray for Python 3.11 and 3.12 users the project still supports.

The core ray dependency is now a direct-URL nightly wheel valid only for Python 3.13 + x86_64 + Linux. Since the project supports Python >=3.11, any 3.11 or 3.12 install gets no ray from the base dependency list — import ray in core modules would fail at runtime with no warning at install time.

The ray entry in the dependencies block of pyproject.toml needs a fallback for Python 3.11/3.12. The _vllm_cu129_index_url function in vllm.py has two minor defensive-coding gaps worth addressing before merge.

Important Files Changed

Filename Overview
pyproject.toml Upgrades ray to nightly (cp313/x86_64 only), vLLM to 0.22.0+cu129, torch ecosystem to 2.11, drops nixl-cu13, switches opencv to headless; the ray nightly marker covers only Python 3.13, leaving 3.11/3.12 users with no ray in core deps.
nemo_curator/core/serve/dynamo/vllm.py Adds _vllm_cu129_index_url() to derive the vLLM cu129 index from ai-dynamo's pinned vllm version, builds _ACTOR_VENV_UV_OPTIONS with --torch-backend, --index-strategy unsafe-best-match, nvidia and vllm cu129 extra-indexes, and extends the override file to also drop nixl-cu13; logic and test are consistent, but InvalidRequirement is not caught and extras marker is not filtered in the vllm lookup.
tests/core/serve/dynamo/test_vllm.py Test updated to assert the override file now includes the nixl-cu13 exclusion line alongside the ray pin; correctly mirrors the new _ACTOR_VENV_NIXL_CU13_EXCLUSION constant.
uv.lock Lock file regenerated to reflect ray nightly, vLLM 0.22.0+cu129, torch 2.11, ai-dynamo nightlies, numba 0.65.0, and nixl-cu13 removal; large diff but consistent with the pyproject changes.

Reviews (1): Last reviewed commit: "Support ray/dynamo nightly + vLLM 0.22 (..." | Re-trigger Greptile

Comment thread pyproject.toml Outdated
Comment thread nemo_curator/core/serve/dynamo/vllm.py Outdated
Comment thread nemo_curator/core/serve/dynamo/vllm.py
Enable the Ray 3.0 nightly + ai-dynamo nightly + vLLM 0.22 inference stack
on the CUDA-12.9 image while keeping the full Curator dependency set
(`uv sync --all-extras --all-groups`) resolvable and buildable.

pyproject.toml:
- ray: 3.0.0.dev0 nightly wheel routed per python tag (x86_64) via
  [tool.uv.sources] so `dependencies` stays a plain `ray[default,data]`;
  aarch64/other resolve ray from PyPI via the >= floor (keeps ray[llm]'s
  default cu130 vllm off aarch64). Rolling /latest/ wheels are re-pinned by
  re-locking, never frozen.
- ai-dynamo and ai-dynamo-runtime >=1.3.0.dev0, both first-party so
  prerelease="if-necessary-or-explicit" enables the newest nightly without
  blanket prereleases (runtime is a transitive with stable releases, so it
  needs an explicit marker or uv backtracks to an older dynamo dev).
- vLLM 0.22.0+cu129 via a dedicated cu129 wheel index + tool.uv.sources
  (default vLLM is now cu130; keep torch/vllm on CUDA 12.9).
- drop nixl-cu13: ray[llm]/nixl hard-pin the CUDA-13 NIXL backend, whose
  eager `import nixl_ep` dlopens the absent libcudart.so.13 on cu12.9; keep
  the nixl meta + nixl-cu12 backend.
- opencv-python -> opencv-python-headless (no libGL/GPL GUI/FFmpeg bundling;
  matches vllm/mistral_common/albumentations).
- bump torch/torchvision/torchaudio/torchcodec to the 2.11 cu129 line.

dynamo actor venv runtime_env (vllm.py): Ray builds it via a bare
`uv pip install ai-dynamo[vllm]` that ignores pyproject, so force cu129 the
way uv/vLLM document: --torch-backend cu129, unsafe-best-match (needed for
nixl's split index resolution), and a per-version cu129 vllm index derived
from ai-dynamo's own pin (`_vllm_cu129_index_url`); the --override file pins
ray== and drops nixl-cu13.

Signed-off-by: Praateek <praateekm@gmail.com>
@praateekmahajan praateekmahajan force-pushed the praateek/all-extras-cu129 branch from aaa42ad to 4f0cdf4 Compare June 10, 2026 23:47
@praateekmahajan

Copy link
Copy Markdown
Contributor Author

/ok to test 4f0cdf4

…ror)

The prior docker/Dockerfile stub only patched /opt/venv, but CI unit tests run
from a fresh .venv (uv sync), so ray's dashboard frontend was still missing
there — the dashboard process died with FrontendNotFoundError and every
ray.util.state call (Xenna drives pipelines through it) failed with "Could not
read 'dashboard' from GCS", erroring all xenna backends/audio/text tests.

Move the stub into nemo_curator/__init__.py so it runs once on import, relative
to the installed ray (works in any venv), and gate it to dev/nightly ray so
published releases (which ship client/build) are untouched. Drop the redundant
Dockerfile stub.

Signed-off-by: Praateek <praateekm@gmail.com>
Signed-off-by: Praateek <praateekm@gmail.com>
Signed-off-by: Praateek <praateekm@gmail.com>
Signed-off-by: Praateek <praateekm@gmail.com>
Signed-off-by: Praateek <praateekm@gmail.com>
…-cu129

Signed-off-by: Praateek <praateekm@gmail.com>
Signed-off-by: Praateek <praateekm@gmail.com>
…-cu129

Signed-off-by: Praateek <praateekm@gmail.com>
Signed-off-by: Praateek <praateekm@gmail.com>
@praateekmahajan

Copy link
Copy Markdown
Contributor Author

/ok to test 214d015

Signed-off-by: Praateek <praateekm@gmail.com>
Signed-off-by: Praateek <praateekm@gmail.com>
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