# Python CircleCI 2.0 configuration file # # Check https://circleci.com/docs/2.0/language-python/ for more details # version: 2 # ------------------------------------------------------------------------------------- # Environments to run the jobs in # ------------------------------------------------------------------------------------- cpu: &cpu docker: - image: circleci/python:3.6.8-stretch resource_class: medium gpu: &gpu machine: image: ubuntu-1604:201903-01 docker_layer_caching: true resource_class: gpu.small # ------------------------------------------------------------------------------------- # Re-usable commands # ------------------------------------------------------------------------------------- install_python: &install_python - run: name: Install Python working_directory: ~/ command: | pyenv install 3.6.1 pyenv global 3.6.1 setup_venv: &setup_venv - run: name: Setup Virtual Env working_directory: ~/ command: | python -m venv ~/venv echo ". ~/venv/bin/activate" >> $BASH_ENV . ~/venv/bin/activate python --version which python which pip pip install --upgrade pip install_dep: &install_dep - run: name: Install Dependencies command: | pip install --progress-bar off -U 'git+https://github.com/facebookresearch/fvcore' pip install --progress-bar off cython opencv-python pip install --progress-bar off 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI' pip install --progress-bar off torch torchvision install_detectron2: &install_detectron2 - run: name: Install Detectron2 command: | gcc --version pip install -U --progress-bar off -e .[dev] python -m detectron2.utils.collect_env install_nvidia_driver: &install_nvidia_driver - run: name: Install nvidia driver working_directory: ~/ command: | wget -q 'https://s3.amazonaws.com/ossci-linux/nvidia_driver/NVIDIA-Linux-x86_64-430.40.run' sudo /bin/bash ./NVIDIA-Linux-x86_64-430.40.run -s --no-drm nvidia-smi run_unittests: &run_unittests - run: name: Run Unit Tests command: | python -m unittest discover -v -s tests # ------------------------------------------------------------------------------------- # Jobs to run # ------------------------------------------------------------------------------------- jobs: cpu_tests: <<: *cpu working_directory: ~/detectron2 steps: - checkout - <<: *setup_venv # Cache the venv directory that contains dependencies - restore_cache: keys: - cache-key-{{ .Branch }}-ID-20200425 - <<: *install_dep - save_cache: paths: - ~/venv key: cache-key-{{ .Branch }}-ID-20200425 - <<: *install_detectron2 - run: name: isort command: | isort -c -sp . - run: name: black command: | black --check -l 100 . - run: name: flake8 command: | flake8 . - <<: *run_unittests gpu_tests: <<: *gpu working_directory: ~/detectron2 steps: - checkout - <<: *install_nvidia_driver - run: name: Install nvidia-docker working_directory: ~/ command: | curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update && sudo apt-get install -y nvidia-docker2 # reload the docker daemon configuration sudo pkill -SIGHUP dockerd - run: name: Launch docker working_directory: ~/detectron2/docker command: | nvidia-docker build -t detectron2:v0 -f Dockerfile-circleci . nvidia-docker run -itd --name d2 detectron2:v0 docker exec -it d2 nvidia-smi - run: name: Build Detectron2 command: | docker exec -it d2 pip install 'git+https://github.com/facebookresearch/fvcore' docker cp ~/detectron2 d2:/detectron2 # This will build d2 for the target GPU arch only docker exec -it d2 pip install -e /detectron2 docker exec -it d2 python3 -m detectron2.utils.collect_env docker exec -it d2 python3 -c 'import torch; assert(torch.cuda.is_available())' - run: name: Run Unit Tests command: | docker exec -e CIRCLECI=true -it d2 python3 -m unittest discover -v -s /detectron2/tests workflows: version: 2 regular_test: jobs: - cpu_tests - gpu_tests #nightly_test: #jobs: #- gpu_tests #triggers: #- schedule: #cron: "0 0 * * *" #filters: #branches: #only: #- master