From 3a29fd56f87f73866ff55c7b2a0b78b6258eb3aa Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 2 Jun 2026 16:28:41 -0500 Subject: [PATCH] Add short cu12/cu13 Docker tag aliases and update docs Publish short `cu` image tags (latest-cu12, latest-cu13, -cu12/cu13) as aliases of the existing fully-qualified `-cuda-py` tags, matching the pip/conda wheel suffix convention. The fully-qualified tags are kept unchanged. Update the user-facing docs (README, install-selector, NIM operator examples, gRPC examples) and the regression config to lead with the short tags. Skill docs/evals are tracked separately in #1369. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Ramakrishna Prabhu --- README.md | 8 ++--- ci/docker/create_multiarch_manifest.sh | 20 +++++++++++ docs/cuopt/source/_static/install-selector.js | 34 +++++++++---------- docs/cuopt/source/cuopt-grpc/advanced.rst | 6 ++-- .../nim-operator/configuration.rst | 8 +++-- .../guide/cuopt-nimservice-full.yaml | 2 +- .../nim-operator/guide/cuopt-nimservice.yaml | 2 +- .../cuopt-server/nim-operator/guide/deploy.sh | 2 +- regression/config.sh | 2 +- 9 files changed, 53 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 79d00e744e..1cb85b9bc2 100644 --- a/README.md +++ b/README.md @@ -130,15 +130,15 @@ Users can pull the cuOpt container from the NVIDIA container registry. ```bash # For CUDA 12.x -docker pull nvidia/cuopt:latest-cuda12.9-py3.13 +docker pull nvidia/cuopt:latest-cu12 # For CUDA 13.x -docker pull nvidia/cuopt:latest-cuda13.0-py3.13 +docker pull nvidia/cuopt:latest-cu13 ``` -Note: The ``latest`` tag is the latest stable release of cuOpt. If you want to use a specific version, you can use the ``-cuda12.9-py3.13`` or ``-cuda13.0-py3.13`` tag. For example, to use cuOpt 25.10.0, you can use the ``25.10.0-cuda12.9-py3.13`` or ``25.10.0-cuda13.0-py3.13`` tag. Please refer to [cuOpt dockerhub page](https://hub.docker.com/r/nvidia/cuopt/tags) for the list of available tags. +Note: The ``latest`` tag is the latest stable release of cuOpt. If you want to use a specific version, you can use the ``-cu12`` or ``-cu13`` tag. For example, to use cuOpt 26.6.0, you can use the ``26.6.0-cu12`` or ``26.6.0-cu13`` tag. Fully-qualified tags that also pin the CUDA minor and Python version (for example ``26.6.0-cuda12.9-py3.14``) are published alongside the short tags. Please refer to [cuOpt dockerhub page](https://hub.docker.com/r/nvidia/cuopt/tags) for the list of available tags. -Nightly container images are built from the HEAD of the development branch and use the upcoming CUDA/Python defaults (`cuda12.9-py3.14` and `cuda13.1-py3.14`). They are tagged as ``a-cuda12.9-py3.14`` or ``a-cuda13.1-py3.14`` (note the ``a`` alpha suffix). See the [cuOpt dockerhub page](https://hub.docker.com/r/nvidia/cuopt/tags) for the full list. +Nightly container images are built from the HEAD of the development branch. They are tagged as ``a-cu12`` or ``a-cu13`` (note the ``a`` alpha suffix). See the [cuOpt dockerhub page](https://hub.docker.com/r/nvidia/cuopt/tags) for the full list. More information about the cuOpt container can be found [here](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-server/quick-start.html#container-from-docker-hub). diff --git a/ci/docker/create_multiarch_manifest.sh b/ci/docker/create_multiarch_manifest.sh index 860e47f168..6f9b723ee8 100644 --- a/ci/docker/create_multiarch_manifest.sh +++ b/ci/docker/create_multiarch_manifest.sh @@ -57,18 +57,30 @@ create_manifest() { echo "✓ Successfully created and pushed manifest: $manifest_name" } +# Short cu alias (e.g. cu12/cu13), matching the pip/conda wheel suffix. +# Aliases point at the same per-arch images as the fully-qualified tags. +CUDA_MAJOR="${CUDA_SHORT%%.*}" + # Create manifest for dockerhub and nvstaging echo "=== Creating Docker Hub manifests ===" create_manifest \ "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}" \ "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-amd64" \ "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-arm64" +create_manifest \ + "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cu${CUDA_MAJOR}" \ + "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-amd64" \ + "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-arm64" echo "=== Creating NVCR staging manifests ===" create_manifest \ "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}" \ "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-amd64" \ "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-arm64" +create_manifest \ + "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cu${CUDA_MAJOR}" \ + "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-amd64" \ + "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-arm64" # Only create latest manifests for release versions (semantic version without 'a') if [[ "${IMAGE_TAG_PREFIX}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${IMAGE_TAG_PREFIX}" != *"a"* ]]; then @@ -79,12 +91,20 @@ if [[ "${IMAGE_TAG_PREFIX}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${IMAGE_TAG_PR "nvidia/cuopt:latest-cuda${CUDA_SHORT}-py${PYTHON_SHORT}" \ "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-amd64" \ "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-arm64" + create_manifest \ + "nvidia/cuopt:latest-cu${CUDA_MAJOR}" \ + "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-amd64" \ + "nvidia/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-arm64" echo "Creating NVCR staging latest manifest..." create_manifest \ "nvcr.io/nvstaging/nvaie/cuopt:latest-cuda${CUDA_SHORT}-py${PYTHON_SHORT}" \ "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-amd64" \ "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-arm64" + create_manifest \ + "nvcr.io/nvstaging/nvaie/cuopt:latest-cu${CUDA_MAJOR}" \ + "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-amd64" \ + "nvcr.io/nvstaging/nvaie/cuopt:${IMAGE_TAG_PREFIX}-cuda${CUDA_SHORT}-py${PYTHON_SHORT}-arm64" else echo "Skipping latest manifest creation (IMAGE_TAG_PREFIX='${IMAGE_TAG_PREFIX}' is not a release version)" fi diff --git a/docs/cuopt/source/_static/install-selector.js b/docs/cuopt/source/_static/install-selector.js index 9ca0fa1de8..0639dee782 100644 --- a/docs/cuopt/source/_static/install-selector.js +++ b/docs/cuopt/source/_static/install-selector.js @@ -40,22 +40,22 @@ var CONTAINER_CUOPT_LIB = { stable: { cu12: { - default: "docker pull nvidia/cuopt:latest-cuda12.9-py3.13", - run: "docker run --gpus all -it --rm nvidia/cuopt:latest-cuda12.9-py3.13 /bin/bash", + default: "docker pull nvidia/cuopt:latest-cu12", + run: "docker run --gpus all -it --rm nvidia/cuopt:latest-cu12 /bin/bash", }, cu13: { - default: "docker pull nvidia/cuopt:latest-cuda13.0-py3.13", - run: "docker run --gpus all -it --rm nvidia/cuopt:latest-cuda13.0-py3.13 /bin/bash", + default: "docker pull nvidia/cuopt:latest-cu13", + run: "docker run --gpus all -it --rm nvidia/cuopt:latest-cu13 /bin/bash", }, }, nightly: { cu12: { - default: "docker pull nvidia/cuopt:" + V_NEXT + ".0a-cuda12.9-py3.14", - run: "docker run --gpus all -it --rm nvidia/cuopt:" + V_NEXT + ".0a-cuda12.9-py3.14 /bin/bash", + default: "docker pull nvidia/cuopt:" + V_NEXT + ".0a-cu12", + run: "docker run --gpus all -it --rm nvidia/cuopt:" + V_NEXT + ".0a-cu12 /bin/bash", }, cu13: { - default: "docker pull nvidia/cuopt:" + V_NEXT + ".0a-cuda13.1-py3.14", - run: "docker run --gpus all -it --rm nvidia/cuopt:" + V_NEXT + ".0a-cuda13.1-py3.14 /bin/bash", + default: "docker pull nvidia/cuopt:" + V_NEXT + ".0a-cu13", + run: "docker run --gpus all -it --rm nvidia/cuopt:" + V_NEXT + ".0a-cu13 /bin/bash", }, }, }; @@ -207,22 +207,22 @@ container: { stable: { cu12: { - default: "docker pull nvidia/cuopt:latest-cuda12.9-py3.13", - run: "docker run --gpus all -it --rm -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:latest-cuda12.9-py3.13", + default: "docker pull nvidia/cuopt:latest-cu12", + run: "docker run --gpus all -it --rm -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:latest-cu12", }, cu13: { - default: "docker pull nvidia/cuopt:latest-cuda13.0-py3.13", - run: "docker run --gpus all -it --rm -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:latest-cuda13.0-py3.13", + default: "docker pull nvidia/cuopt:latest-cu13", + run: "docker run --gpus all -it --rm -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:latest-cu13", }, }, nightly: { cu12: { - default: "docker pull nvidia/cuopt:" + V_NEXT + ".0a-cuda12.9-py3.14", - run: "docker run --gpus all -it --rm -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:" + V_NEXT + ".0a-cuda12.9-py3.14", + default: "docker pull nvidia/cuopt:" + V_NEXT + ".0a-cu12", + run: "docker run --gpus all -it --rm -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:" + V_NEXT + ".0a-cu12", }, cu13: { - default: "docker pull nvidia/cuopt:" + V_NEXT + ".0a-cuda13.1-py3.14", - run: "docker run --gpus all -it --rm -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:" + V_NEXT + ".0a-cuda13.1-py3.14", + default: "docker pull nvidia/cuopt:" + V_NEXT + ".0a-cu13", + run: "docker run --gpus all -it --rm -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:" + V_NEXT + ".0a-cu13", }, }, }, @@ -268,7 +268,7 @@ var cudaKey = cuda || "cu12"; var c = data[release][cudaKey] || data[release].cu12; var hubPull = c.default; - var tag = "latest-cuda12.9-py3.13"; + var tag = "latest-cu12"; var tm = hubPull.match(/docker pull nvidia\/cuopt:(\S+)/); if (tm) tag = tm[1]; var registry = getSelectedValue("cuopt-registry") || "hub"; diff --git a/docs/cuopt/source/cuopt-grpc/advanced.rst b/docs/cuopt/source/cuopt-grpc/advanced.rst index 07e41c8972..b23b56e378 100644 --- a/docs/cuopt/source/cuopt-grpc/advanced.rst +++ b/docs/cuopt/source/cuopt-grpc/advanced.rst @@ -236,7 +236,7 @@ Typical run: docker run --gpus all -p 5001:5001 \ -e CUOPT_SERVER_TYPE=grpc \ - nvcr.io/nvidia/cuopt/cuopt:latest + nvcr.io/nvidia/cuopt/cuopt:latest-cu12 TLS example with a cert volume: @@ -246,14 +246,14 @@ TLS example with a cert volume: -e CUOPT_SERVER_TYPE=grpc \ -e CUOPT_GRPC_ARGS="--tls --tls-cert /certs/server.crt --tls-key /certs/server.key --log-to-console" \ -v ./certs:/certs:ro \ - nvcr.io/nvidia/cuopt/cuopt:latest + nvcr.io/nvidia/cuopt/cuopt:latest-cu12 Bypass the entrypoint: .. code-block:: bash docker run --gpus all -p 5001:5001 \ - nvcr.io/nvidia/cuopt/cuopt:latest \ + nvcr.io/nvidia/cuopt/cuopt:latest-cu12 \ cuopt_grpc_server --port 5001 --workers 2 Client environment (examples) diff --git a/docs/cuopt/source/cuopt-server/nim-operator/configuration.rst b/docs/cuopt/source/cuopt-server/nim-operator/configuration.rst index 0c494bf0eb..21ec2a5fad 100644 --- a/docs/cuopt/source/cuopt-server/nim-operator/configuration.rst +++ b/docs/cuopt/source/cuopt-server/nim-operator/configuration.rst @@ -19,15 +19,17 @@ Update the image tag in ``cuopt-nimservice.yaml``: * - CUDA Version - Image Tag - * - CUDA 12.9 - - ``25.12.0-cuda12.9-py3.13`` + * - CUDA 12.x + - ``26.6.0-cu12`` + * - CUDA 13.x + - ``26.6.0-cu13`` .. code-block:: yaml spec: image: repository: nvcr.io/nvidia/cuopt/cuopt - tag: "25.12.0-cuda12.9-py3.13" + tag: "26.6.0-cu12" pullPolicy: IfNotPresent Resource Configuration diff --git a/docs/cuopt/source/cuopt-server/nim-operator/guide/cuopt-nimservice-full.yaml b/docs/cuopt/source/cuopt-server/nim-operator/guide/cuopt-nimservice-full.yaml index 55cb170c75..ea48f3095f 100644 --- a/docs/cuopt/source/cuopt-server/nim-operator/guide/cuopt-nimservice-full.yaml +++ b/docs/cuopt/source/cuopt-server/nim-operator/guide/cuopt-nimservice-full.yaml @@ -10,7 +10,7 @@ metadata: spec: image: repository: nvcr.io/nvidia/cuopt/cuopt - tag: "25.12.0-cuda12.9-py3.13" + tag: "26.6.0-cu12" pullPolicy: IfNotPresent pullSecrets: - ngc-secret diff --git a/docs/cuopt/source/cuopt-server/nim-operator/guide/cuopt-nimservice.yaml b/docs/cuopt/source/cuopt-server/nim-operator/guide/cuopt-nimservice.yaml index b5ce13409a..9740c09ad2 100644 --- a/docs/cuopt/source/cuopt-server/nim-operator/guide/cuopt-nimservice.yaml +++ b/docs/cuopt/source/cuopt-server/nim-operator/guide/cuopt-nimservice.yaml @@ -9,7 +9,7 @@ metadata: spec: image: repository: nvcr.io/nvidia/cuopt/cuopt - tag: "25.12.0-cuda12.9-py3.13" + tag: "26.6.0-cu12" pullPolicy: IfNotPresent pullSecrets: - ngc-secret diff --git a/docs/cuopt/source/cuopt-server/nim-operator/guide/deploy.sh b/docs/cuopt/source/cuopt-server/nim-operator/guide/deploy.sh index 27550cb817..7496318b3c 100755 --- a/docs/cuopt/source/cuopt-server/nim-operator/guide/deploy.sh +++ b/docs/cuopt/source/cuopt-server/nim-operator/guide/deploy.sh @@ -18,7 +18,7 @@ set -e # Default values NAMESPACE="nim-service" -CUOPT_IMAGE_TAG="25.12.0-cuda12.9-py3.13" +CUOPT_IMAGE_TAG="26.6.0-cu12" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" UNINSTALL=false SKIP_PREREQUISITES=false diff --git a/regression/config.sh b/regression/config.sh index 2b20597d07..e45398a06a 100644 --- a/regression/config.sh +++ b/regression/config.sh @@ -14,7 +14,7 @@ PARTITION="batch" GPUS_PER_NODE=8 # Path to the squashs file containing the container image -IMAGE="nvidia/cuopt:26.2.0a-cuda12.9-py3.13" +IMAGE="nvidia/cuopt:26.6.0a-cu12" ALL_CONFIGS_PATH=$SCRATCH_DIR/configs/ ROUTING_CONFIGS_PATH=$SCRATCH_DIR/routing_configs/