diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 8411a7f18..e3592479b 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -12,9 +12,7 @@ steps: if: build.branch != "main" command: buildkite-agent pipeline upload .buildkite/x86-cpu-debug-tests.yml - # Main-branch publish: build → on-hardware ctest → push to higherordermethods/self - # on Docker Hub. Covers MI210 (gfx90a), V100 (sm70), and x86 CPU. B200/B300 - # (sm100) is published from GitHub Actions because we have no Blackwell agent. - - label: ":pipeline: Release & Publish" - if: build.branch == "main" - command: buildkite-agent pipeline upload .buildkite/release-and-publish.yml + # Main-branch release images (MI210/gfx90a, V100/sm70, x86 CPU, and the + # Blackwell sm100/sm103 targets) are built and pushed from GitHub Actions + # (.github/workflows/docker-publish.yml). Buildkite only runs the on-hardware + # GPU coverage tests on pull-request branches above. diff --git a/.buildkite/release-and-publish.yml b/.buildkite/release-and-publish.yml deleted file mode 100644 index 7d6d07de2..000000000 --- a/.buildkite/release-and-publish.yml +++ /dev/null @@ -1,152 +0,0 @@ -steps: - # ---- AMD MI210 (gfx90a) Release ---- - - label: ":docker: Build Release Image (x86-rocm643-gfx90a)" - key: "docker-build-gfx90a" - command: | - SELFISH_IMAGE="higherordermethods/selfish:latest-x86-rocm643-gfx90a" - docker pull "$${SELFISH_IMAGE}" - SELFISH_SHA=$$(docker inspect --format='{{index .RepoDigests 0}}' "$${SELFISH_IMAGE}" | cut -d@ -f2) - docker build \ - --build-arg SELFISH_IMAGE="$${SELFISH_IMAGE}" \ - --build-arg SELFISH_SHA="$${SELFISH_SHA}" \ - -t higherordermethods/self:$${BUILDKITE_BUILD_NUMBER}-x86-rocm643-gfx90a \ - -t higherordermethods/self:latest-x86-rocm643-gfx90a \ - -f docker/x86_gfx90a/Dockerfile . - env: - slurm_nodelist: "noether" - agents: - queue: "galapagos" - - - label: ":test_tube: Test Release Image (x86-rocm643-gfx90a)" - key: "test-release-gfx90a" - depends_on: "docker-build-gfx90a" - command: | - source /opt/spack-environment/activate.sh - ctest --test-dir /opt/self/build --output-on-failure - env: - slurm_partition: "main" - slurm_gres: "gpu:mi210:2" - slurm_time: "01:00:00" - slurm_nodes: 1 - slurm_ntasks: 2 - slurm_cpus_per_task: 8 - slurm_container_image: "docker://higherordermethods/self:$${BUILDKITE_BUILD_NUMBER}-x86-rocm643-gfx90a" - agents: - queue: "galapagos" - - - label: ":rocket: Push Release Image (x86-rocm643-gfx90a)" - key: "push-release-gfx90a" - depends_on: "test-release-gfx90a" - command: | - echo "$${DOCKERHUB_TOKEN}" | docker login -u "$${DOCKERHUB_USERNAME}" --password-stdin - docker push higherordermethods/self:$${BUILDKITE_BUILD_NUMBER}-x86-rocm643-gfx90a - docker push higherordermethods/self:latest-x86-rocm643-gfx90a - docker logout - secrets: - - DOCKERHUB_USERNAME - - DOCKERHUB_TOKEN - env: - slurm_nodelist: "noether" - agents: - queue: "galapagos" - - # ---- NVIDIA V100 (sm70) Release ---- - - label: ":docker: Build Release Image (x86-cuda124-sm70)" - key: "docker-build-sm70" - command: | - SELFISH_IMAGE="higherordermethods/selfish:latest-x86-cuda124-sm70" - docker pull "$${SELFISH_IMAGE}" - SELFISH_SHA=$$(docker inspect --format='{{index .RepoDigests 0}}' "$${SELFISH_IMAGE}" | cut -d@ -f2) - docker build \ - --build-arg SELFISH_IMAGE="$${SELFISH_IMAGE}" \ - --build-arg SELFISH_SHA="$${SELFISH_SHA}" \ - -t higherordermethods/self:$${BUILDKITE_BUILD_NUMBER}-x86-cuda124-sm70 \ - -t higherordermethods/self:latest-x86-cuda124-sm70 \ - -f docker/x86_sm70/Dockerfile . - env: - slurm_nodelist: "oram" - agents: - queue: "galapagos" - - - label: ":test_tube: Test Release Image (x86-cuda124-sm70)" - key: "test-release-sm70" - depends_on: "docker-build-sm70" - command: | - source /opt/spack-environment/activate.sh - ctest --test-dir /opt/self/build --output-on-failure - env: - slurm_partition: "main" - slurm_gres: "gpu:v100:2" - slurm_time: "01:00:00" - slurm_nodes: 1 - slurm_ntasks: 2 - slurm_cpus_per_task: 8 - slurm_container_image: "docker://higherordermethods/self:$${BUILDKITE_BUILD_NUMBER}-x86-cuda124-sm70" - agents: - queue: "galapagos" - - - label: ":rocket: Push Release Image (x86-cuda124-sm70)" - key: "push-release-sm70" - depends_on: "test-release-sm70" - command: | - echo "$${DOCKERHUB_TOKEN}" | docker login -u "$${DOCKERHUB_USERNAME}" --password-stdin - docker push higherordermethods/self:$${BUILDKITE_BUILD_NUMBER}-x86-cuda124-sm70 - docker push higherordermethods/self:latest-x86-cuda124-sm70 - docker logout - secrets: - - DOCKERHUB_USERNAME - - DOCKERHUB_TOKEN - env: - slurm_nodelist: "oram" - agents: - queue: "galapagos" - - # ---- x86 CPU-only Release ---- - - label: ":docker: Build Release Image (x86)" - key: "docker-build-x86" - command: | - SELFISH_IMAGE="higherordermethods/selfish:latest-x86" - docker pull "$${SELFISH_IMAGE}" - SELFISH_SHA=$$(docker inspect --format='{{index .RepoDigests 0}}' "$${SELFISH_IMAGE}" | cut -d@ -f2) - docker build \ - --build-arg SELFISH_IMAGE="$${SELFISH_IMAGE}" \ - --build-arg SELFISH_SHA="$${SELFISH_SHA}" \ - -t higherordermethods/self:$${BUILDKITE_BUILD_NUMBER}-x86 \ - -t higherordermethods/self:latest-x86 \ - -f docker/x86/Dockerfile . - env: - slurm_nodelist: "oram" - agents: - queue: "galapagos" - - - label: ":test_tube: Test Release Image (x86)" - key: "test-release-x86" - depends_on: "docker-build-x86" - command: | - source /opt/spack-environment/activate.sh - ctest --test-dir /opt/self/build --output-on-failure - env: - slurm_partition: "main" - slurm_time: "01:00:00" - slurm_nodes: 1 - slurm_ntasks: 2 - slurm_cpus_per_task: 8 - slurm_container_image: "docker://higherordermethods/self:$${BUILDKITE_BUILD_NUMBER}-x86" - agents: - queue: "galapagos" - - - label: ":rocket: Push Release Image (x86)" - key: "push-release-x86" - depends_on: "test-release-x86" - command: | - echo "$${DOCKERHUB_TOKEN}" | docker login -u "$${DOCKERHUB_USERNAME}" --password-stdin - docker push higherordermethods/self:$${BUILDKITE_BUILD_NUMBER}-x86 - docker push higherordermethods/self:latest-x86 - docker logout - secrets: - - DOCKERHUB_USERNAME - - DOCKERHUB_TOKEN - env: - slurm_nodelist: "oram" - agents: - queue: "galapagos" diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index e493f68b8..7c7d256f1 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -26,6 +26,16 @@ jobs: fail-fast: false matrix: include: + - variant: x86-cuda124-sm70 + context: docker/x86_sm70 + selfish_image: higherordermethods/selfish:latest-x86-cuda124-sm70 + tag_suffix: x86-cuda124-sm70 + double_precision: "ON" + - variant: x86-cuda124-sm70-sp + context: docker/x86_sm70 + selfish_image: higherordermethods/selfish:latest-x86-cuda124-sm70 + tag_suffix: x86-cuda124-sm70-sp + double_precision: "OFF" - variant: x86-cuda130-sm100 context: docker/x86_sm100 selfish_image: higherordermethods/selfish:latest-x86-cuda130-sm100 @@ -66,6 +76,16 @@ jobs: selfish_image: higherordermethods/selfish:latest-x86-rocm643-gfx942 tag_suffix: x86-rocm643-gfx942-sp double_precision: "OFF" + - variant: x86 + context: docker/x86 + selfish_image: higherordermethods/selfish:latest-x86-none + tag_suffix: x86 + double_precision: "ON" + - variant: x86-sp + context: docker/x86 + selfish_image: higherordermethods/selfish:latest-x86-none + tag_suffix: x86-sp + double_precision: "OFF" steps: - name: Checkout repository diff --git a/docker/x86/Dockerfile b/docker/x86/Dockerfile index b20814dc6..745daca70 100644 --- a/docker/x86/Dockerfile +++ b/docker/x86/Dockerfile @@ -1,10 +1,14 @@ -ARG SELFISH_IMAGE=higherordermethods/selfish:latest-x86 +ARG SELFISH_IMAGE=higherordermethods/selfish:latest-x86-none FROM ${SELFISH_IMAGE} ARG SELFISH_SHA="" LABEL org.opencontainers.image.base.name="${SELFISH_IMAGE}" LABEL org.opencontainers.image.base.digest="${SELFISH_SHA}" +# Floating-point precision of the build. ON -> double precision (default), +# OFF -> single precision. Maps to the SELF_ENABLE_DOUBLE_PRECISION CMake option. +ARG SELF_DOUBLE_PRECISION=ON + COPY . /opt/self/src RUN source /opt/spack-environment/activate.sh && \ @@ -15,6 +19,7 @@ RUN source /opt/spack-environment/activate.sh && \ -DCMAKE_BUILD_TYPE=Release \ -DSELF_ENABLE_GPU=OFF \ -DSELF_ENABLE_TESTING=ON \ + -DSELF_ENABLE_DOUBLE_PRECISION=${SELF_DOUBLE_PRECISION} \ -DSELF_ENABLE_EXAMPLES=ON \ /opt/self/src && \ make -j$(nproc) && \ diff --git a/docker/x86_sm70/Dockerfile b/docker/x86_sm70/Dockerfile index f8c7d8daf..9ce541d36 100644 --- a/docker/x86_sm70/Dockerfile +++ b/docker/x86_sm70/Dockerfile @@ -5,6 +5,10 @@ ARG SELFISH_SHA="" LABEL org.opencontainers.image.base.name="${SELFISH_IMAGE}" LABEL org.opencontainers.image.base.digest="${SELFISH_SHA}" +# Floating-point precision of the build. ON -> double precision (default), +# OFF -> single precision. Maps to the SELF_ENABLE_DOUBLE_PRECISION CMake option. +ARG SELF_DOUBLE_PRECISION=ON + COPY . /opt/self/src RUN source /opt/spack-environment/activate.sh && \ @@ -16,6 +20,7 @@ RUN source /opt/spack-environment/activate.sh && \ -DSELF_ENABLE_GPU=ON \ -DSELF_GPU_BACKEND=CUDA \ -DSELF_ENABLE_TESTING=ON \ + -DSELF_ENABLE_DOUBLE_PRECISION=${SELF_DOUBLE_PRECISION} \ -DCMAKE_CUDA_ARCHITECTURES="70" \ -DSELF_ENABLE_EXAMPLES=ON \ /opt/self/src && \