Skip to content

feat: add benchmark #405

feat: add benchmark

feat: add benchmark #405

Workflow file for this run

name: CI
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
env:
PYTHON_VERSION: "3.10"
BART_VERSION: "0.8.00"
jobs:
linter-check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Black setup
shell: bash
run: pip install black ruff
- name: Black Check
shell: bash
run: black . --diff --color --check
- name: ruff Check
shell: bash
run: ruff src
test-cpu:
runs-on: ubuntu-latest
needs: linter-check
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: |
sudo apt install -y libnfft3-dev
python --version
python -m pip install --upgrade pip
python -m pip install -e .[test]
- name: Install CPU Backends
shell: bash
run: |
python -m pip install finufft pynfft2 "cython<3.0.0" sigpy
- name: Install 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/vX.Y.ZZ.tar.gz
tar xzvf v{{env.BART_VERSION}.tar.gz
cd bart-{{env.BART_VERSION}}
make
- name: Run Tests
shell: bash
run: |
coverage run -m pytest -n auto -v
coverage report
- name: Upload coverage
uses: actions/upload-artifact@v3
with:
name: coverage-cpu-${{ github.sha }}
path: .coverage
#https://stackoverflow.com/a/74411469/16019838
#
- name: Abort other jobs
if: failure()
uses: actions/github-script@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_RUN_ID: ${{ github.run_id }}
with:
script: |
const RUN_ID = process.env.GITHUB_RUN_ID
const [OWNER, REPO] = process.env.GITHUB_REPOSITORY.split("/");
const resp = await github.request('POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', {
owner: OWNER,
repo: REPO,
run_id: RUN_ID,
headers: {'X-GitHub-Api-Version': '2022-11-28'}})
test-gpu:
runs-on: GPU
needs: linter-check
strategy:
fail-fast: true
steps:
- uses: actions/checkout@v3
- name: Install mri-nufft
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]
- name: Install Cufinufft
shell: bash
run: |
cd $RUNNER_WORKSPACE
rm -rf finufft
git clone https://github.com/chaithyagr/finufft --branch chaithyagr/issue306
cd finufft && mkdir build && cd build
export PATH=/usr/local/cuda-11.8/bin:$PATH
export CUDA_PATH=/usr/local/cuda-11.8
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
export CUDA_BIN_PATH=/usr/local/cuda-11.8
cmake -DFINUFFT_USE_CUDA=1 ../ && cmake --build . && cp libcufinufft.so ../python/cufinufft/.
# enter venv
source $RUNNER_WORKSPACE/venv/bin/activate
pip install cupy-cuda11x
cd $RUNNER_WORKSPACE/finufft/python/cufinufft
python setup.py develop
# FIXME: This is hardcoded
cp libcufinufft.so cufinufftc.cpython-310-x86_64-linux-gnu.so
cd $RUNNER_WORKSPACE
- name: Install gpuNUFFT
shell: bash
run: |
cd $RUNNER_WORKSPACE
rm -rf gpuNUFFT
git clone https://github.com/chaithyagr/gpuNUFFT
cd gpuNUFFT
export PATH=/usr/local/cuda-11.8/bin:$PATH
export CUDA_PATH=/usr/local/cuda-11.8
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
export CUDA_BIN_PATH=/usr/local/cuda-11.8
source $RUNNER_WORKSPACE/venv/bin/activate
python setup.py install
- name: Run Tests
shell: bash
run: |
cd $RUNNER_WORKSPACE/mri-nufft
source $RUNNER_WORKSPACE/venv/bin/activate
python -m coverage run -m pytest -n auto -v
coverage report
- name: Upload coverage
if: success()
uses: actions/upload-artifact@v3
with:
name: coverage-gpu-${{ github.sha }}
path: .coverage
#https://stackoverflow.com/a/74411469/16019838
#
- name: Abort other jobs
if: failure()
uses: actions/github-script@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_RUN_ID: ${{ github.run_id }}
with:
script: |
const RUN_ID = process.env.GITHUB_RUN_ID
const [OWNER, REPO] = process.env.GITHUB_REPOSITORY.split("/");
const resp = await github.request('POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', {
owner: OWNER,
repo: REPO,
run_id: RUN_ID,
headers: {'X-GitHub-Api-Version': '2022-11-28'}})
- name: Cleanup
if: always()
shell: bash
run: |
cd $RUNNER_WORKSPACE
ls -al
rm -rf finufft
rm -rf gpuNUFFT
rm -rf venv
coverage:
runs-on: ubuntu-latest
needs: [test-cpu, test-gpu]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download coverage CPU
uses: actions/download-artifact@v3
with:
name: coverage-cpu-${{ github.sha }}
path: cov-cpu
- name: Download coverage GPU
uses: actions/download-artifact@v3
with:
name: coverage-gpu-${{ github.sha }}
path: cov-gpu
- 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
shell: bash
run: |
coverage combine cov-cpu/.coverage cov-gpu/.coverage
coverage xml -i
coverage report
ls -al
- name: Upload Join
if: success()
uses: actions/upload-artifact@v3
with:
name: coverage-full-${{ github.sha}}
path: .coverage