diff --git a/Earthfile b/Earthfile index e59798d87a..3a6f05b412 100644 --- a/Earthfile +++ b/Earthfile @@ -139,7 +139,7 @@ dynamo-base-docker: FROM ubuntu:24.04 WORKDIR /workspace - COPY container/deps/requirements.txt /tmp/requirements.txt + COPY pyproject.toml /tmp/pyproject.toml # Install Python and other dependencies RUN apt-get update && \ @@ -159,7 +159,7 @@ dynamo-base-docker: ENV VIRTUAL_ENV=/opt/dynamo/venv ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" - RUN UV_GIT_LFS=1 uv pip install -r /tmp/requirements.txt + RUN UV_GIT_LFS=1 uv pip install -e /tmp/[test,standard] # Copy and install wheels -- ai-dynamo-runtime first, then ai-dynamo COPY +dynamo-build/ai_dynamo_runtime*.whl /tmp/wheels/ diff --git a/container/Dockerfile b/container/Dockerfile index 4623b4d84a..2adc936ac8 100644 --- a/container/Dockerfile +++ b/container/Dockerfile @@ -371,13 +371,17 @@ RUN uv venv /opt/dynamo/venv --python $PYTHON_VERSION ENV VIRTUAL_ENV=/opt/dynamo/venv \ PATH="/opt/dynamo/venv/bin:${PATH}" -# Install common and test dependencies -RUN --mount=type=bind,source=./container/deps/requirements.txt,target=/tmp/requirements.txt \ - --mount=type=bind,source=./container/deps/requirements.test.txt,target=/tmp/requirements.test.txt \ +# Install runtime wheel first, then dependencies +COPY --chown=dynamo: --from=wheel_builder /opt/dynamo/dist/*.whl /opt/dynamo/wheelhouse/ + +RUN uv pip install \ + /opt/dynamo/wheelhouse/ai_dynamo_runtime*.whl + +# Now install dependencies from pyproject.toml (runtime is now available) +RUN --mount=type=bind,source=./pyproject.toml,target=/tmp/pyproject.toml \ UV_GIT_LFS=1 uv pip install \ --no-cache \ - --requirement /tmp/requirements.txt \ - --requirement /tmp/requirements.test.txt + -e /tmp/[test,standard] # NIXL environment variables ENV NIXL_PREFIX=/opt/nvidia/nvda_nixl \ @@ -390,9 +394,8 @@ COPY --chown=dynamo: --from=wheel_builder /usr/local/ucx/ /usr/local/ucx/ COPY --chown=dynamo: --from=wheel_builder ${NIXL_PREFIX}/ ${NIXL_PREFIX}/ COPY --chown=dynamo: --from=wheel_builder /opt/nvidia/nvda_nixl/lib64/. ${NIXL_LIB_DIR}/ -# Copy built artifacts +# Copy nixl artifacts (wheels already copied earlier) COPY --chown=dynamo: --from=wheel_builder /opt/dynamo/dist/nixl/ /opt/dynamo/wheelhouse/nixl/ -COPY --chown=dynamo: --from=wheel_builder /opt/dynamo/dist/*.whl /opt/dynamo/wheelhouse/ COPY --chown=dynamo: --from=wheel_builder $CARGO_TARGET_DIR $CARGO_TARGET_DIR COPY --chown=dynamo: --from=wheel_builder $CARGO_HOME $CARGO_HOME diff --git a/container/Dockerfile.sglang-wideep b/container/Dockerfile.sglang-wideep index b232a68e8e..94958a831c 100644 --- a/container/Dockerfile.sglang-wideep +++ b/container/Dockerfile.sglang-wideep @@ -43,7 +43,7 @@ RUN if [ "$BRANCH_TYPE" = "local" ]; then \ pip install --break-system-packages target/wheels/*.whl && \ cd /sgl-workspace/dynamo && \ pip install --break-system-packages -e . && \ - pip install --break-system-packages --requirement /tmp/local_src/container/deps/requirements.txt ; \ + pip install --break-system-packages -e /tmp/local_src[test,standard] ; \ elif [ "$BRANCH_TYPE" = "remote" ]; then \ cd dynamo/lib/bindings/python && \ pip install --break-system-packages maturin && \ @@ -51,7 +51,7 @@ RUN if [ "$BRANCH_TYPE" = "local" ]; then \ pip install --break-system-packages target/wheels/*.whl && \ cd /sgl-workspace/dynamo && \ pip install --break-system-packages -e . && \ - pip install --break-system-packages --requirement /sgl-workspace/dynamo/container/deps/requirements.txt ; \ + pip install --break-system-packages -e /sgl-workspace/dynamo[test,standard] ; \ else \ pip install --break-system-packages ai-dynamo ; \ fi \ diff --git a/pyproject.toml b/pyproject.toml index a3e552d6aa..474a50096a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,21 +10,54 @@ authors = [ { name = "NVIDIA Inc.", email = "sw-dl-dynamo@nvidia.com" }, ] license = { text = "Apache-2.0" } -license-files = ["LICENSE"] requires-python = ">=3.10" dependencies = [ "ai-dynamo-runtime==0.7.0", - "pytest>=8.3.4", - "types-psutil>=7.0.0.20250218", - "kubernetes>=32.0.1,<33.0.0", - "fastapi>=0.115.0", + "accelerate==1.6.0", + "aiconfigurator @ git+https://github.com/ai-dynamo/aiconfigurator.git@5554d2eb8206738c66048bf2d72183e9bcd85759", + "aiofiles", + "aiperf @ git+https://github.com/ai-dynamo/aiperf.git@16dad7c02fcd959ba96823d7bfe7e681e5d5b41d", + "av==15.0.0", + "click<8.2.0", "distro", - # filelock: required by planner + "fastapi==0.120.1", "filelock", - "typer", - "click<8.2.0", - "setuptools", + "ftfy", + "genai-perf==0.0.15", + "grpcio-tools==1.66.0", + "httpx", + "kr8s", + "kubernetes==32.0.1", + "kubernetes_asyncio", + "matplotlib", + "msgspec", + "mypy", + "nvidia-ml-py==13.580.65", + "opentelemetry-api", + "opentelemetry-sdk", + "pip", + "pmdarima", + "pre-commit", + "prometheus-api-client", "prometheus_client>=0.23.1,<1.0", + "prophet", + "protobuf==5.29.5", + "pydantic>=2.10.6", + "pyright", + "pytest>=8.3.4", + "PyYAML", + "scikit-learn", + "scipy<1.14.0", + "sentencepiece", + "setuptools", + "tensorboard==2.19.0", + "tensorboardX==2.6.2.2", + "transformers", + "typer", + "types-aiofiles", + "types-psutil>=7.0.0.20250218", + "types-PyYAML", + "uvicorn", ] classifiers = [ @@ -65,6 +98,51 @@ sglang = [ ] [dependency-groups] +test = [ + # For IFEval dataset loading in kvbm tests + "datasets", + # For NATS object store verification in router tests + "nats-py", + "psutil>=5.0.0", + "pyright", + "pytest", + "pytest-asyncio", + "pytest-benchmark", + "pytest-codeblocks", + "pytest-cov", + "pytest-forked", + "pytest-md-report", + "pytest-mypy", + "pytest-timeout", + # Triton client to Dynamo gRPC server + "tritonclient[grpc]", + # add types library stub for PyYAML + "types-PyYAML", + "types-requests", +] + +standard = [ + "ucx-py-cu12", +] + +deploy = [ + # Kubernetes and async dependencies + "aiofiles>=0.8.0", + # Benchmarking dependencies for Dynamo + "genai-perf==0.0.15", + "httpx>=0.24.0", + "kubernetes-asyncio>=24.0.0", + # Plotting and visualization + "matplotlib>=3.5.0", + "numpy>=1.21.0", + "pandas>=1.3.0", + "plotly>=5.0.0", + # YAML processing + "pyyaml>=6.0.0", + "scipy>=1.7.0", + "seaborn>=0.11.0", +] + docs = [ # Core Sphinx "sphinx>=8.1",