Dockerfile 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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-runner-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-runner-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 cpu-build-amd64
  105. RUN --mount=type=cache,target=/root/.ccache \
  106. OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" bash gen_linux.sh
  107. FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx-build-amd64
  108. RUN --mount=type=cache,target=/root/.ccache \
  109. OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx" bash gen_linux.sh
  110. FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx2-build-amd64
  111. RUN --mount=type=cache,target=/root/.ccache \
  112. OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx2" bash gen_linux.sh
  113. FROM --platform=linux/arm64 rockylinux:8 AS cpu-builder-arm64
  114. ARG CMAKE_VERSION
  115. ARG GOLANG_VERSION
  116. COPY ./scripts/rh_linux_deps.sh /
  117. RUN CMAKE_VERSION=${CMAKE_VERSION} GOLANG_VERSION=${GOLANG_VERSION} sh /rh_linux_deps.sh
  118. ENV PATH=/opt/rh/gcc-toolset-10/root/usr/bin:$PATH
  119. COPY --from=llm-code / /go/src/github.com/ollama/ollama/
  120. ARG OLLAMA_CUSTOM_CPU_DEFS
  121. ARG CGO_CFLAGS
  122. ENV GOARCH=arm64
  123. WORKDIR /go/src/github.com/ollama/ollama/llm/generate
  124. FROM --platform=linux/arm64 cpu-builder-arm64 AS cpu-build-arm64
  125. RUN --mount=type=cache,target=/root/.ccache \
  126. OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" bash gen_linux.sh
  127. # Intermediate stages used for ./scripts/build_linux.sh
  128. FROM --platform=linux/amd64 cpu-build-amd64 AS build-amd64
  129. ENV CGO_ENABLED=1
  130. WORKDIR /go/src/github.com/ollama/ollama
  131. COPY . .
  132. COPY --from=cpu_avx-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
  133. COPY --from=cpu_avx2-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
  134. COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
  135. COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
  136. COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
  137. COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
  138. COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
  139. COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
  140. ARG GOFLAGS
  141. ARG CGO_CFLAGS
  142. RUN --mount=type=cache,target=/root/.ccache \
  143. go build -trimpath -o dist/linux-amd64/bin/ollama .
  144. RUN cd dist/linux-$GOARCH && \
  145. tar --exclude runners -cf - . | pigz --best > ../ollama-linux-$GOARCH.tgz
  146. RUN cd dist/linux-$GOARCH-rocm && \
  147. tar -cf - . | pigz --best > ../ollama-linux-$GOARCH-rocm.tgz
  148. FROM --platform=linux/arm64 cpu-build-arm64 AS build-arm64
  149. ENV CGO_ENABLED=1
  150. ARG GOLANG_VERSION
  151. WORKDIR /go/src/github.com/ollama/ollama
  152. COPY . .
  153. COPY --from=cuda-11-build-runner-arm64 /go/src/github.com/ollama/ollama/dist/ dist/
  154. COPY --from=cuda-11-build-runner-arm64 /go/src/github.com/ollama/ollama/build/ build/
  155. COPY --from=cuda-12-build-runner-arm64 /go/src/github.com/ollama/ollama/dist/ dist/
  156. COPY --from=cuda-12-build-runner-arm64 /go/src/github.com/ollama/ollama/build/ build/
  157. ARG GOFLAGS
  158. ARG CGO_CFLAGS
  159. RUN --mount=type=cache,target=/root/.ccache \
  160. go build -trimpath -o dist/linux-arm64/bin/ollama .
  161. RUN cd dist/linux-$GOARCH && \
  162. tar --exclude runners -cf - . | pigz --best > ../ollama-linux-$GOARCH.tgz
  163. FROM --platform=linux/amd64 scratch AS dist-amd64
  164. COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/ollama-linux-*.tgz /
  165. FROM --platform=linux/arm64 scratch AS dist-arm64
  166. COPY --from=build-arm64 /go/src/github.com/ollama/ollama/dist/ollama-linux-*.tgz /
  167. FROM dist-$TARGETARCH as dist
  168. # Optimized container images do not cary nested payloads
  169. FROM --platform=linux/amd64 cpu-builder-amd64 AS container-build-amd64
  170. WORKDIR /go/src/github.com/ollama/ollama
  171. COPY . .
  172. ARG GOFLAGS
  173. ARG CGO_CFLAGS
  174. RUN --mount=type=cache,target=/root/.ccache \
  175. go build -trimpath -o dist/linux-amd64/bin/ollama .
  176. FROM --platform=linux/arm64 cpu-builder-arm64 AS container-build-arm64
  177. WORKDIR /go/src/github.com/ollama/ollama
  178. COPY . .
  179. ARG GOFLAGS
  180. ARG CGO_CFLAGS
  181. RUN --mount=type=cache,target=/root/.ccache \
  182. go build -trimpath -o dist/linux-arm64/bin/ollama .
  183. FROM --platform=linux/amd64 ubuntu:22.04 AS runtime-amd64
  184. RUN apt-get update && \
  185. apt-get install -y ca-certificates && \
  186. apt-get clean && rm -rf /var/lib/apt/lists/*
  187. COPY --from=container-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/bin/ /bin/
  188. COPY --from=cpu-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
  189. COPY --from=cpu_avx-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
  190. COPY --from=cpu_avx2-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
  191. COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
  192. COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
  193. FROM --platform=linux/arm64 ubuntu:22.04 AS runtime-arm64
  194. RUN apt-get update && \
  195. apt-get install -y ca-certificates && \
  196. apt-get clean && rm -rf /var/lib/apt/lists/*
  197. COPY --from=container-build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/bin/ /bin/
  198. COPY --from=cpu-build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/lib/ /lib/
  199. COPY --from=cuda-11-build-runner-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/lib/ /lib/
  200. COPY --from=cuda-12-build-runner-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/lib/ /lib/
  201. # ROCm libraries larger so we keep it distinct from the CPU/CUDA image
  202. FROM --platform=linux/amd64 ubuntu:22.04 AS runtime-rocm
  203. # Frontload the rocm libraries which are large, and rarely change to increase chance of a common layer
  204. # across releases
  205. COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64-rocm/lib/ /lib/
  206. RUN apt-get update && \
  207. apt-get install -y ca-certificates && \
  208. apt-get clean && rm -rf /var/lib/apt/lists/*
  209. COPY --from=container-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/bin/ /bin/
  210. COPY --from=cpu-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
  211. COPY --from=cpu_avx-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
  212. COPY --from=cpu_avx2-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
  213. COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
  214. EXPOSE 11434
  215. ENV OLLAMA_HOST=0.0.0.0
  216. ENTRYPOINT ["/bin/ollama"]
  217. CMD ["serve"]
  218. FROM runtime-$TARGETARCH
  219. EXPOSE 11434
  220. ENV OLLAMA_HOST=0.0.0.0
  221. ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  222. ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
  223. ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
  224. ENV NVIDIA_VISIBLE_DEVICES=all
  225. ENTRYPOINT ["/bin/ollama"]
  226. CMD ["serve"]