7555ea44f8
This switches the default llama.cpp to be CPU based, and builds the GPU variants as dynamically loaded libraries which we can select at runtime. This also bumps the ROCm library to version 6 given 5.7 builds don't work on the latest ROCm library that just shipped.
75 lines
3.9 KiB
Docker
75 lines
3.9 KiB
Docker
# Ubuntu 20.04 amd64 dependencies
|
|
FROM --platform=linux/amd64 ubuntu:20.04 AS base-amd64
|
|
ARG CUDA_VERSION=11.3.1-1
|
|
ARG CMAKE_VERSION=3.22.1
|
|
# ROCm only supports amd64
|
|
ARG ROCM_VERSION=6.0
|
|
|
|
# Note: https://rocm.docs.amd.com/en/latest/release/user_kernel_space_compat_matrix.html
|
|
RUN apt-get update && \
|
|
apt-get install -y wget gnupg && \
|
|
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin && \
|
|
mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 && \
|
|
apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub && \
|
|
echo "deb [by-hash=no] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" > /etc/apt/sources.list.d/cuda.list && \
|
|
wget "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh" -O /tmp/cmake-installer.sh && \
|
|
chmod +x /tmp/cmake-installer.sh && /tmp/cmake-installer.sh --skip-license --prefix=/usr && \
|
|
mkdir --parents --mode=0755 /etc/apt/keyrings && \
|
|
wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor > /etc/apt/keyrings/rocm.gpg && \
|
|
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/${ROCM_VERSION} focal main" > /etc/apt/sources.list.d/rocm.list && \
|
|
echo "Package: *" > /etc/apt/preferences.d/rocm-pin-600 && \
|
|
echo "Pin: release o=repo.radeon.com" >> /etc/apt/preferences.d/rocm-pin-600 && \
|
|
echo "Pin-Priority: 600" >> /etc/apt/preferences.d/rocm-pin-600 && \
|
|
apt-get update && \
|
|
DEBIAN_FRONTEND=noninteractive apt-get -y install cuda=${CUDA_VERSION} rocm-hip-libraries rocm-device-libs rocm-libs rocm-ocl-icd rocm-hip-sdk rocm-hip-libraries rocm-cmake rocm-clang-ocl rocm-dev
|
|
|
|
ENV ROCM_PATH=/opt/rocm
|
|
|
|
# Ubuntu 22.04 arm64 dependencies
|
|
FROM --platform=linux/arm64 ubuntu:20.04 AS base-arm64
|
|
ARG CUDA_VERSION=11.3.1-1
|
|
ARG CMAKE_VERSION=3.27.6
|
|
RUN apt-get update && \
|
|
apt-get install -y wget gnupg && \
|
|
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/sbsa/cuda-ubuntu2004.pin && \
|
|
mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 && \
|
|
apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/sbsa//3bf863cc.pub && \
|
|
echo "deb [by-hash=no] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/sbsa/ /" > /etc/apt/sources.list.d/cuda.list && \
|
|
wget "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-aarch64.sh" -O /tmp/cmake-installer.sh && \
|
|
chmod +x /tmp/cmake-installer.sh && /tmp/cmake-installer.sh --skip-license --prefix=/usr && \
|
|
apt-get update && \
|
|
apt-cache madison cuda && \
|
|
DEBIAN_FRONTEND=noninteractive apt-get -y install cuda=${CUDA_VERSION}
|
|
|
|
FROM base-${TARGETARCH}
|
|
ARG TARGETARCH
|
|
ARG GOFLAGS="'-ldflags -w -s'"
|
|
ARG CGO_CFLAGS
|
|
ARG CLBLAST_VER=1.6.1
|
|
ARG GOLANG_VERSION=1.21.3
|
|
|
|
# Common toolchain
|
|
RUN apt-get update && \
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y gcc-10 g++-10 cpp-10 git ocl-icd-opencl-dev && \
|
|
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10
|
|
|
|
# CLBlast
|
|
RUN wget -qO- https://github.com/CNugteren/CLBlast/archive/refs/tags/${CLBLAST_VER}.tar.gz | tar zxv -C /tmp/ && \
|
|
cd /tmp/CLBlast-${CLBLAST_VER} && mkdir build && cd build && cmake .. && make && make install
|
|
|
|
# install go
|
|
ADD https://dl.google.com/go/go${GOLANG_VERSION}.linux-$TARGETARCH.tar.gz /tmp/go${GOLANG_VERSION}.tar.gz
|
|
RUN mkdir -p /usr/local && tar xz -C /usr/local </tmp/go${GOLANG_VERSION}.tar.gz
|
|
|
|
# build the final binary
|
|
WORKDIR /go/src/github.com/jmorganca/ollama
|
|
COPY . .
|
|
|
|
ENV GOOS=linux
|
|
ENV GOARCH=$TARGETARCH
|
|
ENV GOFLAGS=$GOFLAGS
|
|
ENV CGO_CFLAGS=${CGO_CFLAGS}
|
|
|
|
RUN /usr/local/go/bin/go generate ./... && \
|
|
/usr/local/go/bin/go build .
|