diff --git a/.github/workflows/docker-amd-smi.yml b/.github/workflows/docker-amd-smi.yml new file mode 100644 index 000000000..f536d2286 --- /dev/null +++ b/.github/workflows/docker-amd-smi.yml @@ -0,0 +1,51 @@ +name: Build AMD SMI Docker image + +on: + workflow_dispatch: + inputs: + image_name: + description: "Docker image name" + required: true + default: "dstackai/amd-smi" + rocm_version: + description: "ROCm version" + required: true + default: "6.4" + dstack_revision: + description: "Docker image revision" + required: true + default: 0 + +jobs: + build-amd-smi: + defaults: + run: + working-directory: docker/amd-smi + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and upload to DockerHub + run: | + IMAGE_NAME=${{ inputs.image_name }} + docker buildx build . \ + --load \ + --provenance=false \ + --platform linux/amd64 \ + --build-arg IMAGE_NAME=${IMAGE_NAME} \ + --build-arg UBUNTU_VERSION=noble \ + --build-arg ROCM_VERSION=${{ inputs.rocm_version }} \ + --build-arg DSTACK_REVISION=${{ inputs.dstack_revision }} \ + --build-arg BUILD_DATE=$(date --utc --iso-8601=seconds)Z \ + --tag ${IMAGE_NAME}:latest + VERSION=$(docker inspect --format '{{ index .Config.Labels "org.opencontainers.image.version" }}' ${IMAGE_NAME}) + docker tag ${IMAGE_NAME}:latest ${IMAGE_NAME}:${VERSION} + docker push ${IMAGE_NAME}:${VERSION} + docker push ${IMAGE_NAME}:latest diff --git a/docker/amd-smi/Dockerfile b/docker/amd-smi/Dockerfile new file mode 100644 index 000000000..3736f0609 --- /dev/null +++ b/docker/amd-smi/Dockerfile @@ -0,0 +1,30 @@ +ARG UBUNTU_VERSION + +FROM ubuntu:${UBUNTU_VERSION} + +ARG IMAGE_NAME +ARG UBUNTU_VERSION +ARG ROCM_VERSION +ARG DSTACK_REVISION +ARG BUILD_DATE + +ENV PATH="/opt/rocm/bin:${PATH}" + +RUN \ + export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install -y --no-install-recommends wget ca-certificates && \ + base_url="https://repo.radeon.com/amdgpu-install/${ROCM_VERSION}/ubuntu/${UBUNTU_VERSION}/" && \ + deb_name=$(wget -qO- "${base_url}" | grep -Po '(?<=href=")amdgpu-install_[^"]+') && \ + wget -O amdgpu-install.deb "${base_url}${deb_name}" && \ + apt-get install -y --no-install-recommends ./amdgpu-install.deb && \ + rm ./amdgpu-install.deb && \ + apt-get update && \ + apt-get install -y amd-smi-lib + +ENTRYPOINT ["/opt/rocm/bin/amd-smi"] +CMD ["--help"] + +LABEL org.opencontainers.image.title="${IMAGE_NAME}" +LABEL org.opencontainers.image.version="${ROCM_VERSION}-${DSTACK_REVISION}" +LABEL org.opencontainers.image.created="${BUILD_DATE}" diff --git a/docker/amd-smi/README.md b/docker/amd-smi/README.md new file mode 100644 index 000000000..577036d9c --- /dev/null +++ b/docker/amd-smi/README.md @@ -0,0 +1,9 @@ +# dstack AMD SMI + +An Ubuntu-based image with [AMD SMI](https://rocm.docs.amd.com/projects/amdsmi/en/latest/) preinstalled. Suitable for AMD GPU detection. + +## Usage + +```shell +docker run --rm --device /dev/kfd --device /dev/dri dstackai/amd-smi static +```