From ebf74a34c195139fcefde302ae1d64618a39c501 Mon Sep 17 00:00:00 2001 From: Robert Oswald <47303535+robertosw@users.noreply.github.com> Date: Sat, 3 Oct 2026 12:45:44 +0200 Subject: [PATCH 1/5] Add ROCm Dockerfile --- docker/Dockerfile.rocm | 49 ++++++++++++++++++++++++++++++++++++++++++ docs/docker.md | 6 ++++++ 2 files changed, 55 insertions(+) create mode 100644 docker/Dockerfile.rocm diff --git a/docker/Dockerfile.rocm b/docker/Dockerfile.rocm new file mode 100644 index 0000000000..428a6ab102 --- /dev/null +++ b/docker/Dockerfile.rocm @@ -0,0 +1,49 @@ +FROM rocm/dev-ubuntu-24.04 AS build + +# sd-server embeds the web UI at build time, so the build image needs Node/pnpm. +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential git cmake ninja-build ccache ca-certificates curl gnupg && \ + mkdir -p /etc/apt/keyrings && \ + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key -o /tmp/nodesource-repo.gpg.key && \ + gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg /tmp/nodesource-repo.gpg.key && \ + rm /tmp/nodesource-repo.gpg.key && \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \ + apt-get update && apt-get install -y --no-install-recommends nodejs && \ + npm install -g pnpm@10.15.1 && \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +WORKDIR /sd.cpp + +# ROCm's clang is not on PATH in Docker RUN shells (profile scripts are not loaded). +ENV PATH="/opt/rocm/llvm/bin:$PATH" + +COPY . . + +ARG AMDGPU_TARGETS=gfx1100 + +RUN cmake . -B ./build -G Ninja \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DSD_HIPBLAS=ON \ + -DAMDGPU_TARGETS=${AMDGPU_TARGETS} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON +RUN cmake --build ./build --config Release --parallel + +FROM rocm/dev-ubuntu-24.04 AS runtime + +# ROCm clang links against its own OpenMP runtime in /opt/rocm/llvm/lib, +# and the ROCm runtime libs (hipblas, rocblas, amdhip64) live in /opt/rocm/lib. +ENV LD_LIBRARY_PATH="/opt/rocm/llvm/lib:/opt/rocm/lib:$LD_LIBRARY_PATH" + +RUN apt-get update && \ + apt-get install --yes --no-install-recommends libgomp1 && \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +COPY --from=build /sd.cpp/build/bin /sd.cpp/bin +RUN printf '#!/bin/sh\nexec /sd.cpp/bin/sd-cli "$@"\n' > /sd-cli && \ + printf '#!/bin/sh\nexec /sd.cpp/bin/sd-server "$@"\n' > /sd-server && \ + chmod +x /sd-cli /sd-server + +ENTRYPOINT [ "/sd-cli" ] diff --git a/docs/docker.md b/docs/docker.md index 5bacdd2d4b..0dc106e29d 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -30,6 +30,12 @@ Vulkan: docker build -f docker/Dockerfile.vulkan -t sd . ``` +ROCm (AMD GPU): + +```shell +docker build -f docker/Dockerfile.rocm --build-arg AMDGPU_TARGETS=gfx1100 -t sd . +``` + ## Run locally built image's CLI ```shell From 87a7d08102b98eddd76f68c89c6cc4a630ea37c9 Mon Sep 17 00:00:00 2001 From: Robert Oswald Date: Sun, 11 Oct 2026 10:38:41 +0200 Subject: [PATCH 2/5] fix: build ROCm docker image with -DGGML_NATIVE=OFF --- docker/Dockerfile.rocm | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.rocm b/docker/Dockerfile.rocm index 428a6ab102..ec12513429 100644 --- a/docker/Dockerfile.rocm +++ b/docker/Dockerfile.rocm @@ -25,6 +25,7 @@ RUN cmake . -B ./build -G Ninja \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DSD_HIPBLAS=ON \ + -DGGML_NATIVE=OFF \ -DAMDGPU_TARGETS=${AMDGPU_TARGETS} \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \ From 8541bd9d6056c1bd62fb41ba551200dc0fbd6c67 Mon Sep 17 00:00:00 2001 From: Robert Oswald Date: Sun, 11 Oct 2026 10:54:34 +0200 Subject: [PATCH 3/5] docs: add ROCm container run example with device passthrough --- docs/docker.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/docker.md b/docs/docker.md index 0dc106e29d..e042dc4b06 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -43,3 +43,21 @@ docker run --rm -v /path/to/models:/models -v /path/to/output/:/output sd [args. # For example # docker run --rm -v ./models:/models -v ./build:/output sd -m /models/sd-v1-4.ckpt -p "a lovely cat" -v -o /output/output.png ``` + +### ROCm (AMD GPU) + +The user that executes this command needs to be in the `video` group and have read and write +access to `/dev/dri` and `/dev/kfd`. + +`--device` and `--group-add` allow the container access to the GPU. + +```shell +docker run --rm --device=/dev/dri --device=/dev/kfd --group-add video \ + -v /path/to/models:/models -v /path/to/output/:/output \ + sd [args...] +# For example +# docker run --rm --device=/dev/dri --device=/dev/kfd --group-add video \ +# -v ./models:/models -v ./build:/output \ +# sd -m /models/sd-v1-4.ckpt -v -o /output/output.png \ +# -p "a lovely cat" +``` \ No newline at end of file From a06bc1659760a9f0931f4e27daaf405c2041f866 Mon Sep 17 00:00:00 2001 From: Robert Oswald Date: Mon, 12 Oct 2026 11:15:28 +0200 Subject: [PATCH 4/5] build: explicit AMDGPU_TARGETS for Dockerfile.rocm --- docker/Dockerfile.rocm | 4 ++-- docs/docker.md | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile.rocm b/docker/Dockerfile.rocm index ec12513429..fe8a9b15e1 100644 --- a/docker/Dockerfile.rocm +++ b/docker/Dockerfile.rocm @@ -19,14 +19,14 @@ ENV PATH="/opt/rocm/llvm/bin:$PATH" COPY . . -ARG AMDGPU_TARGETS=gfx1100 +ARG AMDGPU_TARGETS="" RUN cmake . -B ./build -G Ninja \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DSD_HIPBLAS=ON \ -DGGML_NATIVE=OFF \ - -DAMDGPU_TARGETS=${AMDGPU_TARGETS} \ + -DAMDGPU_TARGETS="${AMDGPU_TARGETS}" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON diff --git a/docs/docker.md b/docs/docker.md index e042dc4b06..67231d9ac2 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -24,16 +24,23 @@ docker build -f docker/Dockerfile -t sd . ## Building variants using Docker -Vulkan: +### Vulkan: ```shell docker build -f docker/Dockerfile.vulkan -t sd . ``` -ROCm (AMD GPU): +### ROCm (AMD GPU): + +Defining one or multiple targets with `--build-arg AMDGPU_TARGETS` is strongly recommended. +Building the image will otherwise likely fail or build for a target that does not fit your +hardware. ```shell +# Build for one target docker build -f docker/Dockerfile.rocm --build-arg AMDGPU_TARGETS=gfx1100 -t sd . +# Build for multiple targets +docker build -f docker/Dockerfile.rocm --build-arg AMDGPU_TARGETS=gfx1030;gfx1100 -t sd . ``` ## Run locally built image's CLI From 6d131b1fc1f9521310cd664285e643b084cb2e89 Mon Sep 17 00:00:00 2001 From: Robert Oswald Date: Mon, 12 Oct 2026 18:50:44 +0200 Subject: [PATCH 5/5] fix: quoted build-arg in Dockerfile.rocm --- docs/docker.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docker.md b/docs/docker.md index 67231d9ac2..28e9ab5dfa 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -38,9 +38,9 @@ hardware. ```shell # Build for one target -docker build -f docker/Dockerfile.rocm --build-arg AMDGPU_TARGETS=gfx1100 -t sd . +docker build -f docker/Dockerfile.rocm --build-arg "AMDGPU_TARGETS=gfx1100" -t sd . # Build for multiple targets -docker build -f docker/Dockerfile.rocm --build-arg AMDGPU_TARGETS=gfx1030;gfx1100 -t sd . +docker build -f docker/Dockerfile.rocm --build-arg "AMDGPU_TARGETS=gfx1030;gfx1100" -t sd . ``` ## Run locally built image's CLI