Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Containerizing QUICK: Add Dockerfile and GitHub Actions #358

Open
wants to merge 23 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
5a23f1d
Added Dockerfile with build for serial-cmake
kkrick-sdsu Sep 26, 2023
b069d31
Added example k8s deployment
kkrick-sdsu Sep 26, 2023
6c315ed
Added CUDA build
kkrick-sdsu Sep 27, 2023
01dd0d0
Created k8s manifests for serial and cuda
kkrick-sdsu Sep 27, 2023
cd64c92
Added logic to target specific GPU
kkrick-sdsu Oct 2, 2023
ed32d11
Ignored benchmark dir
kkrick-sdsu Oct 16, 2023
a9dc0f7
Updated images with steps from quick.rc
kkrick-sdsu Oct 16, 2023
607ecde
Renamed build targets
kkrick-sdsu Oct 16, 2023
1e0074c
Updated cuda and serial cpu images
kkrick-sdsu Oct 16, 2023
8b6d308
Reorganized build targets; added mpi-cpu
kkrick-sdsu Oct 18, 2023
5c25c04
Updated k8s yaml to use rclone and store data on volume
kkrick-sdsu Nov 4, 2023
3fd9ee2
Updated resources; added test command
kkrick-sdsu Nov 7, 2023
31612c2
Renamed serial to single for accuracy; Split CUDA into 12.x & 11.x
kkrick-sdsu Nov 14, 2023
be597ed
Converted to pod; updated to use CUDA 11.x image
kkrick-sdsu Nov 14, 2023
844eac2
Added mpi cuda builds
kkrick-sdsu Nov 22, 2023
5422828
Converted k8s manifests to jobs; added rclone manifest
kkrick-sdsu Nov 28, 2023
9ea8ca8
Moved all of the kubernetes manifests to separate repo
kkrick-sdsu Nov 29, 2023
26f3860
Cleaned up unused builds, added more comments
kkrick-sdsu Dec 12, 2023
436eb52
Indicated the importance of the COPY --from lines for reducing image …
kkrick-sdsu Dec 12, 2023
9547daf
Indicated the importance of the COPY --from lines for reducing image …
kkrick-sdsu Dec 12, 2023
e5221e5
Create docker-publish.yml
kkrick-sdsu Jan 26, 2024
4fecfe4
Removed build target for CUDA 11.X
kkrick-sdsu Jan 26, 2024
85ee558
Added docker publish for releases when published
kkrick-sdsu Jan 26, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 93 additions & 0 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: Docker

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

on:
push:
branches: [ "master" ]
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
pull_request:
branches: [ "master" ]
release:
types: [published]

env:
# Use docker.io for Docker Hub if empty
REGISTRY: ghcr.io
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}


jobs:
build:

runs-on: ubuntu-latest
permissions:
contents: read
packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs.
id-token: write

steps:
- name: Convert IMAGE_NAME to lowercase
run: |
# Use tr to convert string to lowercase
IMAGE_NAME_LOWER=$(echo "${{ env.IMAGE_NAME }}" | tr '[:upper:]' '[:lower:]')

# Set the lowercase value back to IMAGE_NAME
echo "IMAGE_NAME_LOWER=${IMAGE_NAME_LOWER}" >> $GITHUB_ENV

# Display the lowercase IMAGE_NAME for verification
echo "Lowercase IMAGE_NAME: $IMAGE_NAME_LOWER"
- name: Checkout repository
uses: actions/checkout@v3

# Install the cosign tool except on PR
# https://github.com/sigstore/cosign-installer
- name: Install cosign
if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@6e04d228eb30da1757ee4e1dd75a0ec73a653e06 #v3.1.1
with:
cosign-release: 'v2.1.1'

# Set up BuildKit Docker container builder to be able to build
# multi-platform images and export cache
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0

# Login against a Docker registry except on PR
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

# Extract metadata (tags, labels) for Docker
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LOWER }}

# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ debug.*
*~
*.bak
make.in
benchmark/
50 changes: 50 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
############################
### Base MPI CUDA 12.0.1 ###
############################
FROM nvidia/cuda:12.0.1-devel-ubuntu22.04 AS base-mpi-cuda-12.0.1

RUN apt-get update -y \
&& apt-get install -y \
gfortran \
cmake \
g++ \
openmpi-bin \
openmpi-common \
libopenmpi-dev

RUN mkdir /src \
&& mkdir /src/build

WORKDIR /src

# Copy the current version of QUICK into the container
COPY . .

WORKDIR /src/build

RUN cmake .. -DCOMPILER=GNU -DCMAKE_INSTALL_PREFIX=$(pwd)/../install -DCUDA=TRUE -DMPI=TRUE

RUN make -j2 install

#############################
## Runtime MPI CUDA 12.0.1 ##
#############################

# Runtime image is smaller than the devel/build image
FROM nvidia/cuda:12.0.1-runtime-ubuntu22.04 AS mpi-cuda-12.0.1

RUN apt-get update -y \
&& apt-get install -y \
openmpi-bin \
openmpi-common \
libopenmpi-dev

# Copy the compiled quick runtimes, leaving behind extra build dependencies & reducing image size
COPY --from=base-mpi-cuda-12.0.1 /src /src

WORKDIR /src/install

# Manually run steps from quick.rc
ENV QUICK_INSTALL /src/install
ENV QUICK_BASIS $QUICK_INSTALL/basis
ENV PATH $PATH:$QUICK_INSTALL/bin