Clean CPU examples #1340
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [ "master" ] | |
pull_request: | |
branches: [ "master" ] | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
PYTHON_VERSION: "3.10" | |
BART_VERSION: "0.8.00" | |
ref_backend: "finufft" | |
jobs: | |
test-cpu: | |
runs-on: cpu | |
if: ${{ !contains(github.event.head_commit.message, '!style') || github.ref == 'refs/heads/master' }} | |
strategy: | |
matrix: | |
backend: [finufft, pynfft, pynufft-cpu, bart, sigpy, torchkbnufft-cpu] | |
exclude: | |
- backend: bart | |
- backend: pynufft-cpu | |
- backend: torchkbnufft-cpu | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python 3.10 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- name: Install Dependencies | |
shell: bash | |
run: | | |
python --version | |
- name: Install Python Deps | |
shell: bash | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install -e .[test] | |
- name: Install pynfft | |
if: ${{ matrix.backend == 'pynfft' || env.ref_backend == 'pynfft' }} | |
shell: bash | |
run: | | |
python -m pip install "pynfft2>=1.4.3" | |
- name: Install pynufft | |
if: ${{ matrix.backend == 'pynufft-cpu' || env.ref_backend == 'pynufft-cpu' }} | |
run: python -m pip install pynufft | |
- name: Install finufft | |
if: ${{ matrix.backend == 'finufft' || env.ref_backend == 'finufft'}} | |
shell: bash | |
run: python -m pip install finufft | |
- name: Install Sigpy | |
if: ${{ matrix.backend == 'sigpy' || env.ref_backend == 'sigpy'}} | |
shell: bash | |
run: python -m pip install sigpy | |
- name: Install BART | |
if: ${{ matrix.backend == 'bart' || env.ref_backend == 'bart'}} | |
shell: bash | |
run: | | |
cd $RUNNER_WORKSPACE | |
sudo apt-get install make gcc libfftw3-dev liblapacke-dev libpng-dev libopenblas-dev | |
wget https://github.com/mrirecon/bart/archive/v${{ env.BART_VERSION }}.tar.gz | |
tar xzvf v${{ env.BART_VERSION }}.tar.gz | |
cd bart-${{ env.BART_VERSION }} | |
make | |
echo $PWD >> $GITHUB_PATH | |
- name: Install torchkbnufft-cpu | |
if: ${{ matrix.backend == 'torchkbnufft-cpu' || env.ref_backend == 'torchkbnufft-cpu'}} | |
run: python -m pip install torchkbnufft | |
- name: Run Tests | |
shell: bash | |
run: | | |
export COVERAGE_FILE=coverage_${{ matrix.backend }} | |
pytest -k='operators' --backend ${{ matrix.backend }} --ref ${{ env.ref_backend }} --cov --disable-pytest-warnings --cov-branch --cov-report=term | |
- name: Upload coverage | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage_${{ matrix.backend }} | |
path: coverage_${{ matrix.backend }} | |
test-gpu: | |
runs-on: gpu | |
if: ${{ !contains(github.event.head_commit.message, '!style') || github.ref == 'refs/heads/master' }} | |
strategy: | |
matrix: | |
backend: [cufinufft, gpunufft, torchkbnufft-gpu, tensorflow] | |
exclude: | |
# There is an issue with tensorflow and cupy. This was working. See #156 | |
- backend: tensorflow | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install mri-nufft and finufft | |
shell: bash | |
run: | | |
cd $RUNNER_WORKSPACE | |
python --version | |
python -m venv venv | |
source $RUNNER_WORKSPACE/venv/bin/activate | |
pip install --upgrade pip wheel | |
pip install -e mri-nufft[test] | |
pip install cupy-cuda12x finufft "numpy<2.0" | |
- name: Install torch with CUDA 12.1 | |
shell: bash | |
if: ${{ matrix.backend != 'tensorflow'}} | |
run: | | |
source $RUNNER_WORKSPACE/venv/bin/activate | |
pip install torch | |
- name: Install backend | |
shell: bash | |
run: | | |
source $RUNNER_WORKSPACE/venv/bin/activate | |
export CUDA_BIN_PATH=/usr/local/cuda-12.1/ | |
export PATH=/usr/local/cuda-12.1/bin/:${PATH} | |
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64/:${LD_LIBRARY_PATH} | |
if [[ ${{ matrix.backend }} == "torchkbnufft-gpu" ]]; then | |
pip install torchkbnufft | |
elif [[ ${{ matrix.backend }} == "tensorflow" ]]; then | |
pip install tensorflow-mri==0.21.0 tensorflow-probability==0.17.0 tensorflow-io==0.27.0 matplotlib==3.7 | |
elif [[ ${{ matrix.backend }} == "cufinufft" ]]; then | |
pip install "cufinufft<2.3" | |
else | |
pip install ${{ matrix.backend }} | |
fi | |
- name: Run Tests | |
shell: bash | |
run: | | |
cd $RUNNER_WORKSPACE/mri-nufft | |
source $RUNNER_WORKSPACE/venv/bin/activate | |
export COVERAGE_FILE=coverage_${{ matrix.backend }} | |
python -m pytest -k='operators' --ref ${{ env.ref_backend }} --backend ${{ matrix.backend }} --disable-pytest-warnings --cov --cov-branch --cov-report=term | |
- name: Upload coverage | |
if: success() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage_${{ matrix.backend }} | |
path: coverage_${{ matrix.backend }} | |
- name: Cleanup | |
if: always() | |
shell: bash | |
run: | | |
cd $RUNNER_WORKSPACE | |
ls -al | |
rm -rf finufft | |
rm -rf gpuNUFFT | |
rm -rf venv | |
get-commit-message: | |
runs-on: ubuntu-latest | |
outputs: | |
message: ${{ steps.get_commit_message.outputs.message }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Get commit message | |
id: get_commit_message | |
run: | | |
COMMIT_MESSAGE=$(git log -1 --pretty=%B) | |
echo "Commit message $COMMIT_MESSAGE" | |
echo "::set-output name=message::$COMMIT_MESSAGE" | |
test-examples: | |
runs-on: gpu | |
needs: get-commit-message | |
if: ${{ !contains(needs.get-commit-message.outputs.message, '!style') || github.ref == 'refs/heads/master' }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python 3.10 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- name: Restore cached brainweb-dl directory | |
uses: actions/cache/restore@v4 | |
id: cache-restore | |
with: | |
path: ~/.cache/brainweb | |
key: ${{ runner.os }}-Brainweb | |
- name: Install Python deps | |
shell: bash | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install -e .[test,dev] | |
python -m pip install finufft pooch brainweb-dl torch | |
- name: Install GPU related interfaces | |
run: | | |
export CUDA_BIN_PATH=/usr/local/cuda-12.1/ | |
export PATH=/usr/local/cuda-12.1/bin/:${PATH} | |
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64/:${LD_LIBRARY_PATH} | |
pip install cupy-cuda12x torch | |
python -m pip install gpuNUFFT "cufinufft<2.3" sigpy scikit-image | |
- name: Run examples | |
shell: bash | |
run: | | |
export COVERAGE_FILE=coverage_plots | |
pytest examples tests -k="not operators" --cov --cov-branch --cov-report=term | |
- name: Cache brainweb-dl directory | |
uses: actions/cache/save@v4 | |
if: ${{ steps.cache-restore.outputs.cache-hit != 'true' }} | |
with: | |
path: ~/.cache/brainweb | |
key: ${{ runner.os }}-Brainweb | |
- name: Upload coverage | |
if: success() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage_plots | |
path: coverage_plots | |
coverage: | |
runs-on: ubuntu-latest | |
needs: [test-cpu, test-gpu, test-examples] | |
if: ${{ always() }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Collect Coverages | |
uses: actions/download-artifact@v4 | |
with: | |
path: coverage_data | |
pattern: coverage_* | |
merge-multiple: true | |
- name: Set up Python 3.10 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- name: add the coverage tool | |
shell: bash | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install coverage[toml] | |
python -m pip install -e . | |
- name: Combine coverage | |
run: | | |
export COVERAGE_FILE=coverage_combined | |
coverage combine -a coverage_data/* | |
- name: Upload Combined coverage | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage_combined | |
path: coverage_combined | |
- name: Reports | |
run: | | |
export COVERAGE_FILE=coverage_combined | |
coverage xml | |
coverage report | |
echo COVERAGE_PERC=$(coverage report | tail -n 1 | grep -oE [0-9\.]*?% | cut -d '%' -f1) >> $GITHUB_ENV | |
- name: Create a Coverage Badge | |
if: ${{github.event_name == 'push'}} | |
run: | | |
wget https://img.shields.io/badge/coverage-${{env.COVERAGE_PERC}}%25-green -O coverage_badge.svg | |
- name: Upload badge as artifact | |
if: ${{github.event_name == 'push'}} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage_badge | |
path: coverage_badge.svg | |
BuildDocs: | |
name: Build API Documentation | |
runs-on: gpu | |
needs: get-commit-message | |
if: ${{ contains(needs.get-commit-message.outputs.message, '!docs_build') || github.ref == 'refs/heads/master' }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Get history and tags for SCM versioning to work | |
run: | | |
git fetch --prune --unshallow | |
git fetch --depth=1 origin +refs/tags/*:refs/tags/* | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.10" | |
- name: Install dependencies | |
shell: bash -l {0} | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install .[doc] | |
python -m pip install finufft | |
- name: Install GPU related interfaces | |
run: | | |
export CUDA_BIN_PATH=/usr/local/cuda-12.1/ | |
export PATH=/usr/local/cuda-12.1/bin/:${PATH} | |
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64/:${LD_LIBRARY_PATH} | |
pip install cupy-cuda12x torch | |
python -m pip install gpuNUFFT "cufinufft<2.3" | |
- name: Build API documentation | |
run: | | |
python -m sphinx docs docs_build | |
- name: Display data | |
run: ls -R | |
working-directory: docs_build/_static | |
- name: Upload artifact | |
id: artifact-upload-step | |
uses: actions/upload-artifact@v4 | |
with: | |
# Upload the docs | |
name: docs | |
path: 'docs_build' | |
retention-days: 5 | |
CompileDocs: | |
name: Compile the coverage badge in docs | |
runs-on: ubuntu-latest | |
if: ${{ github.ref == 'refs/heads/master' }} | |
needs: [BuildDocs, coverage] | |
steps: | |
- name: Get the docs_build artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: docs | |
path: docs_build | |
overwrite: true | |
- name: Get the badge from CI | |
uses: actions/download-artifact@v4 | |
with: | |
name: coverage_badge | |
path: docs_build/_static | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: ReUpload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: docs_final | |
retention-days: 20 | |
path: docs_build |