From d705778c79049cb05a9b7e9a1272c12f10ed6624 Mon Sep 17 00:00:00 2001 From: martabal <74269598+martabal@users.noreply.github.com> Date: Sat, 7 Sep 2024 17:52:28 +0200 Subject: [PATCH 1/2] feat: arm64 for cuda --- .github/workflows/docker.yml | 2 +- README.md | 2 +- templates/Dockerfile.j2 | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 302a6be..fdf9ae2 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -43,7 +43,7 @@ jobs: suffix: -armnn - image: cuda - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64 suffix: -cuda - image: cpu diff --git a/README.md b/README.md index 1db3c58..cc7558e 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ This image offers different versions via tags. Be cautious when using unstable o | :------: | :----: | :---: | ------------------------------------------------------------------------------------------------------------ | | latest | ✅ | ✅ | Latest Immich release. | | armnn | ❌ | ✅ | Latest Immich release and support for Arm Cortex-A CPUs and Arm Mali GPUs for machine-learning acceleration. | -| cuda | ✅ | ❌ | Latest Immich release and support for cuda for machine-learning acceleration (Nvidia). | +| cuda | ✅ | ✅ | Latest Immich release and support for cuda for machine-learning acceleration (Nvidia). | | noml | ✅ | ✅ | Latest Immich release without machine-learning. | | openvino | ✅ | ❌ | Latest Immich release and support for openvino for machine-learning acceleration (Intel). | diff --git a/templates/Dockerfile.j2 b/templates/Dockerfile.j2 index 3a7ec2b..3e37532 100644 --- a/templates/Dockerfile.j2 +++ b/templates/Dockerfile.j2 @@ -216,8 +216,13 @@ RUN \ /app/immich/server && \ {% if machine_learning_provider == "cuda" -%} echo "**** download libcudnn ****" && \ + if [ $(arch) = "x86_64" ]; then \ + CUDA_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/libcudnn9-cuda-12_9.3.0.75-1_amd64.deb"; \ + else \ + CUDA_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/arm64/libcudnn9-cuda-12_9.4.0.58-1_arm64.deb"; \ + fi && \ curl -o "/tmp/libcudnn9.deb" -L \ - "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/libcudnn9-cuda-12_9.3.0.75-1_amd64.deb" && \ + "${CUDA_URL}" && \ dpkg -i "/tmp/libcudnn9.deb" && \ {% endif -%} echo "**** download geocoding data ****" && \ From 5ef0fabcc8acc12247123f3f78ba449f9ba988e4 Mon Sep 17 00:00:00 2001 From: martabal <74269598+martabal@users.noreply.github.com> Date: Wed, 11 Sep 2024 01:04:23 +0200 Subject: [PATCH 2/2] feat: use nvidia repo --- templates/Dockerfile.j2 | 42 +++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/templates/Dockerfile.j2 b/templates/Dockerfile.j2 index 3e37532..8c03ff6 100644 --- a/templates/Dockerfile.j2 +++ b/templates/Dockerfile.j2 @@ -17,6 +17,7 @@ ARG BUILD_URL ARG IMMICH_VERSION ARG IMMICH_BASE_IMAGE_TAG +ARG CURRENT_UBUNTU_VERSION="noble" ARG LATEST_UBUNTU_VERSION="oracular" # hadolint ignore=DL3048 @@ -61,17 +62,29 @@ RUN \ /app/immich/{cli,{% if machine_learning_provider -%}machine-learning/ann,{% if machine_learning_provider == "armnn"-%}armnn,{% endif -%}{% endif -%}server/geodata,server/www} \ /tmp/{immich-dependencies,immich,node_modules{% if machine_learning_provider == "armnn"-%},armnn{% endif -%}} && \ echo "**** install build packages ****" && \ - echo "deb [signed-by=/usr/share/keyrings/nodesource-repo.gpg] https://deb.nodesource.com/node_20.x nodistro main" >>/etc/apt/sources.list.d/node.list && \ - curl -s "https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key" | gpg --dearmor | tee /usr/share/keyrings/nodesource-repo.gpg >/dev/null && \ - {% if machine_learning_provider == "openvino" -%} - echo "deb [signed-by=/usr/share/keyrings/deadsnakes.gpg] https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu noble main" >>/etc/apt/sources.list.d/deadsnakes.list && \ - curl -s "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xF23C5A6CF475977595C89F51BA6932366A755776" | gpg --dearmor | tee /usr/share/keyrings/deadsnakes.gpg >/dev/null && \ - {% endif -%} if [ $(arch) = "x86_64" ]; then \ + {% if machine_learning_provider == "cuda" -%} + CUDA_UBUNTU_REPO="ubuntu2404" && \ + CUDA_ARCHITECTURE="x86_64" && \ + {% endif -%} UBUNTU_REPO="http://archive.ubuntu.com/ubuntu/"; \ else \ + {% if machine_learning_provider == "cuda" -%} + CUDA_UBUNTU_REPO="ubuntu2204" && \ + CUDA_ARCHITECTURE="arm64" && \ + {% endif -%} UBUNTU_REPO="http://ports.ubuntu.com/ubuntu-ports/"; \ fi && \ + echo "deb [signed-by=/usr/share/keyrings/nodesource-repo.gpg] https://deb.nodesource.com/node_20.x nodistro main" >>/etc/apt/sources.list.d/node.list && \ + curl -s "https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key" | gpg --dearmor | tee /usr/share/keyrings/nodesource-repo.gpg >/dev/null && \ + {% if machine_learning_provider == "openvino" -%} + echo "deb [signed-by=/usr/share/keyrings/deadsnakes.gpg] https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu ${CURRENT_UBUNTU_VERSION} main" >>/etc/apt/sources.list.d/deadsnakes.list && \ + curl -s "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xF23C5A6CF475977595C89F51BA6932366A755776" | gpg --dearmor | tee /usr/share/keyrings/deadsnakes.gpg >/dev/null && \ + {% elif machine_learning_provider == "cuda" -%} + echo "deb [signed-by=/usr/share/keyrings/cuda-archive-keyring.gpg] https://developer.download.nvidia.com/compute/cuda/repos/${CUDA_UBUNTU_REPO}/${CUDA_ARCHITECTURE}/ /" >>/etc/apt/sources.list.d/cuda.list && \ + curl -s "https://developer.download.nvidia.com/compute/cuda/repos/${CUDA_UBUNTU_REPO}/${CUDA_ARCHITECTURE}/3bf863cc.pub" | gpg --dearmor | tee /usr/share/keyrings/cuda-archive-keyring.gpg >/dev/null && \ + printf "Package: *\nPin: release l=NVIDIA CUDA\nPin-Priority: 600" > /etc/apt/preferences.d/cuda && \ + {% endif -%} printf "deb ${UBUNTU_REPO} ${LATEST_UBUNTU_VERSION} main restricted universe multiverse\ndeb-src ${UBUNTU_REPO} ${LATEST_UBUNTU_VERSION} main restricted universe multiverse" >> /etc/apt/sources.list && \ printf "Package: *\nPin: release n=${LATEST_UBUNTU_VERSION}\nPin-Priority: 450" > /etc/apt/preferences.d/preferences && \ apt-get update && \ @@ -105,6 +118,7 @@ RUN \ libcublas12 \ libcublaslt12 \ libcudart12 \ + libcudnn9-cuda-12 \ libcufft11 \ libcurand10 \ {% endif -%} @@ -201,7 +215,7 @@ RUN \ TARGETARCH=${TARGETARCH:=$(dpkg --print-architecture)} && \ curl -o \ /tmp/ffmpeg.deb -L \ - "https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFMPEG_VERSION}/jellyfin-ffmpeg6_${FFMPEG_VERSION}-noble_${TARGETARCH}.deb" && \ + "https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFMPEG_VERSION}/jellyfin-ffmpeg6_${FFMPEG_VERSION}-${CURRENT_UBUNTU_VERSION}_${TARGETARCH}.deb" && \ apt-get install --no-install-recommends -y -f \ /tmp/ffmpeg.deb && \ ldconfig /usr/lib/jellyfin-ffmpeg/lib && \ @@ -214,17 +228,6 @@ RUN \ mv \ /tmp/immich-dependencies/server/bin/build-lock.json \ /app/immich/server && \ - {% if machine_learning_provider == "cuda" -%} - echo "**** download libcudnn ****" && \ - if [ $(arch) = "x86_64" ]; then \ - CUDA_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/libcudnn9-cuda-12_9.3.0.75-1_amd64.deb"; \ - else \ - CUDA_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/arm64/libcudnn9-cuda-12_9.4.0.58-1_arm64.deb"; \ - fi && \ - curl -o "/tmp/libcudnn9.deb" -L \ - "${CUDA_URL}" && \ - dpkg -i "/tmp/libcudnn9.deb" && \ - {% endif -%} echo "**** download geocoding data ****" && \ curl -o \ /tmp/cities500.zip -L \ @@ -377,6 +380,9 @@ RUN \ {% if machine_learning_provider == "openvino" -%} /etc/apt/sources.list.d/deadsnakes.list \ /usr/share/keyrings/deadsnakes.gpg \ + {% elif machine_learning_provider == "cuda" -%} + /etc/apt/sources.list.d/cuda.list \ + /usr/share/keyrings/cuda-archive-keyring.gpg \ {% endif -%} /root/.cache \ {% if machine_learning_provider -%}