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
76 changes: 54 additions & 22 deletions build.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import os.path
import pathlib
import platform
import re
import stat
import subprocess
import sys
Expand Down Expand Up @@ -688,17 +689,17 @@ def onnxruntime_cmake_args(images, library_paths):
)

if target_platform() == "windows":
if "base" in images:
if "buildbase" in images:
cargs.append(
cmake_backend_arg(
"onnxruntime", "TRITON_BUILD_CONTAINER", None, images["base"]
"onnxruntime", "TRITON_BUILD_CONTAINER", None, images["buildbase"]
)
)
else:
if "base" in images:
if "buildbase" in images:
cargs.append(
cmake_backend_arg(
"onnxruntime", "TRITON_BUILD_CONTAINER", None, images["base"]
"onnxruntime", "TRITON_BUILD_CONTAINER", None, images["buildbase"]
)
)
else:
Expand Down Expand Up @@ -754,17 +755,17 @@ def openvino_cmake_args():
)
]
if target_platform() == "windows":
if "base" in images:
if "buildbase" in images:
cargs.append(
cmake_backend_arg(
"openvino", "TRITON_BUILD_CONTAINER", None, images["base"]
"openvino", "TRITON_BUILD_CONTAINER", None, images["buildbase"]
)
)
else:
if "base" in images:
if "buildbase" in images:
cargs.append(
cmake_backend_arg(
"openvino", "TRITON_BUILD_CONTAINER", None, images["base"]
"openvino", "TRITON_BUILD_CONTAINER", None, images["buildbase"]
)
)
else:
Expand Down Expand Up @@ -801,9 +802,9 @@ def dali_cmake_args():

def fil_cmake_args(images):
cargs = [cmake_backend_enable("fil", "TRITON_FIL_DOCKER_BUILD", True)]
if "base" in images:
if "buildbase" in images:
cargs.append(
cmake_backend_arg("fil", "TRITON_BUILD_CONTAINER", None, images["base"])
cmake_backend_arg("fil", "TRITON_BUILD_CONTAINER", None, images["buildbase"])
)
else:
cargs.append(
Expand Down Expand Up @@ -1787,6 +1788,11 @@ def create_docker_build_script(script_name, container_install_dir, container_ci_
"--pull",
]

if FLAGS.no_container_cache:
baseargs += [
"--no-cache",
]

# Windows docker runs in a VM and memory needs to be specified
# explicitly (at least for some configurations of docker).
if target_platform() == "windows":
Expand Down Expand Up @@ -2057,14 +2063,14 @@ def tensorrtllm_postbuild(cmake_script, repo_install_dir, tensorrtllm_be_dir):
def backend_build(
be,
cmake_script,
tag,
tag_org,
build_dir,
install_dir,
github_organization,
images,
components,
library_paths,
):
tag, github_organization = tag_org
repo_build_dir = os.path.join(build_dir, be, "build")
repo_install_dir = os.path.join(build_dir, be, "install")

Expand All @@ -2077,8 +2083,8 @@ def backend_build(
if be == "tensorrtllm":
github_organization = (
"https://github.com/NVIDIA"
if "triton-inference-server" in FLAGS.github_organization
else FLAGS.github_organization
if "triton-inference-server" in github_organization
else github_organization
)
repository_name = "TensorRT-LLM"
cmake_script.gitclone(repository_name, tag, be, github_organization)
Expand Down Expand Up @@ -2127,11 +2133,11 @@ def backend_build(
def backend_clone(
be,
clone_script,
tag,
tag_org,
build_dir,
install_dir,
github_organization,
):
tag, github_organization = tag_org
clone_script.commentln(8)
clone_script.comment(f"'{be}' backend")
clone_script.comment("Delete this section to remove backend from build")
Expand Down Expand Up @@ -2467,6 +2473,12 @@ def enable_all():
required=False,
help="Do not use Docker --pull argument when building container.",
)
parser.add_argument(
"--no-container-cache",
action="store_true",
required=False,
help="Use Docker --no-cache argument when building container.",
)
parser.add_argument(
"--container-memory",
default=None,
Expand Down Expand Up @@ -2580,6 +2592,12 @@ def enable_all():
required=False,
help='Use specified Docker image in build as <image-name>,<full-image-name>. <image-name> can be "base", "gpu-base", or "pytorch".',
)
parser.add_argument(
"--use-buildbase",
default=False,
action="store_true",
help='Use local temporary "buildbase" Docker image as "base" image to build backends',
)

parser.add_argument(
"--enable-all",
Expand Down Expand Up @@ -2659,7 +2677,7 @@ def enable_all():
"--backend",
action="append",
required=False,
help='Include specified backend in build as <backend-name>[:<repo-tag>]. If <repo-tag> starts with "pull/" then it refers to a pull-request reference, otherwise <repo-tag> indicates the git tag/branch to use for the build. If the version is non-development then the default <repo-tag> is the release branch matching the container version (e.g. version YY.MM -> branch rYY.MM); otherwise the default <repo-tag> is "main" (e.g. version YY.MMdev -> branch main).',
help='Include specified backend in build as <backend-name>[:<repo-tag>][:<org>]. If <repo-tag> starts with "pull/" then it refers to a pull-request reference, otherwise <repo-tag> indicates the git tag/branch to use for the build. If the version is non-development then the default <repo-tag> is the release branch matching the container version (e.g. version YY.MM -> branch rYY.MM); otherwise the default <repo-tag> is "main" (e.g. version YY.MMdev -> branch main). <org> allows using a forked repository instead of the default --github-organization value.',
)
parser.add_argument(
"--repo-tag",
Expand Down Expand Up @@ -2727,6 +2745,12 @@ def enable_all():
default=DEFAULT_TRITON_VERSION_MAP["upstream_container_version"],
help="This flag sets the upstream container version for Triton Inference Server to be built. Default: the latest released version.",
)
parser.add_argument(
"--default-repo-tag",
required=False,
default=None,
help="Override the calculated default-repo-tag value",
)
parser.add_argument(
"--ort-version",
required=False,
Expand Down Expand Up @@ -2855,6 +2879,8 @@ def enable_all():
cver = FLAGS.triton_container_version
if not cver.endswith("dev"):
default_repo_tag = "r" + cver
if FLAGS.default_repo_tag:
default_repo_tag = FLAGS.default_repo_tag
log("default repo-tag: {}".format(default_repo_tag))

# For other versions use the TRITON_VERSION_MAP unless explicitly
Expand All @@ -2874,11 +2900,14 @@ def enable_all():
# Initialize map of backends to build and repo-tag for each.
backends = {}
for be in FLAGS.backend:
parts = be.split(":")
pattern = r"(https?:\/\/[^\s:]+)|:"
parts = list(filter(None,re.split(pattern, be)))
Comment on lines +2903 to +2904
Copy link
Preview

Copilot AI Sep 17, 2025

Choose a reason for hiding this comment

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

The regex pattern and splitting logic is complex and may be difficult to maintain. Consider extracting this parsing logic into a separate function with clear documentation about the expected input format and returned structure.

Copilot uses AI. Check for mistakes.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Agreed. My followup branch is not quite finished yet, but involves a more thorough redesign that will avoid the need for any custom parsing.

Copy link
Preview

Copilot AI Sep 17, 2025

Choose a reason for hiding this comment

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

Missing space after comma in function call. Should be filter(None, re.split(pattern, be)).

Suggested change
parts = list(filter(None,re.split(pattern, be)))
parts = list(filter(None, re.split(pattern, be)))

Copilot uses AI. Check for mistakes.

if len(parts) == 1:
parts.append(default_repo_tag)
log('backend "{}" at tag/branch "{}"'.format(parts[0], parts[1]))
backends[parts[0]] = parts[1]
if len(parts) == 2:
parts.append(FLAGS.github_organization)
log('backend "{}" at tag/branch "{}" from org "{}"'.format(parts[0], parts[1], parts[2]))
backends[parts[0]] = parts[1:]

if "vllm" in backends:
if "python" not in backends:
Expand Down Expand Up @@ -2926,6 +2955,11 @@ def enable_all():
)
log('image "{}": "{}"'.format(parts[0], parts[1]))
images[parts[0]] = parts[1]
if FLAGS.use_buildbase:
images["buildbase"] = "tritonserver_buildbase"
else:
if "base" in images:
images["buildbase"] = images["base"]

# Initialize map of library paths for each backend.
library_paths = {}
Expand Down Expand Up @@ -3084,7 +3118,6 @@ def enable_all():
backends[be],
script_build_dir,
script_install_dir,
github_organization,
)
else:
backend_build(
Expand All @@ -3093,7 +3126,6 @@ def enable_all():
backends[be],
script_build_dir,
script_install_dir,
github_organization,
images,
components,
library_paths,
Expand Down
11 changes: 9 additions & 2 deletions docs/customization_guide/build.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ building with Docker.
build Triton. When building without GPU support, the *min* image
is the standard ubuntu:22.04 image.

* The flag `--use-buildbase` can be specified to automate the use of the *tritonserver_buildbase* image to build backends that require a base image.

* Run the cmake_build script within the *tritonserver_buildbase*
image to actually build Triton. The cmake_build script performs
the following steps.
Expand Down Expand Up @@ -159,7 +161,7 @@ If you want to enable only certain Triton features, backends and
repository agents, do not specify --enable-all. Instead you must
specify the individual flags as documented by --help.

#### Building With Specific GitHub Branches
#### Building With Specific GitHub Branches and Organization

As described above, the build is performed in the server repo, but
source from several other repos is fetched during the build
Expand All @@ -182,7 +184,12 @@ instead use the corresponding branch/tag in the build. For example, if
you have a branch called "mybranch" in the
[onnxruntime_backend](https://github.com/triton-inference-server/onnxruntime_backend)
repo that you want to use in the build, you would specify
--backend=onnxruntime:mybranch.
`--backend=onnxruntime:mybranch`.

If you want to build a backend from an alternative organization or user `<org>`, you can extend this syntax as follows:
```bash
$ ./build.py ... --backend=onnxruntime:mybranch:https://github.com/<org>
```

#### CPU-Only Build

Expand Down