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

examples: Add test run for lv2v #283

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
33 changes: 33 additions & 0 deletions .github/actions/cleanup-runner/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: 'Cleanup Runner'
description: 'Cleans up GitHub-hosted runner to free up disk space for large builds'
runs:
using: "composite"
steps:
- name: Cleanup hosted runner
shell: bash
run: |
# Remove unnecessary packages
sudo apt purge -yqq dotnet-* mono-* llvm-* libllvm* powershell* openjdk-* \
temurin-* mongodb-* firefox mysql-* \
hhvm google-chrome-stable \
libgl1-mesa-dri microsoft-edge-stable azure-cli || true

# Clean apt cache
sudo apt clean
sudo apt autoremove -y

# Remove large directories
sudo rm -rf /usr/share/dotnet /usr/local/lib/android
sudo rm -rf /usr/local/share/chromium /usr/local/share/chrome
sudo rm -rf /usr/local/.ghcup /usr/local/share/powershell
sudo rm -rf /opt/hostedtoolcache/* /usr/local/lib/node_modules

# Clean npm and yarn caches
npm cache clean --force || true
yarn cache clean || true

# Remove Docker images and build cache
docker system prune -af

# Show available space after cleanup
df -h
241 changes: 241 additions & 0 deletions .github/workflows/ai-runner-live-pipelines-docker.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
name: Build ai-runner live pipeline Docker images

on:
pull_request:
paths:
- "runner/docker/Dockerfile.live-*"
- "runner/app/**"
- "runner/images/**"
push:
branches:
- main
tags:
- '*'
paths:
- "runner/docker/Dockerfile.live-*"
- "runner/app/**"
- "runner/images/**"
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
build-common-base:
name: Build common live base image
permissions:
pull-requests: read
runs-on: ubuntu-20.04
steps:
- name: Check out code
uses: actions/[email protected]
with:
fetch-depth: 50
ref: ${{ github.event.pull_request.head.sha }}

- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v45
with:
files: |
runner/docker/Dockerfile.live-base

- name: Check if build needed
id: check_build
if: |
github.event_name == 'workflow_dispatch' ||
github.event_name == 'push' ||
(
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository &&
steps.changed-files.outputs.any_changed == 'true'
)
run: echo "should_build=true" >> $GITHUB_OUTPUT

- name: Cleanup hosted runner
uses: ./.github/actions/cleanup-runner
if: steps.check_build.outputs.should_build == 'true'

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.CI_DOCKERHUB_USERNAME }}
password: ${{ secrets.CI_DOCKERHUB_TOKEN }}

- name: Build and push live-base image
uses: docker/build-push-action@v5
if: steps.check_build.outputs.should_build == 'true'
with:
context: "{{defaultContext}}:runner"
platforms: linux/amd64
push: ${{ github.event_name != 'pull_request' }}
tags: livepeer/ai-runner:live-base
file: docker/Dockerfile.live-base
cache-from: type=registry,ref=livepeerci/build:cache
cache-to: type=registry,ref=livepeerci/build:cache,mode=max

build-pipeline-images:
name: Build pipeline images
needs: build-common-base
runs-on: ubuntu-20.04
permissions:
pull-requests: read
strategy:
matrix:
pipeline: [streamdiffusion, comfyui, liveportrait]
fail-fast: false
steps:
- name: Check out code
uses: actions/[email protected]
with:
fetch-depth: 50
ref: ${{ github.event.pull_request.head.sha }}

- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v45
with:
files_yaml: |
base_dockerfile:
- runner/docker/Dockerfile.live-base-${{ matrix.pipeline }}
liveportrait:
- runner/images/**
- runner/requirements-liveportrait.txt

- name: Cleanup hosted runner
uses: ./.github/actions/cleanup-runner

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.CI_DOCKERHUB_USERNAME }}
password: ${{ secrets.CI_DOCKERHUB_TOKEN }}

- name: Build and push pipeline base image
uses: docker/build-push-action@v5
if: |
github.event_name == 'workflow_dispatch' ||
github.event_name == 'push' ||
(
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository &&
(
steps.changed-files.outputs.base_dockerfile_any_changed == 'true' ||
(
matrix.pipeline == 'liveportrait' &&
steps.changed-files.outputs.liveportrait_any_changed == 'true'
)
)
)
with:
context: "{{defaultContext}}:runner"
platforms: linux/amd64
push: ${{ github.event_name != 'pull_request' }}
tags: livepeer/ai-runner:live-base-${{ matrix.pipeline }}
file: docker/Dockerfile.live-base-${{ matrix.pipeline }}
build-args: |
PIPELINE=${{ matrix.pipeline }}
cache-from: type=registry,ref=livepeerci/build:cache
cache-to: type=registry,ref=livepeerci/build:cache,mode=max

- name: Extract metadata for app image
id: meta
uses: docker/metadata-action@v5
with:
images: livepeer/ai-runner
tags: |
type=raw,value=live-app-${{ matrix.pipeline }}
type=sha,prefix=live-app-${{ matrix.pipeline }}-
type=ref,event=pr,prefix=live-app-${{ matrix.pipeline }}-
type=ref,event=tag,prefix=live-app-${{ matrix.pipeline }}-
type=raw,value=latest,enable={{is_default_branch}},prefix=live-app-${{ matrix.pipeline }}-

- name: Build and push pipeline app image
uses: docker/build-push-action@v5
with:
context: "{{defaultContext}}:runner"
platforms: linux/amd64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
file: docker/Dockerfile.live-app__PIPELINE__
build-args: |
PIPELINE=${{ matrix.pipeline }}
cache-from: type=registry,ref=livepeerci/build:cache
cache-to: type=registry,ref=livepeerci/build:cache,mode=max

build-noop:
name: Build pipeline image (noop)
needs: build-common-base
runs-on: ubuntu-20.04
permissions:
pull-requests: read
steps:
- name: Check out code
uses: actions/[email protected]
with:
fetch-depth: 50
ref: ${{ github.event.pull_request.head.sha }}

- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v45
with:
files: |
runner/docker/Dockerfile.live-app-noop
runner/app/**

- name: Check if build needed
id: check_build
if: |
github.event_name == 'workflow_dispatch' ||
github.event_name == 'push' ||
(
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository &&
steps.changed-files.outputs.any_changed == 'true'
)
run: echo "should_build=true" >> $GITHUB_OUTPUT

- name: Cleanup hosted runner
uses: ./.github/actions/cleanup-runner
if: steps.check_build.outputs.should_build == 'true'

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.CI_DOCKERHUB_USERNAME }}
password: ${{ secrets.CI_DOCKERHUB_TOKEN }}

- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: livepeer/ai-runner
tags: |
type=raw,value=live-app-noop
type=sha,prefix=live-app-noop-
type=ref,event=pr,prefix=live-app-noop-
type=ref,event=tag,prefix=live-app-noop-
type=raw,value=latest,enable={{is_default_branch}},prefix=live-app-noop-

- name: Build and push noop image
uses: docker/build-push-action@v5
if: steps.check_build.outputs.should_build == 'true'
with:
context: "{{defaultContext}}:runner"
platforms: linux/amd64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
file: docker/Dockerfile.live-app-noop
cache-from: type=registry,ref=livepeerci/build:cache
cache-to: type=registry,ref=livepeerci/build:cache,mode=max
10 changes: 2 additions & 8 deletions .github/workflows/ai-runner-pipelines-docker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
dockerfile:
dockerfile:
- docker/Dockerfile.segment_anything_2
- docker/Dockerfile.text_to_speech
steps:
Expand All @@ -42,13 +42,7 @@ jobs:
ref: ${{ github.event.pull_request.head.sha }}

- name: Cleanup hosted runner
run: |
sudo apt purge -yqq dotnet-* mono-* llvm-* libllvm* powershell* openjdk-* \
temurin-* mongodb-* firefox mysql-* \
hhvm google-chrome-stable \
libgl1-mesa-dri microsoft-edge-stable azure-cli || true
sudo apt autoremove -y
sudo rm -rf /usr/share/dotnet /usr/local/lib/android
uses: ./.github/actions/cleanup-runner

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ output
aiModels.json
models
checkpoints
runner/run-lv2v.log

# IDE
.vscode
Expand Down
5 changes: 5 additions & 0 deletions cmd/examples/image-to-image/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@ func main() {

for j, media := range resp.Images {
outputPath := path.Join(baseOutputPath, strconv.Itoa(i)+"_"+strconv.Itoa(j)+".png")
if err := os.MkdirAll(baseOutputPath, 0755); err != nil {
slog.Error("Error creating output directory", slog.String("error", err.Error()))
return
}

if err := worker.SaveImageB64DataUrl(media.Url, outputPath); err != nil {
slog.Error("Error saving b64 data url as image", slog.String("error", err.Error()))
return
Expand Down
Loading