onnxruntime/onnxruntime/python/tools/kernel_explorer
Justin Chu d834ec895a
Adopt linrtunner as the linting tool - take 2 (#15085)
### Description

`lintrunner` is a linter runner successfully used by pytorch, onnx and
onnx-script. It provides a uniform experience running linters locally
and in CI. It supports all major dev systems: Windows, Linux and MacOs.
The checks are enforced by the `Python format` workflow.

This PR adopts `lintrunner` to onnxruntime and fixed ~2000 flake8 errors
in Python code. `lintrunner` now runs all required python lints
including `ruff`(replacing `flake8`), `black` and `isort`. Future lints
like `clang-format` can be added.

Most errors are auto-fixed by `ruff` and the fixes should be considered
robust.

Lints that are more complicated to fix are applied `# noqa` for now and
should be fixed in follow up PRs.

### Notable changes

1. This PR **removed some suboptimal patterns**:

	- `not xxx in` -> `xxx not in` membership checks
	- bare excepts (`except:` -> `except Exception`)
	- unused imports
	
	The follow up PR will remove:
	
	- `import *`
	- mutable values as default in function definitions (`def func(a=[])`)
	- more unused imports
	- unused local variables

2. Use `ruff` to replace `flake8`. `ruff` is much (40x) faster than
flake8 and is more robust. We are using it successfully in onnx and
onnx-script. It also supports auto-fixing many flake8 errors.

3. Removed the legacy flake8 ci flow and updated docs.

4. The added workflow supports SARIF code scanning reports on github,
example snapshot:
	

![image](https://user-images.githubusercontent.com/11205048/212598953-d60ce8a9-f242-4fa8-8674-8696b704604a.png)

5. Removed `onnxruntime-python-checks-ci-pipeline` as redundant

### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->

Unified linting experience in CI and local.

Replacing https://github.com/microsoft/onnxruntime/pull/14306

---------

Signed-off-by: Justin Chu <justinchu@microsoft.com>
2023-03-24 15:29:03 -07:00
..
kernels Adopt linrtunner as the linting tool - take 2 (#15085) 2023-03-24 15:29:03 -07:00
device_array.h ROCm Flash Attention (#14838) 2023-03-16 10:39:58 +08:00
kernel_explorer.cc Refactor ke register to be decentralized (#15036) 2023-03-22 14:49:26 +08:00
kernel_explorer_interface.h Refactor ke register to be decentralized (#15036) 2023-03-22 14:49:26 +08:00
README.md Minor improvement for the documentation of kernel explorer (#13490) 2022-10-28 22:57:53 -07:00
version_script.lds Rework cmake for kernel_explorer (#12079) 2022-07-13 15:43:32 +08:00

Kernel Explorer

Kernel Explorer hooks up GPU kernel code with a Python frontend to help develop, test, profile, and auto-tune GPU kernels. The initial scope is for BERT-like models with ROCM EP.

Build

#!/bin/bash

set -ex

build_dir="build"
config="Release"

rocm_home="/opt/rocm"

./build.sh --update \
    --build_dir ${build_dir} \
    --config ${config} \
    --cmake_extra_defines \
        CMAKE_HIP_COMPILER=/opt/rocm/llvm/bin/clang++ \
        onnxruntime_BUILD_KERNEL_EXPLORER=ON \
    --skip_submodule_sync --skip_tests \
    --use_rocm --rocm_home=${rocm_home} --nccl_home=${rocm_home} \
    --build_wheel

cmake --build ${build_dir}/${config} --target kernel_explorer --parallel

Run

Taking vector_add_test.py and build configuration with build_dir="build" and config="Release" in the previous section as an example.

Set up the native library search path with the following environment variable:

export KERNEL_EXPLORER_BUILD_DIR=`realpath build/Release`

To test a kernel implementation, pip install pytest and then

pytest onnxruntime/python/tools/kernel_explorer/kernels/vector_add_test.py

To run the microbenchmarks:

python onnxruntime/python/tools/kernel_explorer/kernels/vector_add_test.py

Currently, kernel explorer mainly targets kernel developers, not the onnxruntime package end users, so it is not installed via setup.py.