Repository navigation
Conversation
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).
Coverage report —
|
| 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.
| /// @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( |
There was a problem hiding this comment.
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).
drbh
left a comment
There was a problem hiding this comment.
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 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).