Buckets:
| # Layers API Reference | |
| ## Making layers kernel-aware | |
| ### use_kernel_forward_from_hub[[kernels.use_kernel_forward_from_hub]] | |
| #### kernels.use_kernel_forward_from_hub[[kernels.use_kernel_forward_from_hub]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/layer.py#L251) | |
| Decorator factory that makes a layer extensible using the specified layer name. | |
| This is a decorator factory that returns a decorator which prepares a layer class to use kernels from the | |
| Hugging Face Hub. | |
| Example: | |
| ```python | |
| import torch | |
| import torch.nn as nn | |
| from kernels import use_kernel_forward_from_hub | |
| from kernels import Mode, kernelize | |
| @use_kernel_forward_from_hub("MyCustomLayer") | |
| class MyCustomLayer(nn.Module): | |
| def __init__(self, hidden_size): | |
| super().__init__() | |
| self.hidden_size = hidden_size | |
| def forward(self, x: torch.Tensor): | |
| # original implementation | |
| return x | |
| model = MyCustomLayer(768) | |
| # The layer can now be kernelized: | |
| # model = kernelize(model, mode=Mode.TRAINING | Mode.TORCH_COMPILE, device="cuda") | |
| ``` | |
| **Parameters:** | |
| layer_name (`str`) : The name of the layer to use for kernel lookup in registered mappings. | |
| **Returns:** | |
| ``Callable`` | |
| A decorator function that can be applied to layer classes. | |
| ### use_kernel_func_from_hub[[kernels.use_kernel_func_from_hub]] | |
| #### kernels.use_kernel_func_from_hub[[kernels.use_kernel_func_from_hub]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/func.py#L167) | |
| Decorator that makes a function extensible using the specified function name. | |
| This is a decorator factory that returns a decorator which prepares a function to use kernels from the | |
| Hugging Face Hub. | |
| The function will be exposed as an instance of `torch.nn.Module` in which | |
| the function is called in `forward`. For the function to be properly | |
| kernelized, it **must** be a member of another `torch.nn.Module` that is | |
| part of the model (see the example). | |
| Example: | |
| ```python | |
| import torch | |
| import torch.nn as nn | |
| from kernels import use_kernel_func_from_hub | |
| from kernels import Mode, kernelize | |
| @use_kernel_func_from_hub("my_custom_func") | |
| def my_custom_func(x: torch.Tensor): | |
| # Original implementation | |
| return x | |
| class MyModel(torch.nn.Module): | |
| def __init__(self): | |
| super().__init__() | |
| self.fn = my_custom_func | |
| def forward(self, x): | |
| return self.fn(x) | |
| model = MyModel() | |
| # The layer can now be kernelized: | |
| # model = kernelize(model, mode=Mode.TRAINING | Mode.TORCH_COMPILE, device="cuda") | |
| ``` | |
| **Parameters:** | |
| func_name (`str`) : The name of the function name to use for kernel lookup in registered mappings. | |
| **Returns:** | |
| ``Callable`` | |
| A decorator function that can be applied to layer classes. | |
| ### replace_kernel_forward_from_hub[[kernels.replace_kernel_forward_from_hub]] | |
| #### kernels.replace_kernel_forward_from_hub[[kernels.replace_kernel_forward_from_hub]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/layer.py#L228) | |
| Function that prepares a layer class to use kernels from the Hugging Face Hub. | |
| It is recommended to use [use_kernel_forward_from_hub()](/docs/kernels/pr_321/en/api/layers#kernels.use_kernel_forward_from_hub) decorator instead. | |
| This function should only be used as a last resort to extend third-party layers, | |
| it is inherently fragile since the member variables and `forward` signature | |
| of such a layer can change. | |
| Example: | |
| ```python | |
| from kernels import replace_kernel_forward_from_hub | |
| import torch.nn as nn | |
| replace_kernel_forward_from_hub(nn.LayerNorm, "LayerNorm") | |
| ``` | |
| ## Registering kernel mappings | |
| ### use_kernel_mapping[[kernels.use_kernel_mapping]] | |
| #### kernels.use_kernel_mapping[[kernels.use_kernel_mapping]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/kernelize.py#L17) | |
| Context manager that sets a kernel mapping for the duration of the context. | |
| This function allows temporary kernel mappings to be applied within a specific context, enabling different | |
| kernel configurations for different parts of your code. | |
| Example: | |
| ```python | |
| import torch | |
| import torch.nn as nn | |
| from torch.nn import functional as F | |
| from kernels import use_kernel_forward_from_hub | |
| from kernels import use_kernel_mapping, LayerRepository, Device | |
| from kernels import Mode, kernelize | |
| # Define a mapping | |
| mapping = { | |
| "SiluAndMul": { | |
| "cuda": LayerRepository( | |
| repo_id="kernels-community/activation", | |
| layer_name="SiluAndMul", | |
| version=1 | |
| ) | |
| } | |
| } | |
| @use_kernel_forward_from_hub("SiluAndMul") | |
| class SiluAndMul(nn.Module): | |
| def forward(self, x: torch.Tensor) -> torch.Tensor: | |
| d = x.shape[-1] // 2 | |
| return F.silu(x[..., :d]) * x[..., d:] | |
| model = SiluAndMul() | |
| # Use the mapping for the duration of the context. | |
| with use_kernel_mapping(mapping): | |
| # kernelize uses the temporary mapping | |
| model = kernelize(model, mode=Mode.TRAINING | Mode.TORCH_COMPILE, device="cuda") | |
| # Outside the context, original mappings are restored | |
| ``` | |
| **Parameters:** | |
| mapping (`dict[str, dict[Union[Device, str], Union[LayerRepositoryProtocol, dict[Mode, LayerRepositoryProtocol]]]]`) : The kernel mapping to apply. Maps layer names to device-specific kernel configurations. | |
| inherit_mapping (`bool`, *optional*, defaults to `True`) : When `True`, the current mapping will be extended by `mapping` inside the context. When `False`, only `mapping` is used inside the context. | |
| **Returns:** | |
| Context manager that handles the temporary kernel mapping. | |
| ### register_kernel_mapping[[kernels.register_kernel_mapping]] | |
| #### kernels.register_kernel_mapping[[kernels.register_kernel_mapping]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/kernelize.py#L97) | |
| Register a global mapping between layer names and their corresponding kernel implementations. | |
| This function allows you to register a mapping between a layer name and the corresponding kernel(s) to use, | |
| depending on the device and mode. This should be used in conjunction with [kernelize()](/docs/kernels/pr_321/en/api/layers#kernels.kernelize). | |
| Example: | |
| ```python | |
| from kernels import LayerRepository, register_kernel_mapping, Mode | |
| # Simple mapping for a single kernel per device | |
| kernel_layer_mapping = { | |
| "LlamaRMSNorm": { | |
| "cuda": LayerRepository( | |
| repo_id="kernels-community/layer_norm", | |
| layer_name="LlamaRMSNorm", | |
| version=1, | |
| ), | |
| }, | |
| } | |
| register_kernel_mapping(kernel_layer_mapping) | |
| # Advanced mapping with mode-specific kernels | |
| advanced_mapping = { | |
| "MultiHeadAttention": { | |
| "cuda": { | |
| Mode.TRAINING: LayerRepository( | |
| repo_id="username/training-kernels", | |
| layer_name="TrainingAttention", | |
| version=1, | |
| ), | |
| Mode.INFERENCE: LayerRepository( | |
| repo_id="username/inference-kernels", | |
| layer_name="FastAttention", | |
| version=1, | |
| ), | |
| } | |
| } | |
| } | |
| register_kernel_mapping(advanced_mapping) | |
| ``` | |
| **Parameters:** | |
| mapping (`dict[str, dict[Union[Device, str], Union[RepositoryProtocol, dict[Mode, RepositoryProtocol]]]]`) : The kernel mapping to register globally. Maps layer names to device-specific kernels. The mapping can specify different kernels for different modes (training, inference, etc.). | |
| inherit_mapping (`bool`, *optional*, defaults to `True`) : When `True`, the current mapping will be extended by `mapping`. When `False`, the existing mappings are erased before adding `mapping`. | |
| ## Kernelizing a model | |
| ### kernelize[[kernels.kernelize]] | |
| #### kernels.kernelize[[kernels.kernelize]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/kernelize.py#L179) | |
| Replace layer forward methods with optimized kernel implementations. | |
| This function iterates over all modules in the model and replaces the `forward` method of extensible layers | |
| for which kernels are registered using [register_kernel_mapping()](/docs/kernels/pr_321/en/api/layers#kernels.register_kernel_mapping) or [use_kernel_mapping()](/docs/kernels/pr_321/en/api/layers#kernels.use_kernel_mapping). | |
| Example: | |
| ```python | |
| import torch | |
| import torch.nn as nn | |
| from kernels import kernelize, Mode, register_kernel_mapping, LayerRepository | |
| from kernels import use_kernel_forward_from_hub | |
| @use_kernel_forward_from_hub("SiluAndMul") | |
| class SiluAndMul(nn.Module): | |
| def forward(self, x: torch.Tensor) -> torch.Tensor: | |
| d = x.shape[-1] // 2 | |
| return F.silu(x[..., :d]) * x[..., d:] | |
| mapping = { | |
| "SiluAndMul": { | |
| "cuda": LayerRepository( | |
| repo_id="kernels-community/activation", | |
| layer_name="SiluAndMul", | |
| ) | |
| } | |
| } | |
| register_kernel_mapping(mapping) | |
| # Create and kernelize a model | |
| model = nn.Sequential( | |
| nn.Linear(1024, 2048, device="cuda"), | |
| SiluAndMul(), | |
| ) | |
| # Kernelize for inference | |
| kernelized_model = kernelize(model, mode=Mode.TRAINING | Mode.TORCH_COMPILE) | |
| ``` | |
| **Parameters:** | |
| model (`nn.Module`) : The PyTorch model to kernelize. | |
| mode ([Mode](/docs/kernels/pr_321/en/api/layers#kernels.Mode)) : The mode that the kernel is going to be used in. For example, `Mode.TRAINING | Mode.TORCH_COMPILE` kernelizes the model for training with `torch.compile`. | |
| device (`Union[str, torch.device]`, *optional*) : The device type to load kernels for. Supported device types are: "cuda", "mps", "npu", "rocm", "xpu". The device type will be inferred from the model parameters when not provided. | |
| use_fallback (`bool`, *optional*, defaults to `True`) : Whether to use the original forward method of modules when no compatible kernel could be found. If set to `False`, an exception will be raised in such cases. | |
| **Returns:** | |
| ``nn.Module`` | |
| The kernelized model with optimized kernel implementations. | |
| ## Classes | |
| ### Device[[kernels.Device]] | |
| #### kernels.Device[[kernels.Device]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/device.py#L95) | |
| Represents a compute device with optional properties. | |
| This class encapsulates device information including device type and optional device-specific properties | |
| like CUDA capabilities. | |
| Example: | |
| ```python | |
| from kernels import Device, CUDAProperties | |
| # Basic CUDA device | |
| cuda_device = Device(type="cuda") | |
| # CUDA device with specific capability requirements | |
| cuda_device_with_props = Device( | |
| type="cuda", | |
| properties=CUDAProperties(min_capability=75, max_capability=90) | |
| ) | |
| # MPS device for Apple Silicon | |
| mps_device = Device(type="mps") | |
| # XPU device (e.g., Intel(R) Data Center GPU Max 1550) | |
| xpu_device = Device(type="xpu") | |
| # NPU device (Huawei Ascend) | |
| npu_device = Device(type="npu") | |
| ``` | |
| **Parameters:** | |
| type (`str`) : The device type (e.g., "cuda", "mps", "npu", "rocm", "xpu"). | |
| properties (`CUDAProperties`, *optional*) : Device-specific properties. Currently only `CUDAProperties` is supported for CUDA devices. | |
| ### Mode[[kernels.Mode]] | |
| #### kernels.Mode[[kernels.Mode]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/mode.py#L4) | |
| Kernelize mode | |
| The `Mode` flag is used by [kernelize()](/docs/kernels/pr_321/en/api/layers#kernels.kernelize) to select kernels for the given mode. Mappings can be registered for | |
| specific modes. | |
| Note: | |
| Different modes can be combined. For instance, `INFERENCE | TORCH_COMPILE` should be used for layers that | |
| are used for inference *with* `torch.compile`. | |
| **Parameters:** | |
| INFERENCE : The kernel is used for inference. | |
| TRAINING : The kernel is used for training. | |
| TORCH_COMPILE : The kernel is used with `torch.compile`. | |
| FALLBACK : In a kernel mapping, this kernel is used when no other mode matches. | |
| ### FuncRepository[[kernels.FuncRepository]] | |
| #### kernels.FuncRepository[[kernels.FuncRepository]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/func.py#L27) | |
| Repository and name of a function for kernel mapping. | |
| Example: | |
| ```python | |
| from kernels import FuncRepository | |
| # Reference a specific layer by revision | |
| layer_repo = FuncRepository( | |
| repo_id="kernels-community/activation", | |
| func_name="silu_and_mul", | |
| ) | |
| # Reference a layer by version | |
| layer_repo_versioned = FuncRepository( | |
| repo_id="kernels-community/relu", | |
| func_name="relu", | |
| version=1 | |
| ) | |
| ``` | |
| **Parameters:** | |
| repo_id (`str`) : The Hub repository containing the layer. | |
| func_name (`str`) : The name of the function within the kernel repository. | |
| revision (`str`, *optional*, defaults to `"main"`) : The specific revision (branch, tag, or commit) to download. Cannot be used together with `version`. | |
| version (`int|str`, *optional*) : The kernel version to download as an integer. The `str` variant is deprecated and will be removed in a future release. Cannot be used together with `revision`. | |
| ### LayerRepository[[kernels.LayerRepository]] | |
| #### kernels.LayerRepository[[kernels.LayerRepository]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/layer.py#L32) | |
| Repository and name of a layer for kernel mapping. | |
| Example: | |
| ```python | |
| from kernels import LayerRepository | |
| # Reference a specific layer by revision | |
| layer_repo = LayerRepository( | |
| repo_id="kernels-community/activation", | |
| layer_name="SiluAndMul", | |
| version=1, | |
| ) | |
| ``` | |
| **Parameters:** | |
| repo_id (`str`) : The Hub repository containing the layer. | |
| layer_name (`str`) : The name of the layer within the kernel repository. | |
| revision (`str`, *optional*, defaults to `"main"`) : The specific revision (branch, tag, or commit) to download. Cannot be used together with `version`. | |
| version (`int|str`, *optional*) : The kernel version to download as an integer. The `str` variant is deprecated and will be removed in a future release. Cannot be used together with `revision`. | |
| ### LocalFuncRepository[[kernels.LocalFuncRepository]] | |
| #### kernels.LocalFuncRepository[[kernels.LocalFuncRepository]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/func.py#L110) | |
| Repository and function name from a local directory for kernel mapping. | |
| Example: | |
| ```python | |
| from pathlib import Path | |
| from kernels import LocalFuncRepository | |
| # Reference a specific layer by revision | |
| layer_repo = LocalFuncRepository( | |
| repo_path=Path("/home/daniel/kernels/activation"), | |
| package_name="activation", | |
| func_name="silu_and_mul", | |
| ) | |
| ``` | |
| **Parameters:** | |
| repo_path (`Path`) : The local repository containing the layer. | |
| package_name (`str`) : Package name of the kernel. | |
| func_name (`str`) : The name of the function within the kernel repository. | |
| ### LocalLayerRepository[[kernels.LocalLayerRepository]] | |
| #### kernels.LocalLayerRepository[[kernels.LocalLayerRepository]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/layer.py#L109) | |
| Repository from a local directory for kernel mapping. | |
| Example: | |
| ```python | |
| from pathlib import Path | |
| from kernels import LocalLayerRepository | |
| # Reference a specific layer by revision | |
| layer_repo = LocalLayerRepository( | |
| repo_path=Path("/home/daniel/kernels/activation"), | |
| package_name="activation", | |
| layer_name="SiluAndMul", | |
| ) | |
| ``` | |
| **Parameters:** | |
| repo_path (`Path`) : The local repository containing the layer. | |
| package_name (`str`) : Package name of the kernel. | |
| layer_name (`str`) : The name of the layer within the kernel repository. | |
| ### LockedFuncRepository[[kernels.LockedFuncRepository]] | |
| #### kernels.LockedFuncRepository[[kernels.LockedFuncRepository]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/func.py#L222) | |
| Repository and name of a function. | |
| In contrast to `FuncRepository`, this class uses repositories that | |
| are locked inside a project. | |
| ### LockedLayerRepository[[kernels.LockedLayerRepository]] | |
| #### kernels.LockedLayerRepository[[kernels.LockedLayerRepository]] | |
| [Source](https://github.com/huggingface/kernels/blob/vr_321/src/kernels/layer/layer.py#L166) | |
| Repository and name of a layer. | |
| In contrast to `LayerRepository`, this class uses repositories that | |
| are locked inside a project. | |
Xet Storage Details
- Size:
- 16 kB
- Xet hash:
- 6f716379d561151c3552fb211f43f9235c217fa4944190968e84691d70a01b58
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.