Dockerfile 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. ARG GOLANG_VERSION=1.22.5
  2. ARG CMAKE_VERSION=3.22.1
  3. ARG CUDA_VERSION_11=11.3.1
  4. ARG CUDA_V11_ARCHITECTURES="50;52;53;60;61;62;70;72;75;80;86"
  5. ARG CUDA_VERSION_12=12.4.0
  6. ARG CUDA_V12_ARCHITECTURES="60;61;62;70;72;75;80;86;87;89;90;90a"
  7. ARG ROCM_VERSION=6.1.2
  8. # Copy the minimal context we need to run the generate scripts
  9. FROM scratch AS llm-code
  10. COPY .git .git
  11. COPY .gitmodules .gitmodules
  12. COPY llm llm
  13. FROM --platform=linux/amd64 nvidia/cuda:$CUDA_VERSION_11-devel-centos7 AS cuda-11-build-amd64
  14. ARG CMAKE_VERSION
  15. COPY ./scripts/rh_linux_deps.sh /
  16. RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
  17. ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH
  18. COPY --from=llm-code / /go/src/github.com/ollama/ollama/
  19. WORKDIR /go/src/github.com/ollama/ollama/llm/generate
  20. ARG CGO_CFLAGS
  21. ARG CUDA_V11_ARCHITECTURES
  22. ENV GOARCH amd64
  23. RUN --mount=type=cache,target=/root/.ccache \
  24. OLLAMA_SKIP_STATIC_GENERATE=1 \
  25. OLLAMA_SKIP_CPU_GENERATE=1 \
  26. CMAKE_CUDA_ARCHITECTURES="${CUDA_V11_ARCHITECTURES}" \
  27. CUDA_VARIANT="_v11" \
  28. bash gen_linux.sh
  29. FROM --platform=linux/amd64 nvidia/cuda:$CUDA_VERSION_12-devel-centos7 AS cuda-12-build-amd64
  30. ARG CMAKE_VERSION
  31. COPY ./scripts/rh_linux_deps.sh /
  32. RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
  33. ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH
  34. COPY --from=llm-code / /go/src/github.com/ollama/ollama/
  35. WORKDIR /go/src/github.com/ollama/ollama/llm/generate
  36. ARG CGO_CFLAGS
  37. ARG CUDA_V12_ARCHITECTURES
  38. ENV GOARCH amd64
  39. RUN --mount=type=cache,target=/root/.ccache \
  40. OLLAMA_SKIP_STATIC_GENERATE=1 \
  41. OLLAMA_SKIP_CPU_GENERATE=1 \
  42. CMAKE_CUDA_ARCHITECTURES="${CUDA_V12_ARCHITECTURES}" \
  43. CUDA_VARIANT="_v12" \
  44. OLLAMA_CUSTOM_CUDA_DEFS="-DGGML_CUDA_USE_GRAPHS=on" \
  45. bash gen_linux.sh
  46. FROM --platform=linux/arm64 nvidia/cuda:$CUDA_VERSION_11-devel-rockylinux8 AS cuda-11-build-server-arm64
  47. ARG CMAKE_VERSION
  48. COPY ./scripts/rh_linux_deps.sh /
  49. RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
  50. ENV PATH /opt/rh/gcc-toolset-10/root/usr/bin:$PATH
  51. COPY --from=llm-code / /go/src/github.com/ollama/ollama/
  52. WORKDIR /go/src/github.com/ollama/ollama/llm/generate
  53. ARG CGO_CFLAGS
  54. ARG CUDA_V11_ARCHITECTURES
  55. ENV GOARCH arm64
  56. RUN OLLAMA_SKIP_STATIC_GENERATE=1 \
  57. OLLAMA_SKIP_CPU_GENERATE=1 \
  58. CMAKE_CUDA_ARCHITECTURES="${CUDA_V11_ARCHITECTURES}" \
  59. CUDA_VARIANT="_v11" \
  60. bash gen_linux.sh
  61. FROM --platform=linux/arm64 nvidia/cuda:$CUDA_VERSION_12-devel-rockylinux8 AS cuda-12-build-server-arm64
  62. ARG CMAKE_VERSION
  63. COPY ./scripts/rh_linux_deps.sh /
  64. RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
  65. ENV PATH /opt/rh/gcc-toolset-10/root/usr/bin:$PATH
  66. COPY --from=llm-code / /go/src/github.com/ollama/ollama/
  67. WORKDIR /go/src/github.com/ollama/ollama/llm/generate
  68. ARG CGO_CFLAGS
  69. ARG CUDA_V12_ARCHITECTURES
  70. ENV GOARCH arm64
  71. RUN --mount=type=cache,target=/root/.ccache \
  72. OLLAMA_SKIP_STATIC_GENERATE=1 \
  73. OLLAMA_SKIP_CPU_GENERATE=1 \
  74. CMAKE_CUDA_ARCHITECTURES="${CUDA_V12_ARCHITECTURES}" \
  75. CUDA_VARIANT="_v12" \
  76. OLLAMA_CUSTOM_CUDA_DEFS="-DGGML_CUDA_USE_GRAPHS=on" \
  77. bash gen_linux.sh
  78. FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCM_VERSION}-complete AS rocm-build-amd64
  79. ARG CMAKE_VERSION
  80. COPY ./scripts/rh_linux_deps.sh /
  81. RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
  82. ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH
  83. ENV LIBRARY_PATH /opt/amdgpu/lib64
  84. COPY --from=llm-code / /go/src/github.com/ollama/ollama/
  85. WORKDIR /go/src/github.com/ollama/ollama/llm/generate
  86. ARG CGO_CFLAGS
  87. ARG AMDGPU_TARGETS
  88. ENV GOARCH amd64
  89. RUN --mount=type=cache,target=/root/.ccache \
  90. OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_SKIP_CPU_GENERATE=1 bash gen_linux.sh
  91. RUN mkdir -p ../../dist/linux-amd64-rocm/lib/ollama && \
  92. (cd /opt/rocm/lib && tar cf - rocblas/library) | (cd ../../dist/linux-amd64-rocm/lib/ollama && tar xf - )
  93. FROM --platform=linux/amd64 centos:7 AS cpu-builder-amd64
  94. ARG CMAKE_VERSION
  95. ARG GOLANG_VERSION
  96. COPY ./scripts/rh_linux_deps.sh /
  97. RUN CMAKE_VERSION=${CMAKE_VERSION} GOLANG_VERSION=${GOLANG_VERSION} sh /rh_linux_deps.sh
  98. ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH
  99. COPY --from=llm-code / /go/src/github.com/ollama/ollama/
  100. ARG OLLAMA_CUSTOM_CPU_DEFS
  101. ARG CGO_CFLAGS
  102. ENV GOARCH amd64
  103. WORKDIR /go/src/github.com/ollama/ollama/llm/generate
  104. FROM --platform=linux/amd64 cpu-builder-amd64 AS static-build-amd64
  105. RUN --mount=type=cache,target=/root/.ccache \
  106. OLLAMA_CPU_TARGET="static" bash gen_linux.sh
  107. FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu-build-amd64
  108. RUN --mount=type=cache,target=/root/.ccache \
  109. OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" bash gen_linux.sh
  110. FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx-build-amd64
  111. RUN --mount=type=cache,target=/root/.ccache \
  112. OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx" bash gen_linux.sh
  113. FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx2-build-amd64
  114. RUN --mount=type=cache,target=/root/.ccache \
  115. OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx2" bash gen_linux.sh
  116. FROM --platform=linux/arm64 rockylinux:8 AS cpu-builder-arm64
  117. ARG CMAKE_VERSION
  118. ARG GOLANG_VERSION
  119. COPY ./scripts/rh_linux_deps.sh /
  120. RUN CMAKE_VERSION=${CMAKE_VERSION} GOLANG_VERSION=${GOLANG_VERSION} sh /rh_linux_deps.sh
  121. ENV PATH /opt/rh/gcc-toolset-10/root/usr/bin:$PATH
  122. COPY --from=llm-code / /go/src/github.com/ollama/ollama/
  123. ARG OLLAMA_CUSTOM_CPU_DEFS
  124. ARG CGO_CFLAGS
  125. ENV GOARCH arm64
  126. WORKDIR /go/src/github.com/ollama/ollama/llm/generate
  127. FROM --platform=linux/arm64 cpu-builder-arm64 AS static-build-arm64
  128. RUN --mount=type=cache,target=/root/.ccache \
  129. OLLAMA_CPU_TARGET="static" bash gen_linux.sh
  130. FROM --platform=linux/arm64 cpu-builder-arm64 AS cpu-build-arm64
  131. RUN --mount=type=cache,target=/root/.ccache \
  132. OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" bash gen_linux.sh
  133. # Intermediate stage used for ./scripts/build_linux.sh
  134. FROM --platform=linux/amd64 cpu-build-amd64 AS build-amd64
  135. ENV CGO_ENABLED 1
  136. WORKDIR /go/src/github.com/ollama/ollama
  137. COPY . .
  138. COPY --from=static-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
  139. COPY --from=cpu_avx-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
  140. COPY --from=cpu_avx2-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
  141. COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
  142. COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
  143. COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
  144. COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
  145. COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
  146. COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
  147. ARG GOFLAGS
  148. ARG CGO_CFLAGS
  149. RUN --mount=type=cache,target=/root/.ccache \
  150. go build -trimpath -o dist/linux-amd64/bin/ollama .
  151. # Intermediate stage used for ./scripts/build_linux.sh
  152. FROM --platform=linux/arm64 cpu-build-arm64 AS build-arm64
  153. ENV CGO_ENABLED 1
  154. ARG GOLANG_VERSION
  155. WORKDIR /go/src/github.com/ollama/ollama
  156. COPY . .
  157. COPY --from=static-build-arm64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
  158. COPY --from=cuda-11-build-server-arm64 /go/src/github.com/ollama/ollama/dist/ dist/
  159. COPY --from=cuda-11-build-server-arm64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
  160. COPY --from=cuda-12-build-server-arm64 /go/src/github.com/ollama/ollama/dist/ dist/
  161. COPY --from=cuda-12-build-server-arm64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
  162. ARG GOFLAGS
  163. ARG CGO_CFLAGS
  164. RUN --mount=type=cache,target=/root/.ccache \
  165. go build -trimpath -o dist/linux-arm64/bin/ollama .
  166. # Strip out ROCm dependencies to keep the primary image lean
  167. FROM --platform=linux/amd64 ubuntu:22.04 as amd64-libs-without-rocm
  168. COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /scratch/
  169. RUN cd /scratch/ollama/ && rm -rf rocblas libamd* libdrm* libroc* libhip* libhsa*
  170. # Runtime stages
  171. FROM --platform=linux/amd64 ubuntu:22.04 as runtime-amd64
  172. COPY --from=amd64-libs-without-rocm /scratch/ /lib/
  173. RUN apt-get update && apt-get install -y ca-certificates && \
  174. apt-get clean && rm -rf /var/lib/apt/lists/*
  175. COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/bin/ /bin/
  176. FROM --platform=linux/arm64 ubuntu:22.04 as runtime-arm64
  177. COPY --from=build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/lib/ /lib/
  178. RUN apt-get update && apt-get install -y ca-certificates && \
  179. apt-get clean && rm -rf /var/lib/apt/lists/*
  180. COPY --from=build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/bin/ /bin/
  181. # Radeon images are much larger so we keep it distinct from the CPU/CUDA image
  182. FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCM_VERSION}-complete as runtime-rocm
  183. RUN update-pciids
  184. COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/bin/ /bin/
  185. RUN ln -s /opt/rocm/lib /lib/ollama
  186. EXPOSE 11434
  187. ENV OLLAMA_HOST 0.0.0.0
  188. ENTRYPOINT ["/bin/ollama"]
  189. CMD ["serve"]
  190. FROM runtime-$TARGETARCH
  191. EXPOSE 11434
  192. ENV OLLAMA_HOST 0.0.0.0
  193. ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  194. ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
  195. ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
  196. ENV NVIDIA_VISIBLE_DEVICES=all
  197. ENTRYPOINT ["/bin/ollama"]
  198. CMD ["serve"]