diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 000000000..fe6d0456a --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,70 @@ +name: CI + +on: + workflow_dispatch: + pull_request: + push: + branches: + - main + +concurrency: + # A PR number if a pull request and otherwise the commit hash. This cancels + # queued and in-progress runs for the same PR (presubmit) or commit + # (postsubmit). The workflow name is prepended to avoid conflicts between + # different workflows. + group: ${{ github.workflow }}-${{ github.event.number || github.sha }} + cancel-in-progress: true + +jobs: + test: + name: "Unit Tests and Type Checking" + strategy: + matrix: + version: [3.11] + os: [ubuntu-latest] + runs-on: ${{matrix.os}} + env: + PIP_CACHE_DIR: "${{ github.workspace }}/.pip-cache" + steps: + - name: "Setting up Python" + id: setup_python + uses: actions/setup-python@v3 + with: + python-version: ${{matrix.version}} + + - name: "Checkout Code" + uses: actions/checkout@v3 + + - name: Cache Pip Packages + uses: actions/cache@v4 + id: cache-pip + with: + path: ${{ env.PIP_CACHE_DIR }} + key: pip-${{ steps.setup_python.outputs.python-version }}-${{ hashFiles('*requirements.txt') }} + + - name: Install pip deps + run: | + python -m pip install --no-compile --upgrade pip + # Note: We install in three steps in order to satisfy requirements + # from non default locations first. Installing the PyTorch CPU + # wheels saves multiple minutes and a lot of bandwidth on runner setup. + pip install --no-compile -r pytorch-cpu-requirements.txt + pip install --no-compile -f https://iree.dev/pip-release-links.html --src deps \ + -e "git+https://github.com/nod-ai/SHARK-Turbine.git#egg=SHARK-Turbine&subdirectory=core" + pip install --no-compile -r requirements.txt -e sharktank/ shortfin/ + + - name: Run sharktank tests + if: ${{ !cancelled() }} + run: | + pytest -n 4 sharktank/ + + - name: Run shortfin tests + if: ${{ !cancelled() }} + run: | + pytest -n 4 shortfin/ + + # TODO: Enable type checking of sharktank + - name: MyPy Type Checking Shortfin + if: ${{ !cancelled() }} + run: | + (cd shortfin && mypy) diff --git a/.gitignore b/.gitignore index ea43d0c69..b766af2d2 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ build-*/ # Python __pycache__ _python_build/ +deps/ dist/ wheelhouse *.egg-info diff --git a/README.md b/README.md index 9ae8a7a73..d55654cd8 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,12 @@ This assumes you have `SHARK-Turbine` checked out adjacent (note that for the moment we rely on pre-release versions, so installation is a bit harder). ``` -pip install -f https://iree.dev/pip-release-links.html -e ../SHARK-Turbine/core/ -pip install -e sharktank -pip install -e shortfin +# Clone and install editable SHARK-Turbine dep in deps/ +pip install -f https://iree.dev/pip-release-links.html --src deps \ + -e "git+https://github.com/nod-ai/SHARK-Turbine.git#egg=SHARK-Turbine&subdirectory=core" + +# Install editable local projects. +pip install -r requirements -e sharktank/ shortfin/ ``` ### Running Tests diff --git a/requirements.txt b/requirements.txt index 10cb883a6..49b948549 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,8 @@ -numpy>=1.26.3 -onnx>=1.15.0 -pytest>=8.0.0 -pytest-xdist>=3.5.0 +gguf==0.6.0 +numpy==1.26.3 +onnx==1.15.0 +pytest==8.0.0 +pytest-xdist==3.5.0 mypy==1.8.0 types-requests==2.31.0.20240125 diff --git a/turbine-requirements.txt b/turbine-requirements.txt new file mode 100644 index 000000000..bd6ff6931 --- /dev/null +++ b/turbine-requirements.txt @@ -0,0 +1 @@ +-e "git+https://github.com/nod-ai/SHARK-Turbine.git#egg=SHARK-Turbine&subdirectory=core"