mmdeploy/.circleci/test.yml

307 lines
11 KiB
YAML

# Use the latest 2.1 version of CircleCI pipeline process engine.
# See: https://circleci.com/docs/2.0/configuration-reference
version: 2.1
orbs:
win: circleci/windows@4.1
# the default pipeline parameters, which will be updated according to
# the results of the path-filtering orb
parameters:
lint_only:
type: boolean
default: true
executors:
ubuntu-2004-cpu:
machine:
image: ubuntu-2004:202010-01
resource_class: large
working_directory: ~
ubuntu-2004-cu114:
machine:
image: ubuntu-2004-cuda-11.4:202110-01
docker_layer_caching: true
resource_class: gpu.nvidia.medium
working_directory: ~
# MMDeploy Rules
# - In the command section, each command is requested to be os platform independent. Any command related to OS platform should be put in `scripts` folder
# - Use `python` instead of `python3` since there is no `python3` on Windows platform
# - DO NOT use `\` to break the line, as it is not identified correctly on Windows platform. So just don't break the line :)
commands:
checkout_full:
description: "Checkout mmdeploy"
steps:
- checkout:
path: mmdeploy # relative to `working_directory`
- run:
name: Checkout submodule
command: |
cd mmdeploy
git submodule sync
git submodule update --init
upgrade_pip:
steps:
- run:
name: Upgrade pip
command: python -m pip install --upgrade pip
install_pytorch:
parameters:
platform:
type: string
default: cpu
torch:
type: string
default: 1.8.0
torchvision:
type: string
default: 0.9.0
steps:
- run:
name: Install PyTorch
command: |
python -m pip install torch==<< parameters.torch >>+<< parameters.platform >> torchvision==<< parameters.torchvision >>+<< parameters.platform >> -f https://download.pytorch.org/whl/torch_stable.html
install_mmcv_cpu:
parameters:
version:
type: string
default: 1.5.0
torch:
type: string
default: 1.8.0
steps:
- run:
name: Install mmcv-full
command: |
python -m pip install opencv-python==4.5.4.60 opencv-contrib-python==4.5.4.60 opencv-python-headless==4.5.4.60
python -m pip install mmcv-full==<< parameters.version >> -f https://download.openmmlab.com/mmcv/dist/cpu/torch<< parameters.torch >>/index.html
install_mmcv_cuda:
parameters:
version:
type: string
default: 1.5.0
cuda:
type: string
default: cu111
torch:
type: string
default: 1.8.0
steps:
- run:
name: Install mmcv-full
command: |
python -m pip install opencv-python==4.5.4.60 opencv-contrib-python==4.5.4.60 opencv-python-headless==4.5.4.60
python -m pip install mmcv-full==<< parameters.version >> -f https://download.openmmlab.com/mmcv/dist/<< parameters.cuda >>/torch<< parameters.torch >>/index.html
install_mmdeploy:
description: "Install MMDeploy"
steps:
- run:
name: Install MMDeploy
command: |
cd mmdeploy
python -m pip install -v -e .
install_model_converter_req:
steps:
- run:
name: Install requirements
command: |
cd mmdeploy
python -m pip install -r requirements/codebases.txt
python -m pip install -r requirements/tests.txt
python -m pip install -r requirements/runtime.txt
python -m pip install -U numpy
cd ..
perform_model_converter_ut:
steps:
- run:
name: Perform Model Converter unittests
command: |
cd mmdeploy
coverage run --branch --source mmdeploy -m pytest -rsE tests
coverage xml
coverage report -m
cd ..
jobs:
lint:
# Specify the execution environment. You can specify an image from Dockerhub or use one of our Convenience Images from CircleCI's Developer Hub.
# See: https://circleci.com/docs/2.0/configuration-reference/#docker-machine-macos-windows-executor
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 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 80 mmdeploy
test_linux_tensorrt:
executor: ubuntu-2004-cu114
steps:
- checkout_full
- run:
name: Build docker
command: |
docker build mmdeploy/.circleci/docker/ -t mmdeploy:gpu
- run:
name: Build MMDeploy
command: |
docker run --gpus all -t -d -v /home/circleci/project/:/project -w /project --name mmdeploy mmdeploy:gpu
docker exec mmdeploy bash mmdeploy/.circleci/scripts/linux/build.sh cuda trt -Dpplcv_DIR=/workspace/ppl.cv/cuda-build/install/lib/cmake/ppl
- run:
name: Install MMDeploy
# https://stackoverflow.com/questions/28037802/docker-exec-failed-cd-executable-file-not-found-in-path
command: |
docker exec -i mmdeploy bash -c "cd mmdeploy && pip install -v -e ."
- run:
name: Install requirements
command: |
docker exec mmdeploy pip install onnxruntime==1.8.1
docker exec mmdeploy pip install -r mmdeploy/requirements/codebases.txt
docker exec mmdeploy pip install -r mmdeploy/requirements/tests.txt
docker exec mmdeploy pip install -r mmdeploy/requirements/runtime.txt
docker exec mmdeploy pip install -U numpy
- run:
name: Perform Model Converter unittests
command: |
docker exec -i mmdeploy bash -c "cd mmdeploy && coverage run --branch --source mmdeploy -m pytest -rsE tests && coverage xml && coverage report -m"
- run:
name: Run SDK unittests
command: |
docker exec mmdeploy mkdir -p mmdeploy_test_resources/transform
docker exec mmdeploy cp mmdeploy/demo/resources/human-pose.jpg mmdeploy_test_resources/transform
docker exec mmdeploy ./mmdeploy/build/bin/mmdeploy_tests
test_windows_onnxruntime:
parameters:
version:
type: string
default: 1.8.1
executor:
name: win/default
steps:
- checkout_full
- upgrade_pip
- install_pytorch
- install_mmcv_cpu
- run:
name: Install ONNX Runtime
command: mmdeploy/.circleci/scripts/windows/install_onnxruntime.ps1 cpu << parameters.version >>
- run:
name: Install OpenCV
command: mmdeploy/.circleci/scripts/windows/install_opencv.ps1
- run:
name: Build MMDeploy
command: |
$env:path = "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;" + $env:path
$env:ONNXRUNTIME_DIR = "$pwd\onnxruntime"
$env:OPENCV_PACKAGE_DIR = "$(pwd)\opencv"
$env:MMDEPLOY_DIR = "$(pwd)\mmdeploy"
cd mmdeploy
mkdir build -ErrorAction SilentlyContinue
cd build
cmake .. -G "Visual Studio 16 2019" -A x64 -T v142 `
-DCMAKE_SYSTEM_VERSION="10.0.18362.0" `
-DMMDEPLOY_BUILD_SDK=ON `
-DMMDEPLOY_BUILD_TEST=ON `
-DMMDEPLOY_BUILD_SDK_PYTHON_API=ON `
-DMMDEPLOY_BUILD_EXAMPLES=ON `
-DMMDEPLOY_BUILD_SDK_CSHARP_API=ON `
-DMMDEPLOY_TARGET_BACKENDS="ort" `
-DOpenCV_DIR="$env:OPENCV_PACKAGE_DIR"
cmake --build . --config Release -- /m
cmake --install . --config Release
- install_mmdeploy
- install_model_converter_req
- perform_model_converter_ut
- run:
name: Perform SDK Unittests
command: |
$env:path = "$(pwd)\onnxruntime\lib;" + $env:path
$env:path = "$(pwd)\opencv\x64\vc16\bin;" + $env:path
mkdir mmdeploy_test_resources\transform
cp .\mmdeploy\demo\resources\human-pose.jpg mmdeploy_test_resources\transform
.\mmdeploy\build\bin\Release\mmdeploy_tests.exe
test_linux_onnxruntime:
parameters:
version:
type: string
default: 1.8.1
executor: ubuntu-2004-cpu
steps:
- checkout_full
- run:
name: Re-install Python
command: bash mmdeploy/.circleci/scripts/linux/install_python.sh
- upgrade_pip
- install_pytorch
- install_mmcv_cpu
- run:
name: Install ONNX Runtime
command: bash mmdeploy/.circleci/scripts/linux/install_onnxruntime.sh cpu << parameters.version >>
- run:
name: Build MMDeploy
command: |
sudo apt-get update
sudo apt-get install libopencv-dev libpython3.8 python3.8-dev
bash mmdeploy/.circleci/scripts/linux/build.sh cpu ort
- install_mmdeploy
- install_model_converter_req
- perform_model_converter_ut
- run:
name: Perform SDK unittests
command: |
mkdir -p mmdeploy_test_resources/transform
cp -rf ./mmdeploy/demo/resources/human-pose.jpg mmdeploy_test_resources/transform
./mmdeploy/build/bin/mmdeploy_tests
- run:
name: Convert model
command: |
bash mmdeploy/.circleci/scripts/linux/convert_onnxruntime.sh mmcls mmdeploy-models/mmcls/onnxruntime
- run:
name: Inference model by SDK
command: |
./mmdeploy/build/bin/image_classification cpu mmdeploy-models/mmcls/onnxruntime mmclassification/demo/demo.JPEG
# See: https://circleci.com/docs/2.0/configuration-reference/#workflows
workflows:
pr_stage_lint:
when: << pipeline.parameters.lint_only >>
jobs:
- lint
pr_stage_test:
when:
not:
<< pipeline.parameters.lint_only >>
jobs:
- lint
- test_linux_onnxruntime:
version: 1.8.1
requires:
- lint
- test_windows_onnxruntime:
version: 1.8.1
requires:
- lint
- hold:
type: approval
requires:
- test_linux_onnxruntime
- test_windows_onnxruntime
- test_linux_tensorrt:
requires:
- hold