Repository navigation
nix-builder: improvements in NCCL handling - #951
Merged
Merged
Conversation
This makes it possible for kernels to e.g. build with a newer NCCL.
Member
Author
|
The latter change is much more general, but can be used by a kernel like DeepEP to pass a newer NCCL. For example: {
inputs.kernel-builder.url = "github:huggingface/kernels";
outputs =
{ self, kernel-builder }:
kernel-builder.lib.genKernelFlakeOutputs {
inherit self;
path = ./.;
# This kernel needs NCCL 2.32.3 or newer, which is newer than the NCCL
# that any of the supported Torch versions depend on.
overlays = [
(
final: prev:
let
nccl = final.mkNccl {
version = "2.32.3";
wheels = {
x86_64-linux.cuda13 = {
url = "https://files.pythonhosted.org/packages/5b/29/6b277e63c92d91f9cb4d1a3a554e148983de39d54baa652bb52c798af78e/nvidia_nccl_cu13-2.32.3-py3-none-manylinux_2_27_x86_64.whl";
sha256 = "1459723080ac889d73a26edfa3e04383a7928ab31ac8f0ec43b3ea9548b04ff3";
};
aarch64-linux.cuda13 = {
url = "https://files.pythonhosted.org/packages/58/0a/c29c302036a06d27dd732588f3fd8ee89b1f7b0087e38c668ae7be8ff7b2/nvidia_nccl_cu13-2.32.3-py3-none-manylinux_2_27_aarch64.whl";
sha256 = "a5bee92b2f4af218c109f8d221c3c9adcc752b94ae0ffcb0ed5abf9341a7724c";
};
};
};
in
{
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
(
python-final: python-prev:
prev.lib.mapAttrs (_: torch: torch.override { inherit nccl; }) (
prev.lib.filterAttrs (name: _: prev.lib.hasPrefix "torch-bin_" name) python-prev
)
)
];
}
)
];
};
} |
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/digest.py | 58 | 5 | 91% | 71-73, 136-137 |
| src/kernels/hf_hub.py | 62 | 2 | 97% | 21, 23 |
| src/kernels/importer.py | 74 | 5 | 93% | 158, 162, 165, 179-180 |
| src/kernels/install.py | 21 | 7 | 67% | 76-100 |
| src/kernels/layer/__init__.py | 7 | 0 | 100% | |
| src/kernels/layer/_interval_tree.py | 103 | 4 | 96% | 23, 52, 147, 150 |
| src/kernels/layer/device.py | 48 | 12 | 75% | 42, 47-49, 91, 96-98, 101, 149, 152, 156 |
| src/kernels/layer/func.py | 93 | 5 | 95% | 94, 119, 195, 315, 390 |
| src/kernels/layer/globals.py | 5 | 0 | 100% | |
| src/kernels/layer/inspect.py | 27 | 0 | 100% | |
| src/kernels/layer/kernelize.py | 83 | 7 | 92% | 306, 314-315, 321, 325, 341-343 |
| src/kernels/layer/layer.py | 320 | 14 | 96% | 212, 259, 447, 606-607, 628, 636, 647, 688, 692, 705, 760, 801, 876 |
| src/kernels/layer/mode.py | 14 | 0 | 100% | |
| src/kernels/layer/repos.py | 136 | 36 | 74% | 32, 35-42, 73, 86, 90, 99-100, 103, 106-109, 116-117, 120, 123-126, 133-134, 137, 140-143, 150-151, 154, 157-160, 235 |
| 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 | 104 | 7 | 93% | 9, 101, 172, 195-196, 232-233 |
| 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 | 102 | 6 | 94% | 44, 176-178, 266-267 |
| TOTAL | 2465 | 283 | 89% |
Updated by the Test kernels workflow on commit 5821c964f7a7b0a557076dbe9d7704b5592608dd.
sayakpaul
reviewed
Oct 31, 2026
| backends = ["cuda"] | ||
|
|
||
| [general.hub] | ||
| repo-id = "kernels-test/nccl-version" |
Member
There was a problem hiding this comment.
Shouldn't this also exist in https://github.com/huggingface/kernels-test so that we also properly sign this in case an upload is needed? @danieldk
Open
3 of 6 tasks
IlyasMoutawwakil
added a commit
to huggingface/kernels-community
that referenced
this pull request
Nov 3, 2026
kernel-builder now gives every CUDA kernel the NCCL of its Torch build (huggingface/kernels#951), with `mkNccl` and flake overlays to pick another version. DeepEP 2.5 needs NCCL 2.32 APIs, newer than the 2.30.7 of kernel-builder's Torch, so the flake overrides Torch's NCCL with 2.32.3 built from the nvidia-nccl-cu13 wheels. Their headers are byte-identical to the 69 headers the recipe assembled from NCCL's Git sources, so the recipe no longer vendors NCCL: the vendor, moves, version substitutions, include paths and the header README go, and regenerate.py drops its --nccl input. Bumps kernel-builder to 88e9dd07, which includes the NCCL support. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
mkNcclto easily construct NCCL derivations from Python wheels (hope to switch to CUDA manifests soon, but there are currently some clashing files).genKernelFlakeOutputs.