2025-06-15 14:56:52 +02:00
ARG BASE_IMAGE = ubuntu:22.04
FROM ${BASE_IMAGE } AS builder
ARG BACKEND = rerankers
ARG BUILD_TYPE
ENV BUILD_TYPE = ${ BUILD_TYPE }
ARG CUDA_MAJOR_VERSION
ARG CUDA_MINOR_VERSION
ARG SKIP_DRIVERS = false
ENV CUDA_MAJOR_VERSION = ${ CUDA_MAJOR_VERSION }
ENV CUDA_MINOR_VERSION = ${ CUDA_MINOR_VERSION }
ENV DEBIAN_FRONTEND = noninteractive
ARG TARGETARCH
ARG TARGETVARIANT
2025-12-03 09:47:03 +01:00
ARG UBUNTU_VERSION = 2204
2025-06-15 14:56:52 +02:00
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
ccache \
ca-certificates \
espeak-ng \
curl \
libssl-dev \
2025-12-03 21:42:33 +01:00
git wget \
2025-06-15 14:56:52 +02:00
git-lfs \
2025-08-23 22:36:39 +02:00
unzip clang \
2025-06-15 14:56:52 +02:00
upx-ucl \
curl python3-pip \
python-is-python3 \
python3-dev llvm \
2025-10-09 21:51:28 +02:00
python3-venv make cmake && \
2025-06-15 14:56:52 +02:00
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
pip install --upgrade pip
# Cuda
ENV PATH = /usr/local/cuda/bin:${ PATH }
# HipBLAS requirements
ENV PATH = /opt/rocm/bin:${ PATH }
# Vulkan requirements
RUN <<EOT bash
if [ " ${ BUILD_TYPE } " = "vulkan" ] && [ " ${ SKIP_DRIVERS } " = "false" ] ; then
apt-get update && \
apt-get install -y --no-install-recommends \
software-properties-common pciutils wget gpg-agent && \
wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | apt-key add - && \
wget -qO /etc/apt/sources.list.d/lunarg-vulkan-jammy.list https://packages.lunarg.com/vulkan/lunarg-vulkan-jammy.list && \
apt-get update && \
apt-get install -y \
vulkan-sdk && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
fi
EOT
# CuBLAS requirements
RUN <<EOT bash
2025-12-03 09:47:03 +01:00
if ( [ " ${ BUILD_TYPE } " = "cublas" ] || [ " ${ BUILD_TYPE } " = "l4t" ] ) && [ " ${ SKIP_DRIVERS } " = "false" ] ; then
2025-06-15 14:56:52 +02:00
apt-get update && \
apt-get install -y --no-install-recommends \
software-properties-common pciutils
if [ "amd64" = " $TARGETARCH " ] ; then
2025-12-03 09:47:03 +01:00
curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${ UBUNTU_VERSION } /x86_64/cuda-keyring_1.1-1_all.deb
2025-06-15 14:56:52 +02:00
fi
if [ "arm64" = " $TARGETARCH " ] ; then
2025-12-03 09:47:03 +01:00
if [ " ${ CUDA_MAJOR_VERSION } " = "13" ] ; then
curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${ UBUNTU_VERSION } /sbsa/cuda-keyring_1.1-1_all.deb
else
curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${ UBUNTU_VERSION } /arm64/cuda-keyring_1.1-1_all.deb
fi
2025-06-15 14:56:52 +02:00
fi
dpkg -i cuda-keyring_1.1-1_all.deb && \
rm -f cuda-keyring_1.1-1_all.deb && \
apt-get update && \
apt-get install -y --no-install-recommends \
cuda-nvcc-${ CUDA_MAJOR_VERSION } -${ CUDA_MINOR_VERSION } \
libcufft-dev-${ CUDA_MAJOR_VERSION } -${ CUDA_MINOR_VERSION } \
libcurand-dev-${ CUDA_MAJOR_VERSION } -${ CUDA_MINOR_VERSION } \
libcublas-dev-${ CUDA_MAJOR_VERSION } -${ CUDA_MINOR_VERSION } \
libcusparse-dev-${ CUDA_MAJOR_VERSION } -${ CUDA_MINOR_VERSION } \
2025-12-03 15:13:21 +01:00
libcusolver-dev-${ CUDA_MAJOR_VERSION } -${ CUDA_MINOR_VERSION }
if [ " ${ CUDA_MAJOR_VERSION } " = "13" ] && [ "arm64" = " $TARGETARCH " ] ; then
apt-get install -y --no-install-recommends \
2025-12-03 21:42:33 +01:00
libcufile-${ CUDA_MAJOR_VERSION } -${ CUDA_MINOR_VERSION } libcudnn9-cuda-${ CUDA_MAJOR_VERSION } cuda-cupti-${ CUDA_MAJOR_VERSION } -${ CUDA_MINOR_VERSION } libnvjitlink-${ CUDA_MAJOR_VERSION } -${ CUDA_MINOR_VERSION }
2025-12-03 15:13:21 +01:00
fi
2025-06-15 14:56:52 +02:00
apt-get clean && \
2025-12-03 16:47:27 +01:00
rm -rf /var/lib/apt/lists/*
2025-12-03 09:47:03 +01:00
fi
EOT
2025-12-03 21:42:33 +01:00
2025-12-03 09:47:03 +01:00
# https://github.com/NVIDIA/Isaac-GR00T/issues/343
RUN <<EOT bash
if [ " ${ BUILD_TYPE } " = "cublas" ] && [ " ${ TARGETARCH } " = "arm64" ] ; then
wget https://developer.download.nvidia.com/compute/cudss/0.6.0/local_installers/cudss-local-tegra-repo-ubuntu${ UBUNTU_VERSION } -0.6.0_0.6.0-1_arm64.deb && \
dpkg -i cudss-local-tegra-repo-ubuntu${ UBUNTU_VERSION } -0.6.0_0.6.0-1_arm64.deb && \
cp /var/cudss-local-tegra-repo-ubuntu${ UBUNTU_VERSION } -0.6.0/cudss-*-keyring.gpg /usr/share/keyrings/ && \
apt-get update && apt-get -y install cudss cudss-cuda-${ CUDA_MAJOR_VERSION } && \
2025-12-03 15:13:21 +01:00
wget https://developer.download.nvidia.com/compute/nvpl/25.5/local_installers/nvpl-local-repo-ubuntu${ UBUNTU_VERSION } -25.5_1.0-1_arm64.deb && \
dpkg -i nvpl-local-repo-ubuntu${ UBUNTU_VERSION } -25.5_1.0-1_arm64.deb && \
cp /var/nvpl-local-repo-ubuntu${ UBUNTU_VERSION } -25.5/nvpl-*-keyring.gpg /usr/share/keyrings/ && \
2025-12-03 09:47:03 +01:00
apt-get update && apt-get install -y nvpl
2025-06-15 14:56:52 +02:00
fi
EOT
# If we are building with clblas support, we need the libraries for the builds
RUN if [ " ${ BUILD_TYPE } " = "clblas" ] && [ " ${ SKIP_DRIVERS } " = "false" ] ; then \
apt-get update && \
apt-get install -y --no-install-recommends \
libclblast-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* \
; fi
RUN if [ " ${ BUILD_TYPE } " = "hipblas" ] && [ " ${ SKIP_DRIVERS } " = "false" ] ; then \
apt-get update && \
apt-get install -y --no-install-recommends \
hipblas-dev \
rocblas-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
# I have no idea why, but the ROCM lib packages don't trigger ldconfig after they install, which results in local-ai and others not being able
# to locate the libraries. We run ldconfig ourselves to work around this packaging deficiency
ldconfig \
; fi
2025-12-03 09:47:03 +01:00
RUN if [ " ${ BUILD_TYPE } " = "hipblas" ] ; then \
ln -s /opt/rocm-**/lib/llvm/lib/libomp.so /usr/lib/libomp.so \
; fi
2025-06-15 14:56:52 +02:00
# Install uv as a system package
RUN curl -LsSf https://astral.sh/uv/install.sh | UV_INSTALL_DIR = /usr/bin sh
ENV PATH = " /root/.cargo/bin: ${ PATH } "
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
# Install grpcio-tools (the version in 22.04 is too old)
RUN pip install --user grpcio-tools= = 1.71.0 grpcio = = 1.71.0
COPY python/${ BACKEND } /${ BACKEND }
COPY backend.proto /${ BACKEND } /backend.proto
COPY python/common/ /${ BACKEND } /common
2025-08-23 22:36:39 +02:00
RUN cd /${ BACKEND } && PORTABLE_PYTHON = true make
2025-06-15 14:56:52 +02:00
FROM scratch
ARG BACKEND = rerankers
COPY --from= builder /${ BACKEND } / /