Skip to content

Add torch-stable-abi-shim - #915

Open
danieldk wants to merge 2 commits into
mainfrom
add-torch-stable-abi-shim
Open

danieldk wants to merge 2 commits into
mainfrom
add-torch-stable-abi-shim

Conversation

@danieldk

Copy link
Copy Markdown
Member

This is a small shim that vendors the header-only API from the latest Torch.

We always build stable ABI kernels with the latest Torch version that supports a given backend version. However, in some cases this leads to the use of older Torch versions (e.g. Torch 2.11 for CUDA 12.8), which do not have the latest header-only API. If a kernel needs a newer API, depend on the shim to get these newer headers, even on older Torch versions.

We might also use the shim in the future for our own functions that are compatible with the stable ABI, but are more efficient than the upstream counterparts (e.g. because they go through the dispatcher).

This is a small shim that vendors the header-only API from the latest Torch.

We always build stable ABI kernels with the latest Torch version that
supports a given backend version. However, in some cases this leads to
the use of older Torch versions (e.g. Torch 2.11 for CUDA 12.8), which
do not have the latest header-only API. If a kernel needs a newer API,
depend on the shim to get these newer headers, even on older Torch
versions.

We might also use the shim in the future for our own functions that are
compatible with the stable ABI, but are more efficient than the upstream
counterparts (e.g. because they go through the dispatcher).
@github-actions

github-actions Bot commented Oct 20, 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: 87.8% — threshold: 80% — ✅

Per-file breakdown
Name Stmts Miss Cover Missing
src/kernels/__init__.py 14 0 100%
src/kernels/_system.py 6 1 83% 10
src/kernels/_versions.py 130 14 89% 53, 59-60, 63-64, 102, 165-170, 199, 219
src/kernels/archs.py 56 1 98% 94
src/kernels/backends.py 215 63 71% 42, 46, 50-53, 70, 92, 110, 119, 123, 127-129, 150, 159, 163, 167-169, 190, 201, 203, 210-213, 222, 226, 230-255, 263, 286-306
src/kernels/compat.py 9 1 89% 5
src/kernels/deps.py 70 1 99% 56
src/kernels/hf_hub.py 63 2 97% 21, 23
src/kernels/importer.py 50 5 90% 95, 99, 102, 116-117
src/kernels/install.py 21 7 67% 76-100
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 85 6 93% 90, 115, 191, 311, 338, 368
src/kernels/layer/globals.py 5 0 100%
src/kernels/layer/kernelize.py 82 8 90% 259, 297, 305-306, 312, 316, 332-334
src/kernels/layer/layer.py 309 15 95% 211, 258, 285, 416, 556-557, 578, 586, 597, 637, 641, 654, 708, 738, 813
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 71 2 97% 338, 378
src/kernels/locking.py 89 64 28% 35-83, 91-98, 102-125, 137, 152-159, 165-175, 179-186
src/kernels/python_deps.py 58 6 90% 59-60, 64-65, 101, 104
src/kernels/resolver.py 162 1 99% 248
src/kernels/status.py 50 2 96% 25, 79
src/kernels/validate.py 88 5 94% 9, 100, 167, 190-191
src/kernels/variants.py 278 17 94% 65, 96, 117, 147, 256-257, 299-302, 304, 388-394, 400-406, 455-461
src/kernels/verify.py 127 6 95% 46, 202-204, 318-319
TOTAL 2353 287 88%

Updated by the Test kernels workflow on commit e36846758de2ad62e1456ab3e5479d1ab34529d1.

@danieldk
danieldk marked this pull request as ready for review October 20, 2026 14:50
/// @param dim The dimension to index along.
/// @param index A 1-D tensor of indices to select.
/// @return A tensor with values selected along dim.
inline torch::stable::Tensor index_select(

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.

Not 100% sure if we want to add on a case-by-case basis, but that may be annoying for downstream users. So for now I added the complete header (with namespacing changes).

@sayakpaul sayakpaul 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.

Very nice work!

@drbh drbh left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

nice!

We might also use the shim in the future for our own functions that are compatible with the stable ABI, but are more efficient than the upstream counterparts (e.g. because they go through the dispatcher).

and great idea to keep things in one location - i'll look into moving some of the fast paths currently in the fa2 pr into the shared shim after this lands

This branch has not been deployed

No deployments
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.

3 participants