feat: add an example on using autotuning. - #754
Conversation
|
The docs for this PR live here. All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update. |
Coverage report —
|
| Name | Stmts | Miss | Cover | Missing |
|---|---|---|---|---|
| src/kernels/__init__.py | 13 | 0 | 100% | |
| src/kernels/_system.py | 6 | 1 | 83% | 10 |
| src/kernels/_versions.py | 63 | 7 | 89% | 46, 49, 52-53, 56-57, 100 |
| src/kernels/backends.py | 212 | 62 | 71% | 40, 44, 48-51, 68, 90, 108, 117, 121, 125-127, 148, 157, 161, 165-167, 188, 199, 201, 208-211, 224, 228, 232-252, 260, 283-303 |
| src/kernels/compat.py | 8 | 1 | 88% | 5 |
| src/kernels/deps.py | 58 | 4 | 93% | 59-60, 101, 104 |
| src/kernels/hf_hub.py | 62 | 5 | 92% | 18, 20, 114, 136-137 |
| src/kernels/importer.py | 48 | 3 | 94% | 106, 110, 113 |
| src/kernels/install.py | 50 | 5 | 90% | 78, 116-117, 155, 173 |
| src/kernels/layer/__init__.py | 6 | 0 | 100% | |
| src/kernels/layer/_interval_tree.py | 103 | 4 | 96% | 23, 52, 147, 150 |
| src/kernels/layer/device.py | 48 | 14 | 71% | 42, 47-49, 91, 96-98, 101, 149, 152, 155-157 |
| src/kernels/layer/func.py | 82 | 7 | 91% | 83, 113, 185, 303, 309, 322, 340 |
| src/kernels/layer/globals.py | 5 | 0 | 100% | |
| src/kernels/layer/kernelize.py | 74 | 8 | 89% | 255, 281, 289-290, 296, 300, 316-318 |
| src/kernels/layer/layer.py | 211 | 16 | 92% | 169, 212, 218, 231, 339, 419-420, 432, 441, 449, 460, 489, 493, 506, 559, 589 |
| src/kernels/layer/mode.py | 14 | 0 | 100% | |
| src/kernels/layer/repos.py | 144 | 42 | 71% | 27, 33, 36-43, 63-64, 70, 73-76, 90, 94, 103-104, 110, 113-116, 123-124, 130, 133-136, 143-144, 150, 153-156, 163-164, 170, 173-176, 257 |
| src/kernels/load.py | 74 | 9 | 88% | 218, 224, 230-231, 252-264 |
| src/kernels/locking.py | 108 | 70 | 35% | 42-109, 113-136, 144, 148-155, 159-169, 173-180 |
| src/kernels/status.py | 49 | 2 | 96% | 23, 81 |
| src/kernels/variants.py | 278 | 22 | 92% | 64, 95, 116, 146, 255-256, 298-301, 303, 387-394, 400-406, 437-443, 455-461, 611-613 |
| src/kernels/verify.py | 88 | 1 | 99% | 32 |
| TOTAL | 1804 | 283 | 84% |
Updated by the Test kernels workflow on commit f03a4cd450b6cd0d3c1c42f542f4e8a72200b3d4.
The tests directory was copied into the Docker test image, but the built kernel artifact was not, so LOCAL_KERNELS pointed at an unexpanded glob. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
danieldk
left a comment
There was a problem hiding this comment.
Really cool! Left a bunch of comments.
| and logs a warning. The lookup is cached, so the file is read at most once | ||
| per process: |
There was a problem hiding this comment.
I don't think this is true, since by default maxsize=128, so given enough N, K combinations, it will reload. Since the size will be bound by the number of files anyway, I think it's better to use functools.cache, which is equivalent to lru_cache(maxsize=None).
| N = b.shape[1] | ||
| if M == 0 or N == 0: | ||
| return | ||
| launch_gemm_kernel(a, b, out, get_config(M, N, K)) |
There was a problem hiding this comment.
Question: how does this interact with torch.compile? Since there is a conditional in the main code path (dict lookup).
There was a problem hiding this comment.
Compiles cleanly. Just verified:
import torch
import kernels
gemm_kernel = kernels.get_kernel("kernels-test/gemm-triton-autotune", version=1)
def fn(a, b):
return gemm_kernel.gemm(torch.nn.functional.silu(a), b) * 2
compiled = torch.compile(fn, fullgraph=True, dynamic=True)
b = torch.randn(4096, 4096, device="cuda", dtype=torch.float16)
with torch._dynamo.config.patch(error_on_recompile=True):
torch.compiler.reset()
for M in (3, 33, 333, 3333):
compiled(torch.randn(M, 4096, device="cuda", dtype=torch.float16), b)
torch.compiler.reset()| drv = sys: out: out.packages.${sys}.redistributable.torch-cuda; | ||
| } | ||
| { | ||
| name = "gemm-triton-autotune-kernel"; |
There was a problem hiding this comment.
We have an existing test that tests usage of pyext. Maybe this new example can replace it? (cuts down test build time)
Co-authored-by: Daniël de Kok <me@danieldk.eu> Co-authored-by: Sayak Paul <spsayakpaul@gmail.com>
|
@danieldk thanks for the comments. I believe I have addressed all of them. |
danieldk
left a comment
There was a problem hiding this comment.
I think you forgot the docs link in one place.
| - sections: | ||
| - local: builder/writing-kernels | ||
| title: Write kernels | ||
| - local: builder/triton-autotune |
There was a problem hiding this comment.
I think you forgot to remove it here.
Fixes #733