Skip to content

feat: add an example on using autotuning. - #754

Merged
sayakpaul merged 12 commits into
mainfrom
autotuning-example
Aug 19, 2026
Merged

feat: add an example on using autotuning.#754
sayakpaul merged 12 commits into
mainfrom
autotuning-example

Conversation

@sayakpaul

Copy link
Copy Markdown
Member

Fixes #733

@HuggingFaceDocBuilderDev

Copy link
Copy Markdown

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.

@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Coverage report — kernels/

Measured on: Python 3.10 / Torch 2.13.0.
Other CI configurations are not included in this number.
Hardware-gated code paths (ROCm/XPU/NPU/Darwin/Windows) are excluded or unreachable on the Linux+CUDA runner.

Total coverage: 84.3% — threshold: 80% — ✅

Per-file breakdown
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.

@sayakpaul
sayakpaul marked this pull request as ready for review August 10, 2026 09:12
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 danieldk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really cool! Left a bunch of comments.

Comment thread docs/source/builder/writing-kernels.md Outdated
Comment thread docs/source/_toctree.yml Outdated
Comment thread docs/source/builder/triton-autotune.md Outdated
Comment thread docs/source/builder/triton-autotune.md Outdated
Comment thread docs/source/builder/triton-autotune.md Outdated
Comment on lines +96 to +97
and logs a warning. The lookup is cached, so the file is read at most once
per process:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Comment thread docs/source/builder/triton-autotune.md Outdated
Comment thread docs/source/builder/triton-autotune.md Outdated
N = b.shape[1]
if M == 0 or N == 0:
return
launch_gemm_kernel(a, b, out, get_config(M, N, K))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question: how does this interact with torch.compile? Since there is a conditional in the main code path (dict lookup).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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";

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have an existing test that tests usage of pyext. Maybe this new example can replace it? (cuts down test build time)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Follow-up?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tracking here: #770

Comment thread docs/source/builder/triton-autotune.md Outdated
Co-authored-by: Daniël de Kok <me@danieldk.eu>
Co-authored-by: Sayak Paul <spsayakpaul@gmail.com>
@sayakpaul

Copy link
Copy Markdown
Member Author

@danieldk thanks for the comments. I believe I have addressed all of them.

@danieldk danieldk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you forgot the docs link in one place.

Comment thread docs/source/_toctree.yml Outdated
- sections:
- local: builder/writing-kernels
title: Write kernels
- local: builder/triton-autotune

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you forgot to remove it here.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. Removed.

@sayakpaul
sayakpaul merged commit 18c4d68 into main Aug 19, 2026
55 checks passed
@sayakpaul
sayakpaul deleted the autotuning-example branch August 19, 2026 13:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Document/example: shipping Triton autotune configs with a kernel

3 participants