mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-12 15:33:45 +08:00
22a8575199
Keep official openpilot ancestry and dependency licenses. Store resources directly in Git, remove LFS setup requirements, and leave the downloadable big model outside the source tree.
681 lines
32 KiB
YAML
681 lines
32 KiB
YAML
name: Unit Tests
|
|
env:
|
|
# increment this when downloads substantially change to avoid the internet
|
|
CACHE_VERSION: '19'
|
|
CAPTURE_PROCESS_REPLAY: ${{ github.event_name == 'pull_request' && contains(github.event.pull_request.title, '[pr]') && '1' || '0' }}
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
PYTHONPATH: ${{ github.workspace }}
|
|
CHECK_OOB: 1
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: test-${{ github.event_name }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.run_id }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
jobs:
|
|
docs:
|
|
name: Docs
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 10
|
|
env:
|
|
CHECK_OOB: 0
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
deps: "docs testing_minimal"
|
|
- name: Build wheel and show size
|
|
run: |
|
|
uv build --wheel
|
|
ls -lh dist/*.whl
|
|
- name: Use as an external package
|
|
run: |
|
|
mkdir $HOME/test_external_dir
|
|
cd $HOME/test_external_dir
|
|
uv venv venv
|
|
uv pip install --python venv $GITHUB_WORKSPACE mypy
|
|
cp $GITHUB_WORKSPACE/examples/beautiful_mnist.py .
|
|
venv/bin/python -c "from tinygrad.tensor import Tensor; print(Tensor([1,2,3,4,5]))"
|
|
venv/bin/mypy -c "from tinygrad.tensor import Tensor; print(Tensor([1,2,3,4,5]))"
|
|
BS=2 STEPS=10 MAX_BUFFER_SIZE=0 venv/bin/python beautiful_mnist.py
|
|
- name: Test Docs
|
|
run: |
|
|
parallel --link --tagstring '[{1}]' '{2}' \
|
|
::: mkdocs abstractions3 readme quickstart export \
|
|
::: 'mkdocs build --strict' \
|
|
'python docs/abstractions3.py' \
|
|
$'awk \'/```python/{flag=1;next}/```/{flag=0}flag\' README.md | python' \
|
|
$'awk \'/```python/{flag=1;next}/```/{flag=0}flag\' docs/quickstart.md | python' \
|
|
'DEV=CPU python examples/compile_efficientnet.py > recognize.c && clang -O2 recognize.c -lm -o recognize && cat test/models/efficientnet/Chicken.jpg | ./recognize | grep cock'
|
|
- name: Test DEBUG
|
|
run: DEBUG=100 python3 -c "from tinygrad import Tensor; N = 1024; a, b = Tensor.rand(N, N), Tensor.rand(N, N); c = (a.reshape(N, 1, N) * b.T.reshape(1, N, N)).sum(axis=2); print((c.numpy() - (a.numpy() @ b.numpy())).mean())"
|
|
|
|
torchbackend:
|
|
name: Torch Backend Tests
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: torch-backend-pillow-torchvision-et-pt
|
|
deps: testing_unit
|
|
pydeps: "pillow torchvision expecttest"
|
|
llvm: 'true'
|
|
ninja: 'true'
|
|
- name: Test ResNet-18
|
|
run: DEBUG=2 python3 extra/torch_backend/example.py
|
|
- name: Test one op in torch tests
|
|
run: DEBUG=2 python3 extra/torch_backend/torch_tests.py TestTinyBackendPRIVATEUSE1.test_unary_log_tiny_float32
|
|
- name: Test Ops with TINY_BACKEND
|
|
run: DEV=CPU:LLVM LLVMOPT=0 TINY_BACKEND=1 python3 -m pytest -n auto test/backend/test_ops.py --durations=20
|
|
- name: Custom tests
|
|
run: DEV=CPU:LLVM GPUS=4 TINY_BACKEND=1 python3 -m pytest -nauto extra/torch_backend/test.py extra/torch_backend/test_inplace.py extra/torch_backend/test_multigpu.py extra/torch_backend/test_kernel_fusion.py --durations=20
|
|
|
|
torchbackendtrain:
|
|
name: Torch Backend Training
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: torch-backend-pillow-torchvision-et-pt
|
|
deps: testing_unit
|
|
llvm: 'true'
|
|
ninja: 'true'
|
|
- name: Test beautiful_mnist in torch with TINY_BACKEND
|
|
run: STEPS=20 DEV=CPU TARGET_EVAL_ACC_PCT=90.0 MAX_BUFFER_SIZE=0 TINY_BACKEND=1 python3 examples/other_mnist/beautiful_mnist_torch.py
|
|
|
|
bepython:
|
|
name: Python Backend
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: be-minimal
|
|
deps: testing_unit
|
|
- name: Run backend tests
|
|
run: SKIP_SLOW_TEST=1 DEV=PYTHON python3 -m pytest -n=auto test/backend/test_dtype.py test/backend/test_dtype_alu.py test/backend/test_ops.py test/backend/test_uops.py test/backend/test_symbolic_ops.py test/backend/test_renderer_failures.py::TestRendererFailures --durations=20
|
|
- name: Test IMAGE support
|
|
run: IMAGE=1 DEV=PYTHON python3 test/backend/test_ops.py TestOps.test_gemm TestOps.test_simple_conv2d
|
|
- name: Test emulated tensor cores
|
|
env:
|
|
DEBUG: 2
|
|
N: 64
|
|
CNT: 1
|
|
SHOULD_USE_TC: 1
|
|
run: |
|
|
parallel -k --link --tagstring '[{1}]' '{2} python3 ./extra/gemm/simple_matmul.py' \
|
|
::: metal gfx950 gfx1100 gfx1100_acchalf gfx1201 gfx1201_acchalf sm_75 sm_80_half sm_80_tf32 \
|
|
::: 'DEV=PYTHON::METAL' 'DEV=PYTHON::gfx950 HALF=1 ACC_HALF=0' \
|
|
'DEV=PYTHON::gfx1100 HALF=1 ACC_HALF=0' 'DEV=PYTHON::gfx1100 HALF=1 ACC_HALF=1 ATOL=1e-3' \
|
|
'DEV=PYTHON::gfx1201 HALF=1 ACC_HALF=0' 'DEV=PYTHON::gfx1201 HALF=1 ACC_HALF=1 ATOL=1e-3' \
|
|
'DEV=PYTHON::sm_75 HALF=1' 'DEV=PYTHON::sm_80 HALF=1' 'DEV=PYTHON::sm_80 ALLOW_TF32=1'
|
|
- name: Run additional tensor core tests
|
|
run: |
|
|
DEV=PYTHON::METAL python3 -m pytest -nauto test/opt/test_tensor_cores.py test/null/test_uops_stats.py::TestUOpsStatsMatmulHalf
|
|
DEV=PYTHON::gfx1100 python3 -m pytest -nauto test/opt/test_tensor_cores.py test/null/test_uops_stats.py::TestUOpsStatsMatmulHalf
|
|
DEV=PYTHON::gfx950 python3 -m pytest -nauto test/opt/test_tensor_cores.py
|
|
DEV=PYTHON::gfx1201 python3 -m pytest -nauto test/opt/test_tensor_cores.py
|
|
ALLOW_TF32=1 DEV=PYTHON::sm_89 python3 -m pytest -nauto test/opt/test_tensor_cores.py
|
|
DEBUG=2 DEV=PYTHON::sm_80 python3 ./test/null/test_uops_stats.py TestUOpsStatsMatmulHalf
|
|
|
|
linter:
|
|
name: Linters
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 10
|
|
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: linting-only
|
|
python-version: '3.11'
|
|
deps: linting
|
|
- name: Lint bad-indentation and trailing-whitespace with pylint
|
|
run: python -m pylint --disable=all -e W0311 -e C0303 --jobs=0 --indent-string=' ' --recursive=y .
|
|
- name: Run pre-commit linting hooks
|
|
run: SKIP=tiny,tests,example,mypy pre-commit run --all-files
|
|
- name: Lint additional files with ruff
|
|
run: |
|
|
python3 -m ruff check examples/mlperf/ --ignore E501
|
|
python3 -m ruff check extra/thunder/tiny/ --ignore E501 --ignore F841 --ignore E722
|
|
python3 -m ruff check extra/torch_backend/backend.py
|
|
- name: Run mypy with lineprecision report
|
|
run: |
|
|
python -m mypy --lineprecision-report .
|
|
grep -v autogen lineprecision.txt | awk 'NR>2 {lines+=$2; precise+=$3; imprecise+=$4; any+=$5; empty+=$6} END {t=lines-empty; printf "TOTAL: %d lines, %d precise (%.1f%%), %d imprecise (%.1f%%), %d any (%.1f%%)\n", t, precise, 100*precise/t, imprecise, 100*imprecise/t, any, 100*any/t}'
|
|
cat lineprecision.txt
|
|
- name: Run TYPED=1
|
|
run: CHECK_OOB=0 DEV=CPU TYPED=1 python test/test_tiny.py
|
|
|
|
nulltest:
|
|
name: Null Tests
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: unittest-13
|
|
python-version: '3.11'
|
|
deps: testing_unit
|
|
llvm: 'true'
|
|
amd: 'true'
|
|
- name: Run NULL backend tests
|
|
run: SPEC=2 DEV=NULL python -m pytest -n=auto test/null/ --durations=20
|
|
- name: Run targeted tests on NULL backend
|
|
run: |
|
|
DEV=NULL python3 -m unittest test.backend.test_multitensor.TestMultiTensor.test_data_parallel_resnet_train_step
|
|
DEV=NULL VIZ=1 python3 -m pytest -n=auto test/null/test_viz.py
|
|
DEBUG=7 python -m tinygrad.viz.cli --json | jq empty
|
|
# TODO: too slow
|
|
# - name: Run SDXL on NULL backend
|
|
# run: DEV=NULL DEBUG=1 python3 examples/sdxl.py --seed 0 --noshow --timing --fakeweights
|
|
- name: Run Clip tests for SD MLPerf on NULL backend
|
|
run: DEV=NULL python -m pytest -n=auto test/external/mlperf_stable_diffusion/external_test_models.py::TestOpenClip --durations=20
|
|
- name: Run AMD emulated BERT training on NULL backend
|
|
run: DEV=NULL::gfx1201 NULL_ALLOW_COPYOUT=1 DEFAULT_FLOAT=HALF BENCHMARK=10 BS=66 GPUS=1 BERT_LAYERS=2 MODEL=bert python3 examples/mlperf/model_train.py
|
|
# TODO: support fake weights
|
|
#- name: Run LLaMA 7B on 4 fake devices
|
|
# run: DEV=NULL python3 examples/llama.py --gen 1 --size 7B --shard 4 --prompt "Hello." --count 3 --temperature 0 --timing
|
|
|
|
unittest:
|
|
name: Unit Tests
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: unittest-13
|
|
python-version: '3.11'
|
|
pydeps: "pre-commit"
|
|
deps: testing_unit
|
|
llvm: 'true'
|
|
- name: Run pre-commit test hooks
|
|
run: SKIP=ruff,mypy,tests pre-commit run --all-files
|
|
- name: Check Device.DEFAULT
|
|
run: python -c "from tinygrad import Device; assert Device.DEFAULT == 'CPU', Device.DEFAULT"
|
|
- name: Run unit tests
|
|
run: |
|
|
DEV=CPU python test/null/test_device.py TestRunAsModule.test_module_runs
|
|
DEV=CPU python -m pytest -n=auto test/unit/ --durations=20
|
|
- name: Run GC tests
|
|
run: python test/external/external_uop_gc.py
|
|
- name: External Benchmark Schedule
|
|
run: python3 test/external/external_benchmark_schedule.py
|
|
- name: Run process replay tests
|
|
uses: ./.github/actions/process-replay
|
|
- name: Repo line count <= 26000 lines
|
|
run: MAX_LINE_COUNT=26500 python sz.py
|
|
|
|
spec:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
group: [1, 2]
|
|
name: SPEC=2 (${{ matrix.group }})
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: spec-unit
|
|
deps: testing_unit
|
|
llvm: 'true'
|
|
- name: Test SPEC=2
|
|
run: SPEC=2 pytest --maxfail=10 -n auto --durations=30 test/unit test/backend test/opt --ignore test/backend/test_custom_kernel.py --ignore test/unit/test_hashing.py --splits 2 --group ${{ matrix.group }}
|
|
|
|
fuzzing:
|
|
name: Fuzzing
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 10
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: fuzzing-unit
|
|
deps: testing_unit
|
|
- name: Fuzz Tests
|
|
run: |
|
|
parallel --tagstring '[{}]' 'python test/external/fuzz_{}.py' ::: symbolic symbolic_div fast_idiv shape_ops
|
|
|
|
testopenclimage:
|
|
name: CL IMAGE Tests
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: gpu-image
|
|
deps: testing_unit
|
|
opencl: 'true'
|
|
- name: Test CL IMAGE=1 ops
|
|
run: |
|
|
DEV=CL IMAGE=1 python -m pytest -n=auto test/backend/test_ops.py --durations=20
|
|
DEV=CL IMAGE=1 python test/models/test_end2end.py TestEnd2End.test_linear_mnist
|
|
- name: Run process replay tests
|
|
uses: ./.github/actions/process-replay
|
|
|
|
testopenpilot:
|
|
name: openpilot compile tests
|
|
env:
|
|
LFS_SHA: "51b12d20a25b76fa8a5717c2e5af01f148e469e2"
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: openpilot-compile
|
|
deps: testing
|
|
llvm: 'true'
|
|
opencl: 'true'
|
|
- name: Test models (DEV=CPU:LLVM)
|
|
env:
|
|
DEV: CPU:LLVM
|
|
run: |
|
|
for model in driving_supercombo dmonitoring_model; do
|
|
python examples/openpilot/compile_onnx.py "https://huggingface.co/commaai/openpilot-lfs/resolve/$LFS_SHA/openpilot/selfdrive/modeld/models/$model.onnx" /tmp/openpilot.pkl --benchmark-runs 1
|
|
python examples/openpilot/load_pickle.py --run /tmp/openpilot.pkl --runs 3
|
|
done
|
|
MODEL_PKL=/tmp/openpilot.pkl python -m pytest -n=auto test/external/external_test_compile.py
|
|
- name: Test warps (DEV=CPU:LLVM)
|
|
env:
|
|
DEV: CPU:LLVM
|
|
run: |
|
|
python examples/openpilot/compile_warp.py --output /tmp/warp_driving.pkl --benchmark-runs 1 --frame 1928,1208,2048,1216,608,3735552 --warp-to 512x256 --layout yuv420 --frames 2
|
|
python examples/openpilot/load_pickle.py --run /tmp/warp_driving.pkl --runs 3
|
|
python examples/openpilot/compile_warp.py --output /tmp/warp_monitoring.pkl --benchmark-runs 1 --frame 1928,1208,2048,1216,608,4804608 --warp-to 1440x960 --layout luma --border-fill 16 --transform-device NPY
|
|
python examples/openpilot/load_pickle.py --run /tmp/warp_monitoring.pkl --runs 3
|
|
- name: Test driving_supercombo (DEV=CL::IMAGE_PITCH_ALIGNMENT=64)
|
|
env:
|
|
# IMAGE_PITCH_ALIGNMENT=64 matches adreno 630
|
|
DEV: CL::IMAGE_PITCH_ALIGNMENT=64
|
|
run: |
|
|
VIZ=1 IMAGE=1 FLOAT16=1 python examples/openpilot/compile_onnx.py "https://huggingface.co/commaai/openpilot-lfs/resolve/$LFS_SHA/openpilot/selfdrive/modeld/models/driving_supercombo.onnx" /tmp/openpilot_viz.pkl --benchmark-runs 1
|
|
ALLOWED_KERNEL_COUNT=162 ALLOWED_READ_IMAGE=1530 ALLOWED_GATED_READ_IMAGE=47 python examples/openpilot/check_image_reads.py
|
|
- name: Run process replay tests
|
|
uses: ./.github/actions/process-replay
|
|
|
|
# ****** ONNX Tests ******
|
|
|
|
testonnxcpu:
|
|
name: ONNX (CPU) Tests
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 20
|
|
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: onnxoptc
|
|
deps: testing
|
|
llvm: 'true'
|
|
- name: Test ONNX (CPU)
|
|
run: DEV=CPU python -m pytest -n=auto test/external/external_test_onnx_backend.py test/external/external_test_onnx_runner.py test/external/external_test_onnx_ops.py test/backend/test_quantize_onnx.py --durations=20
|
|
- name: Run process replay tests
|
|
uses: ./.github/actions/process-replay
|
|
|
|
testoptim:
|
|
name: Optimization Tests
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: optim
|
|
deps: testing
|
|
opencl: 'true'
|
|
#- name: Test Optimization Helpers
|
|
# run: DEBUG=1 python3 extra/optimization/test_helpers.py
|
|
#- name: Test Action Space
|
|
# run: DEBUG=1 DEV=CL python3 extra/optimization/get_action_space.py
|
|
- name: Test Beam Search
|
|
run: DEV=CL IGNORE_BEAM_CACHE=1 python3 -m pytest extra/optimization/test_beam_search.py
|
|
- name: Test MLPerf stuff
|
|
run: DEV=CL python -m pytest -n=auto test/external/external_test_lr_schedule.py test/external/external_test_losses.py test/external/external_test_metrics.py test/external/external_test_datasets.py --durations=20
|
|
- name: DEV=NULL beautiful_mnist_multigpu
|
|
run: DEV=NULL NULL_ALLOW_COPYOUT=1 python examples/beautiful_mnist_multigpu.py
|
|
- name: Test Bert training
|
|
run: DEV=NULL NULL_ALLOW_COPYOUT=1 DEFAULT_FLOAT=HALF BENCHMARK=10 BS=24 GPUS=4 BERT_LAYERS=2 MODEL=bert python3 examples/mlperf/model_train.py
|
|
- name: Test llama 3 training
|
|
run: DEV=NULL NULL_ALLOW_COPYOUT=1 SAMPLES=300 BS=8 SEQLEN=512 GRADIENT_ACC_STEPS=1 FAKEDATA=1 DEFAULT_FLOAT=bfloat16 OPTIM_DTYPE=bfloat16 LLAMA3_SIZE=1B MODEL=llama3 python3 examples/mlperf/model_train.py
|
|
- name: Test gpt-oss training
|
|
run: DEV=NULL NULL_ALLOW_COPYOUT=1 SAMPLES=32 BS=2 SEQLEN=128 GRADIENT_ACC_STEPS=1 FAKEDATA=1 DEFAULT_FLOAT=bfloat16 OPTIM_DTYPE=bfloat16 MXFP8=1 VOCAB_SIZE=32000 LAYERS=2 EXPERTS=4 MODEL=gptoss PYTHONPATH=. python3 examples/mlperf/model_train.py
|
|
- name: Run process replay tests
|
|
uses: ./.github/actions/process-replay
|
|
|
|
testllm:
|
|
name: Test LLM
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
env:
|
|
CHECK_OOB: 0
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: apps_llm
|
|
- name: Test LLMs
|
|
env:
|
|
MAX_BUFFER_SIZE: 0
|
|
run: |
|
|
parallel --link --tagstring '[{1}]' '{2}' \
|
|
::: llama 'llama q4' qwen3.5 qwen \
|
|
::: $'echo "What\'s a male chicken called? Answer with only one word." | python3 -m tinygrad.llm --no_chat_template --model llama3.2:1b | tee /dev/stderr | grep -i rooster' \
|
|
$'echo "What\'s a male chicken called? Answer with only one word." | python3 -m tinygrad.llm --no_chat_template --model llama3.2:1b-q4 | tee /dev/stderr | grep -i rooster' \
|
|
$'echo "What\'s a male chicken called? Answer with only one word." | python3 -m tinygrad.llm --no_chat_template --model qwen3.5:0.8b | tee /dev/stderr | grep -i rooster' \
|
|
$'echo "What\'s a female chicken called? Answer with only one word." | python3 -m tinygrad.llm --no_chat_template --model qwen3:0.6b | tee /dev/stderr | grep -i hen'
|
|
# NOTE: qwen is dumb and only knows about female chickens
|
|
|
|
# ****** Models Tests ******
|
|
|
|
testmodels:
|
|
name: Models
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: models
|
|
deps: testing
|
|
llvm: 'true'
|
|
- name: Test models (cpu)
|
|
run: DEV=CPU python -m pytest -n=auto test/models --durations=20
|
|
- name: Run process replay tests
|
|
uses: ./.github/actions/process-replay
|
|
|
|
# ****** Feature Tests ******
|
|
|
|
testdsp:
|
|
name: Linux (DSP)
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: dsp-minimal
|
|
deps: testing
|
|
llvm: "true"
|
|
qemu: "true"
|
|
- name: Run tests
|
|
run: MOCKDSP=1 DEV=DSP python -m pytest -n=auto test/test_tiny.py test/backend/test_transcendental.py::TestTranscendentalVectorized test/backend/test_quantize_onnx.py
|
|
|
|
testlinux:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
dev:
|
|
- 'CPU:CLANG'
|
|
- 'CPU:LLVM'
|
|
- 'CPU:LVP'
|
|
- 'CPU:X86'
|
|
- 'CL'
|
|
- 'WEBGPU'
|
|
|
|
name: Linux (DEV=${{ matrix.dev }})
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 20
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: linux-${{ matrix.dev }}
|
|
deps: "testing_unit${{ contains(matrix.dev, 'LVP') && ' mesa' || '' }}"
|
|
llvm: ${{ contains(matrix.dev, 'LLVM') || contains(matrix.dev, 'LVP') || contains(matrix.dev, 'CLANG') }}
|
|
webgpu: ${{ matrix.dev == 'WEBGPU' }}
|
|
opencl: ${{ matrix.dev == 'CL' }}
|
|
- name: Set env
|
|
run: printf "DEV=${{ matrix.dev }}${{ matrix.dev == 'CPU:CLANG' && '\nCPU_COUNT=2' || '' }}" >> $GITHUB_ENV
|
|
- name: Check Device.DEFAULT and print some source
|
|
run: |
|
|
python -c "from tinygrad import Device; from tinygrad.helpers import Target; assert Device.DEFAULT == Target.parse('${{ matrix.dev }}').device"
|
|
DEBUG=4 python test/test_tiny.py TestTiny.test_plus
|
|
- name: Run backend tests
|
|
run: python -m pytest -n=auto test/backend --durations=20
|
|
- name: Run process replay tests
|
|
uses: ./.github/actions/process-replay
|
|
|
|
testamdasm:
|
|
name: AMD ASM IDE
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 20
|
|
env:
|
|
DEV: MOCKKFD+AMD
|
|
HCQ_RUNTIME_DEV: PYTHON
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: rdna3-emu
|
|
deps: testing_unit
|
|
amd: 'true'
|
|
- name: Verify AMD autogen is up to date
|
|
run: |
|
|
python -m tinygrad.renderer.amd.generate
|
|
git diff --exit-code tinygrad/runtime/autogen/amd/
|
|
- name: Install LLVM 21
|
|
run: |
|
|
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
|
|
echo "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-21 main" | sudo tee /etc/apt/sources.list.d/llvm.list
|
|
sudo apt-get update
|
|
sudo apt-get install -y llvm-21 llvm-21-tools cloc
|
|
- name: Install rocprof-trace-decoder
|
|
run: sudo PYTHONPATH="." ./extra/sqtt/install_rocprof_decoder.py
|
|
- name: Run AMD renderer tests
|
|
run: python -m pytest -n=auto test/amd/ --durations 20
|
|
- name: Run AMD renderer tests (AMD:LLVM)
|
|
run: DEV=MOCKKFD+AMD:LLVM python -m pytest -n=auto test/amd/ --durations 20
|
|
- name: Run SQTT profiling tests
|
|
run: SQTT_BUFFER_SIZE=16 VIZ=-2 python3 -m pytest -n=auto test/amd/test_sqtt_profiler.py
|
|
- name: Run AMD emulated tests on NULL backend
|
|
env:
|
|
AMD: 0
|
|
run: |
|
|
PYTHONPATH=. DEV=NULL:HIP:gfx1100 python extra/mmapeak/mmapeak.py
|
|
PYTHONPATH=. DEV=NULL:HIP:gfx950 python3 -m pytest -n=auto test/testextra/test_tk.py
|
|
- name: Run matmul on MOCKKFD
|
|
run: |
|
|
PYTHONPATH="." DEV=MOCKKFD+AMD N=256 python3 extra/gemm/amd_asm_matmul.py
|
|
PYTHONPATH="." DEV=MOCKKFD+AMD N=256 python3 extra/gemm/amd_copy_matmul.py
|
|
- name: Run LLVM test
|
|
run: DEV=MOCKKFD+AMD:LLVM python test/device/test_amd_llvm.py
|
|
|
|
testmockam:
|
|
name: Linux (am)
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
env:
|
|
DEV: MOCKPCI+AMD
|
|
HCQ2: 1
|
|
HCQ_RUNTIME_DEV: PYTHON
|
|
PYTHONPATH: .
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: mockam
|
|
deps: testing_unit
|
|
amd: 'true'
|
|
- name: Run tests on MOCKAM
|
|
run: python -m pytest test/test_tiny.py test/unit/test_jit.py
|
|
- name: Run test_tiny on MOCKUSB
|
|
run: HCQ2=0 GMMU=0 DEV=MOCKUSB+AMD python test/test_tiny.py
|
|
- name: Run test_hcq2 on MOCKPCI
|
|
run: python -m pytest test/device/test_hcq2.py
|
|
- name: Run disk copy tests on MOCKPCI
|
|
run: python -m pytest test/unit/test_disk_tensor.py -k test_copy_from_disk
|
|
|
|
testamd:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
backend: [amd, amdllvm]
|
|
arch: [gfx1100, gfx1201, gfx950]
|
|
|
|
name: Linux (${{ matrix.backend }} ${{ matrix.arch }})
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
env:
|
|
DEV: MOCKKFD+AMD:${{ matrix.backend == 'amdllvm' && 'LLVM' || '' }}:${{ matrix.arch }}
|
|
SKIP_SLOW_TEST: 1
|
|
HCQ2: 1
|
|
HCQ_RUNTIME_DEV: PYTHON
|
|
PYTHONPATH: .
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: ${{ matrix.backend }}-minimal
|
|
deps: testing_unit
|
|
amd: 'true'
|
|
llvm: 'true'
|
|
- name: Check Device.DEFAULT and print some source
|
|
run: |
|
|
python3 -c "from tinygrad import Device; assert Device.DEFAULT in ['AMD'], Device.DEFAULT"
|
|
DEBUG=5 FORWARD_ONLY=1 python3 test/test_tiny.py TestTiny.test_plus
|
|
- name: Run MXFP4 Llama training on NULL backend
|
|
if: ${{ matrix.backend == 'amd' && matrix.arch == 'gfx950' }}
|
|
run: PYTHONPATH=. DEV=NULL:HIP:gfx950 MXFP4=1 LLAMA_LAYERS=2 BENCHMARK=3 NULL_ALLOW_COPYOUT=1 NO_HIPCC=1 ROCM_PATH=/opt/rocm JITBEAM=0 examples/mlperf/training_submission_v6.0/tinycorp/benchmarks/llama31_8b/implementations/tinybox_8xMI350X/profile.sh
|
|
- name: Run pytest (amd)
|
|
run: python -m pytest -n=auto test/backend/test_ops.py test/backend/test_dtype.py test/backend/test_dtype_alu.py test/backend/test_linearizer.py test/backend/test_randomness.py test/backend/test_jit.py test/backend/test_graph.py test/backend/test_multitensor.py test/device/test_hcq2.py test/external/external_test_am.py test/backend/test_asm_gemm.py::TestAsmGEMM --durations=20
|
|
- name: Run opt tests
|
|
run: python -m pytest -n=auto test/opt --durations=20
|
|
- name: Run disk copy tests
|
|
run: python -m pytest test/unit/test_disk_tensor.py -k test_copy_from_disk
|
|
- name: Run TRANSCENDENTAL math
|
|
run: TRANSCENDENTAL=2 python -m pytest -n=auto test/backend/test_ops.py::TestOps::test_sin test/backend/test_ops.py::TestOps::test_cos test/backend/test_ops.py::TestOps::test_tan test/backend/test_ops.py::TestOps::test_exp test/backend/test_ops.py::TestOps::test_log --durations=20
|
|
- name: Run process replay tests
|
|
uses: ./.github/actions/process-replay
|
|
|
|
testnvidia:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
backend: [ptx, nv]
|
|
|
|
name: Linux (${{ matrix.backend }})
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 20
|
|
env:
|
|
FORWARD_ONLY: 1
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: ${{ matrix.backend }}-minimal
|
|
deps: testing_unit
|
|
cuda: 'true'
|
|
ocelot: 'true'
|
|
- name: Set env
|
|
run: printf "${{ matrix.backend == 'ptx' && 'DEV=MOCK+CUDA:PTX' || matrix.backend == 'nv' && 'DEV=MOCK+NV\nSKIP_SLOW_TEST=1\nHCQ_RUNTIME_DEV=PYTHON' }}" >> $GITHUB_ENV
|
|
- name: Check Device.DEFAULT and print some source
|
|
run: |
|
|
python3 -c "from tinygrad import Device; assert Device.DEFAULT in ['CUDA','NV'], Device.DEFAULT"
|
|
DEBUG=5 FORWARD_ONLY=1 python3 test/test_tiny.py TestTiny.test_plus
|
|
- name: Run pytest (cuda)
|
|
# skip multitensor because it's slow
|
|
run: python -m pytest -n=auto test/backend --ignore test/backend/test_multitensor.py --durations=20
|
|
- name: Run TestOps.test_add with PMA
|
|
run: VIZ=-1 PMA=1 PMA_BUFFER_SIZE=8 DEBUG=5 python3 test/backend/test_ops.py TestOps.test_add
|
|
- name: Run process replay tests
|
|
uses: ./.github/actions/process-replay
|
|
|
|
# ****** Compile-only Tests ******
|
|
|
|
compiletests:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
dev:
|
|
- 'NULL:IR3:a630'
|
|
- 'NULL:QCOMCL:a630'
|
|
- 'NULL:NAK:sm_120'
|
|
name: Compile-only (DEV=${{ matrix.dev }})
|
|
runs-on: ${{ github.repository == 'tinygrad/tinygrad' && github.event_name == 'pull_request' && github.event.pull_request.author_association == 'COLLABORATOR' && 'namespace-profile-tinygrad' || 'ubuntu-24.04' }}
|
|
timeout-minutes: 15
|
|
env:
|
|
NULL_ALLOW_COPYOUT: 1
|
|
DEV: ${{ matrix.dev }}${{ contains(matrix.dev, 'a630') && ',IMAGE_PITCH_ALIGNMENT=64' || '' }}
|
|
IMAGE: ${{ contains(matrix.dev, 'a630') && '1' || '0' }}
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6
|
|
- name: Setup Environment
|
|
uses: ./.github/actions/setup-tinygrad
|
|
with:
|
|
key: compile-${{ matrix.backend }}
|
|
deps: "testing_unit mesa"
|
|
qemu: ${{ contains(matrix.dev, 'QCOMCL') }}
|
|
- name: Test IMAGE
|
|
shell: bash
|
|
if: contains(matrix.dev, 'a630')
|
|
run: DEBUG=7 python3 test/backend/test_ops.py TestOps.test_gemm | grep isam
|
|
- name: Run test_ops
|
|
shell: bash
|
|
run: |
|
|
python -c "from tinygrad import Device; assert Device.DEFAULT == 'NULL'"
|
|
DEBUG=4 python3 test/backend/test_ops.py TestOps.test_add
|
|
# QCOMCL compiles in qemu, too slow for parallel workers
|
|
${{ contains(matrix.dev, 'QCOMCL') && 'PARALLEL=0' || '' }} python -m pytest -n=auto test/backend/test_ops.py --durations=20
|