Dockerfile.build 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # Ubuntu 20.04 amd64 dependencies
  2. FROM --platform=linux/amd64 ubuntu:20.04 AS base-amd64
  3. ARG CUDA_VERSION=11.3.1-1
  4. ARG CMAKE_VERSION=3.22.1
  5. # ROCm only supports amd64
  6. ARG ROCM_VERSION=6.0
  7. ARG CLBLAST_VER=1.6.1
  8. # Note: https://rocm.docs.amd.com/en/latest/release/user_kernel_space_compat_matrix.html
  9. RUN apt-get update && \
  10. apt-get install -y wget gnupg && \
  11. wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin && \
  12. mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 && \
  13. apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub && \
  14. echo "deb [by-hash=no] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" > /etc/apt/sources.list.d/cuda.list && \
  15. wget "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh" -O /tmp/cmake-installer.sh && \
  16. chmod +x /tmp/cmake-installer.sh && /tmp/cmake-installer.sh --skip-license --prefix=/usr && \
  17. mkdir --parents --mode=0755 /etc/apt/keyrings && \
  18. wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor > /etc/apt/keyrings/rocm.gpg && \
  19. 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 && \
  20. echo "Package: *" > /etc/apt/preferences.d/rocm-pin-600 && \
  21. echo "Pin: release o=repo.radeon.com" >> /etc/apt/preferences.d/rocm-pin-600 && \
  22. echo "Pin-Priority: 600" >> /etc/apt/preferences.d/rocm-pin-600 && \
  23. apt-get update && \
  24. 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
  25. # CLBlast
  26. RUN wget -qO- https://github.com/CNugteren/CLBlast/archive/refs/tags/${CLBLAST_VER}.tar.gz | tar zxv -C /tmp/ && \
  27. cd /tmp/CLBlast-${CLBLAST_VER} && mkdir build && cd build && cmake .. && make && make install
  28. ENV ROCM_PATH=/opt/rocm
  29. # Ubuntu 22.04 arm64 dependencies
  30. FROM --platform=linux/arm64 ubuntu:20.04 AS base-arm64
  31. ARG CUDA_VERSION=11.3.1-1
  32. ARG CMAKE_VERSION=3.27.6
  33. RUN apt-get update && \
  34. apt-get install -y wget gnupg && \
  35. wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/sbsa/cuda-ubuntu2004.pin && \
  36. mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 && \
  37. apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/sbsa//3bf863cc.pub && \
  38. echo "deb [by-hash=no] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/sbsa/ /" > /etc/apt/sources.list.d/cuda.list && \
  39. wget "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-aarch64.sh" -O /tmp/cmake-installer.sh && \
  40. chmod +x /tmp/cmake-installer.sh && /tmp/cmake-installer.sh --skip-license --prefix=/usr && \
  41. apt-get update && \
  42. apt-cache madison cuda && \
  43. DEBIAN_FRONTEND=noninteractive apt-get -y install cuda=${CUDA_VERSION}
  44. FROM base-${TARGETARCH}
  45. ARG TARGETARCH
  46. ARG GOFLAGS="'-ldflags -w -s'"
  47. ARG CGO_CFLAGS
  48. ARG GOLANG_VERSION=1.21.3
  49. # Common toolchain
  50. RUN apt-get update && \
  51. DEBIAN_FRONTEND=noninteractive apt-get install -y gcc-10 g++-10 cpp-10 git ocl-icd-opencl-dev && \
  52. 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
  53. # install go
  54. ADD https://dl.google.com/go/go${GOLANG_VERSION}.linux-$TARGETARCH.tar.gz /tmp/go${GOLANG_VERSION}.tar.gz
  55. RUN mkdir -p /usr/local && tar xz -C /usr/local </tmp/go${GOLANG_VERSION}.tar.gz
  56. # build the final binary
  57. WORKDIR /go/src/github.com/jmorganca/ollama
  58. COPY . .
  59. ENV GOOS=linux
  60. ENV GOARCH=$TARGETARCH
  61. ENV GOFLAGS=$GOFLAGS
  62. ENV CGO_CFLAGS=${CGO_CFLAGS}
  63. RUN /usr/local/go/bin/go generate ./... && \
  64. /usr/local/go/bin/go build .