diff --git a/Dockerfile.build b/Dockerfile.build index f1f5f3fc..5499b0a1 100644 --- a/Dockerfile.build +++ b/Dockerfile.build @@ -1,11 +1,18 @@ # Ubuntu 20.04 amd64 dependencies -FROM --platform=linux/amd64 nvidia/cuda:11.7.1-devel-ubuntu22.04 AS base-amd64 +FROM --platform=linux/amd64 ubuntu:20.04 AS base-amd64 +ARG CUDA_VERSION=11.3.1-1 +ARG CMAKE_VERSION=3.22.1 # ROCm only supports amd64 ARG ROCM_VERSION=5.7 + # Note: https://rocm.docs.amd.com/en/latest/release/user_kernel_space_compat_matrix.html RUN apt-get update && \ - apt-get install -y wget && \ - wget "https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1-linux-x86_64.sh" -O /tmp/cmake-installer.sh && \ + apt-get install -y wget gnupg && \ + wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin && \ + mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 && \ + apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub && \ + echo "deb [by-hash=no] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" > /etc/apt/sources.list.d/cuda.list && \ + wget "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh" -O /tmp/cmake-installer.sh && \ chmod +x /tmp/cmake-installer.sh && /tmp/cmake-installer.sh --skip-license --prefix=/usr && \ mkdir --parents --mode=0755 /etc/apt/keyrings && \ wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor > /etc/apt/keyrings/rocm.gpg && \ @@ -14,35 +21,45 @@ RUN apt-get update && \ echo "Pin: release o=repo.radeon.com" >> /etc/apt/preferences.d/rocm-pin-600 && \ echo "Pin-Priority: 600" >> /etc/apt/preferences.d/rocm-pin-600 && \ apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y rocm-hip-libraries rocm-device-libs rocm-libs rocm-ocl-icd rocm-hip-sdk rocm-hip-libraries rocm-cmake rocm-clang-ocl rocm-dev + DEBIAN_FRONTEND=noninteractive apt-get -y install cuda=${CUDA_VERSION} rocm-hip-libraries rocm-device-libs rocm-libs rocm-ocl-icd rocm-hip-sdk rocm-hip-libraries rocm-cmake rocm-clang-ocl rocm-dev ENV ROCM_PATH=/opt/rocm # Ubuntu 22.04 arm64 dependencies -FROM --platform=linux/arm64 nvidia/cuda:11.7.1-devel-ubuntu22.04 AS base-arm64 +FROM --platform=linux/arm64 ubuntu:20.04 AS base-arm64 +ARG CUDA_VERSION=11.3.1-1 +ARG CMAKE_VERSION=3.27.6 RUN apt-get update && \ - apt-get install -y wget && \ - wget "https://github.com/Kitware/CMake/releases/download/v3.27.6/cmake-3.27.6-linux-aarch64.sh" -O /tmp/cmake-installer.sh && \ - chmod +x /tmp/cmake-installer.sh && /tmp/cmake-installer.sh --skip-license --prefix=/usr + apt-get install -y wget gnupg && \ + wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/sbsa/cuda-ubuntu2004.pin && \ + mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 && \ + apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/sbsa//3bf863cc.pub && \ + echo "deb [by-hash=no] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/sbsa/ /" > /etc/apt/sources.list.d/cuda.list && \ + wget "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-aarch64.sh" -O /tmp/cmake-installer.sh && \ + chmod +x /tmp/cmake-installer.sh && /tmp/cmake-installer.sh --skip-license --prefix=/usr && \ + apt-get update && \ + apt-cache madison cuda && \ + DEBIAN_FRONTEND=noninteractive apt-get -y install cuda=${CUDA_VERSION} FROM base-${TARGETARCH} ARG TARGETARCH ARG GOFLAGS="'-ldflags -w -s'" ARG CGO_CFLAGS ARG CLBLAST_VER=1.6.1 +ARG GOLANG_VERSION=1.21.3 # Common toolchain RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y gcc-11 g++-11 cpp-11 git ocl-icd-opencl-dev && \ - update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 --slave /usr/bin/g++ g++ /usr/bin/g++-11 --slave /usr/bin/gcov gcov /usr/bin/gcov-11 + DEBIAN_FRONTEND=noninteractive apt-get install -y gcc-10 g++-10 cpp-10 git ocl-icd-opencl-dev && \ + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10 # CLBlast RUN wget -qO- https://github.com/CNugteren/CLBlast/archive/refs/tags/${CLBLAST_VER}.tar.gz | tar zxv -C /tmp/ && \ cd /tmp/CLBlast-${CLBLAST_VER} && mkdir build && cd build && cmake .. && make && make install # install go -ADD https://dl.google.com/go/go1.21.3.linux-$TARGETARCH.tar.gz /tmp/go1.21.3.tar.gz -RUN mkdir -p /usr/local && tar xz -C /usr/local #include -#ifndef _WIN32 +#ifdef __linux__ #include -#define LOAD_LIBRARY(lib, flags) dlopen(lib, flags) +#define LOAD_LIBRARY(lib, flags) dlopen(lib, flags | RTLD_DEEPBIND) #define LOAD_SYMBOL(handle, sym) dlsym(handle, sym) #define LOAD_ERR() dlerror() #define UNLOAD_LIBRARY(handle) dlclose(handle) -#else +#elif _WIN32 #include #define LOAD_LIBRARY(lib, flags) LoadLibrary(lib) #define LOAD_SYMBOL(handle, sym) GetProcAddress(handle, sym) @@ -20,6 +20,12 @@ inline static char *LOAD_ERR() { snprintf(errbuf, 8, "0x%lx", GetLastError()); return errbuf; } +#else +#include +#define LOAD_LIBRARY(lib, flags) dlopen(lib, flags) +#define LOAD_SYMBOL(handle, sym) dlsym(handle, sym) +#define LOAD_ERR() dlerror() +#define UNLOAD_LIBRARY(handle) dlclose(handle) #endif void rocm_shim_init(const char *libPath, struct rocm_llama_server *s, @@ -48,7 +54,7 @@ void rocm_shim_init(const char *libPath, struct rocm_llama_server *s, }; printf("Lazy loading %s library\n", libPath); - s->handle = LOAD_LIBRARY(libPath, RTLD_LAZY); + s->handle = LOAD_LIBRARY(libPath, RTLD_NOW); if (!s->handle) { err->id = -1; snprintf(