FROM nvidia/cuda:13.0.2-devel-ubuntu22.04 RUN apt-get update -y \ && apt-get install -y python3-pip curl git \ && curl -LsSf https://astral.sh/uv/install.sh | sh ENV PATH="/root/.local/bin:$PATH" RUN ldconfig /usr/local/cuda-13.0/compat/ # nixl_ep PyPI wheels are compiled against CUDA 12.x and require libcudart.so.12. # CUDA 13 runtime is ABI-compatible with CUDA 12, so symlinking is safe. # Symlink into /usr/local/cuda/lib64 (already in LD_LIBRARY_PATH) so the linker # finds it by filename scan rather than relying on ldcache SONAME lookup. RUN ln -sf /usr/local/cuda/lib64/libcudart.so.13 /usr/local/cuda/lib64/libcudart.so.12 && ldconfig # CUDA 13.0 containers return libs to /usr/local/nvidia/lib64 so container # providers (RunPod, Lambda, etc.) can mount host drivers there consistently. # See: https://github.com/vllm-project/vllm/issues/18859 ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/usr/local/cuda/lib64:$LD_LIBRARY_PATH # Install vLLM with FlashInfer - use CUDA 130 PyTorch wheels RUN uv pip install --system "packaging>=24.2" && \ uv pip install --system "vllm[flashinfer]==0.22.1" && \ uv pip install --system git+https://github.com/deepseek-ai/DeepGEMM.git@714dd1a4a980f7937a74343d19a8eba4fe321480 --no-build-isolation # Install additional Python dependencies (after vLLM to avoid PyTorch version conflicts) COPY builder/requirements.txt /requirements.txt RUN --mount=type=cache,target=/root/.cache/uv \ uv pip install --system -r /requirements.txt # Setup for Option 2: Building the Image with the Model included ARG MODEL_NAME="" ARG TOKENIZER_NAME="" ARG BASE_PATH="/runpod-volume" ARG QUANTIZATION="" ARG MODEL_REVISION="" ARG TOKENIZER_REVISION="" ARG VLLM_NIGHTLY="false" ENV MODEL_NAME=$MODEL_NAME \ MODEL_REVISION=$MODEL_REVISION \ TOKENIZER_NAME=$TOKENIZER_NAME \ TOKENIZER_REVISION=$TOKENIZER_REVISION \ BASE_PATH=$BASE_PATH \ QUANTIZATION=$QUANTIZATION \ HF_DATASETS_CACHE="${BASE_PATH}/huggingface-cache/datasets" \ HUGGINGFACE_HUB_CACHE="${BASE_PATH}/huggingface-cache/hub" \ HF_HOME="${BASE_PATH}/huggingface-cache/hub" \ HF_HUB_ENABLE_HF_TRANSFER=0 \ # Suppress Ray metrics agent warnings (not needed in containerized environments) RAY_METRICS_EXPORT_ENABLED=0 \ RAY_DISABLE_USAGE_STATS=1 \ # Prevent rayon thread pool panic in containers where ulimit -u < nproc # (tokenizers uses Rust's rayon which tries to spawn threads = CPU cores) TOKENIZERS_PARALLELISM=false \ RAYON_NUM_THREADS=4 \ # Disable DeepGEMM MoE kernels by default; override with VLLM_USE_DEEP_GEMM=1 to enable VLLM_USE_DEEP_GEMM=0 ENV PYTHONPATH="/:/vllm-workspace" RUN if [ "${VLLM_NIGHTLY}" = "true" ]; then \ uv pip install --system -U vllm --pre --index-url https://pypi.org/simple --extra-index-url https://wheels.vllm.ai/nightly && \ apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* && \ uv pip install --system git+https://github.com/huggingface/transformers.git; \ fi COPY src /src RUN chmod +x /src/start.sh RUN --mount=type=secret,id=HF_TOKEN,required=false \ if [ -f /run/secrets/HF_TOKEN ]; then \ export HF_TOKEN=$(cat /run/secrets/HF_TOKEN); \ fi && \ if [ -n "$MODEL_NAME" ]; then \ python3 /src/download_model.py; \ fi # Start the handler CMD ["/bin/bash", "/src/start.sh"]