@@ -106,7 +106,7 @@ VLLM_BASE_IMAGE="nvcr.io/nvidia/cuda-dl-base"
106106# Please check https://github.com/ai-dynamo/dynamo/pull/1065
107107# for details and reproducer to manually test if the image
108108# can be updated to later versions.
109- VLLM_BASE_IMAGE_TAG=" 25.01 -cuda12.8 -devel-ubuntu24.04"
109+ VLLM_BASE_IMAGE_TAG=" 25.04 -cuda12.9 -devel-ubuntu24.04"
110110
111111NONE_BASE_IMAGE=" nvcr.io/nvidia/cuda-dl-base"
112112NONE_BASE_IMAGE_TAG=" 25.01-cuda12.8-devel-ubuntu24.04"
@@ -125,9 +125,6 @@ NIXL_UCX_EFA_REF=9d2b88a1f67faf9876f267658bd077b379b8bb76
125125
126126NO_CACHE=" "
127127
128- # Dynamo base image (pre-built to avoid rebuilding common components)
129- DYNAMO_BASE_IMAGE_INPUT=" "
130-
131128# sccache configuration for S3
132129USE_SCCACHE=" "
133130SCCACHE_BUCKET=" "
@@ -213,14 +210,6 @@ get_options() {
213210 missing_requirement " $1 "
214211 fi
215212 ;;
216- --dynamo-base-image)
217- if [ " $2 " ]; then
218- DYNAMO_BASE_IMAGE_INPUT=$2
219- shift
220- else
221- missing_requirement " $1 "
222- fi
223- ;;
224213 --target)
225214 if [ " $2 " ]; then
226215 TARGET=$2
873862if [[ -z " ${DEV_IMAGE_INPUT:- } " ]]; then
874863 # Follow 2-step build process for all frameworks
875864 if [[ $FRAMEWORK != " NONE" ]]; then
876- # Check if a pre-built base image was provided for use
877- if [[ -n " ${DYNAMO_BASE_IMAGE_INPUT:- } " ]]; then
878- # Use the pre-built base image provided via DYNAMO_BASE_IMAGE_INPUT, skipping base build
879- DYNAMO_BASE_IMAGE=" ${DYNAMO_BASE_IMAGE_INPUT} "
880- echo " ======================================"
881- echo " Using Pre-built Base Image: ${DYNAMO_BASE_IMAGE} "
882- echo " ======================================"
865+ # Define base image tag with framework suffix to prevent clobbering
866+ # Different frameworks require different base configurations:
867+ # - VLLM: Python 3.12, ENABLE_KVBM=true, BASE_IMAGE=cuda-dl-base
868+ # - SGLANG: Python 3.10, BASE_IMAGE=cuda-dl-base
869+ # - TRTLLM: Python 3.12, ENABLE_KVBM=true, BASE_IMAGE=pytorch
870+ # Without unique tags, building different frameworks would overwrite each other's names
871+ DYNAMO_BASE_IMAGE=" dynamo-base:${VERSION} -${FRAMEWORK,,} "
872+ # Start base image build
873+ echo " ======================================"
874+ echo " Starting Build 1: Base Image"
875+ echo " ======================================"
876+
877+ # Create build log directory for BuildKit reports
878+ BUILD_LOG_DIR=" ${BUILD_CONTEXT} /build-logs"
879+ mkdir -p " ${BUILD_LOG_DIR} "
880+ BASE_BUILD_LOG=" ${BUILD_LOG_DIR} /base-image-build.log"
881+
882+ # Use BuildKit for enhanced metadata
883+ if [ -z " $RUN_PREFIX " ]; then
884+ if docker buildx version & > /dev/null; then
885+ docker buildx build --progress=plain --load -f " ${SOURCE_DIR} /Dockerfile" --target runtime $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO --tag $DYNAMO_BASE_IMAGE $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE 2>&1 | tee " ${BASE_BUILD_LOG} "
886+ BUILD_EXIT_CODE=${PIPESTATUS[0]}
887+ else
888+ DOCKER_BUILDKIT=1 docker build --progress=plain -f " ${SOURCE_DIR} /Dockerfile" --target runtime $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO --tag $DYNAMO_BASE_IMAGE $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE 2>&1 | tee " ${BASE_BUILD_LOG} "
889+ BUILD_EXIT_CODE=${PIPESTATUS[0]}
890+ fi
891+
892+ if [ ${BUILD_EXIT_CODE} -ne 0 ]; then
893+ exit ${BUILD_EXIT_CODE}
894+ fi
895+ else
896+ $RUN_PREFIX docker build -f " ${SOURCE_DIR} /Dockerfile" --target runtime $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO --tag $DYNAMO_BASE_IMAGE $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE
897+ fi
898+
899+ # Start framework build
900+ echo " ======================================"
901+ echo " Starting Build 2: Framework Image"
902+ echo " ======================================"
903+
904+ FRAMEWORK_BUILD_LOG=" ${BUILD_LOG_DIR} /framework-${FRAMEWORK,,} -build.log"
905+
906+ BUILD_ARGS+=" --build-arg DYNAMO_BASE_IMAGE=${DYNAMO_BASE_IMAGE} "
907+
908+ # Use BuildKit for enhanced metadata
909+ if [ -z " $RUN_PREFIX " ]; then
910+ if docker buildx version & > /dev/null; then
911+ docker buildx build --progress=plain --load -f $DOCKERFILE $TARGET_STR $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO $TAG $LATEST_TAG $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE 2>&1 | tee " ${FRAMEWORK_BUILD_LOG} "
912+ BUILD_EXIT_CODE=${PIPESTATUS[0]}
913+ else
914+ DOCKER_BUILDKIT=1 docker build --progress=plain -f $DOCKERFILE $TARGET_STR $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO $TAG $LATEST_TAG $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE 2>&1 | tee " ${FRAMEWORK_BUILD_LOG} "
915+ BUILD_EXIT_CODE=${PIPESTATUS[0]}
916+ fi
917+
918+ if [ ${BUILD_EXIT_CODE} -ne 0 ]; then
919+ exit ${BUILD_EXIT_CODE}
920+ fi
883921 else
884- # Define base image tag with framework suffix to prevent clobbering
885- # Different frameworks require different base configurations:
886- # - VLLM: Python 3.12, ENABLE_KVBM=true, BASE_IMAGE=cuda-dl-base
887- # - SGLANG: Python 3.10, BASE_IMAGE=cuda-dl-base
888- # - TRTLLM: Python 3.12, ENABLE_KVBM=true, BASE_IMAGE=pytorch
889- # Without unique tags, building different frameworks would overwrite each other's names
890- DYNAMO_BASE_IMAGE=" dynamo-base:${VERSION} -${FRAMEWORK,,} "
891- # Start base image build
892- echo " ======================================"
893- echo " Starting Build 1: Base Image"
894- echo " ======================================"
895-
896- # Create build log directory for BuildKit reports
897- BUILD_LOG_DIR=" ${BUILD_CONTEXT} /build-logs"
898- mkdir -p " ${BUILD_LOG_DIR} "
899- BASE_BUILD_LOG=" ${BUILD_LOG_DIR} /base-image-build.log"
900-
901- # Use BuildKit for enhanced metadata; fallback to legacy docker if buildx absent
902- if [ -z " $RUN_PREFIX " ]; then
903- if docker buildx version & > /dev/null; then
904- # Build with BuildKit and explicit 'runtime' target
905- docker buildx build --progress=plain --load -f " ${SOURCE_DIR} /Dockerfile" --target runtime $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO --tag $DYNAMO_BASE_IMAGE $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE 2>&1 | tee " ${BASE_BUILD_LOG} "
906- BUILD_EXIT_CODE=${PIPESTATUS[0]}
907- else
908- DOCKER_BUILDKIT=1 docker build --progress=plain -f " ${SOURCE_DIR} /Dockerfile" --target runtime $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO --tag $DYNAMO_BASE_IMAGE $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE 2>&1 | tee " ${BASE_BUILD_LOG} "
909- BUILD_EXIT_CODE=${PIPESTATUS[0]}
910- fi
911-
912- if [ ${BUILD_EXIT_CODE} -ne 0 ]; then
913- exit ${BUILD_EXIT_CODE}
914- fi
922+ $RUN_PREFIX docker build -f $DOCKERFILE $TARGET_STR $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO $TAG $LATEST_TAG $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE
923+ fi
924+ else
925+ # Create build log directory for BuildKit reports
926+ BUILD_LOG_DIR=" ${BUILD_CONTEXT} /build-logs"
927+ mkdir -p " ${BUILD_LOG_DIR} "
928+ SINGLE_BUILD_LOG=" ${BUILD_LOG_DIR} /single-stage-build.log"
929+
930+ # Use BuildKit for enhanced metadata
931+ if [ -z " $RUN_PREFIX " ]; then
932+ if docker buildx version & > /dev/null; then
933+ docker buildx build --progress=plain --load -f $DOCKERFILE $TARGET_STR $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO $TAG $LATEST_TAG $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE 2>&1 | tee " ${SINGLE_BUILD_LOG} "
934+ BUILD_EXIT_CODE=${PIPESTATUS[0]}
915935 else
916- $RUN_PREFIX docker build -f " ${SOURCE_DIR} /Dockerfile" --target runtime $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO --tag $DYNAMO_BASE_IMAGE $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE
936+ DOCKER_BUILDKIT=1 docker build --progress=plain -f $DOCKERFILE $TARGET_STR $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO $TAG $LATEST_TAG $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE 2>&1 | tee " ${SINGLE_BUILD_LOG} "
937+ BUILD_EXIT_CODE=${PIPESTATUS[0]}
917938 fi
939+
940+ if [ ${BUILD_EXIT_CODE} -ne 0 ]; then
941+ exit ${BUILD_EXIT_CODE}
942+ fi
943+ else
944+ $RUN_PREFIX docker build -f $DOCKERFILE $TARGET_STR $PLATFORM $BUILD_ARGS $CACHE_FROM $CACHE_TO $TAG $LATEST_TAG $BUILD_CONTEXT_ARG $BUILD_CONTEXT $NO_CACHE
918945 fi
919946 fi
920947fi
0 commit comments