Skip to content

Commit

Permalink
Testing automatic image building (#193)
Browse files Browse the repository at this point in the history
* init

* temp code

* docker args

* docker tweak

* up

* tempt

* clean builder

* clean

* nit

* full debug

* debug

* update dockerfile

* up

* small fix

* up

* debug

* add olmo action
  • Loading branch information
natolambert authored Jul 17, 2024
1 parent 7b163ee commit 585edb9
Show file tree
Hide file tree
Showing 6 changed files with 214 additions and 2 deletions.
30 changes: 30 additions & 0 deletions .github/actions/push/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# copied from internal repo https://github.com/allenai/docker-images
name: Push image to Beaker
description: Push image to Beaker images.
inputs:
image:
description: The tag of the built image
required: true
beaker:
description: Upload release images to Beaker under this name
required: false
default: ""
latest:
description: If the image should also be pushed as latest
required: false
default: false
runs:
using: composite
# note, name used for this is associated with the beaker key in repo secrets
steps:
- shell: bash
if: inputs.beaker != '' # previously startsWith(github.ref, 'refs/tags/') && ...
run: |
# Push release to Beaker.
SHORT_SHA=$(git rev-parse --short HEAD)
beaker image create --name "${{ inputs.beaker }}-${SHORT_SHA}-${{ github.run_id }}" ${{ inputs.image }}
# We delete the previous version. This doesn't actually delete the backing Docker image, so
# we'll still benefit from layer caching when we push new version. The image might not exist
# yet, so it's ok if this fails.
beaker image delete nathanl/${{ inputs.beaker }} || true
beaker image create --name ${{ inputs.beaker }} ${{ inputs.image }}
25 changes: 25 additions & 0 deletions .github/actions/setup/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# copied from internal repo https://github.com/allenai/docker-images
name: Build setup
description: Setup the environment for a build
inputs:
beaker_token:
description: The Beaker user token
required: true
# ghcr_token:
# description: GHCR token
# required: true
# ghcr_user:
# description: GHCR user name
# required: true
runs:
using: composite
steps:
- uses: allenai/setup-beaker@v2
with:
token: ${{ inputs.beaker_token }}
workspace: ai2/oe-adapt

# - shell: bash
# run: |
# # Login to GitHub container registry.
# echo ${{ inputs.ghcr_token }} | docker login ghcr.io -u ${{ inputs.ghcr_user }} --password-stdin
79 changes: 79 additions & 0 deletions .github/workflows/push-image-olmo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# This is an example workflow file.
#
# When you add a new image, copy this file and then change all mentions of "hello-world" with
# the name of your new image.
#
# Read through the rest of the comments in this file to figure out how it works, and what else
# you need to change.
name: build_open_instruct_olmo

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

on:
push:
# Run this workflow anytime a push updates one of the files in the image's directory
# (other than the README), and anytime there's a new release tag for this image.
paths:
- 'open_instruct/**'
- '!open_instruct/README.md'
- 'requirements-olmo.txt'
- 'Dockerfile.olmo'
# Note, add .olmo dockerfile + requirements if adding auto build to those
branches: [main]
pull_request: # note, comment this out for running on every push
# Also run on PRs that update the files in the image's directory (other than README).
branches: [main]
paths:
- 'open_instruct/**'
- '!open_instruct/README.md'
- 'requirements-olmo.txt'
- 'Dockerfile.olmo'
workflow_dispatch: # This allows us to manually trigger a build through the GitHub UI.

env:
DOCKER_BUILDKIT: "1"

jobs:
build:
name: open_instruct
runs-on: ubuntu-latest
timeout-minutes: 60
if: (github.event_name != 'workflow_run') || (github.event.workflow_run.conclusion == 'success')
steps:
- uses: actions/checkout@v3

- name: Setup environment
uses: ./.github/actions/setup
with:
beaker_token: ${{ secrets.BEAKER_TOKEN }}
# ghcr_token: ${{ secrets.GHCR_TOKEN }}
# ghcr_user: ${{ secrets.GHCR_USER }}

# big images fail, trying this
- name: Delete huge unnecessary tools folder
run: rm -rf /opt/hostedtoolcache

- name: Build image
run: |
docker build \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--build-arg CUDA=12.1.0 --build-arg \
TARGET=cudnn8-devel --build-arg DIST=ubuntu20.04 \
--build-arg REQUIRE=requirements.txt \
-f Dockerfile.olmo . \
-t open_instruct_olmo
- name: Check image
run: |
docker run --rm open_instruct_olmo
- name: Push image
# if: github.event_name != 'pull_request'
uses: ./.github/actions/push
with:
image: open_instruct_olmo # this is the tag of the image we just built in the previous step
beaker: open_instruct_olmo_auto # this is the name of the image on Beaker
latest: true # this flag says we should also push this as the 'latest' version to GHCR
78 changes: 78 additions & 0 deletions .github/workflows/push-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# This is an example workflow file.
#
# When you add a new image, copy this file and then change all mentions of "hello-world" with
# the name of your new image.
#
# Read through the rest of the comments in this file to figure out how it works, and what else
# you need to change.
name: build_open_instruct

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

on:
push:
# Run this workflow anytime a push updates one of the files in the image's directory
# (other than the README), and anytime there's a new release tag for this image.
paths:
- 'open_instruct/**'
- '!open_instruct/README.md'
- 'requirements.txt'
- 'Dockerfile'
# Note, add .olmo dockerfile + requirements if adding auto build to those
branches: [main]
pull_request: # note, comment this out for running on every push
# Also run on PRs that update the files in the image's directory (other than README).
branches: [main]
paths:
- 'open_instruct/**'
- '!open_instruct/README.md'
- 'requirements.txt'
- 'Dockerfile'
workflow_dispatch: # This allows us to manually trigger a build through the GitHub UI.

env:
DOCKER_BUILDKIT: "1"

jobs:
build:
name: open_instruct
runs-on: ubuntu-latest
timeout-minutes: 60
if: (github.event_name != 'workflow_run') || (github.event.workflow_run.conclusion == 'success')
steps:
- uses: actions/checkout@v3

- name: Setup environment
uses: ./.github/actions/setup
with:
beaker_token: ${{ secrets.BEAKER_TOKEN }}
# ghcr_token: ${{ secrets.GHCR_TOKEN }}
# ghcr_user: ${{ secrets.GHCR_USER }}

# big images fail, trying this
- name: Delete huge unnecessary tools folder
run: rm -rf /opt/hostedtoolcache

- name: Build image
run: |
docker build \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--build-arg CUDA=12.1.0 --build-arg \
TARGET=cudnn8-devel --build-arg DIST=ubuntu20.04 \
--build-arg REQUIRE=requirements.txt . \
-t open_instruct
- name: Check image
run: |
docker run --rm open_instruct
- name: Push image
# if: github.event_name != 'pull_request'
uses: ./.github/actions/push
with:
image: open_instruct # this is the tag of the image we just built in the previous step
beaker: open_instruct_auto # this is the name of the image on Beaker
latest: true # this flag says we should also push this as the 'latest' version to GHCR
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ RUN python -m nltk.downloader punkt

COPY open_instruct open_instruct
COPY eval eval
COPY ds_configs ds_configs
COPY configs configs
COPY scripts scripts
RUN chmod +x scripts/*

Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.olmo
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ RUN python -m nltk.downloader punkt

COPY open_instruct open_instruct
COPY eval eval
COPY ds_configs ds_configs
COPY configs configs
COPY scripts scripts
RUN chmod +x scripts/*

Expand Down

0 comments on commit 585edb9

Please sign in to comment.