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

Publish Release Images #15013

Merged
merged 8 commits into from
Nov 26, 2024
2 changes: 1 addition & 1 deletion .github/actions/docker-run/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ runs:
${{ inputs.device }}
-w ${{ github.workspace }}
run: |
if [ ${{ inputs.install_wheel }} ]; then
if [ "${{ inputs.install_wheel }}" == "true" ]; then
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix the issue where the wheel was always installed.

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
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does not allow us to use images that follow the convention outlined in:
#12495
i.e.
tt-metalium-{OS}-{ARCH}-release/grayskull

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
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
26 changes: 5 additions & 21 deletions .github/workflows/package-and-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -185,27 +185,11 @@ jobs:
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
34 changes: 27 additions & 7 deletions .github/workflows/publish-release-image-wrapper.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,32 @@
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"
static-checks:
uses: ./.github/workflows/all-static-checks.yaml
secrets: inherit
build-artifact:
needs: static-checks
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
111 changes: 111 additions & 0 deletions .github/workflows/publish-release-image.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
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: 35
jobs:
create-docker-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-dev/${{ 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-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,
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not N300?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I picked the machine that seemed to have a lesser demand.

]
env:
TT_METAL_ENV: ${{ vars.TT_METAL_ENV }}
ARCH_NAME: ${{ matrix.test_group.arch }}
LOGURU_LEVEL: INFO
LD_LIBRARY_PATH: ${{ github.workspace }}/build/lib
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-image]
strategy:
matrix:
os: [ubuntu-20.04]
arch: [grayskull, wormhole_b0]
runs-on:
- build-docker
- in-service
steps:
- name: Tag latest if this is a major version release
if: ${{ inputs.is_major_version }}
run: |
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
docker tag $TAG_NAME $REPO_IMAGE_NAME:latest
docker push $REPO_IMAGE_NAME:latest
23 changes: 21 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,25 @@ sudo apt-get install cpufrequtils
sudo cpupower frequency-set -g performance
```

### Option 3: From Docker Release Image

Download the latest Docker release from our
[releases](https://github.com/tenstorrent/tt-metal/releases/latest) 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
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 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"
```

5. 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
Loading