OPEN: GitHub-based CI/CD Flow #1
Workflow file for this run
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: | |
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 | |