Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
dynamo
Commits
f753fffc
Commit
f753fffc
authored
Jan 10, 2025
by
Neelay Shah
Committed by
GitHub
Jan 10, 2025
Browse files
feat: container build and run enhancements
parent
1d69e2cb
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
310 additions
and
4 deletions
+310
-4
README.md
README.md
+34
-1
container/Dockerfile
container/Dockerfile
+3
-0
container/build.sh
container/build.sh
+14
-3
container/run.sh
container/run.sh
+259
-0
No files found.
README.md
View file @
f753fffc
...
@@ -39,7 +39,8 @@ center scale without sacrificing performance or ease of use.
...
@@ -39,7 +39,8 @@ center scale without sacrificing performance or ease of use.
Triton Distributed development and examples are container based.
Triton Distributed development and examples are container based.
You can build the Triton Distributed container using the build scripts in
`container/`
.
You can build the Triton Distributed container using the build scripts
in
`container/`
(or directly with
`docker build`
).
We provide 3 types of builds:
We provide 3 types of builds:
...
@@ -53,6 +54,38 @@ For example, if you want to build a container for the `VLLM` backend you can run
...
@@ -53,6 +54,38 @@ For example, if you want to build a container for the `VLLM` backend you can run
Please see the instructions in the corresponding example for specific build instructions.
Please see the instructions in the corresponding example for specific build instructions.
## Running Triton Distributed for Local Testing and Development
You can run the Triton Distributed container using the run scripts in
`container/`
(or directly with
`docker run`
).
The run script offers a few common workflows:
1.
Running a command in a container and exiting.
```
./container/run.sh -- python3 -c "import tdist.icp.protos.icp_pb2 as icp_proto; print(icp_proto); print(dir(icp_proto));"
```
2.
Starting an interactive shell.
```
./container/run.sh -it
```
3.
Mounting the local workspace and Starting an interactive shell.
```
./container/run.sh -it --mount-workspace
```
The last command also passes common environment variables (
```-e
HF_TOKEN```
) and mounts common directories such as
```/tmp:/tmp```
,
```
/mnt:/mnt```.
Please see the instructions in the corresponding example for specific
deployment instructions.
<!--
<!--
## Goals
## Goals
...
...
container/Dockerfile
View file @
f753fffc
...
@@ -64,6 +64,9 @@ ENV FRAMEWORK_LD_LIBRARY_PATH=${TENSORRTLLM_FRAMEWORK:+/opt/tritonserver/backend
...
@@ -64,6 +64,9 @@ ENV FRAMEWORK_LD_LIBRARY_PATH=${TENSORRTLLM_FRAMEWORK:+/opt/tritonserver/backend
ENV
LD_LIBRARY_PATH=${FRAMEWORK_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}
ENV
LD_LIBRARY_PATH=${FRAMEWORK_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}
ENV
TENSORRTLLM_BACKEND_COMMIT=$TENSORRTLLM_BACKEND_COMMIT
ENV
TENSORRTLLM_BACKEND_COMMIT=$TENSORRTLLM_BACKEND_COMMIT
# TODO set VLLM Version
# ENV VLLM_VERSION
# Install NATS - pointing toward NATS github instead of binaries.nats.dev due to server instability
# Install NATS - pointing toward NATS github instead of binaries.nats.dev due to server instability
RUN
wget https://github.com/nats-io/nats-server/releases/download/v2.10.24/nats-server-v2.10.24-amd64.deb
&&
dpkg
-i
nats-server-v2.10.24-amd64.deb
RUN
wget https://github.com/nats-io/nats-server/releases/download/v2.10.24/nats-server-v2.10.24-amd64.deb
&&
dpkg
-i
nats-server-v2.10.24-amd64.deb
...
...
container/build.sh
View file @
f753fffc
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
TAG
=
TAG
=
RUN_PREFIX
=
RUN_PREFIX
=
PLATFORM
=
linux/amd64
PLATFORM
=
linux/amd64
VERSION
=
0.1.0
# Frameworks
# Frameworks
#
#
...
@@ -104,7 +105,7 @@ get_options() {
...
@@ -104,7 +105,7 @@ get_options() {
;;
;;
--tag
)
--tag
)
if
[
"
$2
"
]
;
then
if
[
"
$2
"
]
;
then
TAG
=
$2
TAG
=
"--tag
$2
"
shift
shift
else
else
missing_requirement
$1
missing_requirement
$1
...
@@ -121,6 +122,14 @@ get_options() {
...
@@ -121,6 +122,14 @@ get_options() {
--no-cache
)
--no-cache
)
NO_CACHE
=
" --no-cache"
NO_CACHE
=
" --no-cache"
;;
;;
--cache-from
)
if
[
"
$2
"
]
;
then
CACHE_FROM
=
"--cache-from
$2
"
shift
else
missing_requirement
$1
fi
;;
--
)
--
)
shift
shift
break
break
...
@@ -169,7 +178,7 @@ get_options() {
...
@@ -169,7 +178,7 @@ get_options() {
fi
fi
if
[
-z
"
$TAG
"
]
;
then
if
[
-z
"
$TAG
"
]
;
then
TAG
=
"triton-distributed:
${
FRAMEWORK
,,
}
-
${
BASE_VERSION
}
"
TAG
=
"
--tag
triton-distributed:
${
VERSION
}
-
${
FRAMEWORK
,,
}
"
fi
fi
if
[
!
-z
"
$PLATFORM
"
]
;
then
if
[
!
-z
"
$PLATFORM
"
]
;
then
...
@@ -241,6 +250,8 @@ if [ ! -z ${HF_TOKEN} ]; then
...
@@ -241,6 +250,8 @@ if [ ! -z ${HF_TOKEN} ]; then
BUILD_ARGS+
=
" --build-arg HF_TOKEN=
${
HF_TOKEN
}
"
BUILD_ARGS+
=
" --build-arg HF_TOKEN=
${
HF_TOKEN
}
"
fi
fi
LATEST_TAG
=
"--tag triton-distributed:latest-
${
FRAMEWORK
,,
}
"
show_image_options
show_image_options
...
@@ -248,7 +259,7 @@ if [ -z "$RUN_PREFIX" ]; then
...
@@ -248,7 +259,7 @@ if [ -z "$RUN_PREFIX" ]; then
set
-x
set
-x
fi
fi
$RUN_PREFIX
docker build
-f
$DOCKERFILE
$PLATFORM
$BUILD_ARGS
-t
$
TAG
$BUILD_CONTEXT
$NO_CACHE
$RUN_PREFIX
docker build
-f
$DOCKERFILE
$PLATFORM
$BUILD_ARGS
$CACHE_FROM
$TAG
$LATEST_
TAG
$BUILD_CONTEXT
$NO_CACHE
{
set
+x
;
}
2>/dev/null
{
set
+x
;
}
2>/dev/null
...
...
container/run.sh
0 → 100755
View file @
f753fffc
#!/bin/bash -e
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
TAG
=
RUN_PREFIX
=
# Frameworks
#
# Each framework has a corresponding base image. Additional
# dependencies are specified in the /container/deps folder and
# installed within framework specific sections of the Dockerfile.
declare
-A
FRAMEWORKS
=([
"STANDARD"
]=
1
[
"TENSORRTLLM"
]=
2
[
"VLLM"
]=
3
)
DEFAULT_FRAMEWORK
=
STANDARD
SOURCE_DIR
=
$(
dirname
"
$(
readlink
-f
"
$0
"
)
"
)
IMAGE
=
HF_CACHE
=
DEFAULT_HF_CACHE
=
${
SOURCE_DIR
}
/.cache/huggingface
GPUS
=
"all"
PRIVILEGED
=
VOLUME_MOUNTS
=
MOUNT_WORKSPACE
=
ENVIRONMENT_VARIABLES
=
REMAINING_ARGS
=
INTERACTIVE
=
get_options
()
{
while
:
;
do
case
$1
in
-h
|
-
\?
|
--help
)
show_help
exit
;;
--framework
)
if
[
"
$2
"
]
;
then
FRAMEWORK
=
$2
shift
else
missing_requirement
$1
fi
;;
--image
)
if
[
"
$2
"
]
;
then
IMAGE
=
$2
shift
else
missing_requirement
$1
fi
;;
--name
)
if
[
"
$2
"
]
;
then
NAME
=
$2
shift
else
missing_requirement
$1
fi
;;
--hf-cache
)
if
[
"
$2
"
]
;
then
HF_CACHE
=
$2
shift
else
missing_requirement
$1
fi
;;
--gpus
)
if
[
"
$2
"
]
;
then
GPUS
=
$2
shift
else
missing_requirement
$1
fi
;;
--command
)
if
[
"
$2
"
]
;
then
COMMAND
=
$2
shift
else
missing_requirement
$1
fi
;;
--privileged
)
if
[
"
$2
"
]
;
then
PRIVILEGED
=
$2
shift
else
missing_requirement
$1
fi
;;
-v
)
if
[
"
$2
"
]
;
then
VOLUME_MOUNTS+
=
" -v
$2
"
shift
else
missing_requirement
$1
fi
;;
-e
)
if
[
"
$2
"
]
;
then
ENVIRONMENT_VARIABLES+
=
" -e
$2
"
shift
else
missing_requirement
$1
fi
;;
-it
)
INTERACTIVE
=
" -it "
;;
--mount-workspace
)
MOUNT_WORKSPACE
=
TRUE
;;
--dry-run
)
RUN_PREFIX
=
"echo"
echo
""
echo
"=============================="
echo
"DRY RUN: COMMANDS PRINTED ONLY"
echo
"=============================="
echo
""
;;
--
)
shift
break
;;
-?
*
)
error
'ERROR: Unknown option: '
$1
;;
?
*
)
error
'ERROR: Unknown option: '
$1
;;
*
)
break
;;
esac
shift
done
if
[
-z
"
$FRAMEWORK
"
]
;
then
FRAMEWORK
=
$DEFAULT_FRAMEWORK
fi
if
[
!
-z
"
$FRAMEWORK
"
]
;
then
FRAMEWORK
=
${
FRAMEWORK
^^
}
if
[[
!
-n
"
${
FRAMEWORKS
[
$FRAMEWORK
]
}
"
]]
;
then
error
'ERROR: Unknown framework: '
$FRAMEWORK
fi
fi
if
[
-z
"
$IMAGE
"
]
;
then
IMAGE
=
"triton-distributed:latest-
${
FRAMEWORK
,,
}
"
fi
if
[[
${
GPUS
^^
}
==
"NONE"
]]
;
then
GPU_STRING
=
""
else
GPU_STRING
=
"--gpus
${
GPUS
}
"
fi
if
[[
${
NAME
^^
}
==
""
]]
;
then
NAME_STRING
=
""
else
NAME_STRING
=
"--name
${
NAME
}
"
fi
if
[
!
-z
"
$MOUNT_WORKSPACE
"
]
;
then
VOLUME_MOUNTS+
=
" -v
${
SOURCE_DIR
}
/..:/workspace "
VOLUME_MOUNTS+
=
" -v /tmp:/tmp "
VOLUME_MOUNTS+
=
" -v /mnt/:/mnt "
if
[
-z
"
$HF_CACHE
"
]
;
then
HF_CACHE
=
$DEFAULT_HF_CACHE
fi
if
[
-z
${
PRIVILEGED
}
]
;
then
PRIVILEGED
=
"TRUE"
fi
ENVIRONMENT_VARIABLES+
=
" -e HF_TOKEN"
if
[
!
-d
"
${
SOURCE_DIR
}
/icp/src/python/tdist/icp/protos"
]
;
then
$RUN_PREFIX
docker run
--rm
-t
-v
${
SOURCE_DIR
}
/..:/workspace
-w
/workspace
$IMAGE
/workspace/icp/protos/gen_python.sh
>
/dev/null 2>&1
fi
INTERACTIVE
=
" -it "
fi
if
[[
${
HF_CACHE
^^
}
==
"NONE"
]]
;
then
HF_CACHE
=
fi
if
[
!
-z
"
$HF_CACHE
"
]
;
then
mkdir
-p
$HF_CACHE
VOLUME_MOUNTS+
=
" -v
$HF_CACHE
:/root/.cache/huggingface"
fi
if
[
-z
${
PRIVILEGED
}
]
;
then
PRIVILEGED
=
"FALSE"
fi
if
[[
${
PRIVILEGED
^^
}
==
"FALSE"
]]
;
then
PRIVILEGED_STRING
=
""
else
PRIVILEGED_STRING
=
"--privileged"
fi
REMAINING_ARGS
=(
"
$@
"
)
}
show_help
()
{
echo
"usage: run.sh"
echo
" [--image image]"
echo
" [--framework framework one of
${
!FRAMEWORKS[@]
}
]"
echo
" [--name name for launched container, default NONE] "
echo
" [--privileged whether to launch in privileged mode, default FALSE unless mounting workspace]"
echo
" [--dry-run print docker commands without running]"
echo
" [--hf-cache directory to volume mount as the hf cache, default is NONE unless mounting workspace]"
echo
" [--gpus gpus to enable, default is 'all', 'none' disables gpu support]"
echo
" [-v add volume mount]"
echo
" [-e add environment variable]"
echo
" [--mount-workspace set up for local development]"
echo
" [-- stop processing and pass remaining args as command to docker run]"
exit
0
}
missing_requirement
()
{
error
"ERROR:
$1
requires an argument."
}
error
()
{
printf
'%s %s\n'
"
$1
"
"
$2
"
>
&2
exit
1
}
get_options
"
$@
"
# RUN the image
if
[
-z
"
$RUN_PREFIX
"
]
;
then
set
-x
fi
${
RUN_PREFIX
}
docker run
${
GPU_STRING
}
${
INTERACTIVE
}
--rm
--network
host
--shm-size
=
10G
--ulimit
memlock
=
-1
--ulimit
stack
=
67108864
${
ENVIRONMENT_VARIABLES
}
${
VOLUME_MOUNTS
}
-w
/workspace
--cap-add
CAP_SYS_PTRACE
--ipc
host
${
PRIVILEGED_STRING
}
${
NAME_STRING
}
${
IMAGE
}
"
${
REMAINING_ARGS
[@]
}
"
{
set
+x
;
}
2>/dev/null
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment