|
@@ -0,0 +1,89 @@
|
|
|
|
|
+# Two-stage, in-docker build of the local-inference-lab r12 stack for GB10
|
|
|
|
|
+# (arm64 / SM121a), per the rtx6kpro source contract (models/glm-5.3-flash.md):
|
|
|
|
|
+#
|
|
|
|
|
+# vLLM = local-inference-lab/vllm composition commit
|
|
|
|
|
+# 7d8a09c42c7ba743b9e936562aa9205f9d0fda9d
|
|
|
|
|
+# (dev/jovian-judgement @54f6e9826c20... + PR heads 550/552/553/554/555/557)
|
|
|
|
|
+# B12X = local-inference-lab/b12x composition commit
|
|
|
|
|
+# d064ca4cc3aa25292f1a8756fa51b38134d1df84
|
|
|
|
|
+# (master @139e04048bc3b... + PR heads 260/267/268/269/270)
|
|
|
|
|
+# LMCache optional — NOT vendored (opt-in).
|
|
|
|
|
+#
|
|
|
|
|
+# The compile happens INSIDE docker (operator directive). Torch/flashinfer/
|
|
|
|
|
+# CUDA come from the working day-0 arm64 cu130 base that already serves GLM
|
|
|
|
|
+# 5.3 Flash; the fork sources install with --no-deps so the base toolchain
|
|
|
|
|
+# stays pinned. sm_121f applies to block-scaled FP4 kernels (kk3 gencode
|
|
|
|
|
+# rule); TORCH_CUDA_ARCH_LIST pins the extension build.
|
|
|
|
|
+#
|
|
|
|
|
+# Verification markers: pip lines for vllm==0.1.dev...; python -c
|
|
|
|
|
+# "import vllm" in a `--gpus` container; quantprobe in modelopt.py.
|
|
|
|
|
+
|
|
|
|
|
+ARG BASE_IMAGE
|
|
|
|
|
+FROM ${BASE_IMAGE} AS build
|
|
|
|
|
+
|
|
|
|
|
+ARG VLLM_REF
|
|
|
|
|
+ARG B12X_REF
|
|
|
|
|
+ARG VLLM_PRS="550 552 553 554 555 557"
|
|
|
|
|
+ARG B12X_PRS="260 267 268 269 270"
|
|
|
|
|
+ARG VLLM_REPO=https://github.com/local-inference-lab/vllm.git
|
|
|
|
|
+ARG B12X_REPO=https://github.com/local-inference-lab/b12x.git
|
|
|
|
|
+
|
|
|
|
|
+RUN set -eux; apt-get update && apt-get install -y --no-install-recommends git ca-certificates && rm -rf /var/lib/apt/lists/*
|
|
|
|
|
+
|
|
|
|
|
+# The rtx6kpro "composition commit" (7d8a09c… / d064ca4c…) is NOT a public
|
|
|
|
|
+# ref — reproduce it: base branch checkout + sequential merge of the open
|
|
|
|
|
+# PR heads (refs/pull/*/head), ascending order.
|
|
|
|
|
+RUN set -eux; \
|
|
|
|
|
+ git config --global user.email build@sm121.lan; \
|
|
|
|
|
+ git config --global user.name sm121-builder; \
|
|
|
|
|
+ git clone ${VLLM_REPO} /tmp/vllm-src; \
|
|
|
|
|
+ git -C /tmp/vllm-src checkout ${VLLM_REF}; \
|
|
|
|
|
+ for pr in ${VLLM_PRS}; do \
|
|
|
|
|
+ git -C /tmp/vllm-src fetch origin "refs/pull/$pr/head:prs/$pr"; \
|
|
|
|
|
+ git -C /tmp/vllm-src merge --no-ff -m "PR $pr" "prs/$pr"; \
|
|
|
|
|
+ done; \
|
|
|
|
|
+ git clone ${B12X_REPO} /tmp/b12x-src; \
|
|
|
|
|
+ git -C /tmp/b12x-src checkout ${B12X_REF}; \
|
|
|
|
|
+ for pr in ${B12X_PRS}; do \
|
|
|
|
|
+ git -C /tmp/b12x-src fetch origin "refs/pull/$pr/head:prs/$pr"; \
|
|
|
|
|
+ git -C /tmp/b12x-src merge --no-ff -m "PR $pr" "prs/$pr"; \
|
|
|
|
|
+ done
|
|
|
|
|
+
|
|
|
|
|
+RUN set -eux; \
|
|
|
|
|
+ cd /tmp/vllm-src; \
|
|
|
|
|
+ pip install setuptools-rust; \
|
|
|
|
|
+ apt-get update && apt-get install -y --no-install-recommends ninja-build && rm -rf /var/lib/apt/lists/*; \
|
|
|
|
|
+ pip install cmake; \
|
|
|
|
|
+ # cu13 wheels carry missing dev headers (cusparse.h etc.) outside the
|
|
|
|
|
+ # default include path — symlink only what /usr/local/cuda/include lacks.
|
|
|
|
|
+ INC=/usr/local/lib/python3.12/dist-packages/nvidia/cu13/include; \
|
|
|
|
|
+ for h in "$INC"/*.h; do b=$(basename "$h"); [ -e "/usr/local/cuda/include/$b" ] || ln -s "$h" /usr/local/cuda/include/$b; done; \
|
|
|
|
|
+ # The spinloop target needs an explicit nvrtc: the cu13 toolkit ships
|
|
|
|
|
+ # under targets/sbsa-linux (ldconfig knows it, FindCUDA does not).
|
|
|
|
|
+ NVRTC=$(ls /usr/local/cuda*/targets/sbsa-linux/lib/libnvrtc.so* | head -1); \
|
|
|
|
|
+ CMAKE_ARGS="-DCUDAToolkit_ROOT=/usr/local/cuda -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda -DCUDA_nvrtc_LIBRARY=${NVRTC} -DCUDAToolkit_LIBRARY_DIR=/usr/local/cuda/targets/sbsa-linux/lib" \
|
|
|
|
|
+ VLLM_TARGET_DEVICE=cuda TORCH_CUDA_ARCH_LIST="12.1a" \
|
|
|
|
|
+ pip install --no-build-isolation --no-deps . 2>&1; \
|
|
|
|
|
+ python3 -c "import vllm; print('vllm import ok', vllm.__version__)"
|
|
|
|
|
+
|
|
|
|
|
+# B12X builds its own CUDA extension set; compile gate fails loudly on
|
|
|
|
|
+# anchor drift. Keep base-provided deps untouched (--no-deps).
|
|
|
|
|
+RUN set -eux; \
|
|
|
|
|
+ cd /tmp/b12x-src; \
|
|
|
|
|
+ TORCH_CUDA_ARCH_LIST="12.1f;12.1a" \
|
|
|
|
|
+ pip install --no-build-isolation --no-deps . 2>&1; \
|
|
|
|
|
+ python3 -c "import b12x; print('b12x import ok', b12x.__version__)" || \
|
|
|
|
|
+ python3 -c "import importlib.util; \
|
|
|
|
|
+ assert importlib.util.find_spec('b12x'), 'b12x module not found'; \
|
|
|
|
|
+ print('b12x module present')"
|
|
|
|
|
+
|
|
|
|
|
+RUN set -eux; python3 -c "import vllm; print('vllm', vllm.__version__)"
|
|
|
|
|
+
|
|
|
|
|
+FROM ${BASE_IMAGE}
|
|
|
|
|
+
|
|
|
|
|
+# Compiled artifacts only (site-packages), dropped onto a pristine base so
|
|
|
|
|
+# the container keeps the day-0 entrypoint/env layout.
|
|
|
|
|
+COPY --from=build /usr/local/lib/python3.12/dist-packages/ /usr/local/lib/python3.12/dist-packages/
|
|
|
|
|
+
|
|
|
|
|
+RUN set -eux; \
|
|
|
|
|
+ python3 -c "import vllm; print('final vllm', vllm.__version__)"
|