Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 ``<version>-cuda12.9-py3.13`` or ``<version>-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 ``<version>-cu12`` or ``<version>-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 ``<version>a-cuda12.9-py3.14`` or ``<version>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 ``<version>a-cu12`` or ``<version>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).

Expand Down
20 changes: 20 additions & 0 deletions ci/docker/create_multiarch_manifest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,18 +57,30 @@ create_manifest() {
echo "✓ Successfully created and pushed manifest: $manifest_name"
}

# Short cu<major> 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
Expand All @@ -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
Expand Down
34 changes: 17 additions & 17 deletions docs/cuopt/source/_static/install-selector.js
Original file line number Diff line number Diff line change
Expand Up @@ -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",
},
},
};
Expand Down Expand Up @@ -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",
},
},
},
Expand Down Expand Up @@ -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";
Expand Down
6 changes: 3 additions & 3 deletions docs/cuopt/source/cuopt-grpc/advanced.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion regression/config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
Loading