diff --git a/.github/workflows/pr_quality.yml b/.github/workflows/pr_quality.yml new file mode 100644 index 00000000..5fa8cda3 --- /dev/null +++ b/.github/workflows/pr_quality.yml @@ -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 diff --git a/.github/workflows/pr_tests.yml b/.github/workflows/pr_tests.yml new file mode 100644 index 00000000..9dbbe4a4 --- /dev/null +++ b/.github/workflows/pr_tests.yml @@ -0,0 +1,40 @@ +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_cpu: + name: Diffusers tests + runs-on: [ self-hosted, docker-gpu ] + container: + image: python:3.7 + 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 torch --extra-index-url https://download.pytorch.org/whl/cpu + python -m pip install -e .[quality,test] + + - name: Environment + run: | + python utils/print_env.py + + - name: Run all non-slow selected tests on CPU + run: | + python -m pytest -n 2 --max-worker-restart=0 --dist=loadfile -s tests/ diff --git a/.github/workflows/push_tests.yml b/.github/workflows/push_tests.yml new file mode 100644 index 00000000..68fe1f0d --- /dev/null +++ b/.github/workflows/push_tests.yml @@ -0,0 +1,51 @@ +name: Run all tests + +on: + push: + branches: + - main + +env: + HF_HOME: /mnt/cache + OMP_NUM_THREADS: 8 + MKL_NUM_THREADS: 8 + PYTEST_TIMEOUT: 1000 + 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 + 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 uninstall -y torch torchvision torchtext + python -m pip install torch --extra-index-url https://download.pytorch.org/whl/cu116 + python -m pip install -e .[quality,test] + python -m pip install scipy transformers + + - name: Environment + run: | + python utils/print_env.py + + - name: Run all (incl. slow) tests on GPU + run: | + python -m pytest -n 2 --max-worker-restart=0 --dist=loadfile -s tests/ diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 52e36fe8..00000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Run Tests - -on: - push: - branches: [ $default-branch ] - pull_request: - branches: [ $default-branch ] - -jobs: - build: - - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - python-version: ["3.8", "3.9", "3.10"] - - steps: - - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' # caching pip dependencies - - name: Install dependencies - run: | - python -m pip install --upgrade pip - python -m pip install flake8 pytest - python -m pip install -e . - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest - run: | - pytest diff --git a/setup.py b/setup.py index 20057a18..5c39e3bc 100644 --- a/setup.py +++ b/setup.py @@ -89,6 +89,8 @@ _deps = [ "modelcards==0.1.4", "numpy", "pytest", + "pytest-timeout", + "pytest-xdist", "regex!=2019.12.17", "requests", "tensorboard", @@ -163,10 +165,10 @@ extras = {} 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 = [ diff --git a/src/diffusers/dependency_versions_table.py b/src/diffusers/dependency_versions_table.py index 1219af52..3c67d01d 100644 --- a/src/diffusers/dependency_versions_table.py +++ b/src/diffusers/dependency_versions_table.py @@ -15,6 +15,8 @@ deps = { "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", diff --git a/utils/print_env.py b/utils/print_env.py new file mode 100644 index 00000000..c1415548 --- /dev/null +++ b/utils/print_env.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 + +# coding=utf-8 +# Copyright 2022 The HuggingFace Inc. team. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# this script dumps information about the environment + +import os +import platform +import sys + + +os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" + +print("Python version:", sys.version) + +print("OS platform:", platform.platform()) +print("OS architecture:", platform.machine()) + +try: + import torch + + print("Torch version:", torch.__version__) + print("Cuda available:", torch.cuda.is_available()) + print("Cuda version:", torch.version.cuda) + print("CuDNN version:", torch.backends.cudnn.version()) + print("Number of GPUs available:", torch.cuda.device_count()) +except ImportError: + print("Torch version:", None) + +try: + import transformers + + print("transformers version:", transformers.__version__) +except ImportError: + print("transformers version:", None)