Dockerfile 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. ARG GOLANG_VERSION=1.22.1
  2. ARG CMAKE_VERSION=3.22.1
  3. ARG CUDA_VERSION=11.3.1
  4. ARG ROCM_VERSION=6.0
  5. # Copy the minimal context we need to run the generate scripts
  6. FROM scratch AS llm-code
  7. COPY .git .git
  8. COPY .gitmodules .gitmodules
  9. COPY llm llm
  10. FROM --platform=linux/amd64 nvidia/cuda:$CUDA_VERSION-devel-centos7 AS cuda-build-amd64
  11. ARG CMAKE_VERSION
  12. COPY ./scripts/rh_linux_deps.sh /
  13. RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
  14. ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH
  15. COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/
  16. WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate
  17. ARG CGO_CFLAGS
  18. RUN OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh
  19. FROM --platform=linux/arm64 nvidia/cuda:$CUDA_VERSION-devel-rockylinux8 AS cuda-build-arm64
  20. ARG CMAKE_VERSION
  21. COPY ./scripts/rh_linux_deps.sh /
  22. RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
  23. ENV PATH /opt/rh/gcc-toolset-10/root/usr/bin:$PATH
  24. COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/
  25. WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate
  26. ARG CGO_CFLAGS
  27. RUN OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh
  28. FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCM_VERSION}-complete AS rocm-build-amd64
  29. ARG CMAKE_VERSION
  30. COPY ./scripts/rh_linux_deps.sh /
  31. RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
  32. ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH
  33. ENV LIBRARY_PATH /opt/amdgpu/lib64
  34. COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/
  35. WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate
  36. ARG CGO_CFLAGS
  37. ARG AMDGPU_TARGETS
  38. RUN OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh
  39. RUN mkdir /tmp/scratch && \
  40. for dep in $(cat /go/src/github.com/jmorganca/ollama/llm/llama.cpp/build/linux/x86_64/rocm*/lib/deps.txt) ; do \
  41. cp ${dep} /tmp/scratch/ || exit 1 ; \
  42. done && \
  43. (cd /opt/rocm/lib && tar cf - rocblas/library) | (cd /tmp/scratch/ && tar xf - ) && \
  44. mkdir -p /go/src/github.com/jmorganca/ollama/dist/deps/ && \
  45. (cd /tmp/scratch/ && tar czvf /go/src/github.com/jmorganca/ollama/dist/deps/ollama-linux-amd64-rocm.tgz . )
  46. FROM --platform=linux/amd64 centos:7 AS cpu-builder-amd64
  47. ARG CMAKE_VERSION
  48. ARG GOLANG_VERSION
  49. COPY ./scripts/rh_linux_deps.sh /
  50. RUN CMAKE_VERSION=${CMAKE_VERSION} GOLANG_VERSION=${GOLANG_VERSION} sh /rh_linux_deps.sh
  51. ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH
  52. COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/
  53. ARG OLLAMA_CUSTOM_CPU_DEFS
  54. ARG CGO_CFLAGS
  55. WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate
  56. FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu-build-amd64
  57. RUN OLLAMA_CPU_TARGET="cpu" sh gen_linux.sh
  58. FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx-build-amd64
  59. RUN OLLAMA_CPU_TARGET="cpu_avx" sh gen_linux.sh
  60. FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx2-build-amd64
  61. RUN OLLAMA_CPU_TARGET="cpu_avx2" sh gen_linux.sh
  62. FROM --platform=linux/arm64 centos:7 AS cpu-build-arm64
  63. ARG CMAKE_VERSION
  64. ARG GOLANG_VERSION
  65. COPY ./scripts/rh_linux_deps.sh /
  66. RUN CMAKE_VERSION=${CMAKE_VERSION} GOLANG_VERSION=${GOLANG_VERSION} sh /rh_linux_deps.sh
  67. ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH
  68. COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/
  69. WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate
  70. # Note, we only build the "base" CPU variant on arm since avx/avx2 are x86 features
  71. ARG OLLAMA_CUSTOM_CPU_DEFS
  72. ARG CGO_CFLAGS
  73. RUN OLLAMA_CPU_TARGET="cpu" sh gen_linux.sh
  74. # Intermediate stage used for ./scripts/build_linux.sh
  75. FROM --platform=linux/amd64 cpu-build-amd64 AS build-amd64
  76. ENV CGO_ENABLED 1
  77. WORKDIR /go/src/github.com/jmorganca/ollama
  78. COPY . .
  79. COPY --from=cpu_avx-build-amd64 /go/src/github.com/jmorganca/ollama/llm/llama.cpp/build/linux/ llm/llama.cpp/build/linux/
  80. COPY --from=cpu_avx2-build-amd64 /go/src/github.com/jmorganca/ollama/llm/llama.cpp/build/linux/ llm/llama.cpp/build/linux/
  81. COPY --from=cuda-build-amd64 /go/src/github.com/jmorganca/ollama/llm/llama.cpp/build/linux/ llm/llama.cpp/build/linux/
  82. COPY --from=rocm-build-amd64 /go/src/github.com/jmorganca/ollama/llm/llama.cpp/build/linux/ llm/llama.cpp/build/linux/
  83. COPY --from=rocm-build-amd64 /go/src/github.com/jmorganca/ollama/dist/deps/ ./dist/deps/
  84. ARG GOFLAGS
  85. ARG CGO_CFLAGS
  86. RUN go build -trimpath .
  87. # Intermediate stage used for ./scripts/build_linux.sh
  88. FROM --platform=linux/arm64 cpu-build-arm64 AS build-arm64
  89. ENV CGO_ENABLED 1
  90. ARG GOLANG_VERSION
  91. WORKDIR /go/src/github.com/jmorganca/ollama
  92. COPY . .
  93. COPY --from=cuda-build-arm64 /go/src/github.com/jmorganca/ollama/llm/llama.cpp/build/linux/ llm/llama.cpp/build/linux/
  94. ARG GOFLAGS
  95. ARG CGO_CFLAGS
  96. RUN go build -trimpath .
  97. # Runtime stages
  98. FROM --platform=linux/amd64 ubuntu:22.04 as runtime-amd64
  99. RUN apt-get update && apt-get install -y ca-certificates
  100. COPY --from=build-amd64 /go/src/github.com/jmorganca/ollama/ollama /bin/ollama
  101. FROM --platform=linux/arm64 ubuntu:22.04 as runtime-arm64
  102. RUN apt-get update && apt-get install -y ca-certificates
  103. COPY --from=build-arm64 /go/src/github.com/jmorganca/ollama/ollama /bin/ollama
  104. # Radeon images are much larger so we keep it distinct from the CPU/CUDA image
  105. FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCM_VERSION}-complete as runtime-rocm
  106. RUN update-pciids
  107. COPY --from=build-amd64 /go/src/github.com/jmorganca/ollama/ollama /bin/ollama
  108. EXPOSE 11434
  109. ENV OLLAMA_HOST 0.0.0.0
  110. ENTRYPOINT ["/bin/ollama"]
  111. CMD ["serve"]
  112. FROM runtime-$TARGETARCH
  113. EXPOSE 11434
  114. ENV OLLAMA_HOST 0.0.0.0
  115. ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  116. ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
  117. ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
  118. ENV NVIDIA_VISIBLE_DEVICES=all
  119. ENTRYPOINT ["/bin/ollama"]
  120. CMD ["serve"]