Dockerfile 5.5 KB

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