Skip to content

Initialize CI for code quality and testing #256

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

Merged
merged 11 commits into from
Aug 26, 2022
Merged
Show file tree
Hide file tree
Changes from 5 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
29 changes: 29 additions & 0 deletions .github/workflows/pr_quality.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Run code quality checks

on:
pull_request:
branches:
- main
push:
branches:
- main

jobs:
check_code_quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.7"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install .[quality]
- name: Check quality
run: |
black --check --preview examples tests src utils scripts
isort --check-only examples tests src utils scripts
flake8 examples tests src utils scripts
doc-builder style src/diffusers docs/source --max_len 119 --check_only --path_to_docs docs/source
39 changes: 39 additions & 0 deletions .github/workflows/pr_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Run non-slow tests

on:
pull_request:
branches:
- main

env:
HF_HOME: /mnt/cache
OMP_NUM_THREADS: 8
MKL_NUM_THREADS: 8
PYTEST_TIMEOUT: 60

jobs:
run_tests_single_gpu:
name: Diffusers tests
strategy:
fail-fast: false
matrix:
machine_type: [ single-gpu ]
runs-on: [ self-hosted, docker-gpu, '${{ matrix.machine_type }}' ]
container:
image: nvcr.io/nvidia/pytorch:22.07-py3
Copy link
Contributor

Choose a reason for hiding this comment

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

wonder whether it might be easier to here just use pip install torch? Like in https://github.com/huggingface/transformers/blob/62ceb4d661ce644ee9377ac8053cbb9afa737125/.circleci/config.yml#L126

Copy link
Contributor

@patrickvonplaten patrickvonplaten Aug 26, 2022

Choose a reason for hiding this comment

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

Or maybe even easier we define a pip install . [dev] where we could easily add 'jax' in the future?
https://github.com/huggingface/transformers/blob/62ceb4d661ce644ee9377ac8053cbb9afa737125/.github/workflows/add-model-like.yml#L37

It's also arguably a bit easier to debug, e.g. I could just ssh into it, do pip installs instead of having to pull a docker and then having to work in the docker shell

Copy link
Contributor

Choose a reason for hiding this comment

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

But no expert here, just wonder if nvidia/pytorch docker is the best environment to test pytorch (+ potentially jax in the future) for CPU

Copy link
Contributor

Choose a reason for hiding this comment

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

Also maybe I'd set up a new CPU machine (they're cheap) so that we can easier disentangle CPU and GPU?
Overall I'm no testing expert here, so just a couple of thoughts - feel free to proceed however you like best (and how it's most efficient for you to debug things going forward)

Copy link
Member Author

Choose a reason for hiding this comment

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

Agreed, let's start with a bare minimum "python:3.7" image and set up the frameworks on top for better environment control.
Ideally we'll need a custom image with torch and flax preinstalled (to avoid waiting for them to install on each run), but for now installing them from scratch is good enough.

Will test it now

Copy link
Member Author

Choose a reason for hiding this comment

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

Ok, I take that back, our cloud network speeds are crazy fast, will use python:3.7 for CPU tests from now on 🎉

Copy link
Contributor

Choose a reason for hiding this comment

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

I guess main here means the opened PR want to be merge into main?

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes, correct

options: --shm-size "16gb" --ipc host -v /mnt/cache/.cache/huggingface:/mnt/cache/

steps:
- name: Checkout diffusers
uses: actions/checkout@v3
with:
fetch-depth: 2

- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e .[quality,test]

- name: Run all non-slow selected tests on CPU
run: |
python -m pytest -n 2 --max-worker-restart=0 --dist=loadfile -s
45 changes: 45 additions & 0 deletions .github/workflows/push_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Run all tests

on:
push:
branches:
- main

env:
HF_HOME: /mnt/cache
OMP_NUM_THREADS: 8
MKL_NUM_THREADS: 8
PYTEST_TIMEOUT: 180
RUN_SLOW: yes

jobs:
run_tests_single_gpu:
name: Diffusers tests
strategy:
fail-fast: false
matrix:
machine_type: [ single-gpu ]
runs-on: [ self-hosted, docker-gpu, '${{ matrix.machine_type }}' ]
container:
image: nvcr.io/nvidia/pytorch:22.07-py3
Copy link
Contributor

Choose a reason for hiding this comment

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

Do you know which PyTorch version this is? Couldn't really find it here: https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch

Copy link
Member Author

Choose a reason for hiding this comment

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

PyTorch Version 1.13.0a0+08820cb
Looks like all nvidia images are built from sources, so there are no stable versions. Although I can downgrade to pytorch:22.05-py3 with PyTorch Version 1.12.0a0+8a1a93a

Copy link
Contributor

Choose a reason for hiding this comment

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

I think Yeah PyTorch 1.13 is nightly-build or from source so I think PyTorch 1.12 would be the better choice here. In Transformers we automatically update the docker, but I think this is a bit too much here for now. Maybe let's better just do it manually in the beginning.

Copy link
Contributor

Choose a reason for hiding this comment

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

In transformers, it's always the latest stable release PyTorch, unlesee it breaks something (and we pin the previous one for a while).

options: --gpus 0 --shm-size "16gb" --ipc host -v /mnt/cache/.cache/huggingface:/mnt/cache/

steps:
- name: Checkout diffusers
uses: actions/checkout@v3
with:
fetch-depth: 2

- name: NVIDIA-SMI
run: |
nvidia-smi

- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e .[quality,test]
python -m pip install scipy transformers

- name: Run all (incl. slow) tests on GPU
run: |
python -m pytest -n 2 --max-worker-restart=0 --dist=loadfile -s
38 changes: 0 additions & 38 deletions .github/workflows/test.yml

This file was deleted.

6 changes: 4 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@
"modelcards==0.1.4",
"numpy",
"pytest",
"pytest-timeout",
"pytest-xdist",
"regex!=2019.12.17",
"requests",
"tensorboard",
Expand Down Expand Up @@ -163,10 +165,10 @@ def run(self):


extras = {}
extras["quality"] = ["black==22.3", "isort >= 5.5.4", "flake8 >= 3.8.3"]
extras["quality"] = ["black==22.3", "isort>=5.5.4", "flake8>=3.8.3", "hf-doc-builder"]
extras["docs"] = ["hf-doc-builder"]
extras["training"] = ["accelerate", "datasets", "tensorboard", "modelcards"]
extras["test"] = ["pytest"]
extras["test"] = ["pytest", "pytest-timeout", "pytest-xdist"]
extras["dev"] = extras["quality"] + extras["test"] + extras["training"] + extras["docs"]

install_requires = [
Expand Down
2 changes: 2 additions & 0 deletions src/diffusers/dependency_versions_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
"modelcards": "modelcards==0.1.4",
"numpy": "numpy",
"pytest": "pytest",
"pytest-timeout": "pytest-timeout",
"pytest-xdist": "pytest-xdist",
"regex": "regex!=2019.12.17",
"requests": "requests",
"tensorboard": "tensorboard",
Expand Down