Skip to content

Commit

Permalink
Docker Release Images v2 (#15616)
Browse files Browse the repository at this point in the history
### Ticket

#12496
#12495 (describes agreed upon naming scheme)

### Problem description

Allow users to get started with TT-Metal stack within two command lines.

```
docker pull ghcr.io/tenstorrent/tt-metal/tt-metalium/ubuntu-20.04-amd64-release/wormhole_b0:latest
docker run --rm -it -t ghcr.io/tenstorrent/tt-metal/tt-metalium/ubuntu-20.04-amd64-release/wormhole_b0:latest python3 -c "import ttnn"
```

### What's changed
Add a job for the package release to also build/push a release image.

### Checklist
- [x] Post commit CI passes
https://github.com/tenstorrent/tt-metal/actions/runs/12127666954
- [ ] Blackhole Post commit (if applicable)
- [ ] Model regression CI testing passes (if applicable)
- [ ] Device performance regression CI testing passes (if applicable)
- [ ] New/Existing tests provide coverage for changes
  • Loading branch information
dimitri-tenstorrent authored Dec 6, 2024
1 parent 317d346 commit dc6d684
Show file tree
Hide file tree
Showing 12 changed files with 199 additions and 41 deletions.
4 changes: 2 additions & 2 deletions .github/actions/docker-run/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ inputs:
docker_os_arch:
description: 'Docker image architecture'
required: false
default: ubuntu-20.04-amd64
default: tt-metalium/ubuntu-20.04-amd64
docker_username:
description: docker login username
required: true
Expand Down Expand Up @@ -89,7 +89,7 @@ runs:
set -eu
install_wheel=${{ inputs.install_wheel }}
if [[ "${install_wheel,,}" == "true" ]]; then
if [ "${install_wheel,,}" == "true" ]; then
WHEEL_FILENAME=$(ls -1 *.whl)
pip3 install "$WHEEL_FILENAME"
fi
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/generate-docker-tag/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ runs:
- name: Determine Full Docker Image Tag
shell: bash
run: |
echo "TT_METAL_DOCKER_IMAGE_TAG=ghcr.io/${{ github.repository }}/tt-metalium/${{ inputs.image }}:${{ env.IMAGE_TAG }}" >> $GITHUB_ENV
echo "TT_METAL_REF_IMAGE_TAG=ghcr.io/${{ github.repository }}/tt-metalium/${{ inputs.image }}:latest" >> $GITHUB_ENV
echo "TT_METAL_DOCKER_IMAGE_TAG=ghcr.io/${{ github.repository }}/${{ inputs.image }}:${{ env.IMAGE_TAG }}" >> $GITHUB_ENV
echo "TT_METAL_REF_IMAGE_TAG=ghcr.io/${{ github.repository }}/${{ inputs.image }}:latest" >> $GITHUB_ENV
- name: Output Docker Image Tag
shell: bash
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-artifact.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ jobs:
id: generate-docker-tag
uses: ./.github/actions/generate-docker-tag
with:
image: ${{ inputs.os }}
image: tt-metalium/${{ inputs.os }}
- name: Docker login
uses: docker/login-action@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-docker-artifact.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ jobs:
- name: Determine docker image tag
uses: ./.github/actions/generate-docker-tag
with:
image: ${{ inputs.os }}
image: tt-metalium/${{ inputs.os }}
- name: Build Docker image and push to GHCR
if: steps.changed-files-specific.outputs.any_changed == 'true'
uses: docker/build-push-action@v6
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,13 @@ jobs:
with:
docker_username: ${{ github.actor }}
docker_password: ${{ secrets.GITHUB_TOKEN }}
docker_image_arch: ${{ inputs.arch }}
docker_opts: |
-e ARCH_NAME=${{ matrix.arch }}
--group-add 1457
-v /home/ubuntu/.ccache-ci:/home/ubuntu/.ccache
-e CCACHE_DIR=/home/ubuntu/.ccache
-v /mnt/MLPerf/ccache:/mnt/MLPerf/ccache
docker_os_arch: ${{ matrix.build.os }}-amd64
docker_os_arch: tt-metalium/${{ matrix.build.os }}-amd64
run_args: |
set -eu # basic shell hygiene
set -x
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/code-analysis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
id: generate-docker-tag
uses: ./.github/actions/generate-docker-tag
with:
image: ${{ inputs.os }}
image: tt-metalium/${{ inputs.os }}
- name: Docker login
uses: docker/login-action@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/cpp-ttnn-project.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
id: generate-docker-tag
uses: ./.github/actions/generate-docker-tag
with:
image: ubuntu-22.04-amd64
image: tt-metalium/ubuntu-22.04-amd64
- name: Docker login
uses: docker/login-action@v3
with:
Expand Down
28 changes: 6 additions & 22 deletions .github/workflows/package-and-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -180,32 +180,16 @@ jobs:
infra/machine_setup/scripts/setup_hugepages.py
metal_libs-*+*.whl
fail_on_unmatched_files: true
create-docker-image:
create-docker-release-image:
needs: [
create-tag,
create-and-upload-draft-release
]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: https://ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
env:
TT_METAL_DOCKER_IMAGE: tt-metalium/ubuntu-20.04-amd64
uses: docker/build-push-action@v6
with:
push: true
tags: ghcr.io/${{ github.repository }}/tt-metalium/ubuntu-20.04-amd64:${{ needs.create-tag.outputs.version }}-dev
context: .
file: dockerfile/ubuntu-20.04-amd64.Dockerfile
uses: ./.github/workflows/publish-release-image.yaml
secrets: inherit
with:
version: ${{ needs.create-tag.outputs.version }}
is_major_version: ${{ needs.get-params.outputs.is-release-candidate !='true' && needs.get-params.outputs.should-create-release == 'true' }}
release-docs:
needs: [
get-params,
Expand Down
30 changes: 23 additions & 7 deletions .github/workflows/publish-release-image-wrapper.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,28 @@
name: "Create and Publish Release Docker Image"

on:
workflow_call:
workflow_dispatch:

jobs:
to_be_filled_out:
steps:
- name: This workflow will be filled out in https://github.com/tenstorrent/tt-metal/pull/15013
run: |
echo "NOOP"
build-artifact:
uses: ./.github/workflows/build-artifact.yaml
secrets: inherit
build-wheels:
needs: build-artifact
strategy:
matrix:
# Since pre-compiled builds only run on 20.04, we can only test on 20.04 for now
# The full 22.04 flow can be tested without precompiled
os: [ubuntu-20.04]
arch: [grayskull, wormhole_b0]
uses: ./.github/workflows/_build-wheels-impl.yaml
with:
os: ${{ matrix.os }}
arch: ${{ matrix.arch }}
from-precompiled: true
publish-release-image:
needs: build-wheels
uses: ./.github/workflows/publish-release-image.yaml
secrets: inherit
with:
version: dev-${GITHUB_REF_NAME//\//-}
is_major_version: false
131 changes: 131 additions & 0 deletions .github/workflows/publish-release-image.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
name: "[internal] Create and Publish Release Docker Image"

on:
workflow_call:
inputs:
version:
required: true
type: string
is_major_version:
required: true
type: boolean
default: false
timeout:
required: false
type: number
default: 10
jobs:
create-docker-release-image:
strategy:
matrix:
os: [ubuntu-20.04]
arch: [grayskull, wormhole_b0]
runs-on:
- build-docker
- in-service
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: https://ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Download wheels
uses: actions/download-artifact@v4
with:
name: eager-dist-${{ matrix.os }}-${{ matrix.arch }}
- name: Get the name of the wheel and set up env variables
id: generate-tag-name
run: |
echo "WHEEL_FILENAME=$(ls -1 *.whl)" >> $GITHUB_ENV
REPO_IMAGE_NAME=ghcr.io/${{ github.repository }}/tt-metalium-${{ matrix.os }}-amd64-release/${{ matrix.arch }}
echo "REPO_IMAGE_NAME=$REPO_IMAGE_NAME" >> $GITHUB_ENV
TAG_NAME=$REPO_IMAGE_NAME:${{ inputs.version }}
echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV
- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
build-args: |
WHEEL_FILENAME=${{ env.WHEEL_FILENAME }}
BASE_IMAGE_NAME=tt-metalium/${{ matrix.os }}-amd64
tags: ${{ env.TAG_NAME }}
context: .
file: dockerfile/release.Dockerfile
smoke-test-docker-image:
needs: create-docker-release-image
strategy:
matrix:
os: [ubuntu-20.04]
test_group:
[
{
arch: grayskull,
runs-on: ["cloud-virtual-machine", "E150", "in-service"],
cmd: pytest tests/end_to_end_tests,
},
{
arch: wormhole_b0,
runs-on: ["cloud-virtual-machine", "N150", "in-service"],
cmd: pytest tests/end_to_end_tests,
},
{
arch: wormhole_b0,
runs-on: ["cloud-virtual-machine", "N300", "in-service"],
cmd: pytest tests/end_to_end_tests,
},
]
env:
ARCH_NAME: ${{ matrix.test_group.arch }}
LOGURU_LEVEL: INFO
runs-on: ${{ matrix.test_group.runs-on }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run smoke test on the image
timeout-minutes: ${{ inputs.timeout }}
uses: ./.github/actions/docker-run
with:
docker_os_arch: tt-metalium-${{ matrix.os }}-amd64-release/${{ matrix.test_group.arch }}
docker_password: ${{ secrets.GITHUB_TOKEN }}
run_args: |
${{ matrix.test_group.cmd }}
tag-docker-image-as-latest:
needs: [smoke-test-docker-image, create-docker-release-image]
strategy:
matrix:
os: [ubuntu-20.04]
arch: [grayskull, wormhole_b0]
runs-on:
- build-docker
- in-service
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Docker login
uses: docker/login-action@v3
with:
registry: https://ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Tag latest if this is a major version release
run: |
set -eu # basic shell hygiene
LATEST_TAG=latest
if [ "${{ inputs.is_major_version }}" = "true" ]; then
LATEST_TAG=latest
else
LATEST_TAG=latest-rc
fi
echo "Determined that the current tag is " $LATEST_TAG
REPO_IMAGE_NAME=ghcr.io/${{ github.repository }}/tt-metalium-${{ matrix.os }}-amd64-release/${{ matrix.arch }}
TAG_NAME=$REPO_IMAGE_NAME:${{ inputs.version }}
docker pull $TAG_NAME
echo "Tagging the image as " $REPO_IMAGE_NAME:$LATEST_TAG
docker tag $TAG_NAME $REPO_IMAGE_NAME:$LATEST_TAG
echo "Pushing image with tag " $REPO_IMAGE_NAME:$LATEST_TAG
docker push $REPO_IMAGE_NAME:$LATEST_TAG
22 changes: 20 additions & 2 deletions INSTALLING.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,14 @@ sudo -E python3 setup_hugepages.py enable && sudo -E python3 setup_hugepages.py

> [!NOTE]
>
> You may choose to install from either source or a Python wheel.
> You may choose to install from either source, a Python wheel, or Docker release image.
>
> However, no matter your method, in order to use our pre-built models or to
> follow along with the documentation and tutorials to get started, you will
> still need the source code.
>
> If you do not want to use the models or follow the tutorials and want to
> immediately start using the API, you may install just the wheel.
> immediately start using the API, you may install just the wheel or get the release Docker container.
1. Install git and git-lfs.

Expand Down Expand Up @@ -157,6 +157,24 @@ sudo apt-get install cpufrequtils
sudo cpupower frequency-set -g performance
```

#### Option 3: From Docker Release Image

Download the latest Docker release from our [Docker registry](https://github.com/orgs/tenstorrent/packages?q=tt-metalium-ubuntu&tab=packages&q=tt-metalium-ubuntu-20.04-amd64-release) page for
the particular Tenstorrent card architecture that you have installed on your
system. (ie. Grayskull, Wormhole, etc)

```sh
docker pull ghcr.io/tenstorrent/tt-metal/tt-metalium-ubuntu-20.04-amd64-release/<arch_name>:latest-rc
docker run --it --rm -v /dev/hugepages-1G:/dev/hugepages-1G --device /dev/tenstorrent ghcr.io/tenstorrent/tt-metal/tt-metalium-ubuntu-20.04-amd64-release/<arch_name>:latest-rc bash
```
where `arch_name` is one of `grayskull`, `wormhole_b0`, or `blackhole`,
depending on your Tenstorrent card type.

When inside of the container,
```sh
python3 -c "import ttnn"
```

2. Start coding

To verify your installation, try the executing an example:
Expand Down
10 changes: 10 additions & 0 deletions dockerfile/release.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
ARG BASE_IMAGE_NAME=tt-metalium/ubuntu-20.04-amd64
#
# Currently the release image uses the base image which is also the build image.
# However, in the future, we could point a true base image that is a base for both releases and builds.
# This work is described in https://github.com/tenstorrent/tt-metal/issues/11974
FROM ghcr.io/tenstorrent/tt-metal/$BASE_IMAGE_NAME

ARG WHEEL_FILENAME
ADD $WHEEL_FILENAME $WHEEL_FILENAME
RUN pip3 install $WHEEL_FILENAME

0 comments on commit dc6d684

Please sign in to comment.