Dockerfile 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # vim: filetype=dockerfile
  2. ARG FLAVOR=${TARGETARCH}
  3. ARG ROCMVERSION=6.1.2
  4. ARG JETPACK5VERSION=r35.4.1
  5. ARG JETPACK6VERSION=r36.2.0
  6. ARG CMAKEVERSION=3.31.2
  7. FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCMVERSION}-complete AS base-amd64
  8. RUN sed -i -e 's/mirror.centos.org/vault.centos.org/g' -e 's/^#.*baseurl=http/baseurl=http/g' -e 's/^mirrorlist=http/#mirrorlist=http/g' /etc/yum.repos.d/*.repo \
  9. && yum install -y yum-utils devtoolset-10-gcc devtoolset-10-gcc-c++ \
  10. && yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo \
  11. && curl -s -L https://github.com/ccache/ccache/releases/download/v4.10.2/ccache-4.10.2-linux-x86_64.tar.xz | tar -Jx -C /usr/local/bin --strip-components 1
  12. ENV PATH=/opt/rh/devtoolset-10/root/usr/bin:/opt/rh/devtoolset-11/root/usr/bin:$PATH
  13. FROM --platform=linux/arm64 rockylinux:8 AS base-arm64
  14. # install epel-release for ccache
  15. RUN yum install -y yum-utils epel-release \
  16. && yum install -y clang ccache \
  17. && yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo
  18. ENV CC=clang CXX=clang++
  19. FROM base-${TARGETARCH} AS base
  20. ARG CMAKEVERSION
  21. RUN curl -fsSL https://github.com/Kitware/CMake/releases/download/v${CMAKEVERSION}/cmake-${CMAKEVERSION}-linux-$(uname -m).tar.gz | tar xz -C /usr/local --strip-components 1
  22. COPY CMakeLists.txt CMakePresets.json .
  23. COPY ml/backend/ggml/ggml ml/backend/ggml/ggml
  24. ENV LDFLAGS=-s
  25. FROM base AS cpu
  26. # amd64 uses gcc which requires devtoolset-11 for AVX extensions while arm64 uses clang
  27. RUN if [ "$(uname -m)" = "x86_64" ]; then yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++; fi
  28. ENV PATH=/opt/rh/devtoolset-11/root/usr/bin:$PATH
  29. RUN --mount=type=cache,target=/root/.ccache \
  30. cmake --preset 'CPU' \
  31. && cmake --build --parallel --preset 'CPU' \
  32. && cmake --install build --component CPU --strip --parallel 8
  33. FROM base AS cuda-11
  34. ARG CUDA11VERSION=11.3
  35. RUN yum install -y cuda-toolkit-${CUDA11VERSION//./-}
  36. ENV PATH=/usr/local/cuda-11/bin:$PATH
  37. RUN --mount=type=cache,target=/root/.ccache \
  38. cmake --preset 'CUDA 11' \
  39. && cmake --build --parallel --preset 'CUDA 11' \
  40. && cmake --install build --component CUDA --strip --parallel 8
  41. FROM base AS cuda-12
  42. ARG CUDA12VERSION=12.4
  43. RUN yum install -y cuda-toolkit-${CUDA12VERSION//./-}
  44. ENV PATH=/usr/local/cuda-12/bin:$PATH
  45. RUN --mount=type=cache,target=/root/.ccache \
  46. cmake --preset 'CUDA 12' \
  47. && cmake --build --parallel --preset 'CUDA 12' \
  48. && cmake --install build --component CUDA --strip --parallel 8
  49. FROM base AS rocm-6
  50. RUN --mount=type=cache,target=/root/.ccache \
  51. cmake --preset 'ROCm 6' \
  52. && cmake --build --parallel --preset 'ROCm 6' \
  53. && cmake --install build --component HIP --strip --parallel 8
  54. FROM --platform=linux/arm64 nvcr.io/nvidia/l4t-jetpack:${JETPACK5VERSION} AS jetpack-5
  55. ARG CMAKEVERSION
  56. RUN apt-get update && apt-get install -y curl ccache \
  57. && curl -fsSL https://github.com/Kitware/CMake/releases/download/v${CMAKEVERSION}/cmake-${CMAKEVERSION}-linux-$(uname -m).tar.gz | tar xz -C /usr/local --strip-components 1
  58. COPY CMakeLists.txt CMakePresets.json .
  59. COPY ml/backend/ggml/ggml ml/backend/ggml/ggml
  60. RUN --mount=type=cache,target=/root/.ccache \
  61. cmake --preset 'JetPack 5' \
  62. && cmake --build --parallel --preset 'JetPack 5' \
  63. && cmake --install build --component CUDA --strip --parallel 8
  64. FROM --platform=linux/arm64 nvcr.io/nvidia/l4t-jetpack:${JETPACK6VERSION} AS jetpack-6
  65. ARG CMAKEVERSION
  66. RUN apt-get update && apt-get install -y curl ccache \
  67. && curl -fsSL https://github.com/Kitware/CMake/releases/download/v${CMAKEVERSION}/cmake-${CMAKEVERSION}-linux-$(uname -m).tar.gz | tar xz -C /usr/local --strip-components 1
  68. COPY CMakeLists.txt CMakePresets.json .
  69. COPY ml/backend/ggml/ggml ml/backend/ggml/ggml
  70. RUN --mount=type=cache,target=/root/.ccache \
  71. cmake --preset 'JetPack 6' \
  72. && cmake --build --parallel --preset 'JetPack 6' \
  73. && cmake --install build --component CUDA --strip --parallel 8
  74. FROM base AS build
  75. ARG GOVERSION=1.23.4
  76. RUN curl -fsSL https://golang.org/dl/go${GOVERSION}.linux-$(case $(uname -m) in x86_64) echo amd64 ;; aarch64) echo arm64 ;; esac).tar.gz | tar xz -C /usr/local
  77. ENV PATH=/usr/local/go/bin:$PATH
  78. WORKDIR /go/src/github.com/ollama/ollama
  79. COPY . .
  80. ARG GOFLAGS="'-ldflags=-w -s'"
  81. ENV CGO_ENABLED=1
  82. RUN --mount=type=cache,target=/root/.cache/go-build \
  83. go build -trimpath -buildmode=pie -o /bin/ollama .
  84. FROM --platform=linux/amd64 scratch AS amd64
  85. COPY --from=cuda-11 dist/lib/ollama/cuda_v11 /lib/ollama/cuda_v11
  86. COPY --from=cuda-12 dist/lib/ollama/cuda_v12 /lib/ollama/cuda_v12
  87. FROM --platform=linux/arm64 scratch AS arm64
  88. COPY --from=cuda-11 dist/lib/ollama/cuda_v11 /lib/ollama/cuda_v11
  89. COPY --from=cuda-12 dist/lib/ollama/cuda_v12 /lib/ollama/cuda_v12
  90. COPY --from=jetpack-5 dist/lib/ollama/cuda_v11 lib/ollama/cuda_jetpack5
  91. COPY --from=jetpack-6 dist/lib/ollama/cuda_v12 lib/ollama/cuda_jetpack6
  92. FROM --platform=linux/arm64 scratch AS rocm
  93. COPY --from=rocm-6 dist/lib/ollama/rocm /lib/ollama/rocm
  94. FROM ${FLAVOR} AS archive
  95. COPY --from=cpu dist/lib/ollama /lib/ollama
  96. COPY --from=build /bin/ollama /bin/ollama
  97. FROM ubuntu:20.04
  98. RUN apt-get update \
  99. && apt-get install -y ca-certificates \
  100. && apt-get clean \
  101. && rm -rf /var/lib/apt/lists/*
  102. COPY --from=archive /bin /usr/bin
  103. ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  104. COPY --from=archive /lib/ollama /usr/lib/ollama
  105. ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
  106. ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
  107. ENV NVIDIA_VISIBLE_DEVICES=all
  108. ENV OLLAMA_HOST=0.0.0.0:11434
  109. EXPOSE 11434
  110. ENTRYPOINT ["/bin/ollama"]
  111. CMD ["serve"]