Skip to content

OPEN: GitHub-based CI/CD Flow #1

OPEN: GitHub-based CI/CD Flow

OPEN: GitHub-based CI/CD Flow #1

Workflow file for this run

name: CI
on:
push:
pull_request:
workflow_dispatch:
jobs:
build-deeploy:
runs-on: ubuntu-22.04
container:
image: ghcr.io/victor-jung/deeploy:main
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
run: pip install -e .
### Generic Tests ###
generic-kernels:
strategy:
fail-fast: false
matrix:
test-name:
- Adder
- MultIO
- test1DConvolution
- test2DConvolution
- test1DDWConvolution
- test2DDWConvolution
- test1DPad
- test2DPad
- testGEMM
- testMatMul
- testMatMulAdd
- testMaxPool
- testRQConv
- testRQMatMul
- testReduceSum
- testReduceMean
- testSlice
- testRequantizedDWConv
- test2DRequantizedConv
uses: ./.github/workflows/TestRunnerGeneric.yml
with:
test-name: ${{ matrix.test-name }}
generic-models:
strategy:
fail-fast: false
matrix:
test-name:
- simpleRegression
- WaveFormer
- simpleCNN
- ICCT
- ICCT_ITA
- ICCT_8
- ICCT_ITA_8
- miniMobileNet
- miniMobileNetv2
uses: ./.github/workflows/TestRunnerGeneric.yml
with:
test-name: ${{ matrix.test-name }}
### CortexM Tests ###
cortexm-kernels:
strategy:
fail-fast: false
matrix:
test-name:
- Adder
- MultIO
- test1DPad
- test2DPad
- testMatMul
- testMatMulAdd
- testMaxPool
- testRQConv
- testReduceSum
- testReduceMean
- testSlice
uses: ./.github/workflows/TestRunnerCortexM.yml
with:
test-name: ${{ matrix.test-name }}
cortexm-models:
strategy:
fail-fast: false
matrix:
test-name:
- simpleRegression
- WaveFormer
uses: ./.github/workflows/TestRunnerCortexM.yml
with:
test-name: ${{ matrix.test-name }}
### Mempool Tests ###
mempool-kernels:
strategy:
fail-fast: false
matrix:
test-name:
- Adder
- MultIO
- test1DConvolution
- test2DConvolution
- test1DDWConvolution
- test2DDWConvolution
- test1DPad
- test2DPad
- testGEMM
- testMatMul
- testMatMulAdd
- testMaxPool
- testRQConv
- testRQGEMM
- testRQMatMul
- testReduceSum
- testReduceMean
- testSlice
- testRequantizedDWConv
- test2DRequantizedConv
uses: ./.github/workflows/TestRunnerMempool.yml
with:
test-name: ${{ matrix.test-name }}
mempool-models:
strategy:
fail-fast: false
matrix:
test-name:
- simpleRegression
- simpleCNN
- ICCT
- ICCT_ITA
- ICCT_8
- ICCT_ITA_8
- miniMobileNet
- miniMobileNetv2
uses: ./.github/workflows/TestRunnerMempool.yml
with:
test-name: ${{ matrix.test-name }}
### Siracusa Tests ###
siracusa-kernels:
strategy:
fail-fast: false
matrix:
test-name:
- Adder
- MultIO
- test1DPad
- test2DPad
- testMatMul
- testMatMulAdd
- testRequantizedDWConv
- test2DRequantizedConv
- iSoftmax
- testConcat
- testRMSNorm
- trueIntegerDivSandwich
- Hardswish
- RQHardswish
- testBacktracking
uses: ./.github/workflows/TestRunnerSiracusa.yml
with:
test-name: ${{ matrix.test-name }}
num-cores: 8
siracusa-models:
strategy:
fail-fast: false
matrix:
test-name:
- simpleRegression
- miniMobileNet
- miniMobileNetv2
- Attention
- MLPerf/KeywordSpotting
- MLPerf/ImageClassification
- MLPerf/AnomalyDetection
uses: ./.github/workflows/TestRunnerSiracusa.yml
with:
test-name: ${{ matrix.test-name }}
num-cores: 8
siracusa-kernels-tiled-singlebuffer-L2:
strategy:
fail-fast: false
matrix:
test-data:
- name: "testMatMul"
L1: [64000, 32000, 16000]
- name: "test2DRequantizedConv"
L1: [8000, 6000, 4000]
- name: "testRequantizedDWConv"
L1: [2561] # SCHEREMO: The implicit transpose after the conv is untiled; need at least 2560
- name: "iSoftmax"
L1: [800, 500, 300]
- name: "testConcat"
L1: [32000, 16000, 8000]
- name: "testRMSNorm"
L1: [2048, 1024, 512]
- name: "Hardswish"
L1: [750]
- name: "RQHardswish"
L1: [750]
num-cores:
- 8
uses: ./.github/workflows/TestRunnerTiledSiracusa.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
siracusa-kernels-tiled-doublebuffer-L2:
strategy:
fail-fast: false
matrix:
test-data:
- name: "testMatMul"
L1: [64000, 32000, 16000]
- name: "test2DRequantizedConv"
L1: [8000, 6000, 5000]
- name: "testRequantizedDWConv"
L1: [5121] # SCHEREMO: The implicit transpose after the conv is untiled; need at least 2560 * 2 for DB
- name: "iSoftmax"
L1: [1600, 1000, 600]
- name: "testConcat"
L1: [64000, 32000, 16000]
- name: "testRMSNorm"
L1: [4096, 2048, 1024]
- name: "Hardswish"
L1: [750]
- name: "RQHardswish"
L1: [750]
- name: "microLlama/microLlama1"
L1: [60000, 20000, 10000]
- name: "microLlama/microLlama8"
L1: [60000, 20000, 10000]
- name: "microLlama/microLlama8_parallel"
L1: [60000, 20000, 10000]
num-cores:
- 8
double-buffer:
- true
uses: ./.github/workflows/TestRunnerTiledSiracusa.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
double-buffer: ${{ matrix.double-buffer }}
siracusa-models-tiled-singlebuffer-L2:
strategy:
fail-fast: false
matrix:
test-data:
- name: "simpleRegression"
L1: [45000, 30000, 15000]
- name: "miniMobileNet"
L1: [60000, 12000, 6000, 3000]
- name: "miniMobileNetv2"
L1: [60000, 16000, 12000, 8000]
- name: "Attention"
L1: [60000, 10000, 5000]
- name: "microLlama/microLlama1"
L1: [60000, 10000, 5000]
- name: "microLlama/microLlama8"
L1: [60000, 10000, 5000]
- name: "microLlama/microLlama8_parallel"
L1: [60000, 10000, 5000]
- name: "MLPerf/KeywordSpotting"
L1: [64000]
- name: "MLPerf/ImageClassification"
L1: [64000]
- name: "MLPerf/AnomalyDetection"
L1: [64000]
num-cores:
- 8
uses: ./.github/workflows/TestRunnerTiledSiracusa.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
siracusa-models-tiled-singlebuffer-L3:
strategy:
fail-fast: false
matrix:
test-data:
- name: "simpleRegression"
L1: [45000, 30000, 16000] # SCHEREMO: 15000 leads to non-2d transfers in L3!
- name: "miniMobileNet"
L1: [60000, 12000, 6000] # SCHEREMO: 3000 leads to non-2d transfers in L3!
- name: "miniMobileNetv2"
L1: [60000, 16000, 12000, 8000]
- name: "Attention"
L1: [60000, 10000, 5000, 2500]
- name: "Transformer"
L1: [60000, 30000, 15000]
- name: "microLlama/microLlama1"
L1: [60000, 10000, 5000]
num-cores:
- 8
default-memory-level:
- "L3"
uses: ./.github/workflows/TestRunnerTiledSiracusa.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
default-memory-level: ${{ matrix.default-memory-level }}
siracusa-models-tiled-doublebuffer-L3:
strategy:
fail-fast: false
matrix:
test-data:
- name: "simpleRegression"
L1: [60000, 45000, 30000]
- name: "miniMobileNet"
L1: [60000, 24000, 12000, 6000]
- name: "miniMobileNetv2"
L1: [60000, 32000, 24000, 16000]
- name: "Attention"
L1: [60000, 20000, 10000, 5000]
- name: "Transformer"
L1: [60000, 30000, 15000]
num-cores:
- 8
double-buffer:
- true
default-memory-level:
- "L3"
uses: ./.github/workflows/TestRunnerTiledSiracusa.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
double-buffer: ${{ matrix.double-buffer }}
default-memory-level: ${{ matrix.default-memory-level }}
siracusa-neureka-kernels-tiled-singlebuffer-L2:
strategy:
fail-fast: false
matrix:
test-data:
- name: "testRequantizedLinear"
L1: [16000]
- name: "testPointwise"
L1: [32000]
- name: "testPointwiseConvBNReLU"
L1: [32000]
- name: "testPointwiseUnsignedWeights"
L1: [32000]
num-cores:
- 8
uses: ./.github/workflows/TestRunnerTiledSiracusaWithNeureka.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
siracusa-neureka-kernels-tiled-doublebuffer-L2:
strategy:
fail-fast: false
matrix:
test-data:
- name: "testRequantizedLinear"
L1: [16000]
- name: "testPointwise"
L1: [32000]
- name: "testPointwiseConvBNReLU"
L1: [32000]
- name: "testPointwiseUnsignedWeights"
L1: [32000]
num-cores:
- 8
double-buffer:
- true
uses: ./.github/workflows/TestRunnerTiledSiracusaWithNeureka.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
double-buffer: ${{ matrix.double-buffer }}
siracusa-neureka-models-tiled-singlebuffer-L3:
strategy:
fail-fast: false
matrix:
test-data:
- name: "miniMobileNet"
L1: [2000] # LMACAN: 1000 leads to non-2d transfers in L3!
- name: "Attention"
L1: [2500]
- name: "Transformer"
L1: [15000]
- name: "microLlama/microLlama1"
L1: [10000]
num-cores:
- 8
default-memory-level:
- "L3"
uses: ./.github/workflows/TestRunnerTiledSiracusaWithNeureka.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
default-memory-level: ${{ matrix.default-memory-level }}
siracusa-neureka-models-tiled-doublebuffer-L3:
strategy:
fail-fast: false
matrix:
test-data:
- name: "miniMobileNet"
L1: [2000] # LMACAN: 1000 leads to non-2d transfers in L3!
- name: "Attention"
L1: [5000]
- name: "Transformer"
L1: [30000]
num-cores:
- 8
double-buffer:
- true
default-memory-level:
- "L3"
uses: ./.github/workflows/TestRunnerTiledSiracusaWithNeureka.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
double-buffer: ${{ matrix.double-buffer }}
default-memory-level: ${{ matrix.default-memory-level }}
siracusa-neureka-kernels-tiled-singlebuffer-L2-wmem:
strategy:
fail-fast: false
matrix:
test-data:
- name: "testRequantizedLinear"
L1: [16000]
- name: "testPointwise"
L1: [32000]
- name: "testPointwiseConvBNReLU"
L1: [32000]
- name: "testPointwiseUnsignedWeights"
L1: [32000]
num-cores:
- 8
neureka-wmem:
- true
uses: ./.github/workflows/TestRunnerTiledSiracusaWithNeureka.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
neureka-wmem: ${{ matrix.neureka-wmem }}
siracusa-neureka-models-tiled-doublebuffer-L3-wmem:
strategy:
fail-fast: false
matrix:
test-data:
- name: "miniMobileNet"
L1: [2000] # LMACAN: 1000 leads to non-2d transfers in L3!
- name: "Attention"
L1: [2500]
- name: "Transformer"
L1: [30000]
- name: "microLlama/microLlama1"
L1: [10000]
num-cores:
- 8
double-buffer:
- true
default-memory-level:
- "L3"
neureka-wmem:
- true
uses: ./.github/workflows/TestRunnerTiledSiracusaWithNeureka.yml
with:
test-name: ${{ matrix.test-data.name }}
num-cores: ${{ matrix.num-cores }}
L1: ${{ toJson(matrix.test-data.L1) }}
double-buffer: ${{ matrix.double-buffer }}
default-memory-level: ${{ matrix.default-memory-level }}
neureka-wmem: ${{ matrix.neureka-wmem }}
### Deeploy Extension and Internal Tests ###
deeploy-state-serialization:
strategy:
fail-fast: false
matrix:
name: ["simpleRegression"]
platform: ['QEMU-ARM', 'Siracusa', 'MemPool', 'Generic']
runs-on: ubuntu-22.04
container:
image: ghcr.io/victor-jung/deeploy:main
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
run: pip install -e .
- name: Run Test
run: |
cd DeeployTest
python deeployStateEqualityTest.py -t ./Tests/${{ matrix.name }} -p ${{ matrix.platform }}
shell: bash
deeploy-memory-level-extension:
strategy:
fail-fast: false
matrix:
name: ["simpleRegression"]
platform: ['QEMU-ARM', 'Siracusa', 'MemPool', 'Generic']
runs-on: ubuntu-22.04
container:
image: ghcr.io/victor-jung/deeploy:main
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
run: pip install -e .
- name: Run Test
run: |
cd DeeployTest
python testMemoryLevelExtension.py -t ./Tests/${{ matrix.name }} -p ${{ matrix.platform }}
shell: bash
deeploy-tiler-extension:
strategy:
fail-fast: false
matrix:
name: ["simpleRegression", "simpleCNN", "testMatMul", "testMaxPool"]
platform: ['Siracusa']
runs-on: ubuntu-22.04
container:
image: ghcr.io/victor-jung/deeploy:main
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
run: pip install -e .
- name: Run Test
run: |
cd DeeployTest
python testTilerExtension.py -t ./Tests/${{ matrix.name }} -p ${{ matrix.platform }}
shell: bash
deeploy-tiler-extension-fail:
strategy:
fail-fast: false
matrix:
name: ["simpleRegression", "simpleCNN", "testMatMul", "testMaxPool"]
platform: ['Siracusa']
runs-on: ubuntu-22.04
container:
image: ghcr.io/victor-jung/deeploy:main
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
run: pip install -e .
- name: Run Test
run: |
cd DeeployTest
python testTilerExtension.py -t ./Tests/${{ matrix.name }} -p ${{ matrix.platform }} --l1 2000 --shouldFail
shell: bash
deeploy-memory-allocation-extension:
strategy:
fail-fast: false
matrix:
name: ["simpleRegression", "simpleCNN", "miniMobileNet", "miniMobileNetv2", "testMatMul", "testMaxPool"]
platform: ["Siracusa"]
runs-on: ubuntu-22.04
container:
image: ghcr.io/victor-jung/deeploy:main
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
run: pip install -e .
- name: Run Test
run: |
cd DeeployTest
python testTilerExtension.py -t ./Tests/${{ matrix.name }} -p ${{ matrix.platform }}
shell: bash
deeploy-typing:
runs-on: ubuntu-22.04
container:
image: ghcr.io/victor-jung/deeploy:main
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
run: pip install -e .
- name: Run Test
run: |
cd DeeployTest
python testTypes.py
shell: bash
deeploy-regex-matching:
runs-on: ubuntu-22.04
container:
image: ghcr.io/victor-jung/deeploy:main
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
run: pip install -e .
- name: Run Test
run: |
cd DeeployTest
python testRegexMatching.py
shell: bash
linting:
runs-on: ubuntu-22.04
container:
image: ghcr.io/victor-jung/deeploy:main
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
run: pip install -e .
cd DeeployTest
- name: Format Python
run: |
yapf -rpd -e "third_party/" -e "install/" -e "toolchain/" .
shell: bash
- name: Format Python Imports
run: |
isort --sg "**/third_party/*" --sg "install/*" --sg "toolchain/*" ./ -c -v
autoflake -c -r --remove-all-unused-imports --ignore-init-module-imports --exclude "*/third_party/**" ./
shell: bash
- name: Format C
run: |
python scripts/run_clang_format.py -e "*/third_party/*" -e "*/install/*" -e "*/toolchain/*" -ir --clang-format-executable=${LLVM_INSTALL_DIR}/bin/clang-format ./ scripts
shell: bash
- name: Format Python Licenses
run: |
grep -Lr "SPDX-License-Identifier: Apache-2.0" --exclude-dir="toolchain" --exclude-dir="install" --exclude-dir=".git" . --exclude-dir="third_party" --exclude-dir="TEST_*" --exclude "run_clang_format.py" | grep ".*\.py$" || [[ $? == 1 ]]
shell: bash
- name: Format C Licenses
run: |
grep -Lr "SPDX-License-Identifier: Apache-2.0" --exclude-dir="toolchain" --exclude-dir="install" --exclude-dir=".git" . --exclude-dir="third_party" --exclude-dir="TEST_*" --exclude-dir="runtime" | grep ".*\.c$" || [[ $? == 1 ]]
shell: bash
- name: Format C Header Licenses
run: |
grep -Lr "SPDX-License-Identifier: Apache-2.0" --exclude-dir="toolchain" --exclude-dir="install" --exclude-dir=".git" . --exclude-dir="third_party" --exclude-dir="TEST_*" --exclude-dir="runtime" | grep ".*\.h$" || [[ $? == 1 ]]
shell: bash