From 00700d570f21c6a4106f86596e45c06106f786b2 Mon Sep 17 00:00:00 2001 From: Ma Zerun Date: Tue, 30 Nov 2021 14:22:02 +0800 Subject: [PATCH] [CI] Use CircleCI to do unit tests. (#567) * Add .circleci/config.yml * Use new markdown lint --- .circleci/config.yml | 239 ++++++++++++++++++++++++++++++++++++++++ .pre-commit-config.yaml | 4 +- 2 files changed, 241 insertions(+), 2 deletions(-) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..498fd3722 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,239 @@ +# Use the latest 2.1 version of CircleCI pipeline process engine. +# See: https://circleci.com/docs/2.0/configuration-reference +version: 2.1 + +# Define a job to be invoked later in a workflow. +# See: https://circleci.com/docs/2.0/configuration-reference/#jobs +jobs: + lint: + docker: + - image: cimg/python:3.7.4 + # Add steps to the job + # See: https://circleci.com/docs/2.0/configuration-reference/#steps + steps: + - checkout + - run: + name: Install dependencies + command: | + sudo apt-add-repository ppa:brightbox/ruby-ng -y + sudo apt-get update + sudo apt-get install -y ruby2.7 + - run: + name: Install pre-commit hook + command: | + pip install pre-commit + pre-commit install + - run: + name: Linting + command: pre-commit run --all-files + - run: + name: Check docstring coverage + command: | + pip install interrogate + interrogate -v --ignore-init-method --ignore-module --ignore-nested-functions --ignore-regex "__repr__" --fail-under 40 mmcls + build: + parameters: + # The python version must match available image tags in + # https://circleci.com/developer/images/image/cimg/python + python: + type: string + default: "3.6.15" + torch: + type: string + torchvision: + type: string + env: + type: string + default: "" + docker: + - image: cimg/python:<< parameters.python >> + resource_class: large + steps: + - checkout + - run: + name: Install Libraries + command: | + sudo apt-get update + sudo apt-get install -y libjpeg8-dev zlib1g-dev + - run: + name: Configure Python & pip + command: | + python -m pip install --upgrade pip + python -m pip install wheel + - run: + name: Install PyTorch + command: | + python -V + python -m pip install torch==<< parameters.torch >>+cpu torchvision==<< parameters.torchvision >>+cpu -f https://download.pytorch.org/whl/torch_stable.html + - run: + name: Install mmcls dependencies + command: | + python -m pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cpu/torch<< parameters.torch >>/index.html + python -m pip install -r requirements.txt + - run: + name: Build and install + command: | + python -m pip install -e . + - run: + name: Run unittests + command: | + << parameters.env >> python -m pytest tests/ --ignore tests/test_models/test_backbones/test_timm_backbone.py + + build_with_cuda: + machine: + image: ubuntu-1604-cuda-10.1:201909-23 + resource_class: gpu.nvidia.small + steps: + - checkout + # - run: + # name: Install Libraries + # command: | + # sudo apt-get update + # sudo apt-get install -y libjpeg8-dev zlib1g-dev + - run: + name: Configure Python & pip + command: | + pyenv global 3.7.0 + python -m pip install --upgrade pip + python -m pip install wheel + - run: + name: Install PyTorch + command: | + python -V + python -m pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html + - run: + name: Install mmcls dependencies + command: | + python -m pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html + python -m pip install -r requirements.txt + - run: + name: Build and install + command: | + python setup.py check -m -s + TORCH_CUDA_ARCH_LIST=7.0 python -m pip install -e . + - run: + name: Run unittests + command: | + python -m pytest tests/ --ignore tests/test_models/test_backbones/test_timm_backbone.py + + build_with_timm: + parameters: + # The python version must match available image tags in + # https://circleci.com/developer/images/image/cimg/python + python: + type: string + default: "3.7.12" + torch: + type: string + default: "1.10.0" + torchvision: + type: string + default: "0.11.1" + docker: + - image: cimg/python:<< parameters.python >> + resource_class: large + steps: + - checkout + - run: + name: Install Libraries + command: | + sudo apt-get update + sudo apt-get install -y libjpeg8-dev zlib1g-dev + - run: + name: Configure Python & pip + command: | + python -m pip install --upgrade pip + python -m pip install wheel + - run: + name: Install PyTorch + command: | + python -V + python -m pip install torch==<< parameters.torch >>+cpu torchvision==<< parameters.torchvision >>+cpu -f https://download.pytorch.org/whl/torch_stable.html + - run: + name: Install mmcls dependencies + command: | + python -m pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cpu/torch<< parameters.torch >>/index.html + python -m pip install -r requirements.txt + - run: + name: Install TIMM + command: | + pip install timm + - run: + name: Build and install + command: | + python -m pip install -e . + - run: + name: Run unittests + command: | + python -m coverage run --branch --source mmcls -m pytest tests/ + python -m coverage xml + python -m coverage report -m + +# Invoke jobs via workflows +# See: https://circleci.com/docs/2.0/configuration-reference/#workflows +workflows: + unit_tests: + jobs: + - lint + - build_with_timm: + name: build_with_timm + requires: + - lint + - build: + name: build_py36_torch1.5 + torch: 1.5.0 + torchvision: 0.6.0 + # To fix memory leak in torch1.5+cpu, refers to pytorch#32037 + env: LRU_CACHE_CAPACITY=1 + requires: + - lint + - build: + name: build_py36_torch1.6 + torch: 1.6.0 + torchvision: 0.7.0 + requires: + - lint + - build: + name: build_py36_torch1.7 + torch: 1.7.0 + torchvision: 0.8.1 + requires: + - lint + - build: + name: build_py36_torch1.8 + torch: 1.8.0 + torchvision: 0.9.0 + requires: + - lint + - build: + name: build_py39_torch1.8 + torch: 1.8.0 + torchvision: 0.9.0 + python: "3.9.0" + requires: + - lint + - build: + name: build_py39_torch1.9 + torch: 1.9.0 + torchvision: 0.10.0 + python: "3.9.0" + requires: + - lint + - build: + name: build_py39_torch1.10 + torch: 1.10.0 + torchvision: 0.11.1 + python: "3.9.0" + requires: + - lint + - build_with_cuda: + name: build_py36_torch1.6_cu101 + requires: + - build_with_timm + - build_py36_torch1.5 + - build_py36_torch1.6 + - build_py36_torch1.7 + - build_py36_torch1.8 + - build_py39_torch1.8 + - build_py39_torch1.9 + - build_py39_torch1.10 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 19e9f8d48..56e66cc15 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,8 +29,8 @@ repos: args: ["--remove"] - id: mixed-line-ending args: ["--fix=lf"] - - repo: https://github.com/jumanjihouse/pre-commit-hooks - rev: 2.1.4 + - repo: https://github.com/markdownlint/markdownlint + rev: v0.11.0 hooks: - id: markdownlint args: ["-r", "~MD002,~MD013,~MD029,~MD033,~MD034",