@@ -31,12 +31,14 @@ DEFAULT_FRAMEWORK=VLLM
3131SOURCE_DIR=$( dirname " $( readlink -f " $0 " ) " )
3232
3333IMAGE=
34+ TARGET=" dev"
3435HF_CACHE=
3536DEFAULT_HF_CACHE=${SOURCE_DIR} /.cache/huggingface
3637GPUS=" all"
3738PRIVILEGED=
3839VOLUME_MOUNTS=
3940MOUNT_WORKSPACE=
41+ DEV_MODE=
4042ENVIRONMENT_VARIABLES=
4143REMAINING_ARGS=
4244INTERACTIVE=
@@ -162,6 +164,7 @@ get_options() {
162164 --mount-workspace)
163165 MOUNT_WORKSPACE=TRUE
164166 ;;
167+
165168 --use-nixl-gds)
166169 USE_NIXL_GDS=TRUE
167170 ;;
@@ -227,32 +230,11 @@ get_options() {
227230 ENTRYPOINT_STRING=" --entrypoint ${ENTRYPOINT} "
228231 fi
229232
230- if [ -n " $MOUNT_WORKSPACE " ]; then
231- VOLUME_MOUNTS+=" -v ${SOURCE_DIR} /..:/workspace "
232- VOLUME_MOUNTS+=" -v /tmp:/tmp "
233- VOLUME_MOUNTS+=" -v /mnt/:/mnt "
234-
235- if [ -z " $HF_CACHE " ]; then
236- HF_CACHE=$DEFAULT_HF_CACHE
237- fi
238-
239- if [ -z " ${PRIVILEGED} " ]; then
240- PRIVILEGED=" TRUE"
241- fi
242-
243- ENVIRONMENT_VARIABLES+=" -e HF_TOKEN"
244-
245- INTERACTIVE=" -it "
246- fi
247-
248233 if [[ ${HF_CACHE^^} == " NONE" ]]; then
249234 HF_CACHE=
250235 fi
251236
252- if [ -n " $HF_CACHE " ]; then
253- mkdir -p " $HF_CACHE "
254- VOLUME_MOUNTS+=" -v $HF_CACHE :/root/.cache/huggingface"
255- fi
237+ # HF_CACHE mounting will be handled in workspace section
256238
257239 if [ -z " ${PRIVILEGED} " ]; then
258240 PRIVILEGED=" FALSE"
@@ -262,9 +244,9 @@ get_options() {
262244 RM=" TRUE"
263245 fi
264246
265- if [[ ${PRIVILEGED^^} == " FALSE " ]] ; then
266- PRIVILEGED_STRING=" "
267- else
247+ # Initialize PRIVILEGED_STRING
248+ PRIVILEGED_STRING=" "
249+ if [[ ${PRIVILEGED^^} != " FALSE " ]] ; then
268250 PRIVILEGED_STRING=" --privileged"
269251 fi
270252
@@ -277,7 +259,6 @@ get_options() {
277259 if [ -n " $USE_NIXL_GDS " ]; then
278260 VOLUME_MOUNTS+=" -v /run/udev:/run/udev:ro "
279261 NIXL_GDS_CAPS=" --cap-add=IPC_LOCK"
280-
281262 # NOTE(jthomson04): In the KVBM disk pools, we currently allocate our files in /tmp.
282263 # For some arcane reason, GDS requires that /tmp be mounted.
283264 # This is already handled for us if we set --mount-workspace
@@ -291,14 +272,25 @@ get_options() {
291272 if [[ " $GPUS " == " none" || " $GPUS " == " NONE" ]]; then
292273 RUNTIME=" "
293274 fi
275+
276+ # Auto-enable DEV_MODE for vllm dev images
277+ # TODO(keivenc): Currently only Dockerfile.vllm has proper permissions to run as ubuntu user.
278+ # Other Dockerfiles (trtllm, sglang, etc.) still require root access.
279+ if [[ " $IMAGE " == * " -vllm-dev" ]]; then
280+ DEV_MODE=TRUE
281+ MOUNT_WORKSPACE=TRUE
282+ # Interactive mode is implied when MOUNT_WORKSPACE is TRUE
283+ fi
284+
294285 REMAINING_ARGS=(" $@ " )
295286}
296287
297288show_help () {
298289 echo " usage: run.sh"
299290 echo " [--image image]"
300291 echo " [--framework framework one of ${! FRAMEWORKS[*]} ]"
301- echo " [--name name for launched container, default NONE] "
292+ echo " [--target target stage to use, default is 'dev']"
293+ echo " [--name name for launched container, default NONE]"
302294 echo " [--privileged whether to launch in privileged mode, default FALSE unless mounting workspace]"
303295 echo " [--dry-run print docker commands without running]"
304296 echo " [--hf-cache directory to volume mount as the hf cache, default is NONE unless mounting workspace]"
@@ -310,6 +302,8 @@ show_help() {
310302 echo " [-- stop processing and pass remaining args as command to docker run]"
311303 echo " [--workdir set the working directory inside the container]"
312304 echo " [--runtime add runtime variables]"
305+ echo " [--entrypoint override container entrypoint]"
306+ echo " [-h, --help show this help]"
313307 exit 0
314308}
315309
@@ -324,8 +318,49 @@ error() {
324318
325319get_options " $@ "
326320
327- # RUN the image
321+ # Process workspace mounting after auto-detection
322+ if [ -n " $MOUNT_WORKSPACE " ]; then
323+ HOME_PATH=" /home/ubuntu"
324+
325+ # Common workspace setup
326+ VOLUME_MOUNTS+=" -v $( dirname " ${SOURCE_DIR} " ) :/workspace "
327+ VOLUME_MOUNTS+=" -v /tmp:/tmp "
328+ VOLUME_MOUNTS+=" -v /mnt/:/mnt "
329+ WORKDIR=/workspace
330+ INTERACTIVE=" -it "
331+
332+ # Set default HF_CACHE if not specified
333+ if [ -z " $HF_CACHE " ]; then
334+ HF_CACHE=$DEFAULT_HF_CACHE
335+ fi
328336
337+ # Environment variables for all workspace modes
338+ ENVIRONMENT_VARIABLES+=" -e HF_TOKEN"
339+ ENVIRONMENT_VARIABLES+=" -e GITHUB_TOKEN"
340+ ENVIRONMENT_VARIABLES+=" -e HOME=$HOME_PATH "
341+
342+ # Mount HF_CACHE to user's home cache directory
343+ if [ -n " $HF_CACHE " ]; then
344+ mkdir -p " $HF_CACHE "
345+ VOLUME_MOUNTS+=" -v $HF_CACHE :$HOME_PATH /.cache/huggingface"
346+ fi
347+
348+ if [ -n " $DEV_MODE " ]; then
349+ # Dev Container-specific setup - the Dockerfile handles UID/GID mapping via build args
350+ # This currently only works with Dockerfile.vllm which has proper ubuntu user setup.
351+ echo " Dev Container mode enabled - using ubuntu user with host UID/GID"
352+ # Use ubuntu user (with correct UID/GID baked into image)
353+ PRIVILEGED_STRING+=" --user ubuntu"
354+ else
355+ # Standard workspace mode - enable privileged mode
356+ # TODO(keivenc): Security risk, remove soon. Dockerfiles (trtllm, sglang) still need to run as root.
357+ if [ -z " ${PRIVILEGED} " ]; then
358+ PRIVILEGED_STRING=" --privileged"
359+ fi
360+ fi
361+ fi
362+
363+ # RUN the image
329364if [ -z " $RUN_PREFIX " ]; then
330365 set -x
331366fi
0 commit comments